Skip to content

v5: merge

Francis Galiegue edited this page Mar 13, 2014 · 2 revisions

Description

This keyword is intended as a way to merge two schemas into one.

Implementing this keyword requires support for JSON merge-patch.

Syntax

  • the value of this keyword MUST be a JSON Object;
  • it MUST have two members: source, with;
  • the value of source MUST be a valid JSON Schema;
  • the value of with MUST be a JSON Object.

Example:

{
    "merge": {
        "source": {
            "type": "object",
            "properties": { "p": { "type": "string" } },
            "additionalProperties": false
        },
        "with": {
            "properties": { "q": { "enum": [ null ] } }
        }
    }
}

Rules

  • this keyword MUST NOT take precedence over a JSON Reference;
  • when this keyword is encountered, other schema keywords SHALL be ignored;
  • implementations MUST consider that the current schema is the result of the merge.

Application example

The schema above, when merged, becomes:

{
    "type": "object",
    "properties": {
        "p": { "type": "string" },
        "q": { "enum": [ null ] }
    },
    "additionalProperties": false
}

Additional notes

This, and JSON Reference plus the $data proposal, would pretty much mandate that a new section in the core specification be dedicated to schema preprocessing; in order: $ref, merge, $data.

In addition, an optional keyword may be patch with the same syntax as merge, except that the value of with would be a JSON Patch. Supporting this keyword would mean setting a different, specified $schema, and moreover the presence of both keywords at once would be forbidden.

Clone this wiki locally