Tools for editing schemas SHOULD support displaying and editing this keyword. The error or annotation that is produced by the validation.
The schema identified by the resulting URI is examined for the presence of "$recursiveAnchor", and a new base URI is calculated as described for that keyword in the following section. While these keywords do not directly affect results, as explained in section Keywords declared in this section, which all begin with "$", make up the JSON Schema Core vocabulary. Vocabulary authors should provide a meta-schema that validates the expected usage of the vocabulary's keywords on their own. Additional keywords are used to apply assertions and annotations to more complex JSON data structures, or based on some sort of condition. Additionally, "$ref" and "$recursiveRef" from this specification resolve their values in this way, although they do not change how further values are resolved.

It is simply a field with sub-fields, rather than an instance of a distinct class. It is beyond the scope of this specification to determine or provide a set of safe "$ref" removal transformations, as they depend not only on the schema structure but also on the intended usage. The resulting behavior is undefined. In the simplest case, merely the boolean result for the "valid" valid property needs to be fulfilled. An instance validates successfully against this keyword if it validates successfully against exactly one schema defined by this keyword's value. The fourth is a shortcut for a specific conditional case.

1/18/2020; 18 minutes to read +15; In this article. This transformation can be safely and reversibly done as long as all static references (e.g. This specification defines the "application/schema-instance+json" media type in order to allow instance authors to take full advantage of parameters and fragment identifiers for these purposes. Otherwise, if any "items", "additionalItems", or "unevaluatedItems" annotations are present with a value of boolean true, then "unevaluatedItems" MUST be ignored. "$ref") use URI-references that resolve to canonical URIs, and all schema resources have an absolute-URI as the "$id" in their root schema. A fourth category of keywords simply reserve a location to hold re-usable components or data of interest to schema authors that is not suitable for re-use.

At this point, the dynamic path is "#/$ref/properties/children/items/$recursiveRef". Each value in the object MUST be a valid JSON Schema. Instances that fail to validate against this keyword's subschema MUST also be valid against the subschema value of the "else" keyword, if present. Rather, it controls which of the "then" or "else" keywords are evaluated. A same origin policy? Consult the respective specifications for more information. JSON Schema Since an object cannot have two properties with the same key, behavior for a JSON document that tries to define two properties (the "member" production) with the same key (the "string" production) in a single object is undefined.

This way, the recursion in the "tree" schema recurses to the root of "strict-tree", instead of only applying "strict-tree" to the instance root, but applying "tree" to instance children. The behavior of this keyword is defined only for the value "#". Implementations MAY choose to implement or optimize this keyword in another way that produces the same effect, such as by directly checking the names in "properties" and the patterns in "patternProperties" against the instance property set.

So, while the pattern of using "$schema" only in root schemas is likely to remain the best practice for schema authoring, implementation behavior is subject to be revised or liberalized in future drafts. Each vocabulary typically identifies a meta-schema consisting only of the vocabulary's keywords.

Implementations SHOULD ignore keywords they do not support. JSON Schema can be extended either by defining additional vocabularies, or less formally by defining additional keywords outside of any vocabulary. JSON Schema asserts what a JSON document must look like, ways to extract information from it, and how to interact with it.

Thanks to Jason Desrosiers, Daniel Perrett, Erik Wilde, Ben Hutton, Evgeny Poberezkin, Brad Bowman, Gowry Sankar, Donald Pipowitch, and Dave Finlay for their submissions and patches to the document. Additionally, the "application/schema+json" media type supports two fragment identifier structures: plain names and JSON Pointers. Each value of this object MUST be a valid JSON Schema. An implementation SHOULD provide at least the "flag", "basic", or "detailed" format and MAY provide the "verbose" format. Omitting this keyword has the same assertion behavior as an empty schema. With these conditions met, each external resource can be copied under "$defs", without breaking any references among the resources' schema objects, and without changing any aspect of validation or annotation results. Since vocabularies are identified by URIs in the meta-schema, generic implementations can load extensions to support previously unknown vocabularies. For schema author convenience, there are some exceptions among the keywords in this vocabulary: These keywords apply subschemas to the same location in the instance as the parent schema is being applied. A schema can itself be interpreted as an instance, but SHOULD always be given the media type "application/schema+json" rather than "application/schema-instance+json". The difference between the hyper-schema meta-schema in previous drafts and an this draft dramatically demonstrates the utility of these keywords.
The "Basic" structure is a flat list of output units.