<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-jsonschema-json-schema-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title>JSON Schema</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-jsonschema-json-schema-03"/>
    <author initials="L." surname="Dusseault" fullname="Lisa Dusseault" role="editor">
      <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>henry@henryandrews.net</email>
      </address>
    </author>
    <date year="2026" month="August" day="26"/>
    <area>ART</area>
    <keyword>Internet-Draft</keyword>
    <keyword>JSON</keyword>
    <abstract>
      <?line 77?>

<t>JSON Schema defines the media type "application/schema+json", a JSON-based format
for describing the structure of JSON data.
A JSON Schema may assert constraints on a JSON value,
ways to extract information from it, and how to interact with it.
The "application/schema-instance+json" media type provides additional
feature-rich integration with "application/schema+json" beyond what can be offered
for "application/json" documents.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>The jsonschema WG is where this draft is discussed.
Source for this draft can be found at
    <eref target="https://github.com/lisad/draft-ietf-jsonschema-json-schema"/>.</t>
    </note>
  </front>
  <middle>
    <?line 87?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>JSON Schemas are documents that describe and constrain JSON values.
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>For brevity, the converse of logical statements is assumed, except for values described as undefined; that is,
"only &lt;X&gt; is accepted" shall imply "&lt;not X&gt; is rejected".</t>
      </section>
      <section anchor="audiences">
        <name>Audiences</name>
        <t>This specification has three reading audiences: authors of JSON Schemas, implementors
of validation or other software, and authors of meta-schemas.</t>
        <ul spacing="normal">
          <li>
            <t>For schema authors, the chapter on terminology (<xref target="terminology"/>) might be the first
read, followed by chapters about
core keywords (<xref target="core-keywords"/>),
subschema applicator keywords (<xref target="subschema-keywords"/>) and
validation assertion  keywords (<xref target="validation-keywords"/>)
as these are the keywords most commonly used when authoring schemas. In addition,
the formats used with the <tt>format</tt> keyword are defined in <xref target="format-vocab"/>.  Other
sections up to and including <xref target="metadata"/> may be interesting depending on
the topic of the chapter.</t>
          </li>
          <li>
            <t>Implementors will need to understand the requirements in sections 3 through 10 but also
the requirements on loading and processing schemas (<xref target="loading-and-processing"/>),
keyword behaviors (<xref target="keyword-behaviors"/>), and formatted output (<xref target="output"/>).
Refer to the appendix on keyword dependency implementation (<xref target="impl-deps"/>) for additional
guidance on approaches to implementing keyword dependencies.</t>
          </li>
          <li>
            <t>Authors of meta-schemas including extensions to JSON Schema will want to read
the chapter on <xref target="extensibility"/> and <xref target="vocabularies-appendix"/>.</t>
          </li>
        </ul>
      </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>In computer science terms, a JSON Schema document (a <em>schema</em>) notates a <em>grammar</em>
that describes a <em>language</em> of JSON values.
That is, a schema describes a set of JSON values by listing rules to classify
an <em>input</em> as within or not within the set.
The largest possible set is that of all syntactically valid structured inputs.
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>
        </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.
A basic annotation exampe can be seen at <xref target="title-example"/>.</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>As noted in <xref target="val-ann"/>, annotation production and output can be highly
configurable to support performance trade-offs and/or streaming output.</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 values 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>
        </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 are handled in accordance with section <xref target="unrecognized"/>,
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>Terms in this document are consistent with use in other JSON specifications, but
may take on additional nuance in the context of JSON Schema.  These
definitions may provide a useful reference.  More comprehensive
requirements are later in the document.</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>
      <t><strong>JSON Text</strong></t>
      <t>A JSON text is an information resource (series of octets) described by the
application/json media type, as defined in <xref target="RFC8259"/>.</t>
      <t><strong>JSON Value</strong></t>
      <t>In addition to <xref target="RFC8259"/>'s definition, <xref section="1.3" sectionFormat="comma" target="RFC9535"/> describes a JSON value
as "<em>often</em> constructed by parsing a JSON text" (emphasis added).  Unlike a JSON text,
a JSON value is not required to be a
serialized sequence of octets; it may instead be a parsed, in-memory data
structure.  This document uses <em>JSON value</em> when referring to such parsed
or structured data, reserving <em>JSON text</em> for the serialized form.</t>
      <t><strong>Input</strong></t>
      <t>A JSON text or JSON value, 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 value that is in the valid set for a given schema is an <em>instance</em>
of that schema.</t>
      <t><strong>Schema</strong></t>
      <t>A JSON Schema document, or simply a <em>schema</em>, is used to describe
and constrain JSON values.  Used in validation, the schema defines the valid
set, or all possible inputs that validate successfully.
A JSON Schema is also a JSON value and 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>Broadly speaking, keywords fall into one or more 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 info item indicating input acceptance
or rejection; produce errors upon rejection</t>
        </dd>
        <dt>annotations</dt>
        <dd>
          <t>attach information intended for application use to an instance
via output</t>
        </dd>
        <dt>applicators</dt>
        <dd>
          <t>apply one or more subschemas to a particular location
in the instance, and produce a boolean result info item
that combines or modifies those produced by the subschemas;
applicators producing an acceptance result suppress the
errors of any subschemas that produced a rejection</t>
        </dd>
        <dt>reserved locations</dt>
        <dd>
          <t>do not interact with any results or output, but reserve a place
for a specific purpose to ensure interoperability</t>
        </dd>
      </dl>
      <t>Keywords which are properties within the same schema object are referred to as
<em>adjacent keywords</em>.</t>
      <t>Extension keywords, meaning those defined outside of this document,
are free to define their own behaviors, within the constraints required
by this specification.</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>Dialect</strong></t>
      <t>A <em>dialect</em> is a set of vocabularies used within a given schema resource,
together with the syntax constraints described by a meta-schema.
The meta-schema's URI also identifies the dialect.</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">
      <name>Overall Definitions and Requirements</name>
      <t>This section is the start of normative requirements.</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="input">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 syntactically correct inputs, 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 accepts, equivalent to the empty schema {}</t>
            </dd>
            <dt>false</dt>
            <dd>
              <t>Always rejects, equivalent to 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="input">
        <name>Input</name>
        <t>Any <xref target="RFC8259"/>-compliant JSON value or document MAY be used as input.
An instance of a schema is an input that is in the valid set of
that schema.</t>
        <t>An input value has one of JSON's 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
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="equal">
          <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>To ensure interoperability, all JSON Schema keywords, whether
defined in this specification or elsewhere, MUST define
their behavior in terms of the categories defined in <xref target="terminology"/>
and described in detail under <xref target="keyword-behaviors"/>.</t>
        <t>A JSON Schema object MAY contain properties which are not
recognized as known schema keywords.
The behavior of such keywords is governed by <xref target="unrecognized"/>.</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="required-and-recommended-vocabularies">
          <name>Required and recommended vocabularies</name>
          <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>This document further defines a RECOMMENDED set of additional vocabularies
for standard use.</t>
          <t>These vocabularies together compose the standard JSON Schema dialect,
which serves as the default dialect as discussed in <xref target="default-dialect"/>.</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.
Keywords that an implementation does not support are considered
to be unrecognized; their behavior is governed by <xref target="unrecognized"/>.</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="val-ann">
          <name>Validation and Annotation</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.  Keywords MUST NOT modify the input
during evaluation.  Annotations MAY be used to indicate that modification
is desired, however the exact mechanism of modification is deferred to
applications or other specifications building on JSON 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>
          <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>
          <t>Implementations MAY allow configuring annotations
in such ways as limiting output to certain annotation keywords, aggregating values together, or other features to enhance performance.
Implementations MAY allow annotation output to be bypassed entirely.</t>
          <t>Annotations MAY be presented as a single data structure, or as a stream of events, however if the input is rejected during processing, this voids all annotations previously emitted from that input.
See <xref target="relevance"/> for detailed guidance on when previously emitted annotations MUST be discarded.</t>
        </section>
      </section>
    </section>
    <section anchor="core-keywords">
      <name>Vocabulary for Core Keywords</name>
      <t>Core keywords MUST be implemented by any implementation indicating support
for the "application/schema+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 full <tt>URI</tt>
(<xref section="3" sectionFormat="comma" target="RFC3986"/>) and this URI MUST be normalized.
The current schema MUST be an instance of 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,
however, using this specification's default dialect (<xref target="default-dialect"/>)
is RECOMMENDED.</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 absolute URIs and each 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
  with JSON, 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>Keywords defined by unrecognized vocabularies are considered to be
unrecognized, with behavior governed by <xref target="unrecognized"/>.
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.</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 anchor="anchor-example">
            <name>Example</name>
            <t>In this example, more than one property can hold an address object. The
address object is defined under a nested "$defs" so that utility schemas can
be gathered under "utils".  To ensure references continue working even if
this nested "utils" arrangement is changed, the model is given an anchor and
the anchor is used to refer to it.  The extra layers and names are not
needed in a schema this short, but in a much larger schema they could
help with maintainability and readability.</t>
            <artwork><![CDATA[
{
  "type": "object",
  "properties": {
    "home_address": { "$ref": "#address-model" },
    "work_address": { "$ref": "#address-model" }
  },
  "$defs": {
    "utils": {
      "$defs": {
        "address": {
          "$anchor": "address-model",
          "type": "object",
          "required": ["street", "city"],
          "properties": {
            "street": { "type": "string" },
            "city": { "type": "string" }
          }
        }
      }
    }
  }
}
]]></artwork>
            <t>For an example of <tt>$dynamicAnchor</tt> see <xref target="recursive-example"/>.</t>
          </section>
        </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 an example of <tt>$ref</tt>, see the example of <tt>$anchor</tt> above in <xref target="anchor-example"/>.
For an example of <tt>$dynamicRef</tt>, see <xref target="recursive-example"/>.<cref anchor="_7">The difference between the hyper-schema meta-schema in pre-2019
  drafts and in 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>
        </section>
        <section anchor="defs-example">
          <name>Example</name>
          <t>In this partial schema for an IMAP folder representation in JSON,
a reusable definition for 32-bit unsigned integers is factored out and
referenced in multiple property definitions.</t>
          <artwork><![CDATA[
{
  "type": "object",
  "$defs": {
    "imap-number": {
      "type": "integer",
      "minimum": 0,
      "exclusiveMaximum": 4294967296,
      "$comment": "IMAP 'number' defined in ABNF as unsigned 32-bit integer"
    }
  },
  "properties": {
    "last_uid": {
      "$ref": "#/$defs/imap-number"
    },
    "recent_uid": {
      "$ref": "#/$defs/imap-number"
    }
  }
}
]]></artwork>
        </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 produced as an annotation result.</t>
        <t>For an example using <tt>$comment</tt>, see <xref target="defs-example"/> above, where a comment
explains to schema maintainers where a value limit comes from.</t>
      </section>
    </section>
    <section anchor="subschema-keywords">
      <name>Vocabulary for Subschema Applicators</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>With the exception of the cooperative "if", "then", and "else" keywords,
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>"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>This keyword accepts only if every subschema in its value accepts the input.</t>
          <t>The <tt>allOf</tt> keyword is useful for combining multiple conditionals
in a schema.  See the example for <tt>if</tt> below in <xref target="allof-if-example"/>.</t>
          <section anchor="allof-multiple-inheritance-example">
            <name>Example</name>
            <t>Another example of the utility of <tt>allOf</tt> is multiple inheritance.
In this example, a project has all of the properties of a task
and a collection.</t>
            <artwork><![CDATA[
{
  "$defs": {
    "task": {
      "$anchor": "task",
      "type": "object",
      "required": ["title", "deadline"],
      "properties": {
        "title": { "type": "string" },
        "deadline": { "type": "string", "format": "date" },
        "done": { "type": "boolean" }
      }
    },
    "collection": {
      "$anchor": "collection",
      "type": "object",
      "required": ["items"],
      "properties": {
        "items": {
          "type": "array",
          "items": { "$ref": "#task" }
        }
      }
    },
    "project": {
      "allOf": [
        { "$ref": "#task" },
        { "$ref": "#collection" }
      ]
    }
  },
  "$ref": "#/$defs/project"
}
]]></artwork>
          </section>
        </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>This keyword accepts only if at least one schema in its value accepts the input.</t>
          <t>Note that in general all subschemas MUST be examined to ensure that
keyword dependencies from each subschema are discovered, although
see <xref target="keyword-behaviors"/> for possible short-circuiting conditions.</t>
          <t>Examples of using anyOf:</t>
          <ul spacing="normal">
            <li>
              <t>Defining objects that can satisfy one or more schemas,
such as attachments that can be a <tt>note</tt> or a <tt>task</tt> OR satisfy both schemas.</t>
            </li>
            <li>
              <t>Requiring alternate fields in an object, when combined with the "required" keyword: a
contact could require a <tt>work_email</tt> or require a <tt>work_phone</tt>, and putting
both <tt>required</tt> keywords inside the <tt>anyOf</tt> keyword allows either to satisfy the schema.</t>
            </li>
          </ul>
        </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>This keyword accepts only if exactly one schema in its value accepts the input.</t>
          <t>Similar to anyOf and allOf, oneOf can be used in combination with object
definitions to allow only one object definition to be satisfied.  Compare
to the example for "anyOf": using "oneOf" with an attachment envelope
would allow the attachment to satisfy the <tt>note</tt> or <tt>task</tt> schema but
not both.  A task might have a duration or a due date but not both.</t>
        </section>
        <section anchor="not">
          <name>"not"</name>
          <t>This keyword's value MUST be a valid JSON Schema.</t>
          <t>This keyword accepts the input only if its subschema rejects the input.</t>
          <t>For example, a product schema could require the property
<tt>expiration_date</tt> if the <tt>validity</tt> property does
NOT have a value equal to <tt>forever</tt>.  Or, if
two properties could either be present or both absent
but not appear at the same time, this can be expressed in many ways but
possibly the briefest is</t>
          <sourcecode type="json"><![CDATA[
  {
    "not": {
      "required": ["approved_date", "rejected_date"]
    }
  }
]]></sourcecode>
        </section>
        <section anchor="if">
          <name>"if"</name>
          <t>This keyword's value MUST be a valid JSON Schema.</t>
          <t>This keyword always accepts the input.
However, it affects whether "then" or "else" is evaluated,
depending on whether its subschema accepts or rejects the input.</t>
          <t>As applicable, annotations are produced from its subschema in the usual way
(when the subschema accepts), and regardless of whether "then" or "else" is present.</t>
          <section anchor="allof-if-example">
            <name>Example</name>
            <t>This shows how the <tt>if</tt> keyword can be
conditionally restrict a "postal-code" value on the "country" value.</t>
            <artwork><![CDATA[
{
  "type": "object",
  "properties": {
    "country": { "type": "string" },
    "postal_code": { "type": "string" }
  },
  "allOf": [
    {
      "if": {
        "properties": { "country": { "const": "Canada" } }
      },
      "then": {
        "properties": {
          "postal_code": { "pattern": "^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$" }
        }
      }
    },
    {
      "if": {
        "properties": { "country": { "const": "USA" } }
      },
      "then": {
        "properties": {
          "postal_code": { "pattern": "^[0-9]{5}$" }
        }
      }
    }
  ]
}
]]></artwork>
          </section>
        </section>
        <section anchor="then">
          <name>"then"</name>
          <t>This keyword's value MUST be a valid JSON Schema.</t>
          <t>When an adjacent "if" is present and its subschema accepts the input,
this keyword's result is the result of the "then" subschema evaluating the same input.
Otherwise this keyword is ignored.</t>
          <t>This keyword has no effect when "if" is absent, or
when its subschema rejects the input.
Implementations MUST NOT evaluate
the input against this keyword, for either validation
or annotation production purposes, in such cases.</t>
          <t>See the example above in <xref target="allof-if-example"/> for
a constraint added in a <tt>then</tt>, conditionally upon the <tt>if</tt> statement,
and below for an example using if/then/else.</t>
        </section>
        <section anchor="else">
          <name>"else"</name>
          <t>This keyword's value MUST be a valid JSON Schema.</t>
          <t>When an adjacent "if" is present and its subschema rejects the input,
this keyword's result is the result of the "else" subschema evaluating the same input.
Otherwise this keyword is ignored.</t>
          <t>This keyword has no effect when "if" is absent, or
when the input is accepted by its
subschema.  Implementations MUST NOT evaluate
the input against this keyword, for either validation
or annotation production purposes, in such cases.</t>
          <artwork><![CDATA[
{
  "if": { 
    "properties": { "type": { "const": "physical" } }, 
    "required": ["type"]
  },
  "then": { "required": ["street", "city"] },
  "else": { "required": ["url"] },
  "$comment": "Credit to jsonic.io for this example"
}
]]></artwork>
        </section>
        <section anchor="dependentschemas">
          <name>"dependentSchemas"</name>
          <t>This keyword specifies subschemas that are evaluated whenever 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
input must be accepted by 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 anchor="example-of-requiring-rejection-reason-if-rejection-date-is-set">
            <name>Example of requiring rejection reason if rejection date is set</name>
            <artwork><![CDATA[
{
  "type": "object",
  "properties": {
    "applicant": { "type": "string" },
    "approved_date": { "type": "string", "format": "date" },
    "rejected_date": { "type": "string", "format": "date" },
    "rejection_reason": { "type": "string" }
  },
  "required": ["applicant"],
  "not": {
    "required": ["approved_date", "rejected_date"]
  },
  "dependentSchemas": {
    "rejected_date": {
      "required": ["rejection_reason"]
    }
  }
}
]]></artwork>
          </section>
        </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>This keyword accepts an array input only if every subschema accepts
the input item at the same array index, if any.  This keyword
does not constrain the length of the array.  If the array is longer
than this keyword's value, this keyword only validates items in the input
up to the size of the keyword value.</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 accepts the input only if its subschema accepts every item
at an index not covered by the adjacent prefixItems
(or every item, if prefixItems is absent).</t>
          <t>Omitting this keyword has the same assertion behavior as
the empty schema.</t>
          <t>Examples of <tt>items</tt> can be found in other examples in this specification.
One of the clearest is in <xref target="output-structure"/>, where the <tt>items</tt> keyword
requires the input to be a list of points objects.</t>
        </section>
        <section anchor="contains">
          <name>"contains"</name>
          <t>The value of this keyword MUST be a valid JSON Schema.</t>
          <t>This keyword accepts an array input only if the number of elements
accepted by 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 SHALL be 1.  If "maxContains" is absent, the maximum SHALL
be unbounded.</t>
          <t>In general, the subschema MUST be applied to every array element
even after enough matches to satisfy "minContains" and "maxContains"
have been found in order to produce annotations and support
keyword dependencies, although see <xref target="keyword-behaviors"/> for
conditions under which short-circuiting is possible.</t>
          <sourcecode type="json"><![CDATA[
{
  "type": "object",
  "properties": {
    "title": { "type": "string" },
    "assignees": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": { "type": "string" },
          "role": { "enum": ["owner", "reviewer", "observer"] }
        },
        "required": ["name", "role"]
      },
      "contains": {
        "properties": { "role": { "const": "owner" } },
        "required": ["role"]
      },
      "maxContains": 1
    }
  },
  "required": ["title", "assignees"]
}
]]></sourcecode>
        </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>This keyword accepts only if, for every name that appears in both
the input and as a name within this keyword's value,
the subschema accepts the corresponding input property value.</t>
          <t>Omitting this keyword has the same assertion behavior as
an empty object.</t>
          <t>In this example, the properties of a simple contact record are defined,
with two properties required.</t>
          <artwork><![CDATA[
{
  "type": "object",
  "required": ["name", "email"],
  "properties": {
    "name": { "type": "string" },
    "email": { "type": "string", "format": "email" },
    "phone_numbers": {
      "type": "object",
      "additionalProperties": {
        "type": "string",
        "pattern": "^[+]?[0-9 ().\\-]{7,20}$"
      }
    }
  }
}
]]></artwork>
        </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 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 "properties"
or match regular expressions in "patternProperties".</t>
          <t>This keyword accepts only if the keyword's subschema accepts
all such properties.</t>
          <t>Omitting this keyword has the same assertion behavior as
an empty schema.</t>
          <t>One of the most frequent examples of using "additionalProperties" is to
give it a value of <tt>false</tt> to forbid all unspecified properties.
See <xref target="output-structure"/> for an example of this.</t>
          <t>In the example above for <xref target="properties"/>, the "phone_numbers" field
can have any internal properties with names such as "home", "office" or
"cell", but the value for any property inside "phone_numbers" is
constrained to the format of a phone number by "additionalProperties".</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>This keyword accepts only if, for each input name that matches any
of those regular expressions, the corresponding property value
is accepted by each matching subschema.
Recall: Regular expressions are not implicitly anchored.</t>
          <t>Omitting this keyword has the same assertion behavior as
an empty object.</t>
          <t>In this example, an alternative to the schema example in <xref target="properties"/>,
phone numbers are instead represented as top-level fields ending in "_phone".
A field like "office_phone" is constrained to the format given.</t>
          <artwork><![CDATA[
{
  "type": "object",
  "required": ["name", "email"],
  "properties": {
    "name": { "type": "string" },
    "email": { "type": "string", "format": "email" }
  },
  "patternProperties": {
    "_phone$": {
      "type": "string",
      "pattern": "^[+]?[0-9 ().\\-]{7,20}$"
    }
  }
}
]]></artwork>
        </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 accepts only if every property name in
the input is accepted by the keyword's subschema.
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>
          <t>In this example, the "participants" field can have zero or one of each of the
roles for an incident response process, but no undefined roles.</t>
          <artwork><![CDATA[
{
  "type": "object",
  "required": ["title", "participants"],
  "properties": {
    "title": { "type": "string" },
    "participants": {
      "type": "object",
      "propertyNames": {
        "enum": ["incident_commander", "communications_lead", "responder", "scribe", "observer"]
      },
      "additionalProperties": {
        "type": "object",
        "required": ["name", "email"],
        "properties": {
          "name": { "type": "string" },
          "email": { "type": "string", "format": "email" }
        }
      }
    }
  }
}
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="vocabulary-for-unevaluated-locations">
      <name>Vocabulary 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 within the current schema evaluation or any of its
relevant and valid sub-evaluations (see <xref target="relevance"/>).</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 depends on "prefixItems",
"items", "contains", and itself</t>
          </li>
          <li>
            <t>"unevaluatedProperties", whose behavior depends on "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 "unevaluatedItems" subschema MUST be applied only to those
items that were <em>not</em> evaluated by "prefixItems", "items", or
"contains" in the current schema evaluation or a successful
sub-evaluation, or by "unevaluatedItems" in a successful
sub-evaluation.</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>Omitting this keyword has the same assertion behavior as
an empty schema.</t>
        <t>The <tt>unevaluatedItems</tt> keyword can be very similar to the <tt>items</tt> keyword in
some examples, like the example in <xref target="impl-deps"/> where <tt>prefixItems</tt>
is used to define exactly three items in a list and further items are forbidden,
and in that example <tt>unevaluatedItems</tt> could replace <tt>items</tt>.  Here's an example
where <tt>unevaluatedItems</tt> is doing work that could not be done by <tt>items</tt>, constraining
a list to be only numbers (and the first two numbers must be geospatial points).
An input with seven numbers in a list might validate, but an input with a string
would fail on <tt>unevaluatedItems</tt> because the string was not evaluated by the
<tt>items</tt> definition.</t>
        <artwork><![CDATA[
{
  "type": "array",
  "allOf": [
    {
      "prefixItems": [
        { "type": "number", "minimum": -90, "maximum": 90 },
        { "type": "number", "minimum": -180, "maximum": 180 }
      ]
    },
    {
      "items": { "type": "number" }
    }
  ],
  "unevaluatedItems": false
}
]]></artwork>
      </section>
      <section anchor="unevaluatedproperties">
        <name>"unevaluatedProperties"</name>
        <t>The value of "unevaluatedProperties" MUST be a valid JSON Schema.</t>
        <t>The "unevaluatedProperties" subschema MUST be applied only to those
properties that were <em>not</em> evaluated by "properties",
"patternProperties", or "additionalProperties"
in the current schema evaluation or a successful
sub-evaluation, or by "unevaluatedProperties" in a successful
sub-evaluation.</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>Omitting this keyword has the same assertion behavior as
an empty schema.</t>
        <t>As an example of using unevaluatedProperties, imagine a schema similar
to the one in <xref target="unevaluatedItems"/> but instead of a list, the geospatial
data is an object such as</t>
        <artwork><![CDATA[
  {"lat": 37.77, "long": -122.42, "dist": 34.1, "alt": 35}
]]></artwork>
        <t>The additional values could all be constrained to numbers using</t>
        <artwork><![CDATA[
  "unevaluatedProperties": { "type": "number" }
]]></artwork>
      </section>
    </section>
    <section anchor="validation-keywords">
      <name>Vocabulary for Validation Assertions</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, this keyword accepts exactly when
its type matches the type represented by the value of the string.</t>
          <t>If the value of "type" is an array, this keyword accepts exactly when
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>This keyword accepts exactly when the input is
<xref target="equal">equal to</xref> 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
enum (<xref target="enum"/>) with a single value.</t>
          <t>This keyword accepts exactly when the input is
<xref target="equal">equal to</xref> 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>With a numeric input value, this keyword accepts the input only if division by this keyword's value yields an integer.</t>
          <sourcecode type="json"><![CDATA[
{
  "type": "object",
  "properties": {
    "productName": { "type": "string" },
    "quantity": {
      "type": "integer",
      "multipleOf": 6,
      "default": 6
    }
  },
  "required": ["productName"]
}
]]></sourcecode>
          <t>This product is only sold in six-packs, so "quantity" must be a
multiple of 6; an order that does not specify "quantity" defaults
to a single pack.</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 only accepts inputs
less than or exactly equal to "maximum".</t>
          <t>See the example for <xref target="unevaluatedItems"/> which includes the "maximum" keyword as well.</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 this keyword only accepts inputs
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 then this keyword only accepts inputs
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 this keyword only accepts inputs
strictly greater than (not equal to) "exclusiveMinimum".</t>
          <sourcecode type="json"><![CDATA[
{
  "type": "object",
  "properties": {
    "discountPercent": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  }
}
]]></sourcecode>
          <t>A discount of 0% is not a discount at all, so it is excluded by
"exclusiveMinimum", while a discount of 100% is a valid (if extreme)
value, so it is included by "maximum".</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>This keyword accepts a string input value only 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>This keyword accepts a string input value only 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>This keyword accepts a string input value only if the regular
expression matches the value. Recall: regular
expressions are not implicitly anchored.</t>
          <t>An example including "pattern" can be found in <xref target="allof-if-example"/>.</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>This keyword accepts an array input value only 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>This keyword accepts an array input value only 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, this keyword is ignored (vacuously accepts).
If it has boolean value true, this keyword accepts only array inputs where no two elements are equal (<xref target="equal"/>).</t>
          <t>Omitting this keyword has the same behavior as a value of false.</t>
          <sourcecode type="json"><![CDATA[
{
  "type": "object",
  "properties": {
    "title": { "type": "string" },
    "labels": {
      "type": "array",
      "items": { "type": "string" },
      "maxItems": 5,
      "uniqueItems": true
    }
  },
  "required": ["title"]
}
]]></sourcecode>
          <t>In this example, an object may have at most five labels ("maxItems"), and the same
label cannot be applied twice ("uniqueItems").</t>
        </section>
        <section anchor="maxcontains">
          <name>"maxContains"</name>
          <t>The value of this keyword MUST be a non-negative integer.</t>
          <t>This keyword SHALL be ignored by itself (it implicitly succeeds); its validation
effect is to modify the behavior of "contains" by setting the maximum
number of array elements permitted to match the "contains" schema.</t>
          <t>As an example of <tt>maxContains</tt> and how it modifies <tt>contains</tt>, the example
in <xref target="contains"/> constrains the assignees list to contain maximum one
assignee of type 'owner', though other types of assignees are unlimited.</t>
        </section>
        <section anchor="mincontains">
          <name>"minContains"</name>
          <t>The value of this keyword MUST be a non-negative integer.</t>
          <t>This keyword SHALL be ignored by itself (it implicitly succeeds); its validation
effect is to modify the behavior of "contains" by modifying the minimum
number of array elements required to match the "contains" schema.</t>
          <t>Omitting this keyword has the same behavior as a value of 1.</t>
          <t>The example for <tt>contains</tt> and <tt>maxContains</tt> could easily be imagined
to use <tt>minContains</tt> instead.  An exercise for the reader is to extend
the example in <xref target="contains"/> to require the assignees list to have
exactly one owner AND at least one reviewer (hint: using <tt>allOf</tt> is one solution).</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>This keyword accepts an object input only if its
number of properties is less than, or equal to, the value of this
keyword.</t>
          <sourcecode type="json"><![CDATA[
{
  "type": "object",
  "properties": {
    "email": { "type": "string", "format": "email" },
    "phone": { "type": "string" },
    "mailingAddress": { "type": "string" }
  },
  "minProperties": 1,
  "maxProperties": 1
}
]]></sourcecode>
          <t>In this example, a contact record must have exactly one primary contact method.
The value of "minProperties" rules out giving none, and "maxProperties" rules out
giving more than one.</t>
        </section>
        <section anchor="minProperties">
          <name>"minProperties"</name>
          <t>The value of this keyword MUST be a non-negative integer.</t>
          <t>This keyword accepts an object input only 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>This keyword accepts an object input only 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>This keyword accepts 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>
          <sourcecode type="json"><![CDATA[
{
  "type": "object",
  "properties": {
    "title": { "type": "string" },
    "startTime": { "type": "string", "format": "date-time" },
    "endTime": { "type": "string", "format": "date-time" }
  },
  "required": ["title"],
  "dependentRequired": {
    "endTime": ["startTime"]
  }
}
]]></sourcecode>
          <t>In this example, a meeting invitation can have neither "startTime" nor "endTime",
but it cannot give an "endTime" without also giving a "startTime".</t>
        </section>
      </section>
    </section>
    <section anchor="format-vocab">
      <name>Vocabulary 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="input">input 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 produced as an annotation, if the implementation
supports annotation production. 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 specification. 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 produce "format" as an annotation if the implementation
supports annotation production;</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 produce 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 accepted by 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 accepted by 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 accepted by 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 accepted by 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 accepted by 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 accepted by the "email" attribute are also
accepted by 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 accepted by 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 accepted by the "hostname" attribute are also
accepted by 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 accepted by 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 accepted by 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 accepted by 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 accepted by 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 accepted by 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 accepted by 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 accepted by 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 accepted by 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 accepted by 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-interop">Regular Expressions</xref>
section of this specification, and SHOULD accept all valid ECMA-262 expressions.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="content">
      <name>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="metadata">
      <name>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 anchor="title-example">
          <name>"title" and "description" example</name>
          <t>Consider the following schema, which has one "title" and two "description"
keywords, one in a referenced schema and one beside the reference:</t>
          <artwork><![CDATA[
{
  "title": "Change Record",
  "type": "object",
  "required": ["editor"],
  "$comment": "A real record would have more properties",
  "properties": {
    "editor": {
      "description": "The user who made the change.",
      "$ref": "#/$defs/username"
    }
  },
  "$defs": {
    "username": {
      "description": "A username identifying an account.",
      "type": "string",
      "minLength": 3
    }
  }
}
]]></artwork>
          <t>Given the instance:</t>
          <sourcecode type="json"><![CDATA[
{
  "editor": "someone"
}
]]></sourcecode>
          <t>While the exact structure depends on the selected output format (<xref target="output"/>),
the following information would be included (recall that the root
JSON Pointer is an empty string):</t>
          <table>
            <name>Annotation information</name>
            <thead>
              <tr>
                <th align="left">keyword</th>
                <th align="left">input pointer</th>
                <th align="left">evaluation path</th>
                <th align="left">annotation value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">"title"</td>
                <td align="left">""</td>
                <td align="left">""</td>
                <td align="left">"Change Record"</td>
              </tr>
              <tr>
                <td align="left">"description"</td>
                <td align="left">"/editor"</td>
                <td align="left">"/properties/editor"</td>
                <td align="left">"The user who made the change."</td>
              </tr>
              <tr>
                <td align="left">"description"</td>
                <td align="left">"/editor"</td>
                <td align="left">"/properties/editor/$ref"</td>
                <td align="left">"A username identifying an account."</td>
              </tr>
            </tbody>
          </table>
          <t>There is one "title" applied to the instance root from the
evaluation root.  There are two "descriptions", and given
the presence or absence of "$ref" in the evaluation path,
we can tell that "A username identifying an account." comes
from a re-usable schema, while "The user who made the change."
comes from the schema where that re-usable schema is used.</t>
          <t>The consuming application is expected to use this information to
decide whether or how to use each annotation, based on its knowledge
of the schema's design conventions.  This specification does not define
semantics for the different evaluation paths.</t>
          <t>Note that "$comment" (<xref target="comment"/>) does not appear in the output table
as it is not an annotation; this is the main distinction between "$comment"
and "description".</t>
        </section>
      </section>
      <section anchor="default">
        <name>"default"</name>
        <t>There are no restrictions placed on the value of this keyword.</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 an instance of
the associated schema.</t>
        <t>Because annotations can only appear in output if they are attached to
a location that exists, this keyword's annotation behavior is only useful
for use cases such as determining whether the value provided matches
the default.</t>
        <t>This keyword is most commonly used by applications outside of the scope
of this specification, such as generating documentation or web forms
from schemas.</t>
        <t>For an example of "default", see the "quantity" property in the
"multipleOf" example above in <xref target="multipleOf"/>.</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>
          <sourcecode type="json"><![CDATA[
{
  "$id": "https://example.com/schema",
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "readOnly": true
    },
    "password": {
      "type": "string",
      "writeOnly": true
    }
  }
}
]]></sourcecode>
          <t>When the above schema evaluates the following input:</t>
          <sourcecode type="json"><![CDATA[
{
  "username": "xyz",
  "password": "123"
}
]]></sourcecode>
          <t>two annotation output units would be produced:</t>
          <sourcecode type="json"><![CDATA[
{
  "keywordLocation": "/properties/username/readOnly",
  "absoluteKeywordLocation":
    "https://example.com/schema#/properties/username/readOnly",
  "instanceLocation": "/username",
  "annotation": true
}
]]></sourcecode>
          <sourcecode type="json"><![CDATA[
{
  "keywordLocation": "/properties/password/writeOnly",
  "absoluteKeywordLocation":
    "https://example.com/schema#/properties/password/writeOnly",
  "instanceLocation": "/password",
  "annotation": true
}
]]></sourcecode>
          <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.</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 instances of the associated schema.</t>
        <t>Because annotations can only appear in output if they are attached to
a location that exists, this keyword's annotation behavior is only useful
for use cases such as determining whether the value provided matches one
of the examples.</t>
        <t>This keyword is most commonly used by applications outside of the scope
of this specification, such as generating documentation or web forms
from schemas.</t>
      </section>
    </section>
    <section anchor="loading-and-processing">
      <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 (sometimes called a "bundled" schema)
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 identifier (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
implementation-specific and MUST NOT be relied upon for interoperability.</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 texts 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.</t>
      <t>The validation result of a schema object containing keywords MUST
be the logical AND of the validation results of its keywords.
The interactions of keyword and schema results with annotations,
errors, and keyword dependencies are defined by <xref target="relevance"/>, 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.  Implementations MAY
short-circuit evaluation if analysis of the schema at load time shows that
no annotation production or keyword dependency communication could be
impacted, <strong>and</strong> if the runtime configuration does not request "verbose"
output (<xref target="verbose"/>).</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>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 "evaluation path."</t>
        <t>A dynamic scope consists of a schema evaluation (at a particular
evaluation path), which for non-empty schema objects contains one
or more immediate keyword sub-evaluations.  A dynamic scope's subscopes
are the result of applicator keyword subschema evaluations, which
are considered sub-evaluations of the applicator keyword evaluation.
The sub-evaluation and parent evaluation relationships are transitive.</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 should be considered an advanced feature
and used with caution when defining extension keywords.</t>
      </section>
      <section anchor="relevance">
        <name>Keyword output relevance</name>
        <t>In addition to accepting or rejecting the instance as the validation result,
each keyword evaluation can produce output in the form of an annotation
(on acceptance) or an error (on rejection), as well as information that is
used to implement keyword dependencies.</t>
        <t>Whether this produced output appears in actual streamed or finalized output,
and whether dependency information is usable by a depending keyword,
is determined by the producing keyword evaluation's relevance, and in
the case of output, the output configuration.</t>
        <t>Relevance is a function of a keyword's validation result as it compares
to the validation results of its parent evaluations:</t>
        <ul spacing="normal">
          <li>
            <t>All keyword evaluations are initially considered to be relevant</t>
          </li>
          <li>
            <t>A schema object evaluation that rejects the input MUST cause all
keyword sub-evaluations that accepted the input to become irrelevant</t>
          </li>
          <li>
            <t>A keyword that accepts the input MUST cause all keyword sub-evaluations
that rejected the input to become irrelevant</t>
          </li>
          <li>
            <t>A schema object that accepts the input MUST NOT impact relevance</t>
          </li>
          <li>
            <t>A keyword object that rejects the input has no necessary effect on
relevance, but will cause its parent schema evaluation to reject,
triggering the appropriate relevancy transitions</t>
          </li>
          <li>
            <t>Once a keyword evaluation becomes irrelevant, it MUST NOT ever
subsequently be deemed relevant.</t>
          </li>
        </ul>
        <t>Annotations and errors MUST only be included in output if the output
configuration includes them; note that only "verbose" (<xref target="verbose"/>)
output formats include irrelevant output.</t>
        <t>Dependency information MUST only be used from evaluations considered
to be relevant at the time of the depending keyword's evaluation,
regardless of output choice.</t>
      </section>
      <section anchor="keyword-interactions">
        <name>Keyword Interactions</name>
        <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 structured 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>A keyword MAY depend on the value or outcome of other keywords
within the same dynamic scopes or its successful subscopes.</t>
        <t>No constraints are placed on the mechanism of communication
within implementations.</t>
        <t>Interactions within the same dynamic scope that depend only
on adjacent keyword values SHOULD be determined statically.
Other interactions, including all those involving dynamic
subscopes, are expected to be handled as runtime communication.</t>
        <t>Note that dependencies involving either dynamic subscopes
or evaluation of adjacent keywords impose an ordering
on keyword evaluation.
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>
        <t>Keywords MUST NOT define interactions outside of these mechanisms.</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>
      </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
produces 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>
        <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 value, 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 validation vocabulary
(<xref target="validation-keywords"/>) 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 accepted by this assertion.</t>
          <t>This behavior allows keywords to be used more easily with inputs
that can be of multiple primitive types.  The 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 annotation value produced by each annotation
keyword MUST be the keyword's value.</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 produced annotations
on behalf of applications.</t>
        <t>While "short-circuit" evaluation is possible for assertions, producing
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="producing-annotations">
          <name>Producing Annotations</name>
          <t>Annotations are produced by keywords that explicitly define
annotation-producing behavior.  Note that boolean schemas cannot
produce annotations as they do not make use of keywords.</t>
          <t>See <xref target="relevance"/> for conditions under which annotations
appear in output, and how they are managed throughout the
evaluation process.</t>
          <t>A produced 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</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="reserved-locations">
        <name>Reserved Locations</name>
        <t>A final 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 desirable.</t>
      </section>
    </section>
    <section anchor="output">
      <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 evaluation
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>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>Unless otherwise specified or required for the overall output structure,
output units for irrelevant keyword evaluations (<xref target="relevance"/>)
SHOULD be omitted, and annotations and errors from such evaluations
MUST be omitted.</t>
        <t>For these examples, the following schema and input will be used.</t>
        <artwork><![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
}
]]></artwork>
        <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" 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 supporting short-circuiting logic
(<xref target="keyword-behaviors"/>) use it to return
failure or success as soon as the outcome can be determined.</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, including information from irrelevant (<xref target="relevance"/>)
keyword evaluations.  Because of this, it
is RECOMMENDED that each node also carry a <tt>valid</tt> property to indicate the
validation result for that node, which can also be used to determine which
output units are relevant and which are only included because of the verbosity.</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-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 produce 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 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="https://ecma-international.org/wp-content/uploads/ECMA-262_6th_edition_june_2015.pdf">
          <front>
            <title>ECMAScript Language Specification 6th Edition</title>
            <author>
              <organization>European Computer Manufacturers Association</organization>
            </author>
            <date year="2015" 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="RFC9535">
          <front>
            <title>JSONPath: Query Expressions for JSON</title>
            <author fullname="S. Gössner" initials="S." role="editor" surname="Gössner"/>
            <author fullname="G. Normington" initials="G." role="editor" surname="Normington"/>
            <author fullname="C. Bormann" initials="C." role="editor" surname="Bormann"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>JSONPath defines a string syntax for selecting and extracting JSON (RFC 8259) values from within a given JSON value.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9535"/>
          <seriesInfo name="DOI" value="10.17487/RFC9535"/>
        </reference>
        <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="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>
        <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>
      </references>
    </references>
    <?line 3979?>

<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 further 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="impl-deps">
      <name>Implementing keyword dependencies</name>
      <t>As noted in <xref target="keyword-interactions"/>, some keywords depend on the value
or successful evaluation outcome of other keywords within the same
schema evaluation or any of its successful sub-evaluations.  The
specifics of this mechanism are left up to each implementation.</t>
      <t>As an example, the value of the <tt>properties</tt> keyword includes a set of
property names that is used by <tt>additionalProperties</tt>, and produces
information about which properties were successfully evaluated,
which is used in the implementation of <tt>unevaluatedProperties</tt>.</t>
      <t>With this schema:</t>
      <artwork><![CDATA[
{
  "type": "object",
  "required": ["X", "Y"],
  "properties": {
    "X": { "type": "number" },
    "Y": { "type": "number" }
  },
  "additionalProperties": false
}
]]></artwork>
      <t>The value of <tt>properties</tt> includes the property names
"X" and "Y", therefore regardless of the outcome of <tt>properties</tt>,
the <tt>additionalProperties</tt> schema is never applied to those
properties:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Input</th>
            <th align="left">"additionalProperties" applied to</th>
            <th align="left">valid</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>{"X": 1, "Y": 2}</tt></td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">
              <tt>true</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>{"X": 1, "Y": 2, "radius": 5}</tt></td>
            <td align="left">"radius"</td>
            <td align="left">
              <tt>false</tt> by <tt>additionalProperties</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>{"X": "hello", "Y": "world"}</tt></td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">
              <tt>false</tt> by <tt>type</tt> in <tt>properties</tt></td>
          </tr>
        </tbody>
      </table>
      <t>Note that the <tt>additionalProperties</tt> subschema is never applied to
"X" or "Y" even when they are rejected by <tt>properties</tt>.</t>
      <t>When using the point schema (without <tt>additionalProperties</tt>) via
a reference, <tt>unevaluatedProperties</tt> is required to get the same
validation outcomes, as shown in this schema:</t>
      <artwork><![CDATA[
{
  "$ref": "#/$defs/point",
  "unevaluatedProperties": false,
  "$defs": {
    "point": {
      "type": "object",
      "required": ["X", "Y"],
      "properties": {
        "X": { "type": "number" },
        "Y": { "type": "number" }
      }
    }
  }
}
]]></artwork>
      <t>Since <tt>unevaluatedProperties</tt> cannot "see" through the reference
(which could include a complex arrangement of references and conditionals
that would be non-trivial to analyze, unlike this example), it
depends on runtime evaluation results of <tt>properties</tt> rather than its
static value.</t>
      <t>The following table shows the information produced by <tt>properties</tt> for
three different inputs, and how <tt>unevaluatedProperties</tt>
implementations could use that result.  Note that <tt>unevaluatedProperties</tt>
ends up applying to both properties in the third row, while
<tt>additionalProperties</tt> never applied to either of them.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Input</th>
            <th align="left">successful "properties" evaluations</th>
            <th align="left">"unevaluatedProperties" applied to</th>
            <th align="left">valid</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>{"X": 1, "Y": 2}</tt></td>
            <td align="left">"X", "Y"</td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">
              <tt>true</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>{"X": 1, "Y": 2, "radius": 5}</tt></td>
            <td align="left">"X", "Y"</td>
            <td align="left">"radius"</td>
            <td align="left">
              <tt>false</tt> by <tt>unevaluatedProperties</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>{"X": "hello", "Y": "world"}</tt></td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">"X", "Y"</td>
            <td align="left">
              <tt>false</tt> by both <tt>unevaluatedProperties</tt> and <tt>type</tt> in <tt>properties</tt></td>
          </tr>
        </tbody>
      </table>
      <t>Similarly, the length of the <tt>prefixItems</tt> keyword's value is used
by <tt>items</tt>, and it produces information which is used by <tt>unevaluatedItems</tt>.</t>
      <t>Consider
this schema for a structured log entry with a timestamp, action, and
username fields, and preventing additional fields:</t>
      <artwork><![CDATA[
{
  "prefixItems": [
    { "type": "string", "format": "date-time" },
    { "type": "string" },
    { "type": "string" }
  ],
  "items": false
}
]]></artwork>
      <t>The length of the <tt>prefixItems</tt> keyword is 3, so <tt>items</tt> is applied
to items at index 3 or higher, as shown in table below:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Input</th>
            <th align="left">"items" applied to</th>
            <th align="left">valid</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>["2026-06-24T10:00:00Z", "created", "alice"]</tt></td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">
              <tt>true</tt> (no elements beyond index 2)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>["2026-06-24T10:00:00Z", "created", "alice", "extra"]</tt></td>
            <td align="left">"extra" (at index 3)</td>
            <td align="left">
              <tt>false</tt> by <tt>items</tt> applied to index 3</td>
          </tr>
          <tr>
            <td align="left">
              <tt>["2026-06-24T10:00:00Z", "created"]</tt></td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">
              <tt>true</tt> (not all <tt>prefixItems</tt> items need be applied)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>["2026-06-24T10:00:00Z", 42]</tt></td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">
              <tt>false</tt> by <tt>type</tt> in <tt>prefixItems</tt> index 1</td>
          </tr>
          <tr>
            <td align="left">
              <tt>[]</tt></td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">
              <tt>true</tt> (no subschemas from either keyword applied)</td>
          </tr>
        </tbody>
      </table>
      <t>As with our object properties example, using this schema (without <tt>items</tt>)
via a reference requires using <tt>unevaluatedItems</tt> to get the same
outcomes:</t>
      <artwork><![CDATA[
{
  "$ref": "#/$defs/logLine",
  "unevaluatedItems": false,
  "$defs": {
    "logLine": {
      "prefixItems": [
        { "type": "string", "format": "date-time" },
        { "type": "string" },
        { "type": "string" }
      ]
    }
  }
}
]]></artwork>
      <t>This schema, when applied to the inputs in the table below, produces
information from the <tt>prefixItems</tt> evaluation. Then,
<tt>unevaluatedItems</tt> uses the <tt>prefixItems</tt> information to start where <tt>prefixItems</tt>
left off, applying only to indices not covered by the <tt>prefixItems</tt> evaluation.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Input</th>
            <th align="left">length of successful "prefixItems" evaluations</th>
            <th align="left">"unevaluatedItems" applied</th>
            <th align="left">valid</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>["2026-06-24T10:00:00Z", "created", "alice"]</tt></td>
            <td align="left">3</td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">
              <tt>true</tt> (no elements beyond index 2)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>["2026-06-24T10:00:00Z", "created", "alice", "extra"]</tt></td>
            <td align="left">3</td>
            <td align="left">"extra" (at index 3)</td>
            <td align="left">
              <tt>false</tt> by <tt>unevaluatedItems</tt> applied to index 3</td>
          </tr>
          <tr>
            <td align="left">
              <tt>["2026-06-24T10:00:00Z", "created"]</tt></td>
            <td align="left">1</td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">
              <tt>true</tt> (no elements beyond index 1)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>["2026-06-24T10:00:00Z", 42]</tt></td>
            <td align="left">1</td>
            <td align="left">42 (at index 1)</td>
            <td align="left">
              <tt>false</tt> by both <tt>unevaluatedItems</tt> and <tt>type</tt> in <tt>prefixItems</tt> at index 1</td>
          </tr>
          <tr>
            <td align="left">
              <tt>[]</tt></td>
            <td align="left">0</td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">
              <tt>true</tt> (no subschemas from either keyword applied)</td>
          </tr>
        </tbody>
      </table>
      <t>Note that in the fourth row, <tt>unevaluatedItems</tt> ends up applied to index 1,
while <tt>items</tt> was not.</t>
      <t>The following table summarizes which keywords have static values
on which adjacent keywords depend:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Keyword</th>
            <th align="left">Value Information</th>
            <th align="left">Depended on by</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>properties</tt></td>
            <td align="left">set of property names</td>
            <td align="left">
              <tt>additionalProperties</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>patternProperties</tt></td>
            <td align="left">set of property regular expressions</td>
            <td align="left">
              <tt>additionalProperties</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>prefixItems</tt></td>
            <td align="left">length of value</td>
            <td align="left">
              <tt>items</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>minContains</tt></td>
            <td align="left">minimum number of successful <tt>contains</tt> validations</td>
            <td align="left">
              <tt>contains</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>maxContains</tt></td>
            <td align="left">maximum number of successful <tt>contains</tt> validations</td>
            <td align="left">
              <tt>contains</tt></td>
          </tr>
        </tbody>
      </table>
      <t>The following table summarizes which keywords, when successful, produce
information on which other keywords depend:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Keyword</th>
            <th align="left">Information</th>
            <th align="left">Depended on by</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>properties</tt></td>
            <td align="left">set of validated property names</td>
            <td align="left">
              <tt>unevaluatedProperties</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>patternProperties</tt></td>
            <td align="left">set of validated property names</td>
            <td align="left">
              <tt>unevaluatedProperties</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>additionalProperties</tt></td>
            <td align="left">all properties have been validated</td>
            <td align="left">
              <tt>unevaluatedProperties</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>unevaluatedProperties</tt></td>
            <td align="left">all properties have been validated</td>
            <td align="left">
              <tt>unevaluatedProperties</tt> in parent schemas</td>
          </tr>
          <tr>
            <td align="left">
              <tt>prefixItems</tt></td>
            <td align="left">validated prefix length</td>
            <td align="left">
              <tt>unevaluatedItems</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>items</tt></td>
            <td align="left">all indices have been validated</td>
            <td align="left">
              <tt>unevaluatedItems</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>contains</tt></td>
            <td align="left">validated indexes and/or index ranges</td>
            <td align="left">
              <tt>unevaluatedItems</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>unevaluatedItems</tt></td>
            <td align="left">all indices have been validated</td>
            <td align="left">
              <tt>unevaluatedItems</tt> in parent schemas</td>
          </tr>
          <tr>
            <td align="left">
              <tt>if</tt></td>
            <td align="left">subschema (not keyword) validation outcome</td>
            <td align="left">
              <tt>then</tt>, <tt>else</tt></td>
          </tr>
        </tbody>
      </table>
      <t>Note that certain keywords always validate all remaining properties
or indices when successful, so there is no need for them to track
individual locations.</t>
    </section>
    <section anchor="vocabularies-appendix">
      <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 <xref target="format-vocab"/>).</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>This section to be removed before leaving Internet-Draft status.</t>
      <section anchor="draft-ietf-jsonschema-json-schema-03">
        <name>draft-ietf-jsonschema-json-schema-03</name>
        <ul spacing="normal">
          <li>
            <t>Define and use "JSON text" and "JSON value" better.</t>
          </li>
          <li>
            <t>Add examples for the rest of keywords unless they're very similar to an
existing example.</t>
          </li>
          <li>
            <t>Simplify the annotation model while keeping it functionally the same.  Moved
implementation advice regarding annotations to a more clearly optional appendix.</t>
          </li>
          <li>
            <t>Make vocabulary sections more obvious &amp; consistently named.</t>
          </li>
          <li>
            <t>Simplify language around how a keyword should "validate" or "accept" input.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ietf-jsonschema-json-schema-02">
        <name>draft-ietf-jsonschema-json-schema-02</name>
        <ul spacing="normal">
          <li>
            <t>Add a section near the front of the document explaining what sections
are written for distinct readers</t>
          </li>
          <li>
            <t>Add examples for keywords up to the end of section 6 (up to "unevaluatedProperties")</t>
          </li>
          <li>
            <t>Move annotation implementation suggestions out of the normative core
text and into an informative appendix, simplifying the main text for
readers who are not implementing</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ietf-jsonschema-json-schema-01">
        <name>draft-ietf-jsonschema-json-schema-01</name>
        <ul spacing="normal">
          <li>
            <t>Clarify terminology by using JSON Text when talking about serialized JSON, and
structured document when talking about what a schema operates on.</t>
          </li>
          <li>
            <t>Add examples for $anchor, $ref, $defs, $comment, allOf, if and then</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ietf-jsonschema-json-schema-00">
        <name>draft-ietf-jsonschema-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:
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
0edd3GxTNJuEzWrb7kTRVPjI2fqY1u0UphF7vpo0QLXUqC25SAQkj1s1tDUp
qQDo7Vwq2Ln+n7NXf8LCwt9rPSRxZ7HTFYZD+Kb3xYRpDoaycuBBQlWtbW7y
mlQCiuKWoBOaowr0geaNi7Eb9a5hr916vcFIrezx/9Pet3ZJcV1Zfo9fEZ14
DVXqzIQCPXF3axAgm7FkawnabTfGi8jMqKow+ShnZAIlxH+fe/Z53ojIopAs
z8xa45m2qaqIG/d57nnuraFcsnbtt2y12x+T8WixHNpxCGWMZnsyexd61o+B
gWoRNNvNwQ1g/FBpC/DLjHzVD1rsNgUrhgRCSvtKs3IfkeZsbXeatRxSiZEI
4zrVIKXpSOp794VxVNKEDlr1sGXI8AtBoRhRCE75LOmxH4gQ581XNGrEA0in
mclPxnd/qrVIfCwOLkfAHqOAZEURkOjlONJQCh/1Y4n6UlbDdt2fhWAgag1n
kD+9pQv+ADy2jcmTUxtjcJcvBPdGMjooNItUrEp8TuWRpXaHqMSxiiiIh0zN
J4PNu3hL94PnAikQljp7qiWzHPd20NDu5G1kklQMfCnRpZPr+IhZ0lhWDRmd
a/xkJ6Dak9ZChSICHt8Y6xQgAyzPD/PL5wDEgKqnwS9pmdfcb8m2lsQPMXat
sKM7KyFHCbkbs8tJCPyIscWWqJxuvf26XSuGmp9JsbFGEK2vlYYp9D6rHGxY
LHZzfsFRjcOVZtmnnl/XrEpKKTksQjh3snc7q8CS24NyvyjLiG8tuPupq6HA
QE/oft38fV/HVbDjybxhx44zLr7nwrJ6tLbcZr7p+FVJzYlcUIPFrFWD7KGi
K3Dg4jwwAXlupiWMh1tap1VhVUKxuAsoDlPLltVyqfssJA4JcLqKZz7jsC80
USn4lmQ3INUsy0GOTgAiprosX2/TjOjr3W82OqqwhwMM/+OAdq2VkebTkVT7
cfSXapiyuz3j7YbluNjWr5rNviWmhAOiuc1mxArYSM7QLhYFVzwi/KoJp8L2
b7SrOx+Yct5Qd0Baypqx5AS8GOoASW46B8COMeB8D+XGIgUKjVIeTDuNyFa9
CxDFtJvTtPn1DAIhJuke55vFda9HTdCALWH5rbjjrFwbzgM6v/giTa1oDGmz
kDt/nF4kXbVht11DSbO7oEj0b0UUUQAAcy3heMrh8CXWvB8YIapXPJTU6Ycs
+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
4dQQFEXwtPcZxU3TiiPK2E2t3iueXc/FyA3ekgyQibTz/OjnvE0QU/xKt7Dr
n+MqHXCFDrlBWb6RBE6/ShNamxPyKn+mSiC4/Xrji03CtThyJ5n8eoSgwkjb
4W093NAvrSHRoK+U65jJq2X6lTfHez9wcU0z8erPvP+C+nDD9JdSzn7i3d/Z
Rh+gBuRvfrBO0L11JT4Yg18KT/E115sQiSVgNLOsUbo1AXQfq7CMd0nkmtyg
jAzQBTwsy8eC7/Ph8k3RbH7CS0yAUQpvkiQEU6SUqHoxwsdc/isUhpH9zVK2
ZRIU1GdPAOv1LktC6GXXUulava09b1ugaDR9G7B3oqo0b7gRZkG6ZNDJx6Iv
sLs4+moZGA1VX7/GVgCWVVhTM05jLQKn0I0LrUfC34Ruk8IVsPv4R/K9ItNN
kKVCgQSNQlLrlUFScL86s4LKiphsHMpz0h1eL0/RliI0aNGyQTQ0rTX5azhM
3GfRr9QbwYi3QmshPZE1+WPI2g9c2TmvsGbi5r9nOg4elEGHCSkX88Qa4gT9
pha6WCDh51UlwmVGzg515BTVFoc5sjloKUmGKrJvGcQ1bDROOKK19GUfBxpH
DInCFJxNflolLdQV3DEWvxAmq1jKWXP2cix0SJMZZ7BUlgfVc0klo3e4Tqds
1nk/jbqr0EofqX9nNREwFK+67VuYmrIcLiy1oNgoTbDCd2SaPhfZ9hpzZxC5
RQjRrWgUttWo18elUvt1YxpzIAuRy1oLaRCDkd1PGIZwXqG0u8NY3cCdx8Ut
Xf4cT6kXicDQoJfZ/tsxdBTgtwljZXNGbrIQmgoKN/0jieZ9tTRtf0/+nOng
nveoiSUKpY/vUJbG1WOWc72UhAusQ5HVRnD6zSZdUeOACS1eUAuxcSg+ZxAu
uPDWL4fIPzcuIyV02rz0Co0x9F9p0dOuoCy/i/1sSeBPfLi42XF2mjuZ/0h2
EtGIl4HbFlBTgQes6MZUgcbJzbRlHNLJIJkQDWOx5nUgzhlHy74EOm7cdNPi
W/8hh1azuzUyhDLokWRns80T9xpjUHIraR2IAj00z9Yxmzx1+Wz0K58aE5zP
j274bxUL5Jj5izn5r1eb1YBGllN4QkUtomr0cAe2USu68by4MR3hctvN18Gs
xryhzqD4EfFoUj/yYWn+SAaoouHloe4hmfHUoAhRBapYM3L9Z72lmybS9MXV
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
QjU63272Z+e5aVUciVoPTUNJSyvzCEvsVLmMOu52i5qkmWWD3EBUwF3qLFME
/3b5Q9oqDK7Ci6uQvUBu5ouZGKPL7T6pAKtI3OuUBh35x/FrLp1K92whoSkI
yx55AhcGswbIBpzfU5GfLvsCQUEwY1Ss7iLQTb71SBs6MP9FD4wPs8MgZhwP
S4NyesX0q0MtYWrS9W/6LiX2k+4X7lT1IQPxYLt5PRaonAOSpSe3pTSALwUK
arjUDupL3OYZg96Ph07eNYT7VQJeD9rPkfXexAGxf+AAfajcDx8KrWOhDn2C
9tDhO+IJowwot9qyXp+5wp8eTtbjG6Dfm053s1XmSNafCM32BWz+F8ZSrJpa
dgJyraszKfyNqUdCiiCeFUNVtXmKRJ+VadtvL9XLQuc5nc3VxViyIjjBm4AC
2D4ir2qreiTdZQyh4SBH/MTATRAmwdGmXZZyCS0tCw+VfkfoKhPqkknh/gtX
/YVwiTN6wENK2zXWi2b8LkCIZJXKptUTA7gnMBKQFp6soDflXbrvqQwOxOTx
uuTcW8KpyRUu8QleT8N6Nrpz+86nk9ufTu58/PTk9r3b9P//m2ZPnH30TwJi
qEfPh7WvIyJpY6mnMUPp+p3j8kO/Maaiot224o/Jv1HkJbNx3DnHMoVhsDpt
1/z04VGBRa+zhrw4AOOc1frV9w3z4zu9jxxQF+OXMIwTafqKuffSAYYlE6mu
uy30kUxGjkHvt0quGK4TMyVVTfTz7hoiz/dxke75jIdbNCXN8eiLkp4+qErg
NXS9JF2+adZ1T9t7HE/jkKKnLwZVb0h6/CQJcrUUuUKS0H+eH1Twnvq0C6Rh
ZmlJhMIvf5cC42GD3Lza+f7ym5xq/+r1uBhYM0A599+NzQPUhdIG2S2cPVjA
ibE5PR27HsMUnQIEbPhIr1ArLTRQBzsaxZxL2lxX8dW9Qll5nIvI9ygpHyoj
7/6z5eTd68nK/vr+TLF58oEDPbmmpKR2P74ThnJyfLV+pcPpqlZhG3lbUaTe
/keIVdfmLaZK1eyskg90M+r22eyfwBWWzrNea0SakA7IIcNmv1pVWyAUsi5n
3kpkk0TTqC1M4asWf6vmtbNiq4sUSoQAP6Sp+CN0ysfhpP9YPmTXLLypaRkG
1IlMm9UEoI6L8ccrnS5SafzdlQ0NVT6/p9m4F6L0YN35R5tyPL1q1g84MIin
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

-->

</rfc>
