<?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.36 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-jsonschema-json-schema-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title>JSON Schema</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-jsonschema-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="May" day="12"/>
    <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>
  </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 anchor="functionality">
        <name>Functionality</name>
        <t>A JSON Schema implementation takes input in the form of a JSON-compatible data
structure and performs validation and, if the input is accepted as a valid
instance, returns a standard annotation output.</t>
        <section anchor="validation">
          <name>Validation</name>
          <t>A JSON Schema document (a <em>schema</em>) notates a grammar that describes a language of JSON documents:
That is, it describes a set of JSON documents by listing rules to classify an <em>input</em>, some arbritrary JSON document, as within or not within the set.
The largest possible set is that of all JSON documents (all documents that are valid <tt>application/json</tt>).
The smallest set is the empty set.</t>
          <t>A <em>validator</em> (also known as an <em>acceptor</em>) is a process that tests if a particular input is described by the schema, by evaluating it against the requirements.
An accepted input is called an <em>instance</em> of the schema, and a rejected input is called a <em>violation</em> of the schema.</t>
          <t>In all validator implementations, equivalent JSON values MUST return the same validation result and annotations. For example, selection between equivalent character escapes, or use of whitespace, does not affect the result. This also means that a validation keyword MUST NOT accept or reject based on third factors (those factors besides the schema and the input itself). A separate "outside verification" scheme that queries external data sources is possible, but outside the scope of this document.</t>
        </section>
        <section anchor="annotation">
          <name>Annotation</name>
          <t>A JSON Schema may describe additional output to accompany an "accept" result,
called <em>annotations</em>. An annotation is a tuple that, at the minimum, relates a
particular annotation keyword in the schema to a particular value within the
instance. Annotations typically document the meaning of properties, declare
relationships between data, or denote hyperlinks.  Several forms of output are
defined, and the annotation process can be disabled as a performance or
resource consumption optimization.</t>
          <t>Output annotations might only be "as true as" the input, and useful only for select inputs. For example, annotations may only meaningfully describe inputs with a particular "profile" link relation, or in some particular context. In any event, annotations never describe violations (rejected inputs).</t>
          <t>The interface to access annotations may be highly configurable depending on the implementation, in such ways as limiting output to certain annotation keywords, aggregating values together, or other features to enhance performance. Annotation output may be bypassed entirely.</t>
          <t>Annotations may be presented as a set, or as a stream of events, however if the input is rejected during processing, this voids all annotations previously emitted from that input.</t>
        </section>
        <section anchor="internet-media-types">
          <name>Internet media types</name>
          <t>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
an instance of a particular JSON Schema.</t>
        </section>
        <section anchor="keywords">
          <name>Keywords</name>
          <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>
        <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>
    <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-1">
        <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-1">
          <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 anchor="readonly-and-writeonly-example">
          <name>"readOnly" and "writeOnly" example</name>
          <t>In the following example of a read/write API accepting and producing
JSON representations of resources, "username" is a field meant for display
and cannot be changed, while "password" cannot be retrieved for display
but can be set to a new value.</t>
          <t><tt>json
{
  "$id": "https://example.com/schema",
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "readOnly": true
    },
    "password": {
      "type": "string",
      "writeOnly": true
    }
  }
}
</tt></t>
          <t>With the instance following instance processed:</t>
          <t><tt>json
{
  "username": "xyz",
  "password": "123"
}
</tt></t>
          <t>two annotation output units would be produced:</t>
          <t><tt>json
{
  "keywordLocation": "/properties/username/readOnly",
  "absoluteKeywordLocation":
    "https://example.com/schema#/properties/username/readOnly",
  "instanceLocation": "/username",
  "annotation": true
}
</tt></t>
          <t><tt>json
{
  "keywordLocation": "/properties/password/writeOnly",
  "absoluteKeywordLocation":
    "https://example.com/schema#/properties/password/writeOnly",
  "instanceLocation": "/password",
  "annotation": true
}
</tt></t>
          <t>These annotations are used for context-dependent validation,
which is performed by the application that invoked schema evaluation.</t>
          <t>The API's behavior when sent a readonly field in a write request or
a write-only field in a read request is out of scope of this document.
This illustrates how the API server can use the schema to trigger
whatever that behavior is, rather than hard-code read-only and
write-only flags or find a custom data-oriented solution.</t>
        </section>
      </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 3627?>

<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:
H4sIAAAAAAAAA9y9a3fbVpYg+v38CrScNZY8JP1KXIlz7+1WbKejbjvJ2HKn
+2ZSaZAEJVRIgAWAllVart8++332AUBZdlLprqlVKxZJ4Dz22We/H9PpNHRl
ty4eZ//y6rtvs1eL82KTh2W9qPINfLls8lU3LYtuNf1TW1ct/Ux/TuXve/fC
Iu+Ks7q5fJyV1aoO7W6+Kdu2rKvucgtjnDw7/TrLbmX5uq0fZwdltSy2Bfyn
6g4m2UGxLLu6KfM1fjg5/gr+qRv46+Xp1wchb4r8cXb88jQsYPKianft46xr
dkX4pbi8qJvl45Bl0+yk6oqmKrrpU1wufYW7CdvycfZjVy8mWVs3XVOsWvjr
coN//BTePM4ehpDvuvO6gWGm8FqW8a6fl22ePd21bZHv1h39AFst14+zNfzy
T0232swW9YZ+qJuzvCr/knew38fZ07zLs9Mmr9pV0cC6yq6EX94UOn5ZwQaO
Z9kPTXl23rkpj3dtV1b+e5kxz/N/mv9l9XYG+0tG+WaWHVfLprho3TDfFFVz
2f9JR+Kvfj7HZ/7pMj+va9pFqOpmQ6tEaD578uL4waMHj+lNg04mW32cPds1
9bbIq+xJvdnuAO7Zi7zarfJFt2uKps2O27ZelAQOek2wC4d9tWjKbZc9z6uz
XX5WZK+2xaJclQt6OPtsdj97BsigLy4Bqx5nD+7dvz+994iHypuzonucnXfd
9vHduxcXF7NiAShY0vHTKPl6Bqu8u93N1zJue3dVrov2Lj3ZdndxIVPY4Gy7
XNGobdGURYuYq/vERx5nrzoAWN4sM30Dfn3+9PsxwEz5RF7NcEsl3ItGftBj
edUVb4rhjwTQk69eACybbd1EoNmQ/wIn2VwUveH+pT6v0u/fPxIg3Yt8fV53
Td4b7bg9r38Z/khDftfki3UxGFUO9XlZ/VIsGem/X+fdChApuz+7l57fZ9N7
DwB++47w4iEd2enLu/js3ZfPnkzXy+0UP9x78ODR3T2H9MPDJ9nLAvB3A7RE
bl//XXj03188//bVNWd2Osu+avLLHkhOy036NQHjtHjb7fJ12V2mYzydZd/U
6zWgy+Dgn+Zw7sMfabgnQCDLN/UEyMRiNjis5/nlJq/6R0VXuP8bjfaiXDR1
W6+6dKSXs+y0npf9gV4CIiJup7/RQK8roARNC7vM6hXeyGq+a87O02GBwpye
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
xDY6RSBbKyilKqPptflL7pLYM2n7K/AvhkVdZD+qVoph8mRgSqNNnjlWSib4
9yQ4ARHcdY8oYaW5d6a7fnkhOOUSH2R19q34JHj9XhlYEdlfWalNvzoJmBUX
lWqXR5PR3MyRDx5D+h8zfK/dN3vMr3t+d11zGeeXx7UDOr7z6w7p2C7FX2Ns
I63feJA/yquu1t7e3YaMRaLTx412VE/4VUZ+/ZfGZ+H457HFdr3dZ+Ln25ru
tQUDMzEloDj35rNiysqHHqhHWlFlrvzPSkwxOsPdujvxVGAV4MjqF8+7SJKH
5ojPhMlYHj4gVVmYwpe/rpm1CqkNzG65vawkLekSdQwopv3WUZ9C1GJ9XjEO
nCYhIguXiBM5Ao6r4LTevK6lUlyuHHy6uhI0216eFjT4SlzaBQcxWbGJao0J
cCL9qDL1hcdBHEGeBAf0zyEXhLh3ROuwZMZ0Kben4D/WRwfS+oju9MqMc1Hb
wGu3NBdNrKk26LCFmOBupTBbIvM9SDMr/lBwMhmwDrQwaIEnVF01gjtzMPnr
J386C2jpk+ZscjxJrazS/xFeUvpdvZkfHaryljZYlaZggejbH9uFZtnB6l61
DAe1JkRF7BnCil6MPWqoCIwfxU8DcsocS/gLYVOu09Rf4KOdY/6hN5ZVZ8oj
dJTc2n/fZbjv0tt/Pvfen4PG/x+55HwocTj7h/RRF90Nx/gLL7ybDPpjLr4g
5v9xc3TtpfWrzNf7v/jeqzKfvY+5LjGX8q8XoxfozQ/S/5FrVWL/cqv+WQPa
fQ0dcJHp4mQyJrsBSsl6rpAjJ9H+IlJmh8ITsmat2YuA/9dIWTwygJhOTD0R
EbvEcU0x8ttdSHgKKOVy1TAavFPNz+twKzedk2Xs0SRwE5MnMeLOqZGo4zFU
D7ezRlKHuC1GWvD671O7VcqD+uj8KLNIx33u070OaMS300L9lJr4yYswceGR
318sYPEqkElbjGUGIb5A15O4a6s14ZeUP+FbP/mxQMYXJ84gL2IwZovTyQ1r
NjgnDbKNl1Ec03z8fQvecsoNJKYb5okxNYlWBUjexQVXsibtjaDvNzsxSkMk
FBHTwWeUh0SxPKiaNLV6r3h+M58mN3gsaR8zaefFwS95m+DXx1O7/zm+2RHf
65jfleUYSVovWWTX5XUOVJU0cDcOxhebhEtz4s45+fXkFadZSzu8ucYb+rU1
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
9sbUZNpkugH0YEb+bavPW4T9Ib3q1SOSi0jqOzMLUisd95UponNfvWCoglHy
8JqJH83NGKlOVoDjv/vpnW+kV8JugRLgVbxl038F2RexdnPIScx4w7R9MrQz
9rpF/pjUy2/0JLOdzYmg1+7jXuV1WrnWqIm6jfza2IkMLskhjweZ8Ha2dYcp
5GnFqYcUSSCDQMUhvUhKexOre720VrcpdAKr8qftlPZgdieuk5a3CJuHbOaq
2wk5Dmx+eT5ZIQxlzNeOBtkbrgxYSkS7G7bbbAT8ABn4Ok2jwGtAn75QQib5
Sk25a4/renGKmeXll2Y27RWRX3bAQd6mSSGbSCQifH4wFQWlAXfV69RundQn
LSjQlBMrKlCUfrOHtZ4Zu/0sbY8t0lM31ZINr1PyYsZlVSIb92vIcsyTdt4N
FJBT8vdKTmHInUF2qvDU8DR4Mi23Z8zC5+ly3p4iXhJVWIroxJ/pDj1uum6b
LPBvPvtKt9ovaOXOna8/O4Sy9mk6RE/Oyl27LcmgykgkKSPrdifIdeaknOJh
0KqKhpLvZl1i9jqRKg6/uKhbD1VPgJpDxQA74A0z6yVLqGbhJUxGN5X2mDY8
KEkPIhiCnS8JVTDSEADJgvHeYdFGsQbhLxHWOOM7pUu/lrx6mw3QRn377NkP
2gc62MlGrZtX/BxHZoQlFOOGAj8D6mRr5rW+vgdJle+gESIPyWFcqkhMUmyX
MwE2G9atNBWIOrixgndhztG3W8h1mi0Uiqb7vXaPdLoxmV4MbFw7Vqah4usR
9fKWqfeAhQoYeLcgxOgco7+5dG4DmwLK/E8rrxrbdpVaoWw42EAKiYBFuztQ
AGK+uRbPKfrChDNnnvBvG9+POeBmZSUcssYALQnt4Tajb+QKeoli0P5HNMFx
urd7eztSK5/WxINR0q57J9MskOb6ZBXT9In040pUeSJHSu+Y9GevkiqKSMrT
iVd9WLUAIVRnFfaI/Rz2jClXAjYx4qaPZ6IRqAZ5Okuv7n0obKbwPU/btER1
AZKXt1UhyhiAzW/txOU2XCXWZOJwQhqBZ4o2wEQ2X+faUI2OoxaX3QyffnUk
bjTP2LFTiHs+kKUjoZoSsyJ/EVS3dZu0MbvkoB8m2aU/Pn+YzCR4Jn6s56DG
/RjpTqVUx98+Onl4XC3WlA5wd/bp57NPv57N02al6NTM5nmWjt8sbeAZ+d/X
s/MLtDDD/TC7c+eru0eXi0PtHauwAHYXgjQ5mJ8PDiZH481YHcfB1/gj5TgK
dOwEmav6QatfjTlmEgZUvopQY1ep1Vlt2GumgC/aHvDiWV8QOgYWkNR8XhnW
OrGDs9xWzOzTzMOE0OckXRu7y7XskWnok/naqO3sGFcSs9N7FirrFGCkgpl3
RS5suXClCkjtmZX2fZrPo21yAvrX4ibb8Carqq5XyBcnA8tNhthTZhhWr8Rj
zMTsxF2+veKudMmeLoMCoSayXYW92y4kSBOFRFO/Zgc4ayHObAB0JuuLH0jv
Uhrsut+jDvV9+0pLjAh+02qDWt8BCy4GVCWrGZrHe74aFKKw4WoR61+qGaNw
7NEds66VFm2YMp1RNNiKp38jvL3GEsHl2OXgQzFdf5XFXdlomcZjDz2cNgdT
J2eHzCFmlD2ZAy0Icotar21R6LoxbtBVP07gm5Bq8AK7kQRatZl8E6ER16RC
3TvfO167kgVmed7VyA3U8PxmteGRM96/+J0szIpAP/mcpp42MNI7NfgoXECZ
QkJhVFmWiUymNpvG2SzJP0i5qXXXO8FKw5Rs5uV5dWmsbQaxJgk9bKoqDVlq
jtKS2QGtcoYUWe4+VzWeJhOLHddEdNUSFFed5Od6u9SiMFLS6DY2mh9fU6vI
O1WQpCqyWEnS7LbzeieSgGAuTzrMZcZXG06JOzX7zE+QcaQFiOtHfMzO3Uha
smuY5eTfoJxpyR27fVidyGZ8qi6KCX49oQFPLtpuQ+WVBsMSQAacLqQMOcNf
zU6TAnTy9MGTJ/RZApACN41+v1nh27wBv+YNyNoaus+Hfsmo65QnoqVgbO1i
Vxp6lI0ybbQfHz8oP/vss290twpJLiMeoiRU6s+JTE3qz+V1rR8VH4UdXJyL
deOC2cDN0qFqNrEHosVykQb5p8kb34jNoyeoL+eD+7Rz4YVDQw438WGCuRfI
RJoMxch8sODwOHM/m2nInz1FQPWylTtfgLcMXd8lWAn1XlQzWhRyKpkLHqOi
sEJIIScPkcsnDhpstmtsCtBNmXIIXUXO1VBrZlWRj/+K4oot/GGU8geowaky
l059O2cMpsJ0jH1Wn20oK90ulqRf8jUqjD7ybLzUyDggrLA1bAeJT/gUYfpV
eGHnjsY7Ps0UwIki+U0s70QdjRSkgeajjwCYUehFCQnEDtmBR+QFfbMGhyoL
lcMsWM1ZAQE+0FqJ4THMNI7IN19/6e0zPyGpzzWUQd3gBo9qyrpkEBtQofVG
4kMSpnIIfyfzzW2+s10M5fAUkkfie7V0oteKXI+/K/+jDrHu2px9eZ366gwB
lGlwxpeLBiTC5KxhNFVO73vw46PH3H9LRDUjZI+PE2qc+lz6LssXB7f0b2Yv
KDEz2w1YLkm4ZkXy7l3VefRJzhNgX95CUWWS0IS0Uvrf2UO4jgnFcpsa+t9k
ju1YdYwCAA==

-->

</rfc>
