<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-dusseault-json-schema-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>JSON Schema</title>
    <seriesInfo name="Internet-Draft" value="draft-dusseault-json-schema-00"/>
    <author initials="L." surname="Dusseault" fullname="Lisa Dusseault">
      <organization>Data Transfer Initiative</organization>
      <address>
        <email>lisa@rtfm.com</email>
      </address>
    </author>
    <author initials="A." surname="Wright" fullname="Austin Wright">
      <organization/>
      <address>
        <email>aaa@bzfx.net</email>
      </address>
    </author>
    <author initials="H." surname="Andrews" fullname="Henry H. Andrews">
      <organization/>
      <address>
        <email>andrews_henry@yahoo.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="26"/>
    <area>ART</area>
    <keyword>Internet-Draft</keyword>
    <keyword>JSON</keyword>
    <abstract>
      <?line 76?>

<t>JSON Schema defines the media type "application/schema+json", a JSON-based format
for describing the structure of JSON data.
JSON Schema asserts what a JSON document must look like,
ways to extract information from it,
and how to interact with it.
The "application/schema-instance+json" media type provides additional
feature-rich integration with "application/schema+json" beyond what can be offered
for "application/json" documents.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    JavaScript Object Notation Working Group mailing list (json@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/json"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/lisad/ietf-json-schema"/>.</t>
    </note>
  </front>
  <middle>
    <?line 87?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>...</t>
      <t>JSON Schemas are JSON documents that describe and constrain other JSON documents.
JSON Schema defines validation, documentation, hyperlink navigation,
and interaction control of JSON data.</t>
      <t>This specification defines JSON Schema core terminology and mechanisms, including
pointing to another JSON Schema by reference,
dereferencing a JSON Schema reference,
specifying the dialect being used,
specifying a dialect's vocabulary requirements,
and defining the expected output.</t>
      <t>The status of this document is literally a draft, and it is not ready for implementors
to adopt in place of widely implemented versions of JSON Schema.  It is a proposed
starting point for a WG and a wide consensus process.</t>
      <section anchor="notational-conventions">
        <name>Notational Conventions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in <xref target="RFC2119"/>.</t>
        <t>The terms "JSON", "JSON text", "JSON value", "member", "element", "object", "array",
"number", "string", "boolean", "true", "false", and "null" in this document are to
be interpreted as defined in <xref target="RFC8259"/>.</t>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>JSON Schemas are JSON documents that describe and constrain other JSON
documents through keywords and keyword behaviors.  The specification
registers the "application/schema+json" media type to identify a JSON Schema
resource, and the "application/schema-instance+json" media type to identify
a resource that can be validated against a JSON Schema.</t>
      <t>The result of validating a JSON document against a JSON Schema can be
framed as rules that decide if an <em>input</em> is in the <em>valid set</em> according to
that schema, . An input in the valid set is considered an <em>instance</em> of the schema.</t>
      <t>JSON Schema uses <em>keywords</em> to assert constraints on JSON documents or provide
annotations with additional information.  Additional keywords combine other
keywords or provide references to sub-schemas, features which allow more
complex JSON data structures.</t>
      <t>In formal language theory, JSON Schema resembles a context-free language, as
most keywords are context-free.  Thus, JSON instances can be validated quickly
and simply, without I/O or querying data elsewhere in the same JSON instance.</t>
      <t>This document defines a core vocabulary of keywords that MUST be supported by any
implementation.  Its keywords are each prefixed
with a "$" character to emphasize their required nature.  This vocabulary
is essential to the functioning of the "application/schema+json" media
type, and is used to bootstrap the loading of other vocabularies.</t>
      <t>Additionally, this document defines a RECOMMENDED vocabulary of keywords
for applying subschemas conditionally, and for applying subschemas to
the contents of objects and arrays.  Either this vocabulary or one very
much like it is required to write schemas for non-trivial JSON instances,
whether those schemas are intended for assertion validation, annotation,
or both.  While not part of the required core vocabulary, for maximum
interoperability this additional vocabulary is included in this document
and its use is strongly encouraged.</t>
      <section anchor="vocabularies">
        <name>Vocabularies</name>
        <t>To facilitate re-use, keywords can be organized into vocabularies. A vocabulary
consists of a list of keywords, together with their syntax and semantics.
A dialect is defined as a set of vocabularies and their required support
identified in a meta-schema.  Vocabularies, dialects and meta-schemas are not
required features for most schema authors to understand, but must be understood
by authors of meta-schemas and handled by implementors of validation or other
JSON Schema processing software.</t>
        <t>JSON Schema can be extended either by defining additional vocabularies,
or less formally by defining additional keywords outside of any vocabulary.
Unrecognized individual keywords simply have their values treated as annotations,
while the behavior with respect to an unrecognized vocabulary can be controlled
when declaring which vocabularies are in use.</t>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>These terms are all defined in the context of JSON Schema.  These quick
definitions may not be enough to completely comprehend roles and uses, but may still
provide a useful quick reference.</t>
      <t><strong>JSON Document</strong></t>
      <t>A JSON document is an information resource (series of octets) described by the
application/json media type.</t>
      <t><strong>Input</strong></t>
      <t>A JSON document supplied to a validator or other implementation, in order to
compare it to a schema, is an input until it is known to be in the valid set
for that schema.</t>
      <t><strong>Instance</strong></t>
      <t>A JSON document that is in the valid set for a given schema is an <em>instance</em>
of that schema.</t>
      <t><strong>Object</strong></t>
      <t><em>Object</em> is defined for JSON in <xref target="RFC8259"/> and has the same meaning here.</t>
      <t><strong>Schema / Schema Document</strong></t>
      <t>A JSON Schema document, or simply a <em>schema</em>, is a JSON document used to describe
and constrain JSON Documents.  Used in validation, the schema defines the valid
set, or all possible instances that validate successfully.
As a JSON document, a schema may also be an instance of some meta-schema.</t>
      <t><strong>Schema Resource</strong></t>
      <t>A JSON <em>Schema resource</em> is a schema uniquely identified by a URI, in
contrast to an anonymous schema which has no URI.  A schema is
canonically identified (in the sense of <xref target="RFC6596"/>) by an
absolute URI (<xref section="4.3" sectionFormat="comma" target="RFC3986"/>).</t>
      <t><strong>Keyword</strong></t>
      <t>JSON Schema works by defining keywords with specific behavior.  A <em>keyword</em> appears
as a JSON <em>name</em> <xref target="RFC8259"/>.  Not all JSON names in a schema are keywords, but
all keywords have required behavior.</t>
      <t><strong>Vocabulary</strong></t>
      <t>A <em>vocabulary</em> is a set of keywords that are defined to enable some
functionality, particularly when JSON Schema is extended with external
vocabularies.</t>
      <t><strong>Meta-Schema</strong></t>
      <t>A <em>meta-schema</em> describes and constrains schemas which may be instances of the
meta-schema.</t>
      <t><strong>Root schema</strong></t>
      <t>The root schema is the top-level schema object that serves as the starting point
and container for all of a schema's rules and annotations.  It typically defines
the Base URI for the entire document.</t>
      <t><strong>Subschema</strong></t>
      <t>A subschema is a schema that happens to be located inside another schema.
Structural keywords like 'items' and 'properties' use subschemas to describe
structure inside arrays and objects. Aggregation keywords like 'anyOf' and
'not' direct how to apply the subschemas they hold.</t>
      <t>A subschema can be directly inside its parent schema,
can be elsewhere in the Schema Document (using a fragment reference), or
in a separate document (using an absolute reference).</t>
      <t><strong>Implementation</strong></t>
      <t>An implementation is software that implements this specification.  Some
implementations validate inputs, but some implementations generate
documentation, data or code based on a schema.</t>
    </section>
    <section anchor="overall-definitions-and-requirements">
      <name>Overall Definitions and Requirements</name>
      <t>This section is the start of normative requirements especially for
implementations.  However, a practitioner may wish to check the basic meaning
of terms defined above and skip to<xref target="keyword-behaviors"/> where specific keywords
and purposes begin to be defined.</t>
      <section anchor="schema-document">
        <name>JSON Schema Documents</name>
        <t>A JSON Schema, with its specific rules or constraints to describe and
validate JSON data, is represented in digital form as a JSON schema document.</t>
        <t>A JSON Schema MUST be an <em>object</em> or a boolean.
When a schema is an object, it can be seen to be a schema from the '$schema'
keyword in the object.  See below for special treatment of the boolean schemas.</t>
        <t>Schemas are used to validate inputs that may be <xref target="instance">instances</xref> of the schema,
but each schema can itself
be interpreted as an instance (see <xref target="meta-schemas"/> for when and
how this happens).</t>
        <t>Schema documents SHOULD always be given the media type "application/schema+json",
even when playing the role of an instance.</t>
        <section anchor="trivial-schema-documents">
          <name>Trivial schema documents</name>
          <t>The schema values "true" and "false" are trivial schemas. The valid set
for the 'true' schema is all possible JSON documents, and the valid set
for the 'false' schema is empty.
The trivial boolean schemas exist to clarify schema author intent and
facilitate schema processing optimizations.  They behave identically
to the following schema objects (where "not" is part of the
subschema application vocabulary defined in this document).</t>
          <dl>
            <dt>true</dt>
            <dd>
              <t>Always passes validation, as if the empty schema {}</t>
            </dd>
            <dt>false</dt>
            <dd>
              <t>Always fails validation, as if the schema { "not": {} }</t>
            </dd>
          </dl>
          <t>While the empty schema object is unambiguous, there are many
possible equivalents to the "false" schema.  Using the boolean
values ensures that the intent is clear to both human readers
and implementations.</t>
        </section>
        <section anchor="root">
          <name>Root Schema and Subschemas and Resources</name>
          <t>A JSON Schema resource is a schema which is
canonically identified (in the sense of <xref target="RFC6596"/>) by an
absolute URI (<xref section="4.3" sectionFormat="comma" target="RFC3986"/>).  Schema resources MAY
also be identified by URIs, including URIs with fragments,
if the resulting secondary resource (as defined by
<xref section="3.5" sectionFormat="comma" target="RFC3986"/>) is identical
to the primary resource.  This can occur with the empty fragment,
or when one schema resource is embedded in another.  Any such URIs
with fragments are considered to be non-canonical.</t>
          <t>The root schema is always a schema resource, where the
URI is determined as described in <xref target="initial-base"/>.<cref anchor="_1">Note that documents that embed schemas in another format will not
  have a root schema resource in this sense.  Exactly how such usages
  fit with the JSON Schema document and resource concepts will be
  clarified in a future draft.</cref></t>
          <t>Some keywords take schemas themselves, allowing JSON Schemas to be nested:</t>
          <sourcecode type="json"><![CDATA[
{
    "title": "root",
    "items": {
        "title": "array item"
    }
}
]]></sourcecode>
          <t>In this example document, the schema titled "array item" is a subschema,
and the schema titled "root" is the root schema.</t>
          <t>As with the root schema, a subschema is either an object or a boolean.</t>
          <t>As discussed in <xref target="id-keyword"/>, a JSON Schema document
can contain multiple JSON Schema resources.  When used without qualification,
the term "root schema" refers to the document's root schema.  In some
cases, resource root schemas are discussed.  A resource's root schema
is its top-level schema object, which would also be a document root schema
if the resource were to be extracted to a standalone JSON Schema document.</t>
          <t>Whether multiple schema resources are embedded or linked with a reference,
they are processed in the same way, with the same available behaviors.</t>
        </section>
      </section>
      <section anchor="instance">
        <name>Instance</name>
        <t>An instance of a schema is a JSON value or document that is in the valid set of
a schema. An instance has one of six primitive types, and a range of possible
values depending on the type:</t>
        <dl>
          <dt>null</dt>
          <dd>
            <t>A JSON "null" value</t>
          </dd>
          <dt>boolean</dt>
          <dd>
            <t>A JSON "true" or "false" value</t>
          </dd>
          <dt>object</dt>
          <dd>
            <t>An unordered set of properties mapping a string to an instance, the JSON "object" value</t>
          </dd>
          <dt>array</dt>
          <dd>
            <t>An ordered list of instances, with the JSON "array" value</t>
          </dd>
          <dt>number</dt>
          <dd>
            <t>An arbitrary-precision, base-10 decimal number value, from the JSON "number" value</t>
          </dd>
          <dt>string</dt>
          <dd>
            <t>A string of Unicode code points, from the JSON "string" value</t>
          </dd>
        </dl>
        <t>Whitespace and formatting concerns, including different lexical
representations of numbers that are equal within the data model, are
outside the scope of JSON Schema.  JSON Schema
<xref target="vocabularies"/> that wish
to work with such differences in lexical representations SHOULD define
keywords to precisely interpret formatted strings within the data model
rather than relying on having the original JSON representation Unicode
characters available.</t>
        <t>Since an object cannot have two properties with the same key, behavior for a
JSON document that tries to define two properties with
the same key in a single object is undefined.</t>
        <t>Note that JSON Schema vocabularies are free to define their own extended
type system.  This should not be confused with the core types
defined here.  As an example, "integer" is a reasonable type for a
vocabulary to define as a value for a keyword, but the data model
makes no distinction between integers and other numbers.</t>
        <section anchor="input-equality">
          <name>Input Equality</name>
          <t>Two JSON inputs are said to be equal if and only if they are of the same type
and have the same value according to the JSON data model.
Specifically, this means:</t>
          <ul spacing="normal">
            <li>
              <t>both are null; or</t>
            </li>
            <li>
              <t>both are true; or</t>
            </li>
            <li>
              <t>both are false; or</t>
            </li>
            <li>
              <t>both are strings, and are the same codepoint-for-codepoint; or</t>
            </li>
            <li>
              <t>both are numbers, and have the same mathematical value; or</t>
            </li>
            <li>
              <t>both are arrays, and have an equal value item-for-item; or</t>
            </li>
            <li>
              <t>both are objects, and each property in one has exactly one property with
a key equal to the other's, and that other property has an equal
value.</t>
            </li>
          </ul>
          <t>Implied in this definition is that arrays must be the same length,
objects must have the same number of members,
properties in objects are unordered,
there is no way to define multiple properties with the same key,
and mere formatting differences (indentation, placement of commas, trailing
zeros) are insignificant.
Two equal inputs are guaranteed to yield identical validation results
for a given schema, regardless of their original formatting.</t>
        </section>
      </section>
      <section anchor="keywords">
        <name>Keywords</name>
        <t>Object properties that are applied to the instance are called keywords,
or schema keywords.  Broadly speaking, keywords fall into one
of five categories:</t>
        <dl>
          <dt>identifiers</dt>
          <dd>
            <t>control schema identification through setting a URI
for the schema and/or changing how the base URI is determined</t>
          </dd>
          <dt>assertions</dt>
          <dd>
            <t>produce a boolean result when applied to an instance</t>
          </dd>
          <dt>annotations</dt>
          <dd>
            <t>attach information to an instance for application use</t>
          </dd>
          <dt>applicators</dt>
          <dd>
            <t>apply one or more subschemas to a particular location
in the instance, and combine or modify their results</t>
          </dd>
          <dt>reserved locations</dt>
          <dd>
            <t>do not directly affect results, but reserve a place
for a specific purpose to ensure interoperability</t>
          </dd>
        </dl>
        <t>Keywords may fall into multiple categories, although applicators
SHOULD only produce assertion results based on their subschemas'
results.  They should not define additional constraints independent
of their subschemas.</t>
        <t>Keywords which are properties within the same schema object are referred to as adjacent keywords.</t>
        <t>Extension keywords, meaning those defined outside of this document
and its companions, are free to define other behaviors as well.</t>
        <t>A JSON Schema MAY contain properties which are not schema keywords
or are not recognized as schema keywords.
The behavior of such keywords is governed by <xref target="unrecognized"/>.</t>
        <t>Unknown keywords SHOULD be treated as annotations, where the value
of the keyword is the value of the annotation.</t>
        <t>An empty schema is a JSON Schema with no properties, or only unknown
properties.</t>
      </section>
      <section anchor="fragments">
        <name>Fragment Identifiers</name>
        <t>In accordance with section 3.1 of <xref target="RFC6839"/>,
the syntax and semantics of fragment identifiers specified for
any +json media type SHOULD be as specified for "application/json".
(At publication of this document, there is no fragment identification
syntax defined for "application/json".)</t>
        <t>Additionally, the "application/schema+json" media type supports two
fragment identifier structures: plain names and JSON Pointers.
The "application/schema-instance+json" media type supports one
fragment identifier structure: JSON Pointers.</t>
        <t>The use of JSON Pointers as URI fragment identifiers is described in
<xref target="RFC6901"/>.
For "application/schema+json", which supports two fragment identifier syntaxes,
fragment identifiers matching the JSON Pointer syntax, including the empty string,
MUST be interpreted as JSON Pointer fragment identifiers.</t>
        <t>Per the W3C's best practices for fragment identifiers
(<xref target="W3C.WD-fragid-best-practices-20121025"/>),
plain name fragment identifiers in "application/schema+json" are reserved for referencing
locally named schemas.  All fragment identifiers that do
not match the JSON Pointer syntax MUST be interpreted as
plain name fragment identifiers.</t>
        <t>Defining and referencing a plain name fragment identifier within an
"application/schema+json" document are specified
in the <xref target="anchors">"$anchor" keyword</xref> section.</t>
      </section>
      <section anchor="other-general-considerations">
        <name>Other General Considerations</name>
        <section anchor="range-of-json-values">
          <name>Range of JSON Values</name>
          <t>An instance may be any valid JSON value as defined by JSON (<xref target="RFC8259"/>).
JSON Schema imposes no restrictions on type: JSON Schema can describe any JSON
value, including, for example, null.</t>
        </section>
        <section anchor="extending">
          <name>Requirements for handling extensions</name>
          <t>Additional schema keywords and schema vocabularies MAY be defined
by any entity.  Save for explicit agreement, schema authors SHALL NOT
expect these additional keywords and vocabularies to be supported by
implementations that do not explicitly document such support.
Implementations SHOULD treat keywords they do not support as annotations,
where the value of the keyword is the value of the annotation.</t>
          <t>Implementations MAY provide the ability to register or load handlers
for vocabularies that they do not support directly.  The exact mechanism
for registering and implementing such handlers is implementation-dependent.</t>
        </section>
        <section anchor="validation">
          <name>Validation</name>
          <t>JSON Schema validation applies the rules of a JSON Schema to determine
if an input is in the valid set for that schema.
An instance location that satisfies all asserted constraints is then
annotated with any keywords that contain non-assertion information,
such as descriptive metadata and usage hints.</t>
          <t>Each schema object is independently evaluated against each input location
to which it applies.  This greatly simplifies implementation requirements
by ensuring that implementations do not need to maintain state across
the document-wide validation process.</t>
          <t>This specification defines a set of assertion keywords, as well as a small vocabulary
of metadata keywords that can be used to annotate the JSON instance with
useful information.  The <xref target="format-vocab"/> keyword is intended primarily
as an annotation, but can optionally be used as an assertion.  The
<xref target="content"/> keywords are annotations for working with documents
embedded as JSON strings.</t>
        </section>
      </section>
    </section>
    <section anchor="core-keywords">
      <name>Core Keywords</name>
      <t>Core keywords MUST be implemented by any processor indicating support
for the "application/jsonschema+json" media type.</t>
      <t>The behavior of a false value for this vocabulary (and only this
vocabulary) is undefined, as is the behavior when "$vocabulary"
is present but the Core vocabulary is not included.  However, it
is RECOMMENDED that implementations detect these cases and raise
an error when they occur.  It is not meaningful to declare that
a meta-schema optionally uses Core.</t>
      <t>The current URI for the Core vocabulary is:</t>
      <t>&lt;https://json-schema.org/draft/2020-12/vocab/core&gt;.</t>
      <t>The current URI for the corresponding meta-schema is:</t>
      <t><eref target="https://json-schema.org/draft/2020-12/meta/core">https://json-schema.org/draft/2020-12/meta/core</eref>.</t>
      <t>While the "$" prefix is not formally reserved for the Core vocabulary,
it is RECOMMENDED that extension keywords (in vocabularies or otherwise)
begin with a character other than "$" to avoid possible future collisions.</t>
      <section anchor="environment">
        <name>Environment</name>
        <t>Environment keywords MUST be read by implementations before other keywords
may be evaluated, as they are capable of impacting the behavior of other keywords.</t>
        <section anchor="schema">
          <name>"$schema"</name>
          <t>The "$schema" keyword is both used as a JSON Schema dialect identifier and
as the identifier of a resource which is itself a JSON Schema, which describes the
set of valid schemas written for this particular dialect.</t>
          <t>The value of this keyword MUST be a
(containing a scheme, per <xref section="3" sectionFormat="comma" target="RFC3986"/>) and this URI MUST be normalized.
The current schema MUST be valid against the meta-schema identified by this URI.</t>
          <t>If this URI identifies a retrievable resource, that resource SHOULD be of
media type "application/schema+json".</t>
          <t>The "$schema" keyword SHOULD be used in the document root schema object,
and MAY be used in the root schema objects of embedded schema resources.
It MUST NOT appear in non-resource root schema objects.  If absent from
the document root schema, the resulting behavior is implementation-defined.</t>
          <t>Values for this property are defined elsewhere in this and other documents,
and by other parties.</t>
        </section>
        <section anchor="vocabulary-keyword">
          <name>"$vocabulary"</name>
          <t>The "$vocabulary" keyword is used in meta-schemas to identify the
vocabularies available for use in schemas described by that meta-schema.
It is also used to indicate whether each vocabulary is required or optional,
in the sense that an implementation MUST understand the required vocabularies
in order to successfully process the schema. Together, this information forms
a dialect. Any vocabulary that is understood by the implementation MUST be
processed in a manner consistent with the semantic definitions contained
within the vocabulary.</t>
          <t>The value of this keyword MUST be an object.  The property names in the
object MUST be URIs (containing a scheme) and this URI MUST be normalized.
Each URI that appears as a property name identifies a specific set of
keywords and their semantics.</t>
          <t>The URI MAY be a URL, but the nature of the retrievable resource is
currently undefined, and reserved for future use.  Vocabulary authors
MAY use the URL of the vocabulary specification, in a human-readable
media type such as text/html or text/plain, as the vocabulary URI.<cref anchor="_2">Vocabulary documents may be added in forthcoming drafts.
  For now, identifying the keyword set is deemed sufficient as that,
  along with meta-schema validation, is how the current "vocabularies"
  work today.  Any future vocabulary document format will be specified
  as a JSON document, so using text/html or other non-JSON formats
  in the meantime will not produce any future ambiguity.</cref></t>
          <t>The values of the object properties MUST be booleans.
If the value is true, then implementations that do not recognize
the vocabulary MUST refuse to process any schemas that declare
this meta-schema with "$schema".  If the value is false, implementations
that do not recognize the vocabulary SHOULD proceed with processing
such schemas.  The value has no impact if the implementation
understands the vocabulary.</t>
          <t>Per <xref target="extending"/>, unrecognized
keywords SHOULD be treated as annotations.
This remains the case for keywords defined
by unrecognized vocabularies.  It is not currently possible to distinguish
between unrecognized keywords that are defined in vocabularies from
those that are not part of any vocabulary.</t>
          <t>The "$vocabulary" keyword SHOULD be used in the root schema of any schema
resource intended for use as a meta-schema.  It MUST NOT appear in subschemas.</t>
          <t>The "$vocabulary" keyword MUST be ignored in schema resources that
are not being processed as a meta-schema.  This allows validating
a meta-schema M against its own meta-schema M' without requiring
the implementation to understand the vocabularies declared by M.</t>
          <section anchor="default-vocabularies">
            <name>Default vocabularies</name>
            <t>If "$vocabulary" is absent, an implementation MAY determine
behavior based on the meta-schema if it is recognized from the
URI value of the referring schema's "$schema" keyword.
This is how behavior (such as Hyper-Schema usage) has been
recognized prior to the existence of vocabularies.</t>
            <t>If the meta-schema, as referenced by the schema, is not recognized,
or is missing, then the behavior is implementation-defined.
If the implementation
proceeds with processing the schema, it MUST assume the use of the
core vocabulary.  If the implementation is built for a specific purpose,
then it SHOULD assume the use of all of the most relevant vocabularies
for that purpose.</t>
            <t>For example, an implementation that is a validator
SHOULD assume the use of all vocabularies in this
specification and the companion Validation specification.</t>
          </section>
          <section anchor="non-inheritability-of-vocabularies">
            <name>Non-inheritability of vocabularies</name>
            <t>Note that the processing restrictions on "$vocabulary" mean that
meta-schemas that reference other meta-schemas using "$ref" or
similar keywords do not automatically inherit the vocabulary
declarations of those other meta-schemas.  All such declarations
must be repeated in the root of each schema document intended
for use as a meta-schema.  This is demonstrated in
<xref target="example-meta-schema">the example meta-schema</xref>.<cref anchor="_3">This requirement allows implementations to find all vocabulary
  requirement information in a single place for each meta-schema.
  As schema extensibility means that there are endless potential
  ways to combine more fine-grained meta-schemas by reference,
  requiring implementations to anticipate all possibilities and
  search for vocabularies in referenced meta-schemas would
  be overly burdensome.</cref></t>
          </section>
          <section anchor="updates-to-meta-schema-and-vocabulary-uris">
            <name>Updates to Meta-Schema and Vocabulary URIs</name>
            <t>Updated vocabulary and meta-schema URIs MAY be published between
specification drafts in order to correct errors.  Implementations
SHOULD consider URIs dated after this specification draft and
before the next to indicate the same syntax and semantics
as those listed here.</t>
          </section>
        </section>
        <section anchor="id-keyword">
          <name>"$id"</name>
          <t>The $id keyword identifies a schema resource with its <em>canonical URI</em> (in the
sense of <xref target="RFC6596"/>). Explicit identification makes it easier for a schema to be
referenced, especially from other schemas, allowing re-use, modularity and
extensibility of schemas.  An explicit identifier is a more stable way to reference
a schema than its location (either its URL on the Web or as a location within
the structure of a parent schema).</t>
          <t>Requirements on $id value:</t>
          <ul spacing="normal">
            <li>
              <t>MUST be a string</t>
            </li>
            <li>
              <t>MUST be a valid URI reference (<xref section="4.1" sectionFormat="comma" target="RFC3986"/>)</t>
            </li>
            <li>
              <t>SHOULD be normalized</t>
            </li>
            <li>
              <t>MUST NOT have a fragment (<xref section="3.5" sectionFormat="comma" target="RFC3986"/>)</t>
            </li>
          </ul>
          <t>The value of an $id may be a full URI or a <em>relative reference</em>
(<xref section="4.2" sectionFormat="comma" target="RFC3986"/>). When a relative URI is used, knowing the base URI
becomes important.  Read <xref target="relative-refs"/> and <xref target="id-examples"/> to understand
how that must be done.</t>
          <t>Note that an URI does not have to be a URL. Even if it is a URL, the URL may not
resolve and return a schema, and implementations are warned against automatically
resolving network references to fetch schemas (see
<xref target="loading-schemas"/>). Nevertheless, the URI still identifies the schema.</t>
          <t>The presence of "$id" in a subschema indicates that the subschema constitutes
a distinct schema resource within a single schema document.</t>
          <t>See also the $anchor keyword (<xref target="anchors"/>) for naming subschemas, and the
$ref keyword (<xref target="refs"/>) in which $id and $anchor values are frequently used.</t>
          <section anchor="identifying-the-root-schema">
            <name>Identifying the root schema</name>
            <t>The root schema of a JSON Schema document SHOULD contain an "$id" keyword
with an absolute-URI (<xref section="4.3" sectionFormat="comma" target="RFC3986"/>; containing a scheme,
but no fragment).</t>
          </section>
        </section>
        <section anchor="anchors">
          <name>"$anchor" and "$dynamicAnchor"</name>
          <t>Using JSON Pointer fragments requires knowledge of the structure of the schema.
When writing schema documents with the intention to provide re-usable
schemas, it may be preferable to use a plain name fragment that is not tied to
any particular structural location.  This allows a subschema to be relocated
without requiring JSON Pointer references to be updated.</t>
          <t>The "$anchor" and "$dynamicAnchor" keywords are used to specify such
fragments.  They are identifier keywords that can only be used to create
plain name fragments.</t>
          <t>The base URI to which the resulting fragment is appended is the canonical
URI of the schema resource containing the "$anchor" or "$dynamicAnchor"
in question.  As discussed in the previous section, this is either the
nearest "$id" in the same or parent schema object, or the base URI
for the document as determined according to RFC 3986.</t>
          <t>Separately from the usual usage of URIs, "$dynamicAnchor"
indicates that the fragment is an extension point when used with
the "$dynamicRef" keyword.  This low-level, advanced feature
makes it easier to extend recursive schemas such as the meta-schemas,
without imposing any particular semantics on that extension.
See the section on <xref target="refs">"$dynamicRef"</xref>
for details.</t>
          <t>In most cases, the normal fragment behavior both suffices and
is more intuitive.  Therefore it is RECOMMENDED that "$anchor"
be used to create plain name fragments unless there is a clear
need for "$dynamicAnchor".</t>
          <t>If present, the value of this keyword MUST be a string and MUST start with
a letter ([A-Za-z]) or underscore ("_"), followed by any number of letters,
digits ([0-9]), hyphens ("-"), underscores ("_"), and periods (".").
This matches the US-ASCII part of XML's NCName production, per <xref target="XMLNS"/>.<cref anchor="_5">Note that the anchor string does not include the "#" character,
  as it is not a URI-reference.  An "$anchor": "foo" becomes the
  fragment "#foo" when used in a URI.  See below for full examples.</cref></t>
          <t>The effect of specifying the same fragment name multiple times within
the same resource, using any combination of "$anchor" and/or
"$dynamicAnchor", is undefined.  Implementations MAY
raise an error if such usage is detected.</t>
        </section>
      </section>
      <section anchor="definitions-and-references">
        <name>Definitions and References</name>
        <section anchor="refs">
          <name>"$ref" and "$dynamicRef"</name>
          <t>The "$ref" and "$dynamicRef" keywords are applicator keywords used to
reference a schema. Their results are the results of the referenced schema.<cref anchor="_6">Note that this definition of how the results are determined means that
  other keywords can appear alongside of "$ref" in the same schema object.</cref></t>
          <t>As the values of "$ref" and "$dynamicRef" are URI References, this allows
the possibility to externalise or divide a schema across multiple files,
and provides the ability to validate recursive structures through
self-reference.</t>
          <t>The resolved URI produced by these keywords is not necessarily a network
locator, only an identifier. Even if it is a network locator,
implementations should refer to <xref target="loading-schemas"/> about loading
such schemas.</t>
          <t>The value of the "$ref" keyword MUST be a string which is a URI-Reference.
Resolved against the current URI base, it produces the URI of the schema
to apply.  This resolution is safe to perform on schema load, as the
process of evaluating an input cannot change how the reference resolves.</t>
          <t>The "$dynamicRef" keyword is an applicator that allows for deferring the
full resolution until runtime, at which point it is resolved each time it is
encountered while evaluating an input.</t>
          <t>Together with "$dynamicAnchor", "$dynamicRef" implements a cooperative
extension mechanism that is primarily useful with recursive schemas
(schemas that reference themselves).  Both the extension point and the
runtime-determined extension target are defined with "$dynamicAnchor",
and only exhibit runtime dynamic behavior when referenced with
"$dynamicRef".</t>
          <t>The value of the "$dynamicRef" property MUST be a string which is
a URI-Reference.  Resolved against the current URI base, it produces
the URI used as the starting point for runtime resolution.  This initial
resolution is safe to perform on schema load.</t>
          <t>If the initially resolved starting point URI includes a fragment that
was created by the "$dynamicAnchor" keyword, the initial URI MUST be
replaced by the URI (including the fragment) for the outermost schema
resource in the <xref target="scopes">dynamic scope</xref> that defines
an identically named fragment with "$dynamicAnchor".</t>
          <t>Otherwise, its behavior is identical to "$ref", and no runtime
resolution is needed.</t>
          <t>For a full example using these keyword, see
<xref target="recursive-example"/>.<cref anchor="_7">The difference between the hyper-schema meta-schema in pre-2019
  drafts and an this draft dramatically demonstrates the utility
  of these keywords.</cref></t>
        </section>
        <section anchor="defs">
          <name>"$defs"</name>
          <t>The "$defs" keyword reserves a location for schema
authors to inline re-usable JSON Schemas into a more general schema.
The keyword does not directly affect the validation result.</t>
          <t>This keyword's value MUST be an object.
Each member value of this object MUST be a valid JSON Schema.</t>
          <t>As an example, here is a schema describing an array of positive
integers, where the positive integer constraint is a subschema in
"$defs":</t>
          <sourcecode type="json"><![CDATA[
{
    "type": "array",
    "items": { "$ref": "#/$defs/positiveInteger" },
    "$defs": {
        "positiveInteger": {
            "type": "integer",
            "exclusiveMinimum": 0
        }
    }
}
]]></sourcecode>
        </section>
      </section>
      <section anchor="comment">
        <name>"$comment"</name>
        <t>This keyword reserves a location for comments from schema authors
to readers or maintainers of the schema.</t>
        <t>The value of this keyword MUST be a string. Implementations MUST NOT present this
string to end users.  Tools for editing schemas SHOULD support displaying and
editing this keyword.  The value of this keyword MAY be used in debug or error
output which is intended for developers making use of schemas.</t>
        <t>Schema vocabularies SHOULD allow "$comment" within any object containing
vocabulary keywords.  Implementations MAY assume "$comment" is allowed
unless the vocabulary specifically forbids it.  Vocabularies MUST NOT
specify any effect of "$comment" beyond what is described in this
specification.</t>
        <t>Tools that translate other media types or programming languages
to and from application/schema+json MAY choose to convert that media type or
programming language's native comments to or from "$comment" values.
The behavior of such translation when both native comments and "$comment"
properties are present is implementation-dependent.</t>
        <t>Implementations MAY strip "$comment" values at any point during processing.
In particular, this allows for shortening schemas when the size of deployed
schemas is a concern.</t>
        <t>Implementations MUST NOT take any other action based on the presence, absence,
or contents of "$comment" properties.  In particular, the value of "$comment"
MUST NOT be collected as an annotation result.</t>
      </section>
    </section>
    <section anchor="subschema-keywords">
      <name>Subschema keywords</name>
      <t>This section defines keywords that
are RECOMMENDED for use as the basis of other vocabularies.</t>
      <t>Meta-schemas that do not use "$vocabulary" SHOULD be considered to
require this vocabulary as if its URI were present with a value of true.</t>
      <t>The current URI for this vocabulary, known as the Applicator vocabulary, is:</t>
      <t>&lt;https://json-schema.org/draft/2020-12/vocab/applicator&gt;.</t>
      <t>The current URI for the corresponding meta-schema is:</t>
      <t><eref target="https://json-schema.org/draft/2020-12/meta/applicator">https://json-schema.org/draft/2020-12/meta/applicator</eref>.</t>
      <section anchor="keyword-independence">
        <name>Keyword Independence</name>
        <t>Schema keywords typically operate independently, without
affecting each other's outcomes.</t>
        <t>For schema author convenience, there are some exceptions among the
keywords in this vocabulary:</t>
        <ul spacing="normal">
          <li>
            <t>"additionalProperties", whose behavior is defined in terms of
"properties" and "patternProperties"</t>
          </li>
          <li>
            <t>"items", whose behavior is defined in terms of "prefixItems"</t>
          </li>
          <li>
            <t>"contains", whose behavior is affected by the presence and value of
"minContains", in the Validation vocabulary</t>
          </li>
        </ul>
      </section>
      <section anchor="in-place">
        <name>Keywords for Applying Subschemas in Place</name>
        <t>These keywords apply subschemas to the same location in the input
as the parent schema is being applied.  They allow combining
or modifying the subschema results in various ways.</t>
        <t>Subschemas of these keywords evaluate the input completely independently
such that the results of one such subschema MUST NOT impact the results of sibling
subschemas.  Therefore subschemas may be applied in
any order.</t>
        <t>Three of these keywords work together to implement conditional
application of a subschema based on the outcome of another subschema.
The fourth is a shortcut for a specific conditional case.</t>
        <t>"if", "then", and "else" MUST NOT interact with each other across
subschema boundaries.  In other words, an "if" in one
branch of an "allOf" MUST NOT have an impact on a "then"
or "else" in another branch.</t>
        <t>There is no default behavior for "if", "then", or "else"
when they are not present.  In particular, they MUST NOT
be treated as if present with an empty schema, and when
"if" is not present, both "then" and "else" MUST be
entirely ignored.</t>
        <section anchor="allOf">
          <name>"allOf"</name>
          <t>This keyword's value MUST be a non-empty array.
Each item of the array MUST be a valid JSON Schema.</t>
          <t>An input validates successfully against this keyword if it validates
successfully against all schemas defined by this keyword's value.</t>
        </section>
        <section anchor="anyof">
          <name>"anyOf"</name>
          <t>This keyword's value MUST be a non-empty array.
Each item of the array MUST be a valid JSON Schema.</t>
          <t>An input validates successfully against this keyword if it validates
successfully against at least one schema defined by this keyword's value.
Note that when annotations are being collected, all subschemas MUST
be examined so that annotations are collected from each subschema
that validates successfully.</t>
        </section>
        <section anchor="oneof">
          <name>"oneOf"</name>
          <t>This keyword's value MUST be a non-empty array.
Each item of the array MUST be a valid JSON Schema.</t>
          <t>An input validates successfully against this keyword if it validates
successfully against exactly one schema defined by this keyword's value.</t>
        </section>
        <section anchor="not">
          <name>"not"</name>
          <t>This keyword's value MUST be a valid JSON Schema.</t>
          <t>An input is valid against this keyword if it fails to validate
successfully against the schema defined by this keyword.</t>
        </section>
        <section anchor="if">
          <name>"if"</name>
          <t>This keyword's value MUST be a valid JSON Schema.</t>
          <t>This validation outcome of this keyword's subschema
has no direct effect on the overall validation
result.  Rather, it controls which of the "then"
or "else" keywords are evaluated.</t>
          <t>Inputs that successfully validate against this
keyword's subschema MUST also be valid against
the subschema value of the "then" keyword, if
present.</t>
          <t>Iputs that fail to validate against this
keyword's subschema MUST also be valid against
the subschema value of the "else" keyword, if
present.</t>
          <t>If <xref target="annotations"/>
are being collected, they are collected from this
keyword's subschema in the usual way, including when
the keyword is present without either "then" or "else".</t>
        </section>
        <section anchor="then">
          <name>"then"</name>
          <t>This keyword's value MUST be a valid JSON Schema.</t>
          <t>When "if" is present, and the input successfully
validates against its subschema, then validation
succeeds against this keyword if the input also
successfully validates against this keyword's subschema.</t>
          <t>This keyword has no effect when "if" is absent, or
when the input fails to validate against its
subschema.  Implementations MUST NOT evaluate
the input against this keyword, for either validation
or annotation collection purposes, in such cases.</t>
        </section>
        <section anchor="else">
          <name>"else"</name>
          <t>This keyword's value MUST be a valid JSON Schema.</t>
          <t>When "if" is present, and the input fails to
validate against its subschema, then validation
succeeds against this keyword if the input
successfully validates against this keyword's subschema.</t>
          <t>This keyword has no effect when "if" is absent, or
when the input successfully validates against its
subschema.  Implementations MUST NOT evaluate
the input against this keyword, for either validation
or annotation collection purposes, in such cases.</t>
        </section>
        <section anchor="dependentschemas">
          <name>"dependentSchemas"</name>
          <t>This keyword specifies subschemas that are evaluated if the input
is an object and contains a certain property.</t>
          <t>This keyword's value MUST be an object.
Each value in the object MUST be a valid JSON Schema.</t>
          <t>If the object key is a property in the instance, the entire
instance must validate against the subschema.  Its use is
dependent on the presence of the property.</t>
          <t>Omitting this keyword has the same behavior as an empty object.</t>
        </section>
      </section>
      <section anchor="keywords-for-applying-subschemas-to-arrays">
        <name>Keywords for Applying Subschemas to Arrays</name>
        <t>Each of these keywords defines a rule for applying its
subschema(s) to array items, and combining their results.</t>
        <section anchor="prefixitems">
          <name>"prefixItems"</name>
          <t>The value of "prefixItems" MUST be a non-empty array of valid JSON Schemas.</t>
          <t>Validation succeeds if each element of the input validates
against the schema at the same position, if any.  This keyword
does not constrain the length of the array.  If the array is longer
than this keyword's value, this keyword validates only the
prefix of matching length.</t>
          <t>This keyword produces an annotation value which is the largest
index to which this keyword applied a subschema.  The value
MAY be a boolean true if a subschema was applied to every
index of the instance, such as is produced by the "items" keyword.
This annotation affects the behavior of "items" and "unevaluatedItems".</t>
          <t>Omitting this keyword has the same assertion behavior as
an empty array.</t>
        </section>
        <section anchor="items">
          <name>"items"</name>
          <t>The value of "items" MUST be a valid JSON Schema.</t>
          <t>This keyword applies its subschema to all input elements
at indexes greater than the length of the "prefixItems" array
in the same schema object, as reported by the annotation result
of that "prefixItems" keyword.  If no such annotation
result exists, "items" applies its subschema to all input
array elements.<cref anchor="_12">Note that the behavior of "items" without "prefixItems" is
   identical to that of the schema form of "items" in prior drafts.
   When "prefixItems" is present, the behavior of "items" is
   identical to the former "additionalItems" keyword.</cref></t>
          <t>If the "items" subschema is applied to any
positions within the input array, it produces an
annotation result of boolean true, indicating that all remaining array
elements have been evaluated against this keyword's subschema.
This annotation affects the behavior of "unevaluatedItems" in the
Unevaluated vocabulary.</t>
          <t>Omitting this keyword has the same assertion behavior as
an empty schema.</t>
          <t>Implementations MAY choose to implement or optimize this keyword
in another way that produces the same effect, such as by directly
checking for the presence and size of a "prefixItems" array.
Implementations that do not support annotation collection MUST do so.</t>
        </section>
        <section anchor="contains">
          <name>"contains"</name>
          <t>The value of this keyword MUST be a valid JSON Schema.</t>
          <t>An array input is valid against "contains" if the number of elements
that are valid against its subschema is within the inclusive range of
the minimum and (if any) maximum number of occurrences.</t>
          <t>The minimum and maximum numbers of occurrences are provided by the
"minContains" and "maxContains" keywords, respectively, within the
same schema object as "contains".  If "minContains" is absent, the
minimum MUST be 1.  If "maxContains" is absent, the maximum MUST
be unbounded.</t>
          <t>Implementations MAY implement the dependency on "minContains" and
"maxContains" by inspecting their values rather than by reading
annotations provided by those keywords.</t>
          <t>This keyword produces an annotation value which is an array of
the indexes to which this keyword validates successfully when applying
its subschema, in ascending order. The value MAY be a boolean "true" if
the subschema validates successfully when applied to every index of the
instance. The annotation MUST be present if the input array to which
this keyword's schema applies is empty.</t>
          <t>This annotation affects the behavior of "unevaluatedItems" in the
Unevaluated vocabulary.</t>
          <t>The subschema MUST be applied to every array element even after the first
match has been found, in order to collect annotations for use by other
keywords. This is to ensure that all possible annotations are collected.</t>
        </section>
      </section>
      <section anchor="keywords-for-applying-subschemas-to-objects">
        <name>Keywords for Applying Subschemas to Objects</name>
        <t>Each of these keywords defines a rule for applying its
subschema(s) to object
properties and combining their results.</t>
        <section anchor="properties">
          <name>"properties"</name>
          <t>The value of "properties" MUST be an object.
Each value of this object MUST be a valid JSON Schema.</t>
          <t>Validation succeeds if, for each name that appears in both
the input and as a name within this keyword's value,
the contents successfully validate against the
corresponding schema.</t>
          <t>The annotation result of this keyword is the set of instance
property names matched by this keyword.
This annotation affects the behavior of "additionalProperties" (in
this vocabulary) and "unevaluatedProperties" in the Unevaluated vocabulary.</t>
          <t>Omitting this keyword has the same assertion behavior as
an empty object.</t>
        </section>
        <section anchor="patternproperties">
          <name>"patternProperties"</name>
          <t>The value of "patternProperties" MUST be an object. Each property name
of this object SHOULD be a valid regular expression, according to the
ECMA-262 regular expression dialect. Each property value of this object
MUST be a valid JSON Schema.</t>
          <t>Validation succeeds if, for each input name that matches any
regular expressions that appear as a property name in this keyword's value,
the contents successfully validate against each
schema that corresponds to a matching regular expression.
Recall: Regular expressions are not explicitly anchored.</t>
          <t>The annotation result of this keyword is the set of instance
property names matched by this keyword.
This annotation affects the behavior of "additionalProperties" (in this
vocabulary) and "unevaluatedProperties" (in the Unevaluated vocabulary).</t>
          <t>Omitting this keyword has the same assertion behavior as
an empty object.</t>
        </section>
        <section anchor="additionalProperties">
          <name>"additionalProperties"</name>
          <t>The value of "additionalProperties" MUST be a valid JSON Schema.</t>
          <t>The behavior of this keyword depends on the presence and
annotation results of "properties" and "patternProperties"
within the same schema object.
Validation with "additionalProperties" applies only to the child
values of input names that do not appear in the annotation
results of either "properties" or "patternProperties".</t>
          <t>For all such properties, validation succeeds if the contents
validate against the "additionalProperties" schema.</t>
          <t>The annotation result of this keyword is the set of input
property names validated by this keyword's subschema.
This annotation affects the behavior of "unevaluatedProperties"
in the Unevaluated vocabulary.</t>
          <t>Omitting this keyword has the same assertion behavior as
an empty schema.</t>
          <t>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 input property set.
Implementations that do not support annotation collection MUST do so.<cref anchor="_13">In defining this option, it seems there is the potential for
   ambiguity in the output format. The ambiguity does not affect validation results,
   but it does affect the resulting output format.
   The ambiguity allows for multiple valid output results depending on whether annotations
   are used or a solution that "produces the same effect" as draft-07. It is understood
   that annotations from failing schemas are dropped.
   See our
   <eref target="https://github.com/json-schema-org/json-schema-spec/tree/HEAD/adr/2022-04-08-cref-for-ambiguity-and-fix-later-gh-spec-issue-1172.md">Decision Record</eref>
   for further details.</cref></t>
        </section>
        <section anchor="propertynames">
          <name>"propertyNames"</name>
          <t>The value of "propertyNames" MUST be a valid JSON Schema.</t>
          <t>If the input is an object, this keyword validates if every property name in
the input validates against the provided schema.
Note the property name that the schema is testing will always be a string.</t>
          <t>Omitting this keyword has the same behavior as an empty schema.</t>
        </section>
      </section>
    </section>
    <section anchor="keywords-for-unevaluated-locations">
      <name>Keywords for Unevaluated Locations</name>
      <t>The purpose of these keywords is to enable schema authors to apply
subschemas to array items or object properties that have not been
successfully evaluated against any dynamic-scope subschema of any
adjacent keywords.</t>
      <t>These input items or properties may have been unsuccessfully evaluated
against one or more adjacent keyword subschemas, such as when an assertion
in a branch of an "anyOf" fails.  Such failed evaluations are not considered
to contribute to whether or not the item or property has been evaluated.
Only successful evaluations are considered.</t>
      <t>If an item in an array or an object property is "successfully evaluated", it
is logically considered to be valid in terms of the representation of the
object or array that's expected. For example if a subschema represents a car,
which requires between 2-4 wheels, and the value of "wheels" is 6, the input
object is not "evaluated" to be a car, and the "wheels" property is considered
"unevaluated (successfully as a known thing)", and does not retain any annotations.</t>
      <t>Recall that adjacent keywords are keywords within the same schema object,
and that the dynamic-scope subschemas include reference targets as well as
lexical subschemas.</t>
      <t>The behavior of these keywords depend on the annotation results of
adjacent keywords that apply to the input location being validated.</t>
      <t>Meta-schemas that do not use "$vocabulary" SHOULD be considered to
require this vocabulary as if its URI were present with a value of true.</t>
      <t>The current URI for this vocabulary, known as the Unevaluated Applicator
vocabulary, is:</t>
      <t>&lt;https://json-schema.org/draft/2020-12/vocab/unevaluated&gt;.</t>
      <t>The current URI for the corresponding meta-schema is:</t>
      <t><eref target="https://json-schema.org/draft/2020-12/meta/unevaluated">https://json-schema.org/draft/2020-12/meta/unevaluated</eref>.</t>
      <section anchor="keyword-independence-1">
        <name>Keyword Independence</name>
        <t>Schema keywords typically operate independently, without
affecting each other's outcomes. However, the keywords in this
vocabulary are notable exceptions:</t>
        <ul spacing="normal">
          <li>
            <t>"unevaluatedItems", whose behavior is defined in terms of annotations
from "prefixItems", "items", "contains", and itself</t>
          </li>
          <li>
            <t>"unevaluatedProperties", whose behavior is defined in terms of
annotations from "properties", "patternProperties",
"additionalProperties" and itself</t>
          </li>
        </ul>
      </section>
      <section anchor="unevaluateditems">
        <name>"unevaluatedItems"</name>
        <t>The value of "unevaluatedItems" MUST be a valid JSON Schema.</t>
        <t>The behavior of this keyword depends on the annotation results of
adjacent keywords that apply to the input location being validated.
Specifically, the annotations from "prefixItems", "items", and "contains",
which can come from those keywords when they are adjacent to the
"unevaluatedItems" keyword. Those three annotations, as well as
"unevaluatedItems", can also result from any and all adjacent
<xref target="in-place">in-place applicator</xref> keywords.
This includes but is not limited to the in-place applicators
defined in this document.</t>
        <t>If no relevant annotations are present, the "unevaluatedItems"
subschema MUST be applied to all locations in the array.
If a boolean true value is present from any of the relevant annotations,
"unevaluatedItems" MUST be ignored.  Otherwise, the subschema
MUST be applied to any index greater than the largest annotation
value for "prefixItems", which does not appear in any annotation
value for "contains".</t>
        <t>This means that "prefixItems", "items", "contains", and all in-place
applicators MUST be evaluated before this keyword can be evaluated.
Authors of extension keywords MUST NOT define an in-place applicator
that would need to be evaluated after this keyword.</t>
        <t>If the "unevaluatedItems" subschema is applied to any
positions within the input array, it produces an
annotation result of boolean true, analogous to the
behavior of "items".
This annotation affects the behavior of "unevaluatedItems" in parent schemas.</t>
        <t>Omitting this keyword has the same assertion behavior as
an empty schema.</t>
      </section>
      <section anchor="unevaluatedproperties">
        <name>"unevaluatedProperties"</name>
        <t>The value of "unevaluatedProperties" MUST be a valid JSON Schema.</t>
        <t>The behavior of this keyword depends on the annotation results of
adjacent keywords that apply to the input location being validated.
Specifically, the annotations from "properties", "patternProperties",
and "additionalProperties", which can come from those keywords when
they are adjacent to the "unevaluatedProperties" keyword.  Those
three annotations, as well as "unevaluatedProperties", can also
result from any and all adjacent
<xref target="in-place">in-place applicator</xref> keywords.
This includes but is not limited to the in-place applicators
defined in this document.</t>
        <t>Validation with "unevaluatedProperties" applies only to the child
values of input names that do not appear in the "properties",
"patternProperties", "additionalProperties", or
"unevaluatedProperties" annotation results that apply to the
instance location being validated.</t>
        <t>For all such properties, validation succeeds if the contents
validate against the "unevaluatedProperties" schema.</t>
        <t>This means that "properties", "patternProperties", "additionalProperties",
and all in-place applicators MUST be evaluated before this keyword can
be evaluated.  Authors of extension keywords MUST NOT define an in-place
applicator that would need to be evaluated after this keyword.</t>
        <t>The annotation result of this keyword is the set of instance
property names validated by this keyword's subschema.
This annotation affects the behavior of "unevaluatedProperties" in parent schemas.</t>
        <t>Omitting this keyword has the same assertion behavior as
an empty schema.</t>
      </section>
    </section>
    <section anchor="keywords-for-structural-validation">
      <name>Keywords for Structural Validation</name>
      <t>Validation keywords in a schema impose requirements for successful validation of an
input.  These keywords are all assertions without any annotation behavior.</t>
      <t>Meta-schemas that do not use "$vocabulary" SHOULD be considered to
require this vocabulary as if its URI were present with a value of true.</t>
      <t>The current URI for this vocabulary, known as the Validation vocabulary, is:</t>
      <t>&lt;https://json-schema.org/draft/2020-12/vocab/validation&gt;.</t>
      <t>The current URI for the corresponding meta-schema is:</t>
      <t><eref target="https://json-schema.org/draft/2020-12/meta/validation">https://json-schema.org/draft/2020-12/meta/validation</eref>.</t>
      <section anchor="general">
        <name>Validation Keywords for Any Instance Type</name>
        <section anchor="type">
          <name>"type"</name>
          <t>The value of this keyword MUST be either a string or an array. If it is
an array, elements of the array MUST be strings and MUST be unique.</t>
          <t>String values MUST be one of the six primitive types
("null", "boolean", "object", "array", "number", or "string"),
or "integer" which matches any number with a zero fractional part.</t>
          <t>If the value of "type" is a string, then an input validates successfully if
its type matches the type represented by the value of the string.</t>
          <t>If the value of "type" is an array, then an input validates successfully if
its type matches any of the types indicated by the strings in the array.</t>
        </section>
        <section anchor="enum">
          <name>"enum"</name>
          <t>The value of this keyword MUST be an array. This array SHOULD have at
least one element. Elements in the array SHOULD be unique.</t>
          <t>An input validates successfully against this keyword if its value is
equal to one of the elements in this keyword's array value.</t>
          <t>Elements in the array might be of any type, including null.</t>
        </section>
        <section anchor="const">
          <name>"const"</name>
          <t>The value of this keyword MAY be of any type, including null.</t>
          <t>Use of this keyword is functionally equivalent to an
<xref target="enum"/> with a single value.</t>
          <t>An input validates successfully against this keyword if its value is
equal to the value of the keyword.</t>
        </section>
      </section>
      <section anchor="numeric">
        <name>Validation Keywords for Numeric Inputs (number and integer)</name>
        <section anchor="multipleof">
          <name>"multipleOf"</name>
          <t>The value of "multipleOf" MUST be a number, strictly greater than 0.</t>
          <t>A numeric input value is valid only if division by this keyword's value results in
an integer.</t>
        </section>
        <section anchor="maximum">
          <name>"maximum"</name>
          <t>The value of "maximum" MUST be a number, representing an inclusive upper limit
for a numeric input value.</t>
          <t>If the input value is a number, then this keyword validates only if the input value is
less than or exactly equal to "maximum".</t>
        </section>
        <section anchor="exclusivemaximum">
          <name>"exclusiveMaximum"</name>
          <t>The value of "exclusiveMaximum" MUST be a number, representing an exclusive upper
limit for a numeric input value.</t>
          <t>If the input value is a number, then it is valid only if it has a value
strictly less than (not equal to) "exclusiveMaximum".</t>
        </section>
        <section anchor="minimum">
          <name>"minimum"</name>
          <t>The value of "minimum" MUST be a number, representing an inclusive lower limit
for a numeric input value.</t>
          <t>If the input value is a number, then it is valid only if it has a value that is
greater than or exactly equal to "minimum".</t>
        </section>
        <section anchor="exclusiveminimum">
          <name>"exclusiveMinimum"</name>
          <t>The value of "exclusiveMinimum" MUST be a number, representing an exclusive lower
limit for a numeric input value.</t>
          <t>If the input value is a number, then it is valid only if it has a value
strictly greater than (not equal to) "exclusiveMinimum".</t>
        </section>
      </section>
      <section anchor="string">
        <name>Validation Keywords for Strings</name>
        <section anchor="maxlength">
          <name>"maxLength"</name>
          <t>The value of this keyword MUST be a non-negative integer.</t>
          <t>A string input value is valid against this keyword if its
length is less than, or equal to, the value of this keyword.</t>
          <t>The length of a string input value is defined as the number of its
characters as defined by <xref target="RFC8259"/>.</t>
        </section>
        <section anchor="minlength">
          <name>"minLength"</name>
          <t>The value of this keyword MUST be a non-negative integer.</t>
          <t>A string input value is valid against this keyword if its
length is greater than, or equal to, the value of this keyword.</t>
          <t>The length of a string input value is defined as the number of its
characters as defined by <xref target="RFC8259"/>.</t>
          <t>Omitting this keyword has the same behavior as a value of 0.</t>
        </section>
        <section anchor="pattern">
          <name>"pattern"</name>
          <t>The value of this keyword MUST be a string. This string SHOULD be a
valid regular expression, according to the ECMA-262 regular expression
dialect.</t>
          <t>A string input value is considered valid if the regular
expression matches the input value successfully. Recall: regular
expressions are not implicitly anchored.</t>
        </section>
      </section>
      <section anchor="validation-keywords-for-arrays">
        <name>Validation Keywords for Arrays</name>
        <section anchor="maxitems">
          <name>"maxItems"</name>
          <t>The value of this keyword MUST be a non-negative integer.</t>
          <t>An array input value is valid against "maxItems" if its size is
less than, or equal to, the value of this keyword.</t>
        </section>
        <section anchor="minitems">
          <name>"minItems"</name>
          <t>The value of this keyword MUST be a non-negative integer.</t>
          <t>An array input value is valid against "minItems" if its size is
greater than, or equal to, the value of this keyword.</t>
          <t>Omitting this keyword has the same behavior as a value of 0.</t>
        </section>
        <section anchor="uniqueitems">
          <name>"uniqueItems"</name>
          <t>The value of this keyword MUST be a boolean.</t>
          <t>If this keyword has boolean value false, the input array validates
successfully. If it has boolean value true, the input array validates
successfully if all of its elements are unique.</t>
          <t>Omitting this keyword has the same behavior as a value of false.</t>
        </section>
        <section anchor="maxcontains">
          <name>"maxContains"</name>
          <t>The value of this keyword MUST be a non-negative integer.</t>
          <t>Validation MUST always succeed against this keyword; its validation
effect is to  modify the behavior of "contains" within the same
schema object, as described in that keyword's section.</t>
          <t>This keyword behaves as an annotation, which MAY be used by
"<xref target="contains"/>".</t>
        </section>
        <section anchor="mincontains">
          <name>"minContains"</name>
          <t>The value of this keyword MUST be a non-negative integer.</t>
          <t>Validation MUST always succeed against this keyword; its validation
effect is to modify the behavior of "contains" within the same
schema object, as described in that keyword's section.</t>
          <t>This keyword behaves as an annotation, which MAY be used by
"<xref target="contains"/>".</t>
          <t>Omitting this keyword has the same behavior as a value of 1.
Per <xref target="default-behaviors"/>, omitted keywords
MUST NOT produce annotation results.  However, as described
in the section for "contains", the absence of this keyword's
annotation causes "contains" to assume a value of 1.</t>
        </section>
      </section>
      <section anchor="validation-keywords-for-objects">
        <name>Validation Keywords for Objects</name>
        <section anchor="maxproperties">
          <name>"maxProperties"</name>
          <t>The value of this keyword MUST be a non-negative integer.</t>
          <t>An object is valid against "maxProperties" if its
number of properties is less than, or equal to, the value of this
keyword.</t>
        </section>
        <section anchor="minproperties">
          <name>"minProperties"</name>
          <t>The value of this keyword MUST be a non-negative integer.</t>
          <t>An object is valid against "minProperties" if its
number of properties is greater than, or equal to, the value of this
keyword.</t>
          <t>Omitting this keyword has the same behavior as a value of 0.</t>
        </section>
        <section anchor="required">
          <name>"required"</name>
          <t>The value of this keyword MUST be an array.
Elements of this array, if any, MUST be strings, and MUST be unique.</t>
          <t>An object is valid against this keyword if every item in the array is
the name of a property in the object.</t>
          <t>Omitting this keyword has the same behavior as an empty array.</t>
        </section>
        <section anchor="dependentrequired">
          <name>"dependentRequired"</name>
          <t>The value of this keyword MUST be an object.  Properties in
this object, if any, MUST be arrays.  Elements in each array,
if any, MUST be strings, and MUST be unique.</t>
          <t>This keyword specifies properties that are required if a specific
other property is present.  Their requirement is dependent on the
presence of the other property.</t>
          <t>Validation succeeds if, for each name that appears in both
the input object and as a name within this keyword's value, every
item in the corresponding array is also the name of a property
in the input object.</t>
          <t>Omitting this keyword has the same behavior as an empty object.</t>
        </section>
      </section>
    </section>
    <section anchor="format-vocab">
      <name>Vocabularies for Semantic Content With "format"</name>
      <section anchor="foreword">
        <name>Foreword</name>
        <t>Structural validation alone may be insufficient to allow an application to correctly
utilize certain values. The "format" annotation keyword is defined to allow schema
authors to convey semantic information for a fixed subset of values which are
accurately described by authoritative resources, be they RFCs or other external
specifications.</t>
        <t>The value of this keyword is called a format attribute. It MUST be a string. A
format attribute can generally only validate a given set of input types. If
the type of the input is not in this set, validation for this
format attribute and input SHOULD succeed.  All format attributes defined
in this section apply to strings, but a format attribute can be specified
to apply to any input type in the <xref target="instance">instance data model</xref>.<cref anchor="_14">Note that the "type" keyword in this specification defines an "integer" type
   which is not part of the data model. Therefore a format attribute can be
   limited to numbers, but not specifically to integers. However, a numeric
   format can be used alongside the "type" keyword with a value of "integer",
   or could be explicitly defined to always pass if the number is not an integer,
   which produces essentially the same behavior as only applying to integers.</cref></t>
        <t>The current URI for this vocabulary, known as the Format-Annotation vocabulary, is:</t>
        <t>&lt;https://json-schema.org/draft/2020-12/vocab/format-annotation&gt;.</t>
        <t>The current URI for the corresponding meta-schema is:</t>
        <t><eref target="https://json-schema.org/draft/2020-12/meta/format-annotation">https://json-schema.org/draft/2020-12/meta/format-annotation</eref>.</t>
        <t>Implementing support for this vocabulary is REQUIRED.</t>
        <t>In addition to the Format-Annotation vocabulary, a secondary vocabulary is available
for custom meta-schemas that defines "format" as an assertion. The URI for the
Format-Assertion vocabulary, is:</t>
        <t>&lt;https://json-schema.org/draft/2020-12/vocab/format-assertion&gt;.</t>
        <t>The current URI for the corresponding meta-schema is:</t>
        <t><eref target="https://json-schema.org/draft/2020-12/meta/format-assertion">https://json-schema.org/draft/2020-12/meta/format-assertion</eref>.</t>
        <t>Implementing support for the Format-Assertion vocabulary is OPTIONAL.</t>
        <t>Specifying both the Format-Annotation and the Format-Assertion vocabularies is functionally
equivalent to specifying only the Format-Assertion vocabulary since its requirements
are a superset of the Format-Annotation vocabulary.</t>
      </section>
      <section anchor="implementation-requirements">
        <name>Implementation Requirements</name>
        <t>The "format" keyword functions as defined by the vocabulary which is referenced.</t>
        <section anchor="format-annotation-vocabulary">
          <name>Format-Annotation Vocabulary</name>
          <t>The value of format MUST be collected as an annotation, if the implementation
supports annotation collection. This enables application-level validation when
schema validation is unavailable or inadequate.</t>
          <t>Implementations MAY still treat "format" as an assertion in addition to an
annotation and attempt to validate the value's conformance to the specified
semantics. The implementation MUST provide options to enable and disable such
evaluation and MUST be disabled by default. Implementations SHOULD document
their level of support for such validation.<cref anchor="_15">Specifying the Format-Annotation vocabulary and enabling validation in an
   implementation should not be viewed as being equivalent to specifying
   the Format-Assertion vocabulary since implementations are not required to
   provide full validation support when the Format-Assertion vocabulary
   is not specified.</cref></t>
          <t>When the implementation is configured for assertion behavior, it:</t>
          <ul spacing="normal">
            <li>
              <t>SHOULD provide an implementation-specific best effort validation
for each format attribute defined below;</t>
            </li>
            <li>
              <t>MAY choose to implement validation of any or all format attributes
as a no-op by always producing a validation result of true;</t>
            </li>
          </ul>
          <t><cref anchor="_16">This matches the current reality of implementations, which provide
   widely varying levels of validation, including no validation at all,
   for some or all format attributes.  It is also designed to encourage
   relying only on the annotation behavior and performing semantic
   validation in the application, which is the recommended best practice.</cref></t>
        </section>
        <section anchor="format-assertion-vocabulary">
          <name>Format-Assertion Vocabulary</name>
          <t>When the Format-Assertion vocabulary is declared with a value of true,
implementations MUST provide full validation support for all of the formats
defined by this specificaion. Implementations that cannot provide full
validation support MUST refuse to process the schema.</t>
          <t>An implementation that supports the Format-Assertion vocabulary:</t>
          <ul spacing="normal">
            <li>
              <t>MUST still collect "format" as an annotation if the implementation
supports annotation collection;</t>
            </li>
            <li>
              <t>MUST evaluate "format" as an assertion;</t>
            </li>
            <li>
              <t>MUST implement syntactic validation for all format attributes defined
in this specification, and for any additional format attributes that
it recognizes, such that there exist possible input values
of the correct type that will fail validation.</t>
            </li>
          </ul>
          <t>The requirement for minimal validation of format attributes is intentionally
vague and permissive, due to the complexity involved in many of the attributes.
Note in particular that the requirement is limited to syntactic checking; it is
not to be expected that an implementation would send an email, attempt to connect
to a URL, or otherwise check the existence of an entity identified by a format
instance.<cref anchor="_17">The expectation is that for simple formats such as date-time, syntactic
   validation will be thorough.  For a complex format such as email addresses,
   which are the amalgamation of various standards and numerous adjustments
   over time, with obscure and/or obsolete rules that may or may not be
   restricted by other applications making use of the value, a minimal validation
   is sufficient.  For example, an input string that does not contain
   an "@" is clearly not a valid email address, and an "email" or "hostname"
   containing characters outside of 7-bit ASCII is likewise clearly invalid.</cref></t>
          <t>It is RECOMMENDED that implementations use a common parsing library for each format,
or a well-known regular expression.  Implementations SHOULD clearly document
how and to what degree each format attribute is validated.</t>
          <t>The standard core and validation meta-schema
includes this vocabulary in its "$vocabulary" keyword with a value of false,
since by default implementations are not required to support this keyword
as an assertion.  Supporting the format vocabulary with a value of true is
understood to greatly increase code size and in some cases execution time,
and will not be appropriate for all implementations.</t>
        </section>
        <section anchor="custom-format-attributes">
          <name>Custom format attributes</name>
          <t>Implementations MAY support custom format attributes. Save for agreement between
parties, schema authors SHALL NOT expect a peer implementation to support such
custom format attributes. An implementation MUST NOT fail to collect unknown formats
as annotations.  When the Format-Assertion vocabulary is specified, implementations
MUST fail upon encountering unknown formats.</t>
          <t>Vocabularies do not support specifically declaring different value sets for keywords.
Due to this limitation, and the historically uneven implementation of this keyword,
it is RECOMMENDED to define additional keywords in a custom vocabulary rather than
additional format attributes if interoperability is desired.</t>
        </section>
      </section>
      <section anchor="defined-formats">
        <name>Defined Formats</name>
        <section anchor="dates-times-and-duration">
          <name>Dates, Times, and Duration</name>
          <t>These attributes apply to string inputs.</t>
          <t>Date and time format names are derived from
<xref section="5.6" sectionFormat="comma" target="RFC3339"/>.
The duration format is from the ISO 8601 ABNF as given
in Appendix A of RFC 3339.</t>
          <t>Implementations supporting formats SHOULD implement support for
the following attributes:</t>
          <section anchor="date-time">
            <name>"date-time"</name>
            <t>A string input is valid against this attribute if it is
a valid representation according to the "date-time' ABNF rule
(referenced above).</t>
          </section>
          <section anchor="date">
            <name>"date"</name>
            <t>A string input is valid against this attribute if it is
a valid representation according to the "full-date" ABNF rule
(referenced above).</t>
          </section>
          <section anchor="time">
            <name>"time"</name>
            <t>A string input is valid against this attribute if it is
a valid representation according to the "full-time" ABNF rule
(referenced above).</t>
          </section>
          <section anchor="duration">
            <name>"duration"</name>
            <t>A string input is valid against this attribute if it is
a valid representation according to the "duration" ABNF rule
(referenced above).</t>
          </section>
          <section anchor="additional-rfc3339-formats">
            <name>Additional RFC3339 Formats</name>
            <t>Implementations MAY support additional attributes using the other
format names defined anywhere in that RFC.  If "full-date" or "full-time"
are implemented, the corresponding short form ("date" or "time"
respectively) MUST be implemented, and MUST behave identically.
Implementations SHOULD NOT define extension attributes
with any name matching an RFC 3339 format unless it validates
according to the rules of that format.<cref anchor="_18">There is not currently consensus on the need for supporting
   all RFC 3339 formats, so this approach of reserving the
   namespace will encourage experimentation without committing
   to the entire set.  Either the format implementation requirements
   will become more flexible in general, or these will likely
   either be promoted to fully specified attributes or dropped.</cref></t>
          </section>
        </section>
        <section anchor="email-addresses">
          <name>Email Addresses</name>
          <t>These attributes apply to string inputs.</t>
          <t>A string input is valid against these attributes if it is a valid
Internet email address as follows:</t>
          <section anchor="email">
            <name>"email"</name>
            <t>As defined by the "Mailbox" ABNF rule in
<xref section="4.1.2" sectionFormat="comma" target="RFC5321"/>.</t>
          </section>
          <section anchor="idn-email">
            <name>"idn-email"</name>
            <t>As defined by the extended "Mailbox" ABNF rule in
<xref section="3.3" sectionFormat="comma" target="RFC6531"/>.</t>
            <t>Note that all strings valid against the "email" attribute are also
valid against the "idn-email" attribute.</t>
          </section>
        </section>
        <section anchor="hostnames">
          <name>Hostnames</name>
          <t>These attributes apply to string inputs.</t>
          <t>A string input is valid against these attributes if it is a valid
representation for an Internet hostname as follows:</t>
          <section anchor="hostname">
            <name>"hostname"</name>
            <t>As defined by <xref section="2.1" sectionFormat="comma" target="RFC1123"/>,
including host names produced using the Punycode algorithm
specified in <xref section="4.4" sectionFormat="comma" target="RFC5891"/>.</t>
          </section>
          <section anchor="idn-hostname">
            <name>"idn-hostname"</name>
            <t>As defined by either RFC 1123 as for hostname, or an
internationalized hostname as defined by
<xref section="2.3.2.3" sectionFormat="comma" target="RFC5890"/>.</t>
            <t>Note that all strings valid against the "hostname" attribute are also
valid against the "idn-hostname" attribute.</t>
          </section>
        </section>
        <section anchor="ip-addresses">
          <name>IP Addresses</name>
          <t>These attributes apply to string inputs.</t>
          <t>A string input is valid against these attributes if it is a valid
representation of an IP address as follows:</t>
          <section anchor="ipv4">
            <name>"ipv4"</name>
            <t>An IPv4 address according to the "dotted-quad" ABNF
syntax as defined in
<xref section="3.2" sectionFormat="comma" target="RFC2673"/>.</t>
          </section>
          <section anchor="ipv6">
            <name>"ipv6"</name>
            <t>An IPv6 address as defined in
<xref section="2.2" sectionFormat="comma" target="RFC4291"/>.</t>
          </section>
        </section>
        <section anchor="resource-identifiers">
          <name>Resource Identifiers</name>
          <t>These attributes apply to string inputs.</t>
          <section anchor="uri">
            <name>"uri"</name>
            <t>A string input is valid against this attribute if it is
a valid URI, according to <xref section="3" sectionFormat="comma" target="RFC3986"/>.</t>
          </section>
          <section anchor="uri-reference">
            <name>"uri-reference"</name>
            <t>A string input is valid against this attribute if it is a valid URI
Reference (either a URI or a relative-reference),
according to <xref section="4" sectionFormat="comma" target="RFC3986"/>.</t>
          </section>
          <section anchor="iri">
            <name>"iri"</name>
            <t>A string input is valid against this attribute if it is
a valid IRI, according to <xref section="2.2" sectionFormat="comma" target="RFC3987"/>.</t>
          </section>
          <section anchor="iri-reference">
            <name>"iri-reference"</name>
            <t>A string input is valid against this attribute if it is a valid IRI
Reference (either an IRI or a relative-reference),
according to <xref section="2.2" sectionFormat="comma" target="RFC3987"/>.</t>
          </section>
          <section anchor="uuid">
            <name>"uuid"</name>
            <t>A string input is valid against this attribute if it is a valid
string representation of a UUID, according to <xref target="RFC4122"/>.</t>
            <t>Note that all valid URIs are valid IRIs, and all valid URI References are
also valid IRI References.</t>
            <t>Note also that the "uuid" format is for plain UUIDs, not UUIDs in URNs.  An example
is "f81d4fae-7dec-11d0-a765-00a0c91e6bf6".  For UUIDs as URNs, use the "uri" format,
with a "pattern" regular expression of "^urn:uuid:" to indicate the URI scheme and
URN namespace.</t>
          </section>
        </section>
        <section anchor="templates">
          <name>Templates</name>
          <section anchor="uri-template">
            <name>"uri-template"</name>
            <t>This attribute applies to string inputs.</t>
            <t>A string input is valid against this attribute if it is a valid URI Template
(of any level), according to <xref target="RFC6570"/>.</t>
            <t>Note that URI Templates may be used for IRIs; there is no separate
IRI Template specification.</t>
          </section>
        </section>
        <section anchor="json-pointers">
          <name>JSON Pointers</name>
          <t>These attributes apply to string inputs.</t>
          <t>To allow for both regular and relative JSON Pointers, use "anyOf" or
"oneOf" to indicate support for either format.</t>
          <section anchor="json-pointer">
            <name>"json-pointer"</name>
            <t>A string input is valid against this attribute if it
is a valid JSON string representation of a JSON Pointer,
according to <xref section="5" sectionFormat="comma" target="RFC6901"/>.</t>
          </section>
          <section anchor="relative-json-pointer">
            <name>"relative-json-pointer"</name>
            <t>A string input is valid against this attribute if it is a valid
<xref target="I-D.hha-relative-json-pointer"/>.</t>
          </section>
        </section>
        <section anchor="expressions">
          <name>Expressions</name>
          <section anchor="regex">
            <name>"regex"</name>
            <t>This attribute applies to string inputs.</t>
            <t>A regular expression, which SHOULD be valid according to the
<xref target="ECMA262"/> regular expression dialect.</t>
            <t>Implementations that validate formats MUST accept at least the subset of
ECMA-262 defined in <xref target="regex">Regular Expressions</xref>
section of this specification, and SHOULD accept all valid ECMA-262 expressions.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="content">
      <name>A Vocabulary for the Contents of String-Encoded Data</name>
      <section anchor="foreword-1">
        <name>Foreword</name>
        <t>Annotations defined in this section indicate that an instance contains
non-JSON data encoded in a JSON string.</t>
        <t>These properties provide additional information required to interpret JSON data
as rich multimedia documents.  They describe the type of content, how it is encoded,
and/or how it may be validated.  They do not function as validation assertions;
a malformed string-encoded document MUST NOT cause the containing instance
to be considered invalid.</t>
        <t>Meta-schemas that do not use "$vocabulary" SHOULD be considered to
require this vocabulary as if its URI were present with a value of true.</t>
        <t>The current URI for this vocabulary, known as the Content vocabulary, is:</t>
        <t>&lt;https://json-schema.org/draft/2020-12/vocab/content&gt;.</t>
        <t>The current URI for the corresponding meta-schema is:</t>
        <t><eref target="https://json-schema.org/draft/2020-12/meta/content">https://json-schema.org/draft/2020-12/meta/content</eref>.</t>
      </section>
      <section anchor="implementation-requirements-1">
        <name>Implementation Requirements</name>
        <t>Due to security and performance concerns, as well as the open-ended nature of
possible content types, implementations MUST NOT automatically decode, parse,
and/or validate the string contents by default.  This additionally supports
the use case of embedded documents intended for processing by a different
consumer than that which processed the containing document.</t>
        <t>All keywords in this section apply only to strings, and have no
effect on other data types.</t>
        <t>Implementations MAY offer the ability to decode, parse, and/or validate
the string contents automatically.  However, it MUST NOT perform these
operations by default, and MUST provide the validation result of each
string-encoded document separately from the enclosing document.  This
process SHOULD be equivalent to fully evaluating the input against
the original schema, followed by using the annotations to decode, parse,
and/or validate each string-encoded document.<cref anchor="_19">For now, the exact mechanism of performing and returning parsed
   data and/or validation results from such an automatic decoding, parsing,
   and validating feature is left unspecified.  Should such a feature
   prove popular, it may be specified more thoroughly in a future draft.</cref></t>
        <t>See also the <xref target="security">Security Considerations</xref>
sections for possible vulnerabilities introduced by automatically
processing inputs according to these keywords.</t>
      </section>
      <section anchor="contentencoding">
        <name>"contentEncoding"</name>
        <t>If the input value is a string, this property defines that the string
SHOULD be interpreted as encoded binary data and decoded using the encoding
named by this property.</t>
        <t>Possible values indicating base 16, 32, and 64 encodings with several
variations are listed in <xref target="RFC4648"/>.  Additionally,
sections 6.7 and 6.8 of <xref target="RFC2045"/> provide
encodings used in MIME. This keyword is derived from MIME's
Content-Transfer-Encoding header, which was designed to map binary data
into ASCII characters.  It is not related to HTTP's Content-Encoding header,
which is used to encode (e.g. compress or encrypt)
the content of HTTP request and responses.</t>
        <t>As "base64" is defined in both RFCs, the definition
from RFC 4648 SHOULD be assumed unless the string is specifically intended
for use in a MIME context.  Note that all of these encodings result in
strings consisting only of 7-bit ASCII characters.  Therefore, this keyword
has no meaning for strings containing characters outside of that range.</t>
        <t>If this keyword is absent, but "contentMediaType" is present, this
indicates that the encoding is the identity encoding, meaning that
no transformation was needed in order to represent the content in
a UTF-8 string.</t>
        <t>The value of this property MUST be a string.</t>
      </section>
      <section anchor="contentmediatype">
        <name>"contentMediaType"</name>
        <t>If the input value is a string, this property indicates the media type
of the contents of the string.  If "contentEncoding" is present,
this property describes the decoded string.</t>
        <t>The value of this property MUST be a string, which MUST be a media type,
as defined by <xref target="RFC2046"/>.</t>
      </section>
      <section anchor="contentschema">
        <name>"contentSchema"</name>
        <t>If the input value is a string, and if "contentMediaType" is present, this
property contains a schema which describes the structure of the string.</t>
        <t>This keyword MAY be used with any media type that can be mapped into
JSON Schema's data model.</t>
        <t>The value of this property MUST be a valid JSON schema. It SHOULD be ignored if
"contentMediaType" is not present.</t>
      </section>
      <section anchor="example">
        <name>Example</name>
        <t>Here is an example schema, illustrating the use of "contentEncoding" and
"contentMediaType":</t>
        <sourcecode type="json"><![CDATA[
{
    "type": "string",
    "contentEncoding": "base64",
    "contentMediaType": "image/png"
}
]]></sourcecode>
        <t>Instances described by this schema are expected to be strings,
and their values should be interpretable as base64-encoded PNG images.</t>
        <t>Another example:</t>
        <sourcecode type="json"><![CDATA[
{
    "type": "string",
    "contentMediaType": "text/html"
}
]]></sourcecode>
        <t>Instances described by this schema are expected to be strings containing HTML,
using whatever character set the JSON string was decoded into.
Per <xref section="8.1" sectionFormat="comma" target="RFC8259"/>, outside of an entirely closed
system, this MUST be UTF-8.</t>
        <t>This example describes a JWT that is MACed using the HMAC SHA-256
algorithm, and requires the "iss" and "exp" fields in its claim set.</t>
        <sourcecode type="json"><![CDATA[
{
    "type": "string",
    "contentMediaType": "application/jwt",
    "contentSchema": {
        "type": "array",
        "minItems": 2,
        "prefixItems": [
            {
                "const": {
                    "typ": "JWT",
                    "alg": "HS256"
                }
            },
            {
                "type": "object",
                "required": ["iss", "exp"],
                "properties": {
                    "iss": {"type": "string"},
                    "exp": {"type": "integer"}
                }
            }
        ]
    }
}
]]></sourcecode>
        <t>Note that "contentEncoding" does not appear.  While the "application/jwt"
media type makes use of base64url encoding, that is defined by the media
type, which determines how the JWT string is decoded into a list of two
JSON data structures: first the header, and then the payload.  Since the
JWT media type ensures that the JWT can be represented in a JSON string,
there is no need for further encoding or decoding.</t>
      </section>
    </section>
    <section anchor="a-vocabulary-for-basic-meta-data-annotations">
      <name>A Vocabulary for Basic Meta-Data Annotations</name>
      <t>These general-purpose annotation keywords provide commonly used information
for documentation and user interface display purposes.  They are not intended
to form a comprehensive set of features.  Rather, additional vocabularies
can be defined for more complex annotation-based applications.</t>
      <t>Meta-schemas that do not use "$vocabulary" SHOULD be considered to
require this vocabulary as if its URI were present with a value of true.</t>
      <t>The current URI for this vocabulary, known as the Meta-Data vocabulary, is:</t>
      <t>&lt;https://json-schema.org/draft/2020-12/vocab/meta-data&gt;.</t>
      <t>The current URI for the corresponding meta-schema is:</t>
      <t><eref target="https://json-schema.org/draft/2020-12/meta/meta-data">https://json-schema.org/draft/2020-12/meta/meta-data</eref>.</t>
      <section anchor="title-and-description">
        <name>"title" and "description"</name>
        <t>The value of both of these keywords MUST be a string.</t>
        <t>Both of these keywords can be used to decorate a user interface with
information about the data produced by this user interface. A title will
preferably be short, whereas a description will provide explanation about
the purpose of the instance described by this schema.</t>
      </section>
      <section anchor="default">
        <name>"default"</name>
        <t>There are no restrictions placed on the value of this keyword.  When
multiple occurrences of this keyword are applicable to a single
sub-instance, implementations SHOULD remove duplicates.</t>
        <t>This keyword can be used to supply a default JSON value associated with a
particular schema. It is RECOMMENDED that a default value be valid against
the associated schema.</t>
      </section>
      <section anchor="deprecated">
        <name>"deprecated"</name>
        <t>The value of this keyword MUST be a boolean.  When multiple occurrences
of this keyword are applicable to a single sub-instance, applications
SHOULD consider the instance location to be deprecated if any occurrence
specifies a true value.</t>
        <t>If "deprecated" has a value of boolean true, it indicates that applications
SHOULD refrain from usage of the declared property. It MAY mean the property
is going to be removed in the future.</t>
        <t>A root schema containing "deprecated" with a value of true indicates that
the entire resource being described MAY be removed in the future.</t>
        <t>The "deprecated" keyword applies to each instance location to which the
schema object containing the keyword successfully applies.  This can
result in scenarios where every array item or object property
is deprecated even though the containing array or object is not.</t>
        <t>Omitting this keyword has the same behavior as a value of false.</t>
      </section>
      <section anchor="readonly-and-writeonly">
        <name>"readOnly" and "writeOnly"</name>
        <t>The value of these keywords MUST be a boolean.  When multiple occurrences
of these keywords are applicable to a single sub-instance, the resulting
behavior SHOULD be as for a true value if any occurrence specifies a true value,
and SHOULD be as for a false value otherwise.</t>
        <t>If "readOnly" has a value of boolean true, it indicates that the value
of the instance is managed exclusively by the owning authority, and
attempts by an application to modify the value of this property are
expected to be ignored or rejected by that owning authority.</t>
        <t>An instance document that is marked as "readOnly" for the entire document
MAY be ignored if sent to the owning authority, or MAY result in an
error, at the authority's discretion.</t>
        <t>If "writeOnly" has a value of boolean true, it indicates that the value
is never present when the instance is retrieved from the owning authority.
It can be present when sent to the owning authority to update or create
the document (or the resource it represents), but it will not be included
in any updated or newly created version of the instance.</t>
        <t>An instance document that is marked as "writeOnly" for the entire document
MAY be returned as a blank document of some sort, or MAY produce an error
upon retrieval, or have the retrieval request ignored, at the authority's
discretion.</t>
        <t>For example, "readOnly" would be used to mark a database-generated serial
number as read-only, while "writeOnly" would be used to mark a password
input field.</t>
        <t>These keywords can be used to assist in user interface instance generation.
In particular, an application MAY choose to use a widget that hides
input values as they are typed for write-only fields.</t>
        <t>Omitting these keywords has the same behavior as values of false.</t>
      </section>
      <section anchor="examples">
        <name>"examples"</name>
        <t>The value of this keyword MUST be an array.
There are no restrictions placed on the values within the array.
When multiple occurrences of this keyword are applicable to a single
sub-instance, implementations MUST provide a flat array of all
values rather than an array of arrays.</t>
        <t>This keyword can be used to provide sample JSON values associated with a
particular schema, for the purpose of illustrating usage.  It is
RECOMMENDED that these values be valid against the associated schema.</t>
        <t>Implementations MAY use the value(s) of "default", if present, as
an additional example.  If "examples" is absent, "default"
MAY still be used in this manner.</t>
      </section>
    </section>
    <section anchor="loading-and-processing-schemas">
      <name>Loading and Processing Schemas</name>
      <section anchor="loading-a-schema">
        <name>Loading a Schema</name>
        <section anchor="initial-base">
          <name>Initial Base URI</name>
          <t><xref section="5.1" sectionFormat="comma" target="RFC3986"/> defines how to determine the
default base URI of a document.</t>
          <t>Informatively, the initial base URI of a schema is the URI at which it was
found, whether that was a network location, a local filesystem, or any other
situation identifiable by a URI of any known scheme.</t>
          <t>If a schema document defines no explicit base URI with "$id"
(embedded in content), the base URI is that determined per
<xref section="5" sectionFormat="comma" target="RFC3986"/>.</t>
          <t>If no source is known, or no URI scheme is known for the source, a suitable
implementation-specific default URI MAY be used as described in
<xref section="5.1.4" sectionFormat="comma" target="RFC3986"/>.  It is RECOMMENDED
that implementations document any default base URI that they assume.</t>
          <t>If a schema object is embedded in a document of another media type, then
the initial base URI is determined according to the rules of that
media type.</t>
          <t>Unless the "$id" keyword described in an earlier section is present in the
root schema, this base URI SHOULD be considered the canonical URI of the
schema document's root schema resource.</t>
        </section>
        <section anchor="loading-schemas">
          <name>Loading a referenced schema</name>
          <t>Although it's impossible to cover all use cases, we start by assuming
that an implementation given a schema with references to other schemas
not in the same document can be given instructions about those other
documents, and the implementation therefore SHOULD NOT automatically
dereference network locations or search the network for schemas not
already loaded in.</t>
          <t>What should implementations do when the referenced schema is not known?
The implementation could have error messages, flags or UX to explicitly
get instructions to fetch a schema or to signal that it should be
configured differently.  The examples
from HTTP of same-origin policies would seem relevant here too, but
such a feature has not yet been defined for JSON Schema.</t>
          <t>Some use cases may involve schema definitions that regularly are extended or
updated by reference.  For example, a service hosting an evolving API might
include documentation and requirements via JSON schemas,
and the schemas might be intended for
dynamic fetching and inclusion of sub-schemas, so placing an absolute
requirement of pre-loading schema documents is not feasible.</t>
          <t>When schemas are downloaded,
for example by a generic user-agent that does not know until runtime which schemas to download,
see <xref target="hypermedia">Usage for Hypermedia</xref>.</t>
          <t>Implementations SHOULD be able to associate arbitrary URIs with an arbitrary
schema and/or automatically associate a schema's "$id"-given URI, depending
on the trust that the implementation has in the schema.  Such URIs and schemas
can be supplied to an implementation prior to processing instances, or may
be noted within a schema document as it is processed, producing associations
as shown in <xref target="id-examples"/>.</t>
          <t>A schema MAY (and likely will) have multiple URIs, but there is no way for a
URI to identify more than one schema. When multiple schemas try to identify
as the same URI, an implementation SHOULD raise an error condition.</t>
        </section>
        <section anchor="detecting-a-meta-schema">
          <name>Detecting a Meta-Schema</name>
          <t>Implementations MUST recognize a schema as a meta-schema if it
is being examined because it was identified as such by another
schema's "$schema" keyword.  This means that a single schema
document might sometimes be considered a regular schema, and
other times be considered a meta-schema.</t>
          <t>In the case of examining a schema which is its own meta-schema,
when an implementation begins processing it as a regular schema,
it is processed under those rules.  However, when loaded a second
time as a result of checking its own "$schema" value, it is treated
as a meta-schema.  So the same document is processed both ways in
the course of one session.</t>
          <t>Implementations MAY allow a schema to be explicitly passed as a meta-schema,
for implementation-specific purposes, such as pre-loading a commonly
used meta-schema and checking its vocabulary support requirements
up front.  Meta-schema authors MUST NOT expect such features to be
interoperable across implementations.</t>
        </section>
      </section>
      <section anchor="dereferencing">
        <name>Dereferencing</name>
        <t>Schemas can be identified by any URI that has been given to them, including
a JSON Pointer or their URI given directly by "$id".  In all cases,
dereferencing a "$ref" reference involves first resolving its value as a
URI reference against the current base URI per
<xref target="RFC3986"/>.</t>
        <t>If the resulting URI identifies a schema within the current document, or
within another schema document that has been made available to the implementation,
then that schema SHOULD be used automatically.</t>
        <t>For example, consider this schema:</t>
        <sourcecode type="json"><![CDATA[
{
    "$id": "https://example.net/root.json",
    "items": {
        "type": "array",
        "items": { "$ref": "#item" }
    },
    "$defs": {
        "single": {
            "$anchor": "item",
            "type": "object",
            "additionalProperties": { "$ref": "other.json" }
        }
    }
}
]]></sourcecode>
        <t>In this example, when an implementation encounters the &lt;#/$defs/single&gt; schema,
it resolves the "$anchor" value as a fragment name against the current
base URI to form &lt;https://example.net/root.json#item&gt;.</t>
        <t>When an implementation then looks inside the &lt;#/items&gt; schema, it
encounters the &lt;#item&gt; reference, and resolves this to
&lt;https://example.net/root.json#item&gt;, which it has seen defined in
this same document and can therefore use automatically.</t>
        <t>When an implementation encounters the reference to "other.json", it resolves
this to &lt;https://example.net/other.json&gt;, which is not defined in this
document.  If a schema with that identifier has otherwise been supplied to
the implementation, it can also be used automatically.</t>
        <section anchor="relative-refs">
          <name>Relative References</name>
          <t>Many hypermedia contexts (like HTML) make use of full URIs, anchors/names, and
<em>relative references</em> (<xref section="5.1" sectionFormat="comma" target="RFC3986"/>).
In JSON Schema, different contexts and use cases may make any
of these three approaches the most convenient and least brittle; but relative
references do require the most care in implementations.</t>
          <t>A fully conformant implementation MUST handle relative references, with the
following guidance hopefully
keeping implementation logic and overhead to a reasonable level.
A schema's $id acts as a base URI (see <xref section="5.1.1" sectionFormat="comma" target="RFC3986"/>) for
relative references within the schema.</t>
          <t>In accordance with <xref section="5.1.2" sectionFormat="comma" target="RFC3986"/>
regarding encapsulating entities, if an "$id" in a subschema is a relative
reference, the base URI for resolving that reference is the URI of
the parent schema resource.</t>
          <t>If no parent schema object explicitly identifies itself as a resource
with "$id", the base URI is that of the entire document, as established
by the steps given in <xref target="initial-base"/>.</t>
        </section>
        <section anchor="embedded">
          <name>JSON Pointer fragments and embedded schema resources</name>
          <t>JSON Pointer URI fragments are constructed based on the structure
of the schema document, allowing an embedded schema resource and its subschemas
to be identified by JSON Pointer fragments relative to either its own
canonical URI, or relative to any containing resource's URI.</t>
          <t>Conceptually, a set of linked schema resources should behave
identically whether each resource is a separate document connected with
<xref target="refs">schema references</xref>, or is structured as
a single document with one or more schema resources embedded as
subschemas.</t>
          <t>Since URIs involving JSON Pointer fragments relative to the parent
schema resource's URI cease to be valid when the embedded schema
is moved to a separate document and referenced, applications and schemas
SHOULD NOT use such URIs to identify embedded schema resources or
locations within them.</t>
          <t>Consider the following schema document that contains another
schema resource embedded within it:</t>
          <sourcecode type="json"><![CDATA[
{
  "$id": "https://example.com/foo",
  "items": {
    "$id": "https://example.com/bar",
    "additionalProperties": { }
  }
}
]]></sourcecode>
          <t>The URI "https://example.com/foo#/items" points to the "items" schema,
which is an embedded resource.  The canonical URI of that schema
resource, however, is "https://example.com/bar".</t>
          <t>For the "additionalProperties" schema within that embedded resource,
the URI "https://example.com/foo#/items/additionalProperties" points
to the correct object, but that object's URI relative to its resource's
canonical URI is "https://example.com/bar#/additionalProperties".</t>
          <t>Now consider the following two schema resources linked by reference
using a URI value for "$ref":</t>
          <sourcecode type="json"><![CDATA[
{
  "$id": "https://example.com/foo",
  "items": {
    "$ref": "bar"
  }
}
]]></sourcecode>
          <sourcecode type="json"><![CDATA[
{
  "$id": "https://example.com/bar",
  "additionalProperties": { }
}
]]></sourcecode>
          <t>Here we see that "https://example.com/bar#/additionalProperties",
using a JSON Pointer fragment appended to the canonical URI of
the "bar" schema resource, is still valid, while
"https://example.com/foo#/items/additionalProperties", which relied
on a JSON Pointer fragment appended to the canonical URI of the
"foo" schema resource, no longer resolves to anything.</t>
          <t>Note also that "https://example.com/foo#/items" is valid in both
arrangements, but resolves to a different value.  This URI ends up
functioning similarly to a retrieval URI for a resource.  While this URI
is valid, it is more robust to use the "$id" of the embedded or referenced
resource unless it is specifically desired to identify the object containing
the "$ref" in the second (non-embedded) arrangement.</t>
          <t>An implementation MAY choose not to support addressing schema resource
contents by URIs using a base other than the resource's canonical URI,
plus a JSON Pointer fragment relative to that base.  Therefore, schema
authors SHOULD NOT rely on such URIs, as using them may reduce interoperability.<cref anchor="_9">This is to avoid requiring implementations to keep track of a whole
  stack of possible base URIs and JSON Pointer fragments for each,
  given that all but one will be fragile if the schema resources
  are reorganized.  Some
  have argued that this is easy so there is
  no point in forbidding it, while others have argued that it complicates
  schema identification and should be forbidden.  Feedback on this
  topic is encouraged.
  After some discussion, we feel that we need to remove the use of
  "canonical" in favour of talking about JSON Pointers which reference
  across schema resource boundaries as undefined or even forbidden behavior
  (https://github.com/json-schema-org/json-schema-spec/issues/937,
  https://github.com/json-schema-org/json-schema-spec/issues/1183)</cref></t>
          <t>Further examples of such non-canonical URI construction, as well as
the appropriate canonical URI-based fragments to use instead,
are provided in <xref target="id-examples"/>.</t>
        </section>
      </section>
      <section anchor="compound-documents">
        <name>Compound Documents</name>
        <t>A Compound Schema Document is defined as a JSON document (sometimes called a "bundled" schema)
which has multiple embedded JSON Schema Resources bundled into the same document to
ease transportation.</t>
        <t>Each embedded Schema Resource MUST be treated as an individual Schema Resource, following standard
schema loading and processing requirements, including determining vocabulary support.</t>
        <section anchor="bundling">
          <name>Bundling</name>
          <t>The bundling process for creating a Compound Schema Document is defined as taking
references (such as "$ref") to an external Schema Resource and embedding the referenced
Schema Resources within the referring document. Bundling SHOULD be done in such a way that
all URIs (used for referencing) in the base document and any referenced/embedded
documents do not require altering.</t>
          <t>Each embedded JSON Schema Resource MUST identify itself with a URI using the "$id" keyword,
and SHOULD make use of the "$schema" keyword to identify the dialect it is using, in the root of the
schema resource. It is RECOMMENDED that the URI identifier value of "$id" be an absolute URI.</t>
          <t>When the Schema Resource referenced by a by-reference applicator is bundled, it is RECOMMENDED that
the Schema Resource be located as a value of a "$defs" object at the containing schema's root.
The key of the "$defs" for the now embedded Schema Resource MAY be the "$id" of the bundled schema
or some other form of application defined unique identifer (such as a UUID). This key is not
intended to be referenced in JSON Schema, but may be used by an application to aid the
bundling process.</t>
          <t>A Schema Resource MAY be embedded in a location other than "$defs" where the location is defined
as a schema value.</t>
          <t>A Bundled Schema Resource MUST NOT be bundled by replacing the schema object from which it was
referenced, or by wrapping the Schema Resource in other applicator keywords.</t>
          <t>In order to produce identical output, references in the containing schema document to the
previously external Schema Resources MUST NOT be changed, and now resolve to a schema using the
"$id" of an embedded Schema Resource. Such identical output includes validation evaluation and URIs
or paths used in resulting annotations or errors.</t>
          <t>While the bundling process will often be the main method for creating a Compound Schema Document,
it is also possible and expected that some will be created by hand, potentially without individual
Schema Resources existing on their own previously.</t>
        </section>
        <section anchor="differing-and-default-dialects">
          <name>Differing and Default Dialects</name>
          <t>When multiple schema resources are present in a single document,
schema resources which do not define with which dialect they should be processed
MUST be processed with the same dialect as the enclosing resource.</t>
          <t>Since any schema that can be referenced can also be embedded, embedded schema resources MAY
specify different processing dialects using the "$schema" values from their enclosing resource.</t>
        </section>
        <section anchor="validating">
          <name>Validating</name>
          <t>Given that a Compound Schema Document may have embedded resources which identify as using different
dialects, these documents SHOULD NOT be validated by applying a meta-schema
to the Compound Schema Document as an instance. It is RECOMMENDED that an alternate
validation process be provided in order to validate Schema Documents. Each Schema Resource
SHOULD be separately validated against its associated meta-schema.<cref anchor="_10">If you know a schema is what's being validated, you can identify if the schemas
   is a Compound Schema Document or not, by way of use of "$id", which identifies an
   embedded resource when used not at the document's root.</cref></t>
          <t>A Compound Schema Document in which all embedded resources identify as using the same
dialect, or in which "$schema" is omitted and therefore defaults to that of the enclosing resource,
MAY be validated by applying the appropriate meta-schema.</t>
        </section>
      </section>
      <section anchor="caveats">
        <name>Caveats</name>
        <section anchor="guarding-against-infinite-recursion">
          <name>Guarding Against Infinite Recursion</name>
          <t>A schema MUST NOT be run into an infinite loop evaluating input. For
example, if two schemas "#alice" and "#bob" both have an "allOf" property
that refers to the other, a naive implementation might get stuck in an infinite
recursive loop trying to validate the input.  Schemas SHOULD NOT make
use of infinite recursive nesting like this; the behavior is undefined.</t>
        </section>
        <section anchor="non-schemas">
          <name>References to Possible Non-Schemas"</name>
          <t>Subschema objects (or booleans) are recognized by their use with known
applicator keywords or with location-reserving keywords such as
<xref target="defs">"$defs"</xref> that take one or more subschemas
as a value.  These keywords may be "$defs" and the standard applicators
from this document, or extension keywords from a known vocabulary, or
implementation-specific custom keywords.</t>
          <t>Multi-level structures of unknown keywords are capable of introducing
nested subschemas, which would be subject to the processing rules for
"$id".  Therefore, having a reference target in such an unrecognized
structure cannot be reliably implemented, and the resulting behavior
is undefined.  Similarly, a reference target under a known keyword,
for which the value is known not to be a schema, results in undefined
behavior in order to avoid burdening implementations with the need
to detect such targets.<cref anchor="_11">These scenarios are analogous to fetching a schema over HTTP
   but receiving a response with a Content-Type other than
   application/schema+json.  An implementation can certainly
   try to interpret it as a schema, but the origin server
   offered no guarantee that it actually is any such thing.
   Therefore, interpreting it as such has security implications
   and may produce unpredictable results.</cref></t>
          <t>Note that single-level custom keywords with identical syntax and
semantics to "$defs" do not allow for any intervening "$id" keywords,
and therefore will behave correctly under implementations that attempt
to use any reference target as a schema.  However, this behavior is</t>
        </section>
      </section>
      <section anchor="hypermedia">
        <name>RESTful / Hypermedia Schema References</name>
        <t>JSON and JSON schemas are not always used for HTTP
resources or other hypermedia resources, and
the rest of this document assumes no one protocol, nor does it even assume
network access.  However since HTTP resources in JSON with JSON Schemas
to describe them are pretty common in Web APIs, this section
describes how to process JSON documents in a more RESTful
manner when using protocols that support media types and
Web linking (<xref target="RFC8288"/>).</t>
        <section anchor="linking-to-a-schema">
          <name>Linking to a Schema</name>
          <t>It is RECOMMENDED that instances described by a schema provide a link to
a downloadable JSON Schema using the link relation "describedby", as defined by
Linked Data Protocol 1.0, (<xref target="LDP"/> Section 8.1.</t>
          <t>In HTTP, such links can be attached to any response using the
Link header (<xref target="RFC8288"/>). An example of such a header would be:</t>
          <artwork><![CDATA[
        Link: <https://example.com/my-hyper-schema>; rel="describedby"
]]></artwork>
        </section>
        <section anchor="usage-over-http">
          <name>Usage Over HTTP</name>
          <t>When used for hypermedia systems over a network,
HTTP (<xref target="RFC9110"/>) is frequently the protocol of choice for
distributing schemas. Misbehaving clients can pose problems for server
maintainers if they pull a schema over the network more frequently than
necessary, when it's instead possible to cache a schema for a long period of
time.</t>
          <t>HTTP servers SHOULD set long-lived caching headers on JSON Schemas.
HTTP clients SHOULD observe caching headers and not re-request documents within
their freshness period.
Distributed systems SHOULD make use of a shared cache and/or caching proxy.</t>
          <t>Clients SHOULD set or prepend a User-Agent header specific to the JSON Schema
implementation or software product. Since symbols are listed in decreasing order
of significance, the JSON Schema library name/version should precede the more
generic HTTP library name (if any). For example:</t>
          <artwork><![CDATA[
        User-Agent: product-name/5.4.1 so-cool-json-schema/1.0.2 curl/7.43.0
]]></artwork>
          <t>Clients SHOULD be able to make requests with a "From" header so that server
operators can contact the owner of a potentially misbehaving script.</t>
        </section>
      </section>
    </section>
    <section anchor="keyword-behaviors">
      <name>Keyword Behaviors</name>
      <t>JSON Schema keywords fall into several general behavior categories.
Assertions validate that an instance satisfies constraints, producing
a boolean result.  Annotations attach information that applications
may use in any way they see fit.
Applicators apply subschemas to parts of input and combine
their results.</t>
      <t>Extension keywords SHOULD stay within these categories, keeping in mind
that annotations in particular are extremely flexible.  Complex behavior
is usually better delegated to applications on the basis of annotation
data than implemented directly as schema keywords.  However, extension
keywords MAY define other behaviors for specialized purposes.</t>
      <t>Evaluating an input against a schema involves processing all of the
keywords in the schema against the appropriate locations within the input.
Typically, applicator keywords are processed until a schema object with no
applicators (and therefore no subschemas) is reached.  The appropriate
location in the input is evaluated against the assertion and
annotation keywords in the schema object.
The interactions of those keyword results to produce the schema object
results are governed by <xref target="annot-assert"/>, while the
relationship of subschema results to the results of the applicator
keyword that applied them is described by <xref target="applicators"/>.</t>
      <t>Evaluation of a parent schema object can complete once all of its
subschemas have been evaluated, although in some circumstances evaluation
may be short-circuited due to assertion results.  When annotations are
being collected, some assertion result short-circuiting is not possible
due to the need to examine all subschemas for annotation collection, including
those that cannot further change the assertion result.</t>
      <section anchor="scopes">
        <name>Lexical Scope and Dynamic Scope</name>
        <t>While most JSON Schema keywords can be evaluated on their own,
or at most need to take into account the values or results of
adjacent keywords in the same schema object, a few have more
complex behavior.</t>
        <t>The lexical scope of a keyword is determined by the nested JSON
data structure of objects and arrays.  The largest such scope
is an entire schema document.  The smallest scope is a single
schema object with no subschemas.</t>
        <t>Keywords MAY be defined with a partial value, such as a URI-reference,
which must be resolved against another value, such as another
URI-reference or a full URI, which is found through the lexical
structure of the JSON document.  The "$id", "$ref", and
"$dynamicRef" core keywords, and the "base" JSON Hyper-Schema
keyword, are examples of this sort of behavior.</t>
        <t>Note that some keywords, such as "$schema", apply to the lexical
scope of the entire schema resource, and therefore MUST only
appear in a schema resource's root schema.</t>
        <t>Other keywords may take into account the dynamic scope that
exists during the evaluation of a schema, typically together
with an input document.
The outermost dynamic scope is the schema object at
which processing begins, even if it is not a schema resource root.
The path from this root schema to any particular keyword (that
includes any "$ref" and "$dynamicRef" keywords that may have
been resolved) is considered the keyword's "validation path."</t>
        <t>Lexical and dynamic scopes align until a reference keyword
is encountered.  While following the reference keyword moves processing
from one lexical scope into a different one, from the perspective
of dynamic scope, following a reference is no different from descending
into a subschema present as a value.  A keyword on the far side of
that reference that resolves information through the dynamic scope
will consider the originating side of the reference to be their
dynamic parent, rather than examining the local lexically enclosing parent.</t>
        <t>The concept of dynamic scope is primarily used with "$dynamicRef" and
"$dynamicAnchor", and should be considered an advanced feature
and used with caution when defining additional keywords.  It also appears
when reporting errors and collected annotations, as it may be possible
to revisit the same lexical scope repeatedly with different dynamic
scopes.  In such cases, it is important to inform the user of the
dynamic path that produced the error or annotation.</t>
      </section>
      <section anchor="keyword-interactions">
        <name>Keyword Interactions</name>
        <t>Keyword behavior MAY be defined in terms of the annotation results
of <xref target="root">subschemas</xref> and/or adjacent keywords
(keywords within the same schema object) and their subschemas.
Such keywords MUST NOT result in a circular dependency.
Keywords MAY modify their behavior based on the presence or absence
of another keyword in the same
<xref target="schema-document">schema object</xref>.</t>
      </section>
      <section anchor="default-behaviors">
        <name>Default Behaviors</name>
        <t>A missing keyword MUST NOT produce a false assertion result, MUST
NOT produce annotation results, and MUST NOT cause any other schema
to be evaluated as part of its own behavioral definition.
However, given that missing keywords do not contribute annotations,
the lack of annotation results may indirectly change the behavior
of other keywords.</t>
        <t>In some cases, the missing keyword assertion behavior of a keyword is
identical to that produced by a certain value, and keyword definitions
SHOULD note such values where known.  However, even if the value which
produces the default behavior would produce annotation results if
present, the default behavior still MUST NOT result in annotations.</t>
        <t>Because annotation collection can add significant cost in terms of both
computation and memory, implementations MAY opt out of this feature.
Keywords that are specified in terms of collected annotations SHOULD
describe reasonable alternate approaches when appropriate.
This approach is demonstrated by the
<xref format="title" target="items"/> and
<xref format="title" target="additionalProperties"/> keywords in this
document.</t>
        <t>Note that when no such alternate approach is possible for a keyword,
implementations that do not support annotation collections will not
be able to support those keywords or vocabularies that contain them.</t>
      </section>
      <section anchor="unrecognized">
        <name>Handling unrecognized or unsupported keywords</name>
        <t>Implementations SHOULD treat keywords they do not recognize, or that
they recognize but do not support, as annotations, where the value of
the keyword is the value of the annotation.  Whether an implementation
collects these annotations or not, they MUST otherwise ignore the keywords.</t>
      </section>
      <section anchor="identifiers">
        <name>Identifiers</name>
        <t>Identifiers define URIs for a schema, or affect how such URIs are
resolved in <xref target="refs">schema references</xref>, or both.
The Core vocabulary defined in this document defines several
identifying keywords, most notably "$id".</t>
        <t>Canonical schema URIs MUST NOT change while processing an input, but
keywords that affect URI-reference resolution MAY have behavior that
is only fully determined at runtime.</t>
        <t>While custom identifier keywords are possible, vocabulary designers should
take care not to disrupt the functioning of core keywords. For example,
the "$dynamicAnchor" keyword in this specification limits its URI resolution
effects to the matching "$dynamicRef" keyword, leaving the behavior
of "$ref" undisturbed.</t>
      </section>
      <section anchor="applicators">
        <name>Applicators</name>
        <t>Applicators allow for building more complex schemas than can be accomplished
with a single schema object.  Evaluation of an input against a
<xref target="schema-document">schema document</xref> begins by applying
the <xref target="root">root schema</xref> to the complete input
document.  From there, keywords known as applicators are used to determine
which additional schemas are applied.  Such schemas may be applied in-place
to the current location, or to a child location.</t>
        <t>The schemas to be applied may be present as subschemas comprising all or
part of the keyword's value.  Alternatively, an applicator may refer to
a schema elsewhere in the same schema document, or in a different one.
The mechanism for identifying such referenced schemas is defined by the
keyword.</t>
        <t>Applicator keywords also define how subschema or referenced schema
boolean <xref target="assertions">assertion</xref>
results are modified and/or combined to produce the boolean result
of the applicator.  Applicators may apply any boolean logic operation
to the assertion results of subschemas, but MUST NOT introduce new
assertion conditions of their own.</t>
        <t><xref target="annotations">Annotation</xref> results from subschemas
are preserved in accordance with <xref target="collect"/>
so that applications can decide how to interpret multiple values.
Applicator keywords do not play a direct role in this preservation.</t>
        <t>Annotation results
are preserved along with the instance location and the location of
the schema keyword, so that applications can decide how to
interpret multiple values.</t>
        <section anchor="referenced-and-referencing-schemas">
          <name>Referenced and Referencing Schemas</name>
          <t>As noted in <xref target="applicators"/>, an applicator keyword may
refer to a schema to be applied, rather than including it as a
subschema in the applicator's value.  In such situations, the
schema being applied is known as the referenced schema, while
the schema containing the applicator keyword is the referencing schema.</t>
          <t>While root schemas and subschemas are static concepts based on a
schema's position within a schema document, referenced and referencing
schemas are dynamic.  Different pairs of schemas may find themselves
in various referenced and referencing arrangements during the evaluation
of input against a schema.</t>
          <t>For some by-reference applicators, such as
<xref target="refs">"$ref"</xref>, the referenced schema can be determined
by static analysis of the schema document's lexical scope.  Others,
such as "$dynamicRef" (with "$dynamicAnchor"), may make use of dynamic
scoping, and therefore only be resolvable in the process of evaluating
an input with the schema.</t>
        </section>
      </section>
      <section anchor="assertions">
        <name>Assertions</name>
        <t>JSON Schema can be used to assert constraints on a JSON document, which
either passes or fails the assertions.  This approach can be used to validate
conformance with the constraints, or document what is needed to satisfy them.</t>
        <t>JSON Schema implementations produce a single boolean result when evaluating
an input against schema assertions.</t>
        <t>An input can only fail an assertion that is present in the schema.</t>
        <section anchor="assertions-and-input-primitive-types">
          <name>Assertions and Input Primitive Types</name>
          <t>Most assertions only constrain values within a certain
primitive type.  When the type of the input is not of the type
targeted by the keyword, the input is considered to conform
to the assertion.</t>
          <t>For example, the "maxLength" keyword from the companion
validation vocabulary (<xref target="I-D.bhutton-json-schema-validation"/>):
will only restrict certain strings
(that are too long) from being valid.  If the input is a number,
boolean, null, array, or object, then it is valid against this assertion.</t>
          <t>This behavior allows keywords to be used more easily with inputs
that can be of multiple primitive types.  The companion validation
vocabulary also includes a "type" keyword which can independently
restrict the input to one or more primitive types.  This allows
for a concise expression of use cases such as a function that might
return either a string of a certain length or a null value:</t>
          <sourcecode type="json"><![CDATA[
{
    "type": ["string", "null"],
    "maxLength": 255
}
]]></sourcecode>
          <t>If "maxLength" also restricted the input type to be a string,
then this would be substantially more cumbersome to express because
the example as written would not actually allow null values.
Each keyword is evaluated separately unless explicitly specified
otherwise, so if "maxLength" restricted the input to strings,
then including "null" in "type" would not have any useful effect.</t>
        </section>
      </section>
      <section anchor="annotations">
        <name>Annotations</name>
        <t>JSON Schema can annotate an instance with information, whenever the instance
validates against the schema object containing the annotation, and all of its
parent schema objects.  The information can be a simple value, or can be
calculated based on the instance contents.</t>
        <t>Annotations are attached to specific locations in an instance.
Since many subschemas can be applied to any single
location, applications may need to decide how to handle differing
annotation values being attached to the same instance location by
the same schema keyword in different schema objects.</t>
        <t>Unlike assertion results, annotation data can take a wide variety of forms,
which are provided to applications to use as they see fit.  JSON Schema
implementations are not expected to make use of the collected information
on behalf of applications.</t>
        <t>Unless otherwise specified, the value of an annotation keyword
is the keyword's value.  However, other behaviors are possible.
For example, JSON Hyper-Schema's (<xref target="I-D.handrews-json-schema-hyperschema"/>)
"links" keyword is a complex annotation that produces a value based
in part on the instance data.</t>
        <t>While "short-circuit" evaluation is possible for assertions, collecting
annotations requires examining all schemas that apply to an instance
location, even if they cannot change the overall assertion result.
The only exception is that subschemas of a schema object that has
failed validation MAY be skipped, as annotations are not retained
for failing schemas.</t>
        <section anchor="collect">
          <name>Collecting Annotations</name>
          <t>Annotations are collected by keywords that explicitly define
annotation-collecting behavior.  Note that boolean schemas cannot
produce annotations as they do not make use of keywords.</t>
          <t>A collected annotation MUST include the following information:</t>
          <ul spacing="normal">
            <li>
              <t>The name of the keyword that produces the annotation</t>
            </li>
            <li>
              <t>The instance location to which it is attached, as a JSON Pointer</t>
            </li>
            <li>
              <t>The schema location path, indicating how reference keywords
such as "$ref" were followed to reach the absolute schema location.</t>
            </li>
            <li>
              <t>The absolute schema location of the attaching keyword, as a URI.
This MAY be omitted if it is the same as the schema location path
from above.</t>
            </li>
            <li>
              <t>The attached value(s)</t>
            </li>
          </ul>
          <section anchor="distinguishing-among-multiple-values">
            <name>Distinguishing Among Multiple Values</name>
            <t>Applications MAY make decisions on which of multiple annotation values
to use based on the schema location that contributed the value.
This is intended to allow flexible usage.  Collecting the schema location
facilitates such usage.</t>
            <t>For example, consider this schema, which uses annotations and assertions from
the validation specification (<xref target="I-D.bhutton-json-schema-validation"/>):</t>
            <t>Note that some lines are wrapped for clarity.</t>
            <sourcecode type="json"><![CDATA[
{
  "title": "Feature list",
  "type": "array",
  "prefixItems": [
    {
      "title": "Feature A",
      "properties": {
        "enabled": {
          "$ref": "#/$defs/enabledToggle",
          "default": true
        }
      }
    },
    {
      "title": "Feature B",
      "properties": {
        "enabled": {
          "description": "If set to null, Feature B inherits the enabled value from Feature A",
          "$ref": "#/$defs/enabledToggle"
        }
      }
    }
  ],
  "$defs": {
    "enabledToggle": {
      "title": "Enabled",
      "description": "Whether the feature is enabled (true), disabled (false), or under automatic control (null)",
      "type": ["boolean", "null"],
      "default": null
    }
  }
}
]]></sourcecode>
            <t>In this example, both Feature A and Feature B make use of the re-usable
"enabledToggle" schema.  That schema uses the "title", "description",
and "default" annotations.  Therefore the application has to decide how
to handle the additional "default" value for Feature A, and the additional
"description" value for Feature B.</t>
            <t>The application programmer and the schema author need to agree on the
usage.  For this example, let's assume that they agree that the most
specific "default" value will be used, and any additional, more generic
"default" values will be silently ignored.  Let's also assume that they
agree that all "description" text is to be used, starting with the most
generic, and ending with the most specific.  This requires the schema
author to write descriptions that work when combined in this way.</t>
            <t>The application can use the schema location path to determine which
values are which.  The values in the feature's immediate "enabled"
property schema are more specific, while the values under the re-usable
schema that is referenced to with "$ref" are more generic.  The schema
location path will show whether each value was found by crossing a
"$ref" or not.</t>
            <t>Feature A will therefore use a default value of true, while Feature B
will use the generic default value of null.  Feature A will only
have the generic description from the "enabledToggle" schema, while
Feature B will use that description, and also append its locally
defined description that explains how to interpret a null value.</t>
            <t>Note that there are other reasonable approaches that a different application
might take.  For example, an application may consider the presence of
two different values for "default" to be an error, regardless of their
schema locations.</t>
          </section>
          <section anchor="annot-assert">
            <name>Annotations and Assertions</name>
            <t>Schema objects that produce a false assertion result MUST NOT
produce any annotation results, whether from their own keywords
or from keywords in subschemas.</t>
            <t>Note that the overall schema results may still include annotations
collected from other schema locations.  Given this schema:</t>
            <sourcecode type="json"><![CDATA[
{
    "oneOf": [
        {
            "title": "Integer Value",
            "type": "integer"
        },
        {
            "title": "String Value",
            "type": "string"
        }
    ]
}
]]></sourcecode>
            <t>Against the input <tt>"This is a string"</tt>, the
title annotation "Integer Value" is discarded because the type assertion
in that schema object fails.  The title annotation "String Value"
is kept, as the input passes the string type assertions.</t>
          </section>
        </section>
      </section>
      <section anchor="reserved-locations">
        <name>Reserved Locations</name>
        <t>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.  These keywords do not affect validation or annotation results.
Their purpose in the core vocabulary is to ensure that locations are
available for certain purposes and will not be redefined by extension
keywords.</t>
        <t>While these keywords do not directly affect results, as explained in
<xref target="non-schemas"/> unrecognized
extension keywords that reserve locations for re-usable schemas may have
undesirable interactions with references in certain circumstances.</t>
      </section>
      <section anchor="loading-input-data">
        <name>Loading Input Data</name>
        <t>While none of the vocabularies defined as part of this or the associated documents
define a keyword which may target and/or load input data, it is possible that
other vocabularies may wish to do so.</t>
        <t>Keywords MAY be defined to use JSON Pointers or Relative JSON Pointers to examine
parts of an input outside the current evaluation location.</t>
        <t>Keywords that allow adjusting the location using a Relative JSON Pointer SHOULD
default to using the current location if a default is desireable.</t>
      </section>
    </section>
    <section anchor="output-formatting">
      <name>Output Formatting</name>
      <t>JSON Schema is defined to be platform-independent.  As such, to increase compatibility
across platforms, implementations SHOULD conform to a standard validation output
format.  This section describes the minimum requirements that consumers will need to
properly interpret validation results.</t>
      <section anchor="format">
        <name>Format</name>
        <t>JSON Schema output is defined using the JSON Schema data model.
Implementations MAY deviate from this as supported by their
specific languages and platforms, however it is RECOMMENDED that the output be
convertible to the JSON format defined herein via serialization or other means.</t>
      </section>
      <section anchor="output-formats">
        <name>Output Formats</name>
        <t>This specification defines four output formats.  See the "Output Structure"
section for the requirements of each format.</t>
        <ul spacing="normal">
          <li>
            <t>Flag - A boolean which simply indicates the overall validation result
with no further details.</t>
          </li>
          <li>
            <t>Basic - Provides validation information in a flat list structure.</t>
          </li>
          <li>
            <t>Detailed - Provides validation information in a condensed hierarchical
structure based on the structure of the schema.</t>
          </li>
          <li>
            <t>Verbose - Provides validation information in an uncondensed hierarchical
structure that matches the exact structure of the schema.</t>
          </li>
        </ul>
        <t>An implementation SHOULD provide at least one of the "flag", "basic", or "detailed"
format and MAY provide the "verbose" format.  If it provides one or more of the
"detailed" or "verbose" formats, it MUST also provide the "flag" format.
Implementations SHOULD specify in their documentation which formats they support.</t>
      </section>
      <section anchor="minimum-information">
        <name>Minimum Information</name>
        <t>Beyond the simplistic "flag" output, additional information is useful to aid in
debugging a schema or input.  Each sub-result SHOULD contain the information
contained within this section at a minimum.</t>
        <t>A single object that contains all of these components is considered an
output unit.</t>
        <t>Implementations MAY elect to provide additional information.</t>
        <section anchor="keyword-relative-location">
          <name>Keyword Relative Location</name>
          <t>The relative location of the validating keyword that follows the validation
path.  The value MUST be expressed as a JSON Pointer, and it MUST include
any by-reference applicators such as "$ref" or "$dynamicRef".</t>
          <artwork><![CDATA[
/properties/width/$ref/minimum
]]></artwork>
          <t>Note that this pointer may not be resolvable by the normal JSON Pointer process
due to the inclusion of these by-reference applicator keywords.</t>
          <t>The JSON key for this information is "keywordLocation".</t>
        </section>
        <section anchor="keyword-absolute-location">
          <name>Keyword Absolute Location</name>
          <t>The absolute, dereferenced location of the validating keyword.  The value MUST
be expressed as a full URI using the canonical URI of the relevant schema resource
with a JSON Pointer fragment, and it MUST NOT include by-reference applicators
such as "$ref" or "$dynamicRef" as non-terminal path components.
It MAY end in such keywords if the error or annotation is for that
keyword, such as an unresolvable reference.<cref anchor="_20">Note that "absolute" here is in the sense of "absolute filesystem path"
   (meaning the complete location) rather than the "absolute-URI"
   terminology from RFC 3986 (meaning with scheme but without fragment).
   Keyword absolute locations will have a fragment in order to
   identify the keyword.</cref></t>
          <artwork><![CDATA[
https://example.com/schemas/common#/$defs/count/minimum
]]></artwork>
          <t>This information MAY be omitted only if either the dynamic scope did not pass
over a reference or if the schema does not declare an absolute URI as its "$id".</t>
          <t>The JSON key for this information is "absoluteKeywordLocation".</t>
        </section>
        <section anchor="instance-location">
          <name>Instance Location</name>
          <t>The location of the JSON value within the instance.  The
value MUST be expressed as a JSON Pointer.</t>
          <t>The JSON key for this information is "instanceLocation".</t>
        </section>
        <section anchor="error-or-annotation">
          <name>Error or Annotation</name>
          <t>The error or annotation that is produced by the validation.</t>
          <t>For errors, the specific wording for the message is not defined by this
specification.  Implementations will need to provide this.</t>
          <t>For annotations, each keyword that produces an annotation specifies its
format.  By default, it is the keyword's value.</t>
          <t>The JSON key for failed validations is "error"; for successful validations
it is "annotation".</t>
        </section>
        <section anchor="nested-results">
          <name>Nested Results</name>
          <t>For the two hierarchical structures, this property will hold nested errors
and annotations.</t>
          <t>The JSON key for nested results in failed validations is "errors"; for
successful validations it is "annotations".  Note the plural forms, as
a keyword with nested results can also have a local error or annotation.</t>
        </section>
      </section>
      <section anchor="output-structure">
        <name>Output Structure</name>
        <t>The output MUST be an object containing a boolean property named "valid".  When
additional information about the result is required, the output MUST also contain
"errors" or "annotations" as described below.</t>
        <ul spacing="normal">
          <li>
            <t>"valid" - a boolean value indicating the overall validation success or
failure</t>
          </li>
          <li>
            <t>"errors" - the collection of errors or annotations produced by a failed
validation</t>
          </li>
          <li>
            <t>"annotations" - the collection of errors or annotations produced by a
successful validation</t>
          </li>
        </ul>
        <t>For these examples, the following schema and input will be used.</t>
        <sourcecode type="json"><![CDATA[
{
  "$id": "https://example.com/polygon",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$defs": {
    "point": {
      "type": "object",
      "properties": {
        "x": { "type": "number" },
        "y": { "type": "number" }
      },
      "additionalProperties": false,
      "required": [ "x", "y" ]
    }
  },
  "type": "array",
  "items": { "$ref": "#/$defs/point" },
  "minItems": 3
}
]]></sourcecode>
        <sourcecode type="json"><![CDATA[
[
  {
    "x": 2.5,
    "y": 1.3
  },
  {
    "x": 1,
    "z": 6.7
  }
]
]]></sourcecode>
        <t>This input will fail validation and produce errors, but it's trivial to deduce
examples for passing schemas that produce annotations.</t>
        <t>Specifically, the errors it will produce are:</t>
        <ul spacing="normal">
          <li>
            <t>The second object is missing a "y" property.</t>
          </li>
          <li>
            <t>The second object has a disallowed "z" property.</t>
          </li>
          <li>
            <t>There are only two objects, but three are required.</t>
          </li>
        </ul>
        <t>Note that the error message wording as depicted in these examples is not a
requirement of this specification.  Implementations SHOULD craft error messages
tailored for their audience or provide a templating mechanism that allows their
users to craft their own messages.</t>
        <section anchor="flag">
          <name>Flag</name>
          <t>In the simplest case, merely the boolean result for the "valid" valid property
needs to be fulfilled.</t>
          <sourcecode type="json"><![CDATA[
{
  "valid": false
}
]]></sourcecode>
          <t>Because no errors or annotations are returned with this format, it is
RECOMMENDED that implementations use short-circuiting logic to return
failure or success as soon as the outcome can be determined.  For example,
if an "anyOf" keyword contains five sub-schemas, and the second one
passes, there is no need to check the other three.  The logic can simply
return with success.</t>
        </section>
        <section anchor="basic">
          <name>Basic</name>
          <t>The "Basic" structure is a flat list of output units.</t>
          <sourcecode type="json"><![CDATA[
{
  "valid": false,
  "errors": [
    {
      "keywordLocation": "",
      "instanceLocation": "",
      "error": "A subschema had errors."
    },
    {
      "keywordLocation": "/items/$ref",
      "absoluteKeywordLocation":
        "https://example.com/polygon#/$defs/point",
      "instanceLocation": "/1",
      "error": "A subschema had errors."
    },
    {
      "keywordLocation": "/items/$ref/required",
      "absoluteKeywordLocation":
        "https://example.com/polygon#/$defs/point/required",
      "instanceLocation": "/1",
      "error": "Required property 'y' not found."
    },
    {
      "keywordLocation": "/items/$ref/additionalProperties",
      "absoluteKeywordLocation":
        "https://example.com/polygon#/$defs/point/additionalProperties",
      "instanceLocation": "/1/z",
      "error": "Additional property 'z' found but was invalid."
    },
    {
      "keywordLocation": "/minItems",
      "instanceLocation": "",
      "error": "Expected at least 3 items but found 2"
    }
  ]
}
]]></sourcecode>
        </section>
        <section anchor="detailed">
          <name>Detailed</name>
          <t>The "Detailed" structure is based on the schema and can be more readable
for both humans and machines.  Having the structure organized this way makes
associations between the errors more apparent.  For example, the fact that
the missing "y" property and the extra "z" property both stem from the same
location in the instance is not immediately obvious in the "Basic" structure.
In a hierarchy, the correlation is more easily identified.</t>
          <t>The following rules govern the construction of the results object:</t>
          <ul spacing="normal">
            <li>
              <t>All applicator keywords ("*Of", "$ref", "if"/"then"/"else", etc.) require
a node.</t>
            </li>
            <li>
              <t>Nodes that have no children are removed.</t>
            </li>
            <li>
              <t>Nodes that have a single child are replaced by the child.</t>
            </li>
          </ul>
          <t>Branch nodes do not require an error message or an annotation.</t>
          <sourcecode type="json"><![CDATA[
{
  "valid": false,
  "keywordLocation": "",
  "instanceLocation": "",
  "errors": [
    {
      "valid": false,
      "keywordLocation": "/items/$ref",
      "absoluteKeywordLocation":
        "https://example.com/polygon#/$defs/point",
      "instanceLocation": "/1",
      "errors": [
        {
          "valid": false,
          "keywordLocation": "/items/$ref/required",
          "absoluteKeywordLocation":
            "https://example.com/polygon#/$defs/point/required",
          "instanceLocation": "/1",
          "error": "Required property 'y' not found."
        },
        {
          "valid": false,
          "keywordLocation": "/items/$ref/additionalProperties",
          "absoluteKeywordLocation":
            "https://example.com/polygon#/$defs/point/additionalProperties",
          "instanceLocation": "/1/z",
          "error": "Additional property 'z' found but was invalid."
        }
      ]
    },
    {
      "valid": false,
      "keywordLocation": "/minItems",
      "instanceLocation": "",
      "error": "Expected at least 3 items but found 2"
    }
  ]
}
]]></sourcecode>
        </section>
        <section anchor="verbose">
          <name>Verbose</name>
          <t>The "Verbose" structure is a fully realized hierarchy that exactly matches
that of the schema.  This structure has applications in form generation and
validation where the error's location is important.</t>
          <t>The primary difference between this and the "Detailed" structure is that
all results are returned.  This includes sub-schema validation results that
would otherwise be removed (e.g. annotations for failed validations,
successful validations inside a <tt>not</tt> keyword, etc.).  Because of this, it
is RECOMMENDED that each node also carry a <tt>valid</tt> property to indicate the
validation result for that node.</t>
          <t>Because this output structure can be quite large, a smaller example is given
here for brevity.  The URI of the full output structure of the example above is:
<eref target="https://json-schema.org/draft/2020-12/output/verbose-example">https://json-schema.org/draft/2020-12/output/verbose-example</eref>.</t>
          <t>schema:</t>
          <sourcecode type="json"><![CDATA[
{
  "$id": "https://example.com/polygon",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "validProp": true
  },
  "additionalProperties": false
}
]]></sourcecode>
          <t>input:</t>
          <sourcecode type="json"><![CDATA[
{
  "validProp": 5,
  "disallowedProp": "value"
}
]]></sourcecode>
          <t>result:</t>
          <sourcecode type="json"><![CDATA[
{
  "valid": false,
  "keywordLocation": "",
  "instanceLocation": "",
  "errors": [
    {
      "valid": true,
      "keywordLocation": "/type",
      "instanceLocation": ""
    },
    {
      "valid": true,
      "keywordLocation": "/properties",
      "instanceLocation": ""
    },
    {
      "valid": false,
      "keywordLocation": "/additionalProperties",
      "instanceLocation": "",
      "errors": [
        {
          "valid": false,
          "keywordLocation": "/additionalProperties",
          "instanceLocation": "/disallowedProp",
          "error": "Additional property 'disallowedProp' found but was invalid."
        }
      ]
    }
  ]
}
]]></sourcecode>
        </section>
        <section anchor="output-validation-schemas">
          <name>Output validation schemas</name>
          <t>For convenience, JSON Schema has been provided to validate output generated
by implementations.  Its URI is:
<eref target="https://json-schema.org/draft/2020-12/output/schema">https://json-schema.org/draft/2020-12/output/schema</eref>.</t>
        </section>
      </section>
    </section>
    <section anchor="extensibility">
      <name>Extensibility</name>
      <section anchor="non-json-inputs">
        <name>Non-JSON Inputs</name>
        <t>It is possible to use JSON Schema with a superset of the JSON Schema data model,
where an input may be outside any of the six JSON data types.</t>
        <t>In this case, annotations still apply; but most validation keywords will not be useful,
as they will always pass or always fail.</t>
        <t>A custom vocabulary may define support for a superset of the core data model.
The schema itself may only be expressible in this superset;
for example, to make use of the "const" keyword.</t>
      </section>
      <section anchor="schema-vocabularies">
        <name>Schema Vocabularies</name>
        <t>A schema vocabulary, or simply a vocabulary, is a set of keywords,
their syntax, and their semantics.  A vocabulary is generally organized
around a particular purpose.  Different uses of JSON Schema, such
as validation, hypermedia, or user interface generation, will
involve different sets of vocabularies.</t>
        <t>Vocabularies are the primary unit of re-use in JSON Schema, as schema
authors can indicate what vocabularies are required or optional in
order to process the schema.  Since vocabularies are identified by URIs
in the meta-schema, generic implementations can load extensions to support
previously unknown vocabularies.  While keywords can be supported outside
of any vocabulary, there is no analogous mechanism to indicate individual
keyword usage.</t>
        <t>A schema vocabulary can be defined by anything from an informal description
to a standards proposal, depending on the audience and interoperability
expectations.  In particular, in order to facilitate vocabulary use within
non-public organizations, a vocabulary specification need not be published
outside of its scope of use.</t>
      </section>
      <section anchor="meta-schemas">
        <name>Meta-Schemas</name>
        <t>A schema that itself describes a schema is called a meta-schema.
Meta-schemas are used to validate JSON Schemas and specify which vocabularies
they are using.</t>
        <t>Meta-schemas
that use the <xref target="vocabulary-keyword">"$vocabulary" keyword</xref>
to declare the vocabularies in use MUST explicitly list the Core vocabulary,
which MUST have a value of true indicating that it is required.</t>
        <t>Meta-schemas that do not use "$vocabulary" MUST be considered to
require the Core vocabulary as if its URI were present with a value of true.</t>
        <t>Typically, a meta-schema will specify a set of vocabularies, and validate
schemas that conform to the syntax of those vocabularies.  However, meta-schemas
and vocabularies are separate in order to allow meta-schemas to validate
schema conformance more strictly or more loosely than the vocabularies'
specifications call for.  Meta-schemas may also describe and validate
additional keywords that are not part of a formal vocabulary.</t>
        <t>Meta-schemas and vocabularies together are used to inform an implementation
how to interpret a schema.  Every schema has a meta-schema, which can be declared
using the "$schema" keyword.</t>
        <t>The meta-schema serves two purposes:</t>
        <ol spacing="normal" type="1"><li>
            <t>Declaring the vocabularies in use
            </t>
            <ul spacing="normal">
              <li>
                <t>The "$vocabulary" keyword, when it appears in a meta-schema, declares
which vocabularies are available to be used in schemas that refer
to that meta-schema.  Vocabularies define keyword semantics,
as well as their general syntax.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Describing valid schema syntax
            </t>
            <ul spacing="normal">
              <li>
                <t>A schema MUST successfully validate against its meta-schema, which
constrains the syntax of the available keywords.  The syntax described
is expected to be compatible with the vocabularies declared; while
it is possible to describe an incompatible syntax, such a meta-schema
would be unlikely to be useful.</t>
              </li>
            </ul>
          </li>
        </ol>
        <t>Meta-schemas are separate from vocabularies to allow for
vocabularies to be combined in different ways, and for meta-schema authors
to impose additional constraints such as forbidding certain keywords, or
performing unusually strict syntactical validation, as might be done
during a development and testing cycle.  Each vocabulary typically identifies
a meta-schema consisting only of the vocabulary's keywords.</t>
        <t>Meta-schema authoring is an advanced usage of JSON Schema, so the design of
meta-schema features emphasizes flexibility over simplicity.</t>
      </section>
      <section anchor="default-json-schema-dialect">
        <name>Default JSON Schema Dialect</name>
        <t>The current URI for the default JSON Schema dialect meta-schema is
<eref target="https://json-schema.org/draft/2020-12/schema"/>.
For schema author convenience, this meta-schema describes a dialect
consisting of all vocabularies
defined in this specification,
as well as two former keywords which are reserved for a transitional period.
Individual vocabulary and vocabulary meta-schema URIs are given for
each section below.  Certain vocabularies are optional to support, which
is explained in detail in the relevant sections.</t>
        <t>Updated vocabulary and meta-schema URIs may be published between
specification drafts in order to correct errors.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Both schemas and instances are JSON values. As such, all security considerations
defined in <xref target="RFC8259"/> apply.</t>
      <t>Instances and schemas are both frequently written by untrusted third parties, to
be deployed on public Internet servers. Implementations should take care that
the parsing and validating against schemas does not consume excessive system
resources. Implementations MUST NOT fall into an infinite loop.</t>
      <t>A malicious party could cause an implementation to repeatedly collect a copy
of a very large value as an annotation.  Implementations SHOULD guard against
excessive consumption of system resources in such a scenario.</t>
      <t>Servers MUST ensure that malicious parties cannot change the functionality of
existing schemas by uploading a schema with a pre-existing or very similar "$id".</t>
      <t>Individual JSON Schema vocabularies are liable to also have their own security
considerations. Consult the respective specifications for more information.</t>
      <t>Schema authors should take care with "$comment" contents, as a malicious
implementation can display them to end-users in violation of a spec, or
fail to strip them if such behavior is expected.</t>
      <t>A malicious schema author could place executable code or other dangerous
material within a "$comment".  Implementations MUST NOT parse or otherwise
take action based on "$comment" contents.</t>
      <t>JSON Schema validation allows the use of Regular Expressions, which have numerous
different (often incompatible) implementations.
Some implementations allow the embedding of arbitrary code, which is outside the
scope of JSON Schema and MUST NOT be permitted.
Regular expressions can often also be crafted to be extremely expensive to compute
(with so-called "catastrophic backtracking"), resulting in a denial-of-service
attack.</t>
      <t>Implementations that support validating or otherwise evaluating input
string data based on "contentEncoding" and/or "contentMediaType" are at
risk of evaluating data in an unsafe way based on misleading information.
Applications can mitigate this risk by only performing such processing
when a relationship between the schema and input is established
(e.g., they share the same authority).</t>
      <t>Processing a media type or encoding is subject to the security considerations
of that media type or encoding.  For example, the security considerations
Scripting Media Types (<xref target="RFC4329"/>) apply when
processing JavaScript or ECMAScript encoded within a JSON string.</t>
    </section>
    <section anchor="interoperability-considerations">
      <name>Interoperability Considerations</name>
      <section anchor="language">
        <name>Programming Language Independence</name>
        <t>JSON Schema is programming language agnostic, and supports the full range of
values described in the data model.
Be aware, however, that some languages and JSON parsers may not be able to
represent in memory the full range of values describable by JSON.</t>
      </section>
      <section anchor="integers">
        <name>Mathematical Integers</name>
        <t>Some programming languages and parsers use different internal representations
for floating point numbers than they do for integers.</t>
        <t>For consistency, integer JSON numbers SHOULD NOT be encoded with a fractional
part.</t>
      </section>
      <section anchor="regex-interop">
        <name>Regular Expressions</name>
        <t>Keywords MAY use regular expressions to express constraints, or constrain
the input value to be a regular expression.
These regular expressions SHOULD be valid according to the regular expression
dialect described in <xref target="ECMA262"/>, Section 21.2.1.</t>
        <t>Unless otherwise specified by a keyword, regular expressions MUST NOT be
considered to be implicitly anchored at either end.  All regular expression
keywords in this specification and its companion documents are un-anchored.</t>
        <t>Regular expressions SHOULD be built with the "u" flag (or equivalent) to provide
Unicode support, or processed in such a way which provides Unicode support as
defined by ECMA-262.</t>
        <t>Furthermore, given the high disparity in regular expression constructs support,
schema authors SHOULD limit themselves to the following regular expression
tokens:</t>
        <ul spacing="normal">
          <li>
            <t>individual Unicode characters, as defined by the
JSON specification (<xref target="RFC8259"/>);</t>
          </li>
          <li>
            <t>simple character classes ([abc]), range character classes ([a-z]);</t>
          </li>
          <li>
            <t>complemented character classes ([^abc], [^a-z]);</t>
          </li>
          <li>
            <t>simple quantifiers: "+" (one or more), "*" (zero or more), "?" (zero or
one), and their lazy versions ("+?", "*?", "??");</t>
          </li>
          <li>
            <t>range quantifiers: "{x}" (exactly x occurrences), "{x,y}" (at least x, at
most y, occurrences), {x,} (x occurrences or more), and their lazy
versions;</t>
          </li>
          <li>
            <t>the beginning-of-input ("^") and end-of-input ("$") anchors;</t>
          </li>
          <li>
            <t>simple grouping ("(...)") and alternation ("|").</t>
          </li>
        </ul>
        <t>Finally, implementations MUST NOT take regular expressions to be
anchored, neither at the beginning nor at the end. This means, for instance,
the pattern "es" matches "expression".</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="applicationschemajson">
        <name>application/schema+json</name>
        <t>The proposed MIME media type for JSON Schema is defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Type name: application</t>
          </li>
          <li>
            <t>Subtype name: schema+json</t>
          </li>
          <li>
            <t>Required parameters: N/A</t>
          </li>
          <li>
            <t>Encoding considerations: Encoding considerations are
identical to those specified for the "application/json"
media type.  See JSON (<xref target="RFC8259"/>).</t>
          </li>
          <li>
            <t>Security considerations: See <xref target="security"/> above.</t>
          </li>
          <li>
            <t>Interoperability considerations: See <xref target="language"/>,
<xref target="integers"/>, and
<xref target="regex-interop"/> above.</t>
          </li>
          <li>
            <t>Fragment identifier considerations: See <xref target="fragments"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="applicationschema-instancejson">
        <name>application/schema-instance+json</name>
        <t>The proposed MIME media type for JSON Schema Instances that require
a JSON Schema-specific media type is defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Type name: application</t>
          </li>
          <li>
            <t>Subtype name: schema-instance+json</t>
          </li>
          <li>
            <t>Required parameters: N/A</t>
          </li>
          <li>
            <t>Encoding considerations: Encoding considerations are
identical to those specified for the "application/json"
media type.  See JSON (<xref target="RFC8259"/>).</t>
          </li>
          <li>
            <t>Security considerations: See <xref target="security"/> above.</t>
          </li>
          <li>
            <t>Interoperability considerations: See <xref target="language"/>,
<xref target="integers"/>, and
<xref target="regex-interop"/> above.</t>
          </li>
          <li>
            <t>Fragment identifier considerations: See <xref target="fragments"/>.</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="ECMA262" target="http://www.ecma-international.org/publications/files/ecma-st/ECMA-262.pdf">
          <front>
            <title>ECMAScript Language Specification 5.1 Edition</title>
            <author>
              <organization>European Computer Manufacturers Association</organization>
            </author>
            <date year="2011" month="June"/>
          </front>
          <seriesInfo name="ECMA" value="Standard ECMA-262"/>
        </reference>
        <reference anchor="LDP" target="http://www.w3.org/TR/2015/REC-ldp-20150226/">
          <front>
            <title>Linked Data Platform 1.0</title>
            <author initials="S." surname="Speicher" fullname="Steve Speicher">
              <organization>IBM Corporation</organization>
            </author>
            <author initials="J." surname="Arwe" fullname="John Arwe">
              <organization>IBM Corporation</organization>
            </author>
            <author initials="A." surname="Malhotra" fullname="Ashok Malhotra">
              <organization>Oracle Corporation</organization>
            </author>
            <date year="2015" month="February" day="26"/>
          </front>
          <seriesInfo name="W3C Recommendation" value="REC-ldp-20150226"/>
        </reference>
        <reference anchor="XMLNS" target="http://www.w3.org/TR/2009/REC-xml-names-20091208/">
          <front>
            <title>Namespaces in XML 1.0 (Third Edition)</title>
            <author initials="T." surname="Bray" fullname="Tim Bray">
              <organization>Textuality</organization>
            </author>
            <author initials="D." surname="Hollander" fullname="Dave Hollander">
              <organization>Contivo, Inc.</organization>
            </author>
            <author initials="A." surname="Layman" fullname="Andrew Layman">
              <organization>Microsoft</organization>
            </author>
            <author initials="R." surname="Tobin" fullname="Richard Tobin">
              <organization>University of Edinburgh</organization>
            </author>
            <author initials="H." surname="Thompson" fullname="Henry S. Thompson">
              <organization>University of Edinburgh and W3C</organization>
            </author>
            <date year="2009" month="December" day="08"/>
          </front>
          <seriesInfo name="W3C Recommendation" value="REC-xml-names-20091208"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC6839">
          <front>
            <title>Additional Media Type Structured Syntax Suffixes</title>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>A content media type name sometimes includes partitioned meta- information distinguished by a structured syntax to permit noting an attribute of the media as a suffix to the name. This document defines several structured syntax suffixes for use with media type registrations. In particular, it defines and registers the "+json", "+ber", "+der", "+fastinfoset", "+wbxml" and "+zip" structured syntax suffixes, and provides a media type structured syntax suffix registration form for the "+xml" structured syntax suffix. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6839"/>
          <seriesInfo name="DOI" value="10.17487/RFC6839"/>
        </reference>
        <reference anchor="RFC6901">
          <front>
            <title>JavaScript Object Notation (JSON) Pointer</title>
            <author fullname="P. Bryan" initials="P." role="editor" surname="Bryan"/>
            <author fullname="K. Zyp" initials="K." surname="Zyp"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>JSON Pointer defines a string syntax for identifying a specific value within a JavaScript Object Notation (JSON) document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6901"/>
          <seriesInfo name="DOI" value="10.17487/RFC6901"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC5321">
          <front>
            <title>Simple Mail Transfer Protocol</title>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="October" year="2008"/>
            <abstract>
              <t>This document is a specification of the basic protocol for Internet electronic mail transport. It consolidates, updates, and clarifies several previous documents, making all or parts of most of them obsolete. It covers the SMTP extension mechanisms and best practices for the contemporary Internet, but does not provide details about particular extensions. Although SMTP was designed as a mail transport and delivery protocol, this specification also contains information that is important to its use as a "mail submission" protocol for "split-UA" (User Agent) mail reading systems and mobile environments. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5321"/>
          <seriesInfo name="DOI" value="10.17487/RFC5321"/>
        </reference>
        <reference anchor="RFC6531">
          <front>
            <title>SMTP Extension for Internationalized Email</title>
            <author fullname="J. Yao" initials="J." surname="Yao"/>
            <author fullname="W. Mao" initials="W." surname="Mao"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>This document specifies an SMTP extension for transport and delivery of email messages with internationalized email addresses or header information. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6531"/>
          <seriesInfo name="DOI" value="10.17487/RFC6531"/>
        </reference>
        <reference anchor="RFC1123">
          <front>
            <title>Requirements for Internet Hosts - Application and Support</title>
            <author fullname="R. Braden" initials="R." role="editor" surname="Braden"/>
            <date month="October" year="1989"/>
            <abstract>
              <t>This RFC is an official specification for the Internet community. It incorporates by reference, amends, corrects, and supplements the primary protocol standards documents relating to hosts. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="3"/>
          <seriesInfo name="RFC" value="1123"/>
          <seriesInfo name="DOI" value="10.17487/RFC1123"/>
        </reference>
        <reference anchor="RFC5891">
          <front>
            <title>Internationalized Domain Names in Applications (IDNA): Protocol</title>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document is the revised protocol definition for Internationalized Domain Names (IDNs). The rationale for changes, the relationship to the older specification, and important terminology are provided in other documents. This document specifies the protocol mechanism, called Internationalized Domain Names in Applications (IDNA), for registering and looking up IDNs in a way that does not require changes to the DNS itself. IDNA is only meant for processing domain names, not free text. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5891"/>
          <seriesInfo name="DOI" value="10.17487/RFC5891"/>
        </reference>
        <reference anchor="RFC5890">
          <front>
            <title>Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework</title>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document is one of a collection that, together, describe the protocol and usage context for a revision of Internationalized Domain Names for Applications (IDNA), superseding the earlier version. It describes the document collection and provides definitions and other material that are common to the set. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5890"/>
          <seriesInfo name="DOI" value="10.17487/RFC5890"/>
        </reference>
        <reference anchor="RFC2673">
          <front>
            <title>Binary Labels in the Domain Name System</title>
            <author fullname="M. Crawford" initials="M." surname="Crawford"/>
            <date month="August" year="1999"/>
            <abstract>
              <t>This document defines a "Bit-String Label" which may appear within domain names. This new label type compactly represents a sequence of "One-Bit Labels" and enables resource records to be stored at any bit- boundary in a binary-named section of the domain name tree. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2673"/>
          <seriesInfo name="DOI" value="10.17487/RFC2673"/>
        </reference>
        <reference anchor="RFC4291">
          <front>
            <title>IP Version 6 Addressing Architecture</title>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <date month="February" year="2006"/>
            <abstract>
              <t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol. The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t>
              <t>This document obsoletes RFC 3513, "IP Version 6 Addressing Architecture". [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4291"/>
          <seriesInfo name="DOI" value="10.17487/RFC4291"/>
        </reference>
        <reference anchor="RFC3987">
          <front>
            <title>Internationalized Resource Identifiers (IRIs)</title>
            <author fullname="M. Duerst" initials="M." surname="Duerst"/>
            <author fullname="M. Suignard" initials="M." surname="Suignard"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>This document defines a new protocol element, the Internationalized Resource Identifier (IRI), as a complement of the Uniform Resource Identifier (URI). An IRI is a sequence of characters from the Universal Character Set (Unicode/ISO 10646). A mapping from IRIs to URIs is defined, which means that IRIs can be used instead of URIs, where appropriate, to identify resources.</t>
              <t>The approach of defining a new protocol element was chosen instead of extending or changing the definition of URIs. This was done in order to allow a clear distinction and to avoid incompatibilities with existing software. Guidelines are provided for the use and deployment of IRIs in various protocols, formats, and software components that currently deal with URIs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3987"/>
          <seriesInfo name="DOI" value="10.17487/RFC3987"/>
        </reference>
        <reference anchor="RFC4122">
          <front>
            <title>A Universally Unique IDentifier (UUID) URN Namespace</title>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <author fullname="R. Salz" initials="R." surname="Salz"/>
            <date month="July" year="2005"/>
            <abstract>
              <t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier). A UUID is 128 bits long, and can guarantee uniqueness across space and time. UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group). Information from earlier versions of the DCE specification have been incorporated into this document. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4122"/>
          <seriesInfo name="DOI" value="10.17487/RFC4122"/>
        </reference>
        <reference anchor="RFC6570">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="I-D.hha-relative-json-pointer">
          <front>
            <title>Relative JSON Pointers</title>
            <author fullname="Geraint Luff" initials="G." surname="Luff">
         </author>
            <author fullname="Henry Andrews" initials="H." surname="Andrews">
         </author>
            <author fullname="Ben Hutton" initials="B." surname="Hutton">
         </author>
            <date day="19" month="June" year="2023"/>
            <abstract>
              <t>   JSON Pointer is a syntax for specifying locations in a JSON document,
   starting from the document root.  This document defines an extension
   to the JSON Pointer syntax, allowing relative locations from within
   the document.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hha-relative-json-pointer-00"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC2045">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This initial document specifies the various headers used to describe the structure of MIME messages. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2045"/>
          <seriesInfo name="DOI" value="10.17487/RFC2045"/>
        </reference>
        <reference anchor="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </reference>
        <reference anchor="RFC8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6596">
          <front>
            <title>The Canonical Link Relation</title>
            <author fullname="M. Ohye" initials="M." surname="Ohye"/>
            <author fullname="J. Kupke" initials="J." surname="Kupke"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>RFC 5988 specifies a way to define relationships between links on the web. This document describes a new type of such a relationship, "canonical", to designate an Internationalized Resource Identifier (IRI) as preferred over resources with duplicative content. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6596"/>
          <seriesInfo name="DOI" value="10.17487/RFC6596"/>
        </reference>
        <reference anchor="W3C.WD-fragid-best-practices-20121025" target="https://www.w3.org/TR/2012/WD-fragid-best-practices-20121025/">
          <front>
            <title>Best Practices for Fragment Identifiers and Media Type Definitions</title>
            <author fullname="Jeni Tennison" role="editor"/>
            <date day="25" month="October" year="2012"/>
          </front>
          <seriesInfo name="W3C WD" value="WD-fragid-best-practices-20121025"/>
          <seriesInfo name="W3C" value="WD-fragid-best-practices-20121025"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="I-D.bhutton-json-schema-validation">
          <front>
            <title>JSON Schema Validation: A Vocabulary for Structural Validation of JSON</title>
            <author fullname="Austin Wright" initials="A." surname="Wright">
         </author>
            <author fullname="Henry Andrews" initials="H." surname="Andrews">
         </author>
            <author fullname="Ben Hutton" initials="B." surname="Hutton">
              <organization>Postman</organization>
            </author>
            <date day="10" month="June" year="2022"/>
            <abstract>
              <t>   JSON Schema (application/schema+json) has several purposes, one of
   which is JSON instance validation.  This document specifies a
   vocabulary for JSON Schema to describe the meaning of JSON documents,
   provide hints for user interfaces working with JSON data, and to make
   assertions about what a valid document must look like.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bhutton-json-schema-validation-01"/>
        </reference>
        <reference anchor="I-D.handrews-json-schema-hyperschema">
          <front>
            <title>JSON Hyper-Schema: A Vocabulary for Hypermedia Annotation of JSON</title>
            <author fullname="Henry Andrews" initials="H." surname="Andrews">
         </author>
            <author fullname="Austin Wright" initials="A." surname="Wright">
         </author>
            <date day="17" month="September" year="2019"/>
            <abstract>
              <t>   JSON Schema is a JSON-based format for describing JSON data using
   various vocabularies.  This document specifies a vocabulary for
   annotating JSON documents with hyperlinks.  These hyperlinks include
   attributes describing how to manipulate and interact with remote
   resources through hypermedia environments such as HTTP, as well as
   determining whether the link is usable based on the instance value.
   The hyperlink serialization format described in this document is also
   usable independent of JSON Schema.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-handrews-json-schema-hyperschema-02"/>
        </reference>
        <reference anchor="RFC4329">
          <front>
            <title>Scripting Media Types</title>
            <author fullname="B. Hoehrmann" initials="B." surname="Hoehrmann"/>
            <date month="April" year="2006"/>
            <abstract>
              <t>This document describes the registration of media types for the ECMAScript and JavaScript programming languages and conformance requirements for implementations of these types. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4329"/>
          <seriesInfo name="DOI" value="10.17487/RFC4329"/>
        </reference>
      </references>
    </references>
    <?line 3532?>

<section anchor="id-examples">
      <name>Schema identification examples</name>
      <t>Consider the following schema, which shows "$id" being used to identify
both the root schema and various subschemas, and "$anchor" being used
to define plain name fragment identifiers.</t>
      <sourcecode type="json"><![CDATA[
{
    "$id": "https://example.com/root.json",
    "$defs": {
        "A": { "$anchor": "foo" },
        "B": {
            "$id": "other.json",
            "$defs": {
                "X": { "$anchor": "bar" },
                "Y": {
                    "$id": "t/inner.json",
                    "$anchor": "bar"
                }
            }
        },
        "C": {
            "$id": "urn:uuid:ee564b8a-7a87-4125-8c96-e9f123d6766f"
        }
    }
}
]]></sourcecode>
      <t>The schemas at the following URI-encoded JSON
Pointers (<xref target="RFC6901"/>, relative to the root schema) have the following
base URIs, and are identifiable by any listed URI in accordance with
<xref target="fragments"/> and
<xref target="embedded"/> above.</t>
      <ul spacing="normal">
        <li>
          <t><tt>#</tt> (document root)
          </t>
          <ul spacing="normal">
            <li>
              <t>canonical (and base) URI: <tt>https://example.com/root.json</tt></t>
            </li>
            <li>
              <t>canonical resource URI plus pointer fragment: <tt>https://example.com/root.json#</tt></t>
            </li>
          </ul>
        </li>
        <li>
          <t><tt>#/$defs/A</tt>
          </t>
          <ul spacing="normal">
            <li>
              <t>base URI: <tt>https://example.com/root.json</tt></t>
            </li>
            <li>
              <t>canonical resource URI plus plain fragment: <tt>https://example.com/root.json#foo</tt></t>
            </li>
            <li>
              <t>canonical resource URI plus pointer fragment: <tt>https://example.com/root.json#/$defs/A</tt></t>
            </li>
          </ul>
        </li>
        <li>
          <t><tt>#/$defs/B</tt>
          </t>
          <ul spacing="normal">
            <li>
              <t>canonical (and base) URI: <tt>https://example.com/other.json</tt></t>
            </li>
            <li>
              <t>canonical resource URI plus pointer fragment: <tt>https://example.com/other.json#</tt></t>
            </li>
            <li>
              <t>base URI of enclosing (root.json) resource plus fragment: <tt>https://example.com/root.json#/$defs/B</tt></t>
            </li>
          </ul>
        </li>
        <li>
          <t><tt>#/$defs/B/$defs/X</tt>
          </t>
          <ul spacing="normal">
            <li>
              <t>base URI: <tt>https://example.com/other.json</tt></t>
            </li>
            <li>
              <t>canonical resource URI plus plain fragment: <tt>https://example.com/other.json#bar</tt></t>
            </li>
            <li>
              <t>canonical resource URI plus pointer fragment: <tt>https://example.com/other.json#/$defs/X</tt></t>
            </li>
            <li>
              <t>base URI of enclosing (root.json) resource plus fragment: <tt>https://example.com/root.json#/$defs/B/$defs/X</tt></t>
            </li>
          </ul>
        </li>
        <li>
          <t><tt>#/$defs/B/$defs/Y</tt>
          </t>
          <ul spacing="normal">
            <li>
              <t>canonical (and base) URI: <tt>https://example.com/t/inner.json</tt></t>
            </li>
            <li>
              <t>canonical URI plus plain fragment: <tt>https://example.com/t/inner.json#bar</tt></t>
            </li>
            <li>
              <t>canonical URI plus pointer fragment: <tt>https://example.com/t/inner.json#</tt></t>
            </li>
            <li>
              <t>base URI of enclosing (other.json) resource plus fragment: <tt>https://example.com/other.json#/$defs/Y</tt></t>
            </li>
            <li>
              <t>base URI of enclosing (root.json) resource plus fragment: <tt>https://example.com/root.json#/$defs/B/$defs/Y</tt></t>
            </li>
          </ul>
        </li>
        <li>
          <t><tt>#/$defs/C</tt>
          </t>
          <ul spacing="normal">
            <li>
              <t>canonical (and base) URI: <tt>urn:uuid:ee564b8a-7a87-4125-8c96-e9f123d6766f</tt></t>
            </li>
            <li>
              <t>canonical URI plus pointer fragment: <tt>urn:uuid:ee564b8a-7a87-4125-8c96-e9f123d6766f#</tt></t>
            </li>
            <li>
              <t>base URI of enclosing (root.json) resource plus fragment: <tt>https://example.com/root.json#/$defs/C</tt></t>
            </li>
          </ul>
        </li>
      </ul>
      <t>Note: The fragment part of the URI does not make it canonical or non-canonical,
rather, the base URI used (as part of the full URI with any fragment) is what
determines the canonical nature of the resulting full URI.<cref anchor="_21">Multiple "canonical" URIs? We Acknowledge this is potentially confusing, and
   direct you to read the CREF located in the
   <xref target="embedded">JSON Pointer fragments and embedded schema resources</xref>
   section for futher comments.</cref></t>
    </section>
    <section anchor="manipulating-schema-documents-and-references">
      <name>Manipulating schema documents and references</name>
      <t>Various tools have been created to rearrange schema documents
based on how and where references ("$ref") appear.  This appendix discusses
which use cases and actions are compliant with this specification.</t>
      <section anchor="bundling-schema-resources-into-a-single-document">
        <name>Bundling schema resources into a single document</name>
        <t>A set of schema resources intended for use together can be organized
with each in its own schema document, all in the same schema document,
or any granularity of document grouping in between.</t>
        <t>Numerous tools exist to perform various sorts of reference removal.
A common case of this is producing a single file where all references
can be resolved within that file.  This is typically done to simplify
distribution, or to simplify coding so that various invocations
of JSON Schema libraries do not have to keep track of and load
a large number of resources.</t>
        <t>This transformation can be safely and reversibly done as long as
all static references (e.g. "$ref") use URI-references that resolve
to URIs using the canonical resource URI as the base, and all schema
resources have an absolute-URI as the "$id" in their root schema.</t>
        <t>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.  The names of the schemas under "$defs" do
not affect behavior, assuming they are each unique, as they
do not appear in the canonical URIs for the embedded resources.</t>
      </section>
      <section anchor="reference-removal-is-not-always-safe">
        <name>Reference removal is not always safe</name>
        <t>Attempting to remove all references and produce a single schema document does not,
in all cases, produce a schema with identical behavior to the original form.</t>
        <t>Since "$ref" is now treated like any other keyword, with other keywords allowed
in the same schema objects, fully supporting non-recursive "$ref" removal in
all cases can require relatively complex schema manipulations.  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.</t>
      </section>
    </section>
    <section anchor="recursive-example">
      <name>Example of recursive schema extension</name>
      <t>Consider the following two schemas describing a simple
recursive tree structure, where each node in the tree
can have a "data" field of any type.  The first schema
allows and ignores other instance properties.  The second is
more strict and only allows the "data" and "children" properties.
An example input with "data" misspelled as "daat" is also shown.</t>
      <t>tree schema, extensible:</t>
      <sourcecode type="json"><![CDATA[
{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://example.com/tree",
    "$dynamicAnchor": "node",

    "type": "object",
    "properties": {
        "data": true,
        "children": {
            "type": "array",
            "items": {
                "$dynamicRef": "#node"
            }
        }
    }
}
]]></sourcecode>
      <t>strict-tree schema, guards against misspelled properties:</t>
      <sourcecode type="json"><![CDATA[
{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://example.com/strict-tree",
    "$dynamicAnchor": "node",

    "$ref": "tree",
    "unevaluatedProperties": false
}
]]></sourcecode>
      <t>input with misspelled field:</t>
      <sourcecode type="json"><![CDATA[
{
    "children": [ { "daat": 1 } ]
}
]]></sourcecode>
      <t>When we load these two schemas, we will notice the "$dynamicAnchor"
named "node" (note the lack of "#" as this is just the name)
present in each, resulting in the following full schema URIs:</t>
      <ul spacing="normal">
        <li>
          <t>"https://example.com/tree#node"</t>
        </li>
        <li>
          <t>"https://example.com/strict-tree#node"</t>
        </li>
      </ul>
      <t>In addition, JSON Schema implementations keep track of the fact
that these fragments were created with "$dynamicAnchor".</t>
      <t>If we apply the "strict-tree" schema to the input, we will follow
the "$ref" to the "tree" schema, examine its "children" subschema,
and find the "$dynamicRef": to "#node" (note the "#" for URI fragment syntax)
in its "items" subschema.  That reference resolves to
"https://example.com/tree#node", which is a URI with a fragment
created by "$dynamicAnchor".  Therefore we must examine the dynamic
scope before following the reference.</t>
      <t>At this point, the dynamic path is
"#/$ref/properties/children/items/$dynamicRef", with a dynamic scope
containing (from the outermost scope to the innermost):</t>
      <ol spacing="normal" type="1"><li>
          <t>"https://example.com/strict-tree#"</t>
        </li>
        <li>
          <t>"https://example.com/tree#"</t>
        </li>
        <li>
          <t>"https://example.com/tree#/properties/children"</t>
        </li>
        <li>
          <t>"https://example.com/tree#/properties/children/items"</t>
        </li>
      </ol>
      <t>Since we are looking for a plain name fragment, which can be
defined anywhere within a schema resource, the JSON Pointer fragments
are irrelevant to this check.  That means that we can remove those
fragments and eliminate consecutive duplicates, producing:</t>
      <ol spacing="normal" type="1"><li>
          <t>"https://example.com/strict-tree"</t>
        </li>
        <li>
          <t>"https://example.com/tree"</t>
        </li>
      </ol>
      <t>In this case, the outermost resource also has a "node" fragment
defined by "$dynamicAnchor".  Therefore instead of resolving the
"$dynamicRef" to "https://example.com/tree#node", we resolve it to
"https://example.com/strict-tree#node".</t>
      <t>This way, the recursion in the "tree" schema recurses to the root
of "strict-tree", instead of only applying "strict-tree" to the
input root, but applying "tree" to input children.</t>
      <t>This example shows both "$dynamicAnchor"s in the same place
in each schema, specifically the resource root schema.
Since plain-name fragments are independent of the JSON structure,
this would work just as well if one or both of the node schema objects
were moved under "$defs".  It is the matching "$dynamicAnchor" values
which tell us how to resolve the dynamic reference, not any sort of
correlation in JSON structure.</t>
    </section>
    <section anchor="working-with-vocabularies">
      <name>Working with vocabularies</name>
      <section anchor="best-practices-for-vocabulary-and-meta-schema-authors">
        <name>Best practices for vocabulary and meta-schema authors"</name>
        <t>Vocabulary authors should
take care to avoid keyword name collisions if the vocabulary is intended
for broad use, and potentially combined with other vocabularies.  JSON
Schema does not provide any formal namespacing system, but also does
not constrain keyword names, allowing for any number of namespacing
approaches.</t>
        <t>Vocabularies may build on each other, such as by defining the behavior
of their keywords with respect to the behavior of keywords from another
vocabulary, or by using a keyword from another vocabulary with
a restricted or expanded set of acceptable values.  Not all such
vocabulary re-use will result in a new vocabulary that is compatible
with the vocabulary on which it is built.  Vocabulary authors should
clearly document what level of compatibility, if any, is expected.</t>
        <t>Meta-schema authors should not use "$vocabulary" to combine multiple
vocabularies that define conflicting syntax or semantics for the same
keyword.  As semantic conflicts are not generally detectable through
schema validation, implementations are not expected to detect such
conflicts.  If conflicting vocabularies are declared, the resulting
behavior is undefined.</t>
        <t>Vocabulary authors SHOULD provide a meta-schema that validates the
expected usage of the vocabulary's keywords on their own.  Such meta-schemas
SHOULD not forbid additional keywords, and MUST not forbid any
keywords from the Core vocabulary.</t>
        <t>It is recommended that meta-schema authors reference each vocabulary's
meta-schema using the <xref target="allOf">"allOf"</xref> keyword,
although other mechanisms for constructing the meta-schema may be
appropriate for certain use cases.</t>
        <t>The recursive nature of meta-schemas makes the "$dynamicAnchor"
and "$dynamicRef" keywords particularly useful for extending
existing meta-schemas, as can be seen in the JSON Hyper-Schema
(<xref target="I-D.handrews-json-schema-hyperschema"/>) meta-schema
which extends the Validation meta-schema.</t>
        <t>Meta-schemas may impose additional constraints, including describing
keywords not present in any vocabulary, beyond what the meta-schemas
associated with the declared vocabularies describe.  This allows for
restricting usage to a subset of a vocabulary, and for validating
locally defined keywords not intended for re-use.</t>
        <t>However, meta-schemas should not contradict any vocabularies that
they declare, such as by requiring a different JSON type than
the vocabulary expects.  The resulting behavior is undefined.</t>
        <t>Meta-schemas intended for local use, with no need to test for
vocabulary support in arbitrary implementations, can safely omit
"$vocabulary" entirely.</t>
      </section>
      <section anchor="example-meta-schema">
        <name>Example meta-schema with vocabulary declarations</name>
        <t>This meta-schema explicitly declares both the Core and Applicator vocabularies,
together with an extension vocabulary, and combines their meta-schemas with
an "allOf".  The extension vocabulary's meta-schema, which describes only the
keywords in that vocabulary, is shown after the main example meta-schema.</t>
        <t>The main example meta-schema also restricts the usage of the Unevaluated
vocabulary by forbidding the keywords prefixed with "unevaluated", which
are particularly complex to implement.  This does not change the semantics
or set of keywords defined by the other vocabularies. It just ensures
that schemas using this meta-schema that attempt to use the keywords
prefixed with "unevaluated" will fail validation against this meta-schema.</t>
        <t>Finally, this meta-schema describes the syntax of a keyword, "localKeyword",
that is not part of any vocabulary.  Presumably, the implementors and users
of this meta-schema will understand the semantics of "localKeyword".
JSON Schema does not define any mechanism for expressing keyword semantics
outside of vocabularies, making them unsuitable for use except in a
specific environment in which they are understood.</t>
        <t>This meta-schema combines several vocabularies for general use.</t>
        <sourcecode type="json"><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/meta/general-use-example",
  "$dynamicAnchor": "meta",
  "$vocabulary": {
    "https://json-schema.org/draft/2020-12/vocab/core": true,
    "https://json-schema.org/draft/2020-12/vocab/applicator": true,
    "https://json-schema.org/draft/2020-12/vocab/validation": true,
    "https://example.com/vocab/example-vocab": true
  },
  "allOf": [
    {"$ref": "https://json-schema.org/draft/2020-12/meta/core"},
    {"$ref": "https://json-schema.org/draft/2020-12/meta/applicator"},
    {"$ref": "https://json-schema.org/draft/2020-12/meta/validation"},
    {"$ref": "https://example.com/meta/example-vocab"}
  ],
  "patternProperties": {
    "^unevaluated": false
  },
  "properties": {
    "localKeyword": {
      "$comment": "Not in vocabulary, but validated if used",
      "type": "string"
    }
  }
}
]]></sourcecode>
        <t>This meta-schema describes only a single extension vocabulary.</t>
        <sourcecode type="json"><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/meta/example-vocab",
  "$dynamicAnchor": "meta",
  "$vocabulary": {
    "https://example.com/vocab/example-vocab": true
  },
  "type": ["object", "boolean"],
  "properties": {
    "minDate": {
      "type": "string",
      "pattern": "\d\d\d\d-\d\d-\d\d",
      "format": "date"
    }
  }
}
]]></sourcecode>
        <t>As shown above, even though each of the single-vocabulary meta-schemas
referenced in the general-use meta-schema's "allOf" declares its
corresponding vocabulary, this new meta-schema must re-declare them.</t>
        <t>The standard meta-schemas that combine all vocabularies defined by
the Core and Validation specification, and that combine all vocabularies
defined by those specifications as well as the Hyper-Schema specification
(<xref target="I-D.handrews-json-schema-hyperschema"/>),
demonstrate additional complex combinations.  These URIs for these
meta-schemas may be found in the Validation and Hyper-Schema specifications,
respectively.</t>
        <t>While the general-use meta-schema can validate the syntax of "minDate",
it is the vocabulary that defines the logic behind the semantic meaning
of "minDate".  Without an understanding of the semantics (in this example,
that the input value must be a date equal to or after the date
provided as the keyword's value in the schema), an implementation can
only validate the syntactic usage.  In this case, that means validating
that it is a date-formatted string (using "pattern" to ensure that it is
validated even when "format" functions purely as an annotation, as explained
in the the validation specification (<xref target="I-D.bhutton-json-schema-validation"/>).</t>
      </section>
    </section>
    <section anchor="references-and-generative-use-cases">
      <name>References and generative use cases</name>
      <t>While the presence of references is expected to be transparent
to validation results, generative use cases such as code generators
and UI renderers often consider references to be semantically significant.</t>
      <t>To make such use case-specific semantics explicit, the best practice
is to create an annotation keyword for use in the same
schema object alongside of a reference keyword such as "$ref".</t>
      <t>For example, here is a hypothetical keyword for determining
whether a code generator should consider the reference
target to be a distinct class, and how those classes are related.
Note that this example is solely for illustrative purposes, and is
not intended to propose a functional code generation keyword.</t>
      <sourcecode type="json"><![CDATA[
{
  "allOf": [
    {
      "classRelation": "is-a",
      "$ref": "classes/base.json"
    },
    {
      "$ref": "fields/common.json"
    }
  ],
  "properties": {
    "foo": {
      "classRelation": "has-a",
      "$ref": "classes/foo.json"
    },
    "date": {
      "$ref": "types/dateStruct.json"
    }
  }
}
]]></sourcecode>
      <t>Here, this schema represents some sort of object-oriented class.
The first reference in the "allOf" is noted as the base class.
The second is not assigned a class relationship, meaning that the
code generator should combine the target's definition with this
one as if no reference were involved.</t>
      <t>Looking at the properties, "foo" is flagged as object composition,
while the "date" property is not.  It is simply a field with
sub-fields, rather than an instance of a distinct class.</t>
      <t>This style of usage requires the annotation to be in the same object
as the reference, which must be recognizable as a reference.</t>
    </section>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This draft is based on great amounts of superb work by creators
and contributors to JSON Schema.  The authors of the 2020-12 spec
include Ben Hutton and Greg Dennis.  Thanks also to Jason Desrosiers.</t>
      <t>Past contributors include, with thanks:
Gary Court,
Francis Galiegue,
Kris Zyp,
Geraint Luff
Daniel Perrett,
Erik Wilde,
Evgeny Poberezkin,
Brad Bowman,
Gowry Sankar,
Donald Pipowitch,
Dave Finlay,
Denis Laxalde,
Phil Sturgeon,
Shawn Silverman,
and Karen Etheridge.</t>
    </section>
    <section anchor="change-log">
      <name>Change Log</name>
      <t><cref anchor="_22">This section to be removed before leaving Internet-Draft status.</cref></t>
      <section anchor="draft-dusseault-json-schema-00">
        <name>draft-dusseault-json-schema-00</name>
        <t>Compared to the "2020-12" version of JSON Schema, this draft makes the following changes.</t>
        <ul spacing="normal">
          <li>
            <t>Consolidate the 2020-12 core and validation documents</t>
          </li>
          <li>
            <t>Delevel headers for a more readable Table of Contents</t>
          </li>
          <li>
            <t>Shift terminology to a terminology section</t>
          </li>
          <li>
            <t>Reorder conceptually: intro, keywords, processing and output, extensibility.</t>
          </li>
          <li>
            <t>Define input and instance as different things.</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9y9e3fbVpIv+v/+FBg561jyIelHEnfizL0ziu1MNGMnPn5M
Zq5P+iyIBCW0SYANgJLVWurPfuu9awOgLDvuzPSZNatjkcTGftSu56+qptNp
6MpuVTzK/vXVzz9lr+anxToPi3pe5Wv4cNHky2662LZtkW9X3fRPbV1NW/rR
9N69MM+74qRuLh5lZbWsQ7s9XpdtW9ZVd7GBp4+evv4hy25l+aqtH2V7ZbUo
NgX8T9XtTbK9YlF2dVPmK/zj6PB7+E/dwL9evv5hL+RNkT/KDl++DvO6aouq
3baPsq7ZFuFdcXFeN4tHIcum2VHVFU1VdNMnOFH6CNcRNuWj7G1XzydZWzdd
Uyxb+NfFGv/xazh7lH0ZQr7tTusGhpnCY1nG631Wtnn2RJdLX8BSy9WjbAXf
/HPTLdezeb2mL+rmJK/Kv+QdrPdR9iTv8ux1k1ftsmhgXmVXwjdnhY5fVrCA
w1n2S1OenHbulYfbtisr/7m8Mc/zfz7+y/L9DNaXjPLjLDusFk1x3rphfiyq
5qL/lY7EH/2fU/zNP1/kp3VNqwhV3axplribTx8/P3zw8MEjetJ2J5OlPsqe
bpt6U+RV9rheb7aw79nzvNou83m3bYqmzQ7btp6XtB30mNAVDvtq3pSbLnuW
Vyfb/KTIXm2Kebks5/Tj7OvZ/ewpEIM+uACqepQ9uHf//vTeQx4qb06K7lF2
2nWbR3fvnp+fz4o5kGBJx0+j5KsZzPLuZnu8knHbu8tyVbR36ZdtdxcnMoUF
zjaLJY3aFk1ZtEi5uk78yaPsVQcbljeLTJ+Ab589eTG2MVM+kVczXFIJ96KR
L/RYXnXFWTH8kjb06PvnsJfNpm7iptmQ/won2ZwXveH+tT6t0s8/PBIQ3fN8
dVp3Td4b7bA9rd8Nv6Qhf27y+aoYjCqH+qys3hULJvoXq7xbAiFl92f30vP7
enrvAezfriM8/5KO7PXLu/jbuy+fPp6uFpsp/nHvwYOHd3cc0i9fPs5eFkC/
a+Alcvv6z8JP/+P5s59eXXNmr2fZ901+0duS1+U6/Zg243Xxvtvmq7K7SMd4
Mst+rFcrIJfBwT/J4dyHX9Jwj4FBlmf1BNjEfDY4rGf5xTqv+kdFV7j/HY32
vJw3dVsvu3Skl7PsdX1c9gd6CYSItJ1+RwO9qYATNC2sMquXeCOr421zcpoO
Cxzm9SkwgLbuj8wc6NXI99eNjswJj9RT195PMGC7yedFCy/Fk0TayvZfn5Z4
K5lVHOwlxHbv2+n9B9N739yE2O59S8T2fr2a4tTbKX50/8G9bz6W5IYjhDCd
TrP8uIULNe9CcFI1WxTLsoIldadFtgbpl2coJrO9fLNRnnWXZev/RDkL8jAn
aTY9zlu4bEti1gH+AyO1wFHhAE9oMHjZlrgw7iy9ESaZz5KX5yDTmq7Nzk/z
TsbNQMxvYUVdtgYZlK1qYAar8l0xCef5BUyzzoDscRkk3UlSALdeNvU6K7tJ
wIM7rc/xd8SH8YfnZXcKX87C69PRhQHHboG7zgteod+GTVOflbCwLF/wAeer
sCxyXNa0AaKll5wwK+L37Ny47Li4qGF2tNY5SKxj3BmQy8WCti95kJ/QrWhn
fILrcrFYFSHcQhWjqRewv8gCw2w2Sw4VpgvbnuwmHjC8V86oIAJHJQa2Eoi5
hgNreg/MRsnkDBgOE9vEfip/nsKGNSvgwXD1zsoT/pQORE8CNwleClNf9YgC
jqZsszaRwPpKP415DQuDwdZlVa/qkwtax7oA7lGV7Rr0qbKar7ZwjU/CpobX
EjHW8Cu3Qhnq+CIDzQu2Hw5+EoAdyh/4SJ780v2MZ3ihNA50siqAwo4L/GQL
FyL5Sa4/uA0bV8/z4+0qb/C1f96WTUG7zBtES9VBi/cwQgd3q952oNLQ5uB1
Aqprcds63Cq7JfBvEAGwvavVBb4QVc4JbUtJX8LK4YX54gKvalauNyt6cd20
ATdmUW/wJmWbFTA2HP0cyB1Gsh/CPIhDAq3YmfG+zLLsiF6R4zXZ1LD6ALNs
aNNp9+mVefbLv9B8cho7M9UZnwJmisR961b2U92JyoSS6AzejK/ktYN2naF6
3WZ7z9+8eo2qOf43++ln+vfLp//rzdHLp0/w369+PHz2zP6hv3j1489vnsH3
Qf4Vn3z88/PnT396wg8/P/zPPd67vZ9fvD76+afDZ3u4OemO492CrTsuAtH1
pilwk+DS6eVCgs8uL//h5Q+PH9y//+3VlRwh0i0sAbcQ30Zb2QE3sz/gcm0L
/GtdrI+LhuwRPgX8Z338J6AL/FfegDKAq6m2+ju4yLDt+K/jul6BQoz/RNME
/7sEW6fQlVXb1WrnqgKwhsGq8Bq6NX3z4Gte063sZyCNs7I4/1zcJ/gHmnoL
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
p7OkaT0HgGPklX5yuw0iCqevm7xqgTlM9ayy0yJf4JVmdnbOKaHliWTDrPON
32T0tNbZ4avHR0dZLCyBASLL5SAlnx/+8fXrF7dbFcODVwbDCNN6CGFKvuT9
YnYyI6wU+fnQuKrmzcWmO/Dt8nCf8A2k0HGl60XGArglznjYZnt4gg+/2usV
xScbEJNqOFRF39CpBNozdDfjgfkiFJS/utBIkGOWXgen/HcRKAT731JbHKB7
PAae+HtkT6mfxZprxBMWflhWQZ3QpFZxKyMSFvDQH6bHwIhHTuM12tdYtDRt
xRQw4wtMbqyiKsHwzA2vkstVDKmBARAKWKJa1BZ6pPRAGdsfY/qMMoTnqD2/
1rp2rj47MGc1Adyt1+VrqVIO8gF/0C8mNnWCCsJSOqJn0+2RfLFuKh9zrc1n
zVTOPP1gaa7szesfpt8kxkQvg8qY1CBDKuF9cakfy/z8RhQZGxwo3INBGaMh
FulOgrJ9zuv3OfSZLNssrdA8c8pPWbmlvdvncdaT0K8yI5zsoRj6NmcuyX2D
7SK41/JGRGVTVjMyFnOVGvfJJrSShjiszpjwVJ/eb0HjuGQDGeOP1pgSSjXr
6uAqjwMbjDlgN91t7/Nh1R/5rBOK3DMAK0CObw6jnjk9lvb+qXhLw4/igMvN
g2raTblabWEfoka0ZeV5SGvUi3zwYjB1/vrXv2ZosYTLkMH/cWnLR1bQc8Kf
9sd7ZOw6/YEbOtsr1/lJcXeDSsYVvgdzttiQ9ZUdDBwuyLrGI15rn6csbZRc
0/T2lLCvXungvIc24+mZvvbip3/JaD4kbSrNzqTt/NhdSBaJUuLuabdefZ5F
eub+4+vnzyaB9SMErKL6Ejk+ZW/imXtHI+sE6n/pai1J8Q9SPyr6E7+h4LGX
GoL4bVBjRzUdk08uQDVaCxdUYic2rPdOKTJe1jz7119eC/YXTZzHiY73I3yA
qMnpg68fBgtET0QhkNZiHIZttXUp7NRetiyLFZtk6IiYr/JyzX0Xf8PZuSyi
u38673o/Fab3KONxk7GlCG78wuoVPcoeuI99d41H2Vv7Av/vMvlL39x2yRuT
r+Ht+HLYX/fq5Bewo/iLH1/B9u4NfnKVfHI1+dB0dLVa/Hf4C6sHAYujE5vw
cf068ltXBH7nCnEI+LJ/hlc7louv8j/XusNXH1q6/fVr4L/l7kZlb8hCez1X
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

-->

</rfc>
