<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-jsonschema-json-schema-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title>JSON Schema</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-jsonschema-json-schema-04"/>
    <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="October" day="14"/>
    <area>ART</area>
    <keyword>Internet-Draft</keyword>
    <keyword>JSON</keyword>
    <abstract>
      <?line 87?>

<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 97?>

<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 "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<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="meta-schemas"/> 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="intro-vocabularies">
          <name>Vocabularies</name>
          <t>To facilitate extensibility and 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 <bcp14>MUST</bcp14> 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 <bcp14>SHOULD</bcp14> 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 <bcp14>MAY</bcp14>
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"/>.</t>
          <t>Some keywords take schemas themselves, allowing JSON Schemas to be nested:</t>
          <artwork><![CDATA[
{
    "title": "root",
    "items": {
        "title": "array item"
    }
}
]]></artwork>
          <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 <bcp14>MAY</bcp14> 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 <bcp14>SHOULD</bcp14> 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 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.
With such an input, most validation keywords will not be useful,
as they will always pass or always fail.  Annotations are unaffected.</t>
          <t>A specification building on JSON Schema could define support for a
superset of the JSON data model.
A schema using that specification might require the same superset.
For example, a schema directly using CBOR byte string values in "enum",
would not be a JSON document.</t>
          <t>Input equality (<xref target="equal"/>) is defined only for values in the JSON data model.
A specification that extends the data model needs to define equality
for the values it adds; otherwise the behavior of "const" and "enum" for
those values is undefined.</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, <bcp14>MUST</bcp14> 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 <bcp14>MAY</bcp14> 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 <bcp14>SHOULD</bcp14> 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,
<bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>RECOMMENDED</bcp14> 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 <bcp14>MAY</bcp14> be defined
by any entity.  Save for explicit agreement, schema authors <bcp14>SHALL NOT</bcp14>
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 <bcp14>MAY</bcp14> 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 <bcp14>MUST NOT</bcp14> modify the input
during evaluation.  Annotations <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST NOT</bcp14> 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.</t>
          <t>Implementations <bcp14>MAY</bcp14> allow configuring annotations
in such ways as limiting output to certain annotation keywords, aggregating values together, or other features to enhance performance.
Implementations <bcp14>MAY</bcp14> allow annotation output to be bypassed entirely.</t>
          <t>Annotations <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> be discarded.</t>
        </section>
      </section>
    </section>
    <section anchor="core-keywords">
      <name>Vocabulary for Core Keywords</name>
      <t>Core keywords <bcp14>MUST</bcp14> 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 <bcp14>RECOMMENDED</bcp14> 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 <bcp14>RECOMMENDED</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be a full <tt>URI</tt>
(<xref section="3" sectionFormat="comma" target="RFC3986"/>) and this URI <bcp14>MUST</bcp14> be normalized.
The current schema <bcp14>MUST</bcp14> be an instance of the meta-schema identified by this URI.</t>
          <t>If this URI identifies a retrievable resource, that resource <bcp14>SHOULD</bcp14> be of
media type "application/schema+json".</t>
          <t>The "$schema" keyword <bcp14>SHOULD</bcp14> be used in the document root schema object,
and <bcp14>MAY</bcp14> be used in the root schema objects of embedded schema resources.
It <bcp14>MUST NOT</bcp14> 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 <bcp14>RECOMMENDED</bcp14>.</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.  It is part of the core
syntax because it bootstraps extended functionality,
but its details are explained in <xref target="vocabularies"/>
and syntax in <xref target="vocabulary-keyword-extended"/>.</t>
        </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><bcp14>MUST</bcp14> be a string</t>
            </li>
            <li>
              <t><bcp14>MUST</bcp14> be a valid URI reference (<xref section="4.1" sectionFormat="comma" target="RFC3986"/>)</t>
            </li>
            <li>
              <t><bcp14>SHOULD</bcp14> be normalized</t>
            </li>
            <li>
              <t><bcp14>MUST NOT</bcp14> 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 <bcp14>SHOULD</bcp14> 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 <bcp14>RECOMMENDED</bcp14> 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 <bcp14>MUST</bcp14> be a string and <bcp14>MUST</bcp14> 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"/>.</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.</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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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"/>.</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 <bcp14>MUST</bcp14> be an object.
Each member value of this object <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be a string. Implementations <bcp14>MUST NOT</bcp14> present this
string to end users.  Tools for editing schemas <bcp14>SHOULD</bcp14> support displaying and
editing this keyword.  The value of this keyword <bcp14>MAY</bcp14> be used in debug or error
output which is intended for developers making use of schemas.</t>
        <t>Schema vocabularies <bcp14>SHOULD</bcp14> allow "$comment" within any object containing
vocabulary keywords.  Implementations <bcp14>MAY</bcp14> assume "$comment" is allowed
unless the vocabulary specifically forbids it.  Vocabularies <bcp14>MUST NOT</bcp14>
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 <bcp14>MAY</bcp14> 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 <bcp14>MAY</bcp14> 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 <bcp14>MUST NOT</bcp14> take any other action based on the presence, absence,
or contents of "$comment" properties.  In particular, the value of "$comment"
<bcp14>MUST NOT</bcp14> 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 <bcp14>RECOMMENDED</bcp14> for use as the basis of other vocabularies.</t>
      <t>Meta-schemas that do not use "$vocabulary" <bcp14>SHOULD</bcp14> 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 <bcp14>MUST NOT</bcp14> impact the results of sibling
subschemas.  Therefore subschemas may be applied in
any order.</t>
        <t>"if", "then", and "else" <bcp14>MUST NOT</bcp14> interact with each other across
subschema boundaries.  In other words, an "if" in one
branch of an "allOf" <bcp14>MUST NOT</bcp14> 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 <bcp14>MUST NOT</bcp14>
be treated as if present with an empty schema, and
when "if" is not present, both "then" and "else" <bcp14>MUST</bcp14> be
entirely ignored.</t>
        <section anchor="allOf">
          <name>"allOf"</name>
          <t>This keyword's value <bcp14>MUST</bcp14> be a non-empty array.
Each item of the array <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be a non-empty array.
Each item of the array <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be a non-empty array.
Each item of the array <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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>
          <artwork><![CDATA[
{
  "not": {
    "required": ["approved_date", "rejected_date"]
  }
}
]]></artwork>
        </section>
        <section anchor="if">
          <name>"if"</name>
          <t>This keyword's value <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST NOT</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST NOT</bcp14> 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 <bcp14>MUST</bcp14> be an object.
Each value in the object <bcp14>MUST</bcp14> 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" <bcp14>MUST</bcp14> 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" <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>SHALL</bcp14> be 1.  If "maxContains" is absent, the maximum <bcp14>SHALL</bcp14>
be unbounded.</t>
          <t>In general, the subschema <bcp14>MUST</bcp14> be applied to every array element
even after enough matches to satisfy "minContains" and "maxContains"
have been found, in order to 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" <bcp14>MUST</bcp14> be an object.
Each value of this object <bcp14>MUST</bcp14> 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" <bcp14>MUST</bcp14> 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" <bcp14>MUST</bcp14> be an object. Each property name
of this object <bcp14>SHOULD</bcp14> be a valid regular expression, according to the
ECMA-262 regular expression dialect. Each property value of this object
<bcp14>MUST</bcp14> 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" <bcp14>MUST</bcp14> 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" <bcp14>SHOULD</bcp14> 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" <bcp14>MUST</bcp14> be a valid JSON Schema.</t>
        <t>The "unevaluatedItems" subschema <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be evaluated before this keyword can
be evaluated.  Authors of extension keywords <bcp14>MUST NOT</bcp14> 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" <bcp14>MUST</bcp14> be a valid JSON Schema.</t>
        <t>The "unevaluatedProperties" subschema <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be evaluated before this keyword can
be evaluated.  Authors of extension keywords <bcp14>MUST NOT</bcp14> 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" <bcp14>SHOULD</bcp14> 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 <bcp14>MUST</bcp14> be either a string or an array. If it is
an array, elements of the array <bcp14>MUST</bcp14> be strings and <bcp14>MUST</bcp14> be unique.</t>
          <t>String values <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be an array. This array <bcp14>SHOULD</bcp14> have at
least one element. Elements in the array <bcp14>SHOULD</bcp14> 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 <bcp14>MAY</bcp14> 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" <bcp14>MUST</bcp14> 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" <bcp14>MUST</bcp14> 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" <bcp14>MUST</bcp14> 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" <bcp14>MUST</bcp14> 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" <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be a string. This string <bcp14>SHOULD</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be a non-negative integer.</t>
          <t>This keyword <bcp14>SHALL</bcp14> 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 <bcp14>MUST</bcp14> be a non-negative integer.</t>
          <t>This keyword <bcp14>SHALL</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be an array.
Elements of this array, if any, <bcp14>MUST</bcp14> be strings, and <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be an object.  Properties in
this object, if any, <bcp14>MUST</bcp14> be arrays.  Elements in each array,
if any, <bcp14>MUST</bcp14> be strings, and <bcp14>MUST</bcp14> 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 Syntax Checking 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" keyword is defined to allow schema
authors to indicate that a value is expected to follow a syntax defined
by an authoritative resource, such as an RFC or other external specification.</t>
        <t>Format validation relies on what's in the schema and the input, not on
facts in the world.
For example, "email" indicates that a string is expected to be written as an
email address; it does not say whether that address exists, what it is used for, or
whether mail sent to it would be delivered.  Likewise, "date" indicates that
a string is written as a full date, not whether that date is a birth date,
a deadline, or a date in the past.</t>
        <t>Some schema authors will wish to go beyond the syntax validation offered by
<tt>format</tt> attributes.  Several choices can help achieve this and can be combined:</t>
        <ul spacing="normal">
          <li>
            <t>Do additional processing after JSON Schema validation</t>
          </li>
          <li>
            <t>Use "title" and "description" for soft guidance</t>
          </li>
          <li>
            <t>Use <tt>pattern</tt> possibly alongside <tt>format</tt> to add regular expression constraints</t>
          </li>
          <li>
            <t>Register a new format attribute (<xref target="iana-format"/>)</t>
          </li>
          <li>
            <t>Define keywords in a custom vocabulary to add new constraints, especially
  constraints that go beyond syntactic</t>
          </li>
        </ul>
        <t>The value of this keyword is called a format attribute. It <bcp14>MUST</bcp14> 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 <bcp14>SHOULD</bcp14> 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>.</t>
        <t>The format keyword is part of two vocabularies, both required.  The
format-assertion vocabulary requires implementations to check formats
as required in this specification, and the format-annotation vocabulary
requires implementations to create annotations for <tt>format</tt> if annotations
are enabled.  Special-purpose meta-schemas may require one or neither of
these, whereas the official JSON Schema meta-schema requires both.</t>
        <t>Format-assertion: <tt>https://json-schema.org/draft/2020-12/vocab/format-assertion</tt></t>
        <t>Format-annotation: <tt>https://json-schema.org/draft/2020-12/vocab/format-annotation</tt></t>
      </section>
      <section anchor="format-overview">
        <name>Overview of Defined Formats</name>
        <t>This section is non-normative.  It summarizes the format attributes defined
in this specification.  Each row links to the section with the normative definition.
All of these format attributes apply to strings.</t>
        <table>
          <name>Format attributes defined by this specification</name>
          <thead>
            <tr>
              <th align="left">Format</th>
              <th align="left">Accepts a string written as</th>
              <th align="left">Example</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>date-time</tt> (<xref target="format-date-time"/>)</td>
              <td align="left">A date and time with a time zone offset</td>
              <td align="left">
                <tt>2026-09-30T14:30:00Z</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>date</tt> (<xref target="format-date"/>)</td>
              <td align="left">A full calendar date</td>
              <td align="left">
                <tt>2026-09-30</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>time</tt> (<xref target="format-time"/>)</td>
              <td align="left">A time of day with a time zone offset</td>
              <td align="left">
                <tt>14:30:00+02:00</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>duration</tt> (<xref target="format-duration"/>)</td>
              <td align="left">An RFC 3339 duration</td>
              <td align="left">
                <tt>P3DT4H</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>email</tt> (<xref target="format-email"/>)</td>
              <td align="left">An email address (ASCII only)</td>
              <td align="left">
                <tt>user@example.com</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>idn-email</tt> (<xref target="format-idn-email"/>)</td>
              <td align="left">An email address, allowing non-ASCII characters</td>
              <td align="left">
                <tt>user@example.com</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>hostname</tt> (<xref target="format-hostname"/>)</td>
              <td align="left">An Internet host name (ASCII only)</td>
              <td align="left">
                <tt>www.example.com</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>idn-hostname</tt> (<xref target="format-idn-hostname"/>)</td>
              <td align="left">A host name, allowing non-ASCII characters</td>
              <td align="left">
                <tt>www.example.com</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>ipv4</tt> (<xref target="format-ipv4"/>)</td>
              <td align="left">An IPv4 address in dotted-quad form</td>
              <td align="left">
                <tt>192.0.2.1</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>ipv6</tt> (<xref target="format-ipv6"/>)</td>
              <td align="left">An IPv6 address</td>
              <td align="left">
                <tt>2001:db8::1</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>uri</tt> (<xref target="format-uri"/>)</td>
              <td align="left">A full URI</td>
              <td align="left">
                <tt>https://example.com/a?b=c</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>uri-reference</tt> (<xref target="format-uri-reference"/>)</td>
              <td align="left">A URI or a relative reference</td>
              <td align="left">
                <tt>../a#b</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>iri</tt> (<xref target="format-iri"/>)</td>
              <td align="left">A full IRI, allowing non-ASCII characters</td>
              <td align="left">
                <tt>https://example.com/a</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>iri-reference</tt> (<xref target="format-iri-reference"/>)</td>
              <td align="left">An IRI or a relative reference</td>
              <td align="left">
                <tt>../a#b</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>uuid</tt> (<xref target="format-uuid"/>)</td>
              <td align="left">A UUID, without a <tt>urn:uuid:</tt> prefix</td>
              <td align="left">
                <tt>f81d4fae-7dec-11d0-a765-00a0c91e6bf6</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>uri-template</tt> (<xref target="format-uri-template"/>)</td>
              <td align="left">A URI Template</td>
              <td align="left">
                <tt>https://example.com/users/{id}</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>json-pointer</tt> (<xref target="format-json-pointer"/>)</td>
              <td align="left">A JSON Pointer</td>
              <td align="left">
                <tt>/items/0/name</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>relative-json-pointer</tt> (<xref target="format-relative-json-pointer"/>)</td>
              <td align="left">A Relative JSON Pointer</td>
              <td align="left">
                <tt>1/name</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>regex</tt> (<xref target="format-regex"/>)</td>
              <td align="left">A regular expression in the ECMA-262 dialect</td>
              <td align="left">
                <tt>^[a-z]+$</tt></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="format-implementation">
        <name>General Format Implementation Requirements</name>
        <t>It is <bcp14>RECOMMENDED</bcp14> that implementations use a common parsing library for each format,
or a well-known regular expression.</t>
        <section anchor="format-annotation-vocabulary">
          <name>Format-Annotation Vocabulary</name>
          <t>When the implementation is configured to produce annotations
and the format-annotation vocabulary is 'true' in the meta-schema, it
<bcp14>MUST</bcp14> treat the <tt>format</tt> keyword as an annotation, which means that
a process consuming annotation output can see what formats
should apply to which values.  An implementation <bcp14>MUST</bcp14> produce annotations for format
attributes it does not recognize, as for any other format attribute.</t>
        </section>
        <section anchor="format-assertion-vocabulary">
          <name>Format-Assertion Vocabulary</name>
          <t>When the Format-Assertion vocabulary is 'true' in the meta-schema,
implementations <bcp14>MUST</bcp14> provide full validation support for all of the formats
defined by this specification. Implementations that cannot provide full
validation support <bcp14>MUST NOT</bcp14> validate any input against the schema.
This does not prevent other processing of the schema, such as
checking it against its meta-schema.</t>
          <t>An implementation that supports the Format-Assertion vocabulary:</t>
          <ul spacing="normal">
            <li>
              <t><bcp14>MUST</bcp14> still produce "format" as an annotation if the implementation
supports annotation production;</t>
            </li>
            <li>
              <t><bcp14>MUST</bcp14> evaluate "format" as an assertion;</t>
            </li>
            <li>
              <t><bcp14>MUST</bcp14> 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>
            <li>
              <t><bcp14>MUST NOT</bcp14> validate any input against a schema that uses a format
attribute it does not recognize.</t>
            </li>
          </ul>
          <t>The standard core and validation meta-schema
includes this vocabulary in its "$vocabulary" keyword with a value of false.
(TODO: this should be changed to 'true')</t>
        </section>
      </section>
      <section anchor="format-dates">
        <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 given
in <xref section="A" sectionFormat="comma" target="RFC3339"/>.</t>
        <t>In addition to the ABNF, RFC 3339 makes requirements that make sure
that dates and times can actually occur (<xref section="5.7" sectionFormat="comma" target="RFC3339"/>).  This means that dates like
"2026-02-30T10:00:00Z" are considered invalid, which is common practice
already with JSON Schema.  However, it does not insist on a perfect
job in detecting really-occurrign times and dates.  Leap seconds, for example,
make some values syntactically correct but are rather hard to
identify as times that can or cannot really happen.  Validation implementations should
implement the additional constraints in RFC 3339 as well as the ABNF.</t>
        <t>Software libraries for using dates, times and durations sometimes accept values
that are syntactically incorrect according to RFC 3339 rules,
for example values that do follow ISO 8601 <xref target="ISO8601"/> but not RFC 3339's profile.  Validation
implementations <bcp14>SHOULD</bcp14> reject these.</t>
        <section anchor="format-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>
          <t>Some notes:</t>
          <ul spacing="normal">
            <li>
              <t><xref section="5.6" sectionFormat="comma" target="RFC3339"/> mentions space as a possible separator,
but the ABNF requires a 'T'/'t' to separate date and time.  The
ABNF is what implementations should follow.</t>
            </li>
            <li>
              <t>Lowercase letters 't' and 'z' are legitimate.</t>
            </li>
            <li>
              <t>A timezone offset is strictly required.</t>
            </li>
            <li>
              <t>Years are strictly four digits even though other standards accept more.</t>
            </li>
          </ul>
        </section>
        <section anchor="format-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="format-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="format-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>
          <t>Some notes about RFC 3339 durations that may help consistency:</t>
          <ul spacing="normal">
            <li>
              <t>ISO 8601 defines additional formats like "P0003-06-04T12:30:05"
but these are not valid in RFC 3339.</t>
            </li>
            <li>
              <t>Negative durations are not allowed.</t>
            </li>
            <li>
              <t>Fractional elements ("PT1.5S") are not allowed.</t>
            </li>
            <li>
              <t>Time elements <bcp14>MUST</bcp14> come after a 'T' to avoid confusing "M" for
"minute" with "M" for "month".</t>
            </li>
            <li>
              <t>Duration elements can be skipped in only some cases. A
"zero minutes" duration element can be skipped if the duration
is "thirty seconds"  ("PT30S") but it cannot be skipped if the
duration is an hour and thirty seconds ("PT1H0M30S").</t>
            </li>
            <li>
              <t>Week units cannot be combined with year/month units.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="format-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="format-email">
          <name>"email"</name>
          <t>As defined by the "Mailbox" ABNF rule in
<xref section="4.1.2" sectionFormat="comma" target="RFC5321"/>.  Along with its ABNF definitions, RFC 5321 has additional limitations
on email addresses in <xref section="4.5.3" sectionFormat="comma" target="RFC5321"/> which <bcp14>MUST</bcp14> be enforced.
When the domain is not an address literal, it <bcp14>MUST</bcp14> be a syntactically valid hostname.</t>
          <t>A reasonable <em>starting point</em> for validation (once line returns are removed) is
this regex, which is NOT a complete implementation without further address checking
(it doesn't check domain-label or IP address rules), and length checking.
Length checking is not required by RFC 5321, but is reasonable considering that
many email implementations don't accept overly long addresses or local parts.</t>
          <artwork><![CDATA[
^(?:([!#-'*-+\-/-9=?A-Z\^-~](\.?[!#-'*-+\-/-9=?A-Z\^-~])
*@|"([ !#-\[\]-~]|\\[ -~])
*"@)(\[[!-Z\^-~]*\]|[!#-'*-+\-/-9=?A-Z\^-~]
(\.?[!#-'*-+\-/-9=?A-Z\^-~])*))$
]]></artwork>
        </section>
        <section anchor="format-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="format-hostnames">
        <name>Hostnames</name>
        <t>These attributes apply to string inputs.</t>
        <t>Note that these attributes restrict host names to the form used in protocols,
which is narrower than what users can type into a browser.   Schema authors
who wish to allow values like "Café.example" or "ｅｘａｍｐｌｅ.com" as legitimate
values for a field, but to disallow strings such as "Café Example",
will need to take another approach to constrain values.</t>
        <section anchor="format-hostname">
          <name>"hostname"</name>
          <t>Each label follows the preferred name syntax of <xref section="3.5" sectionFormat="comma" target="RFC1034"/>
(letters, digits, and interior hyphens, at most 63 characters),
as relaxed by <xref section="2.1" sectionFormat="comma" target="RFC1123"/> to allow a leading digit.  The whole host name is at most
253 characters.  This includes host names produced using the Punycode algorithm
specified in <xref section="4.4" sectionFormat="comma" target="RFC5891"/>.  Hostnames with "xn--"
do not need to decode to a valid IDN hostname (for example,
xn--ls8h.example or xn--zz.example).</t>
        </section>
        <section anchor="format-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"/>.  The other IDNA2008 documents define
what makes each label valid: the protocol rules in <xref target="RFC5891"/>,
the permitted code points in <xref target="RFC5892"/>, and the rules for
right-to-left scripts in <xref target="RFC5893"/>.</t>
          <t>Note that all strings accepted by the "hostname" attribute are also
accepted by the "idn-hostname" attribute.</t>
        </section>
      </section>
      <section anchor="format-ip">
        <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="format-ipv4">
          <name>"ipv4"</name>
          <t>An IPv4 address according to the "IPv4address" ABNF
rule in <xref section="3.2.2" sectionFormat="comma" target="RFC3986"/>.</t>
        </section>
        <section anchor="format-ipv6">
          <name>"ipv6"</name>
          <t>An IPv6 address as defined in
<xref section="2.2" sectionFormat="comma" target="RFC4291"/>.</t>
        </section>
      </section>
      <section anchor="format-uris">
        <name>Resource Identifiers</name>
        <t>These attributes apply to string inputs.
Note that all valid URIs are valid IRIs, and all valid URI References are also valid IRI References.</t>
        <t>Only general URI format checking is expected for the URI/IRI constraints.
Implementations <bcp14>SHOULD NOT</bcp14> add checks for specific schemes such as http or email URIs,
as this would lead to inconsistent validation results between
implementations.</t>
        <t>If per-format URI checking is desired, a schema author could
possibly combine the "uri" format constraint with a <tt>pattern</tt> regex constraint.  Specification
authors can define additional format options in the IANA registry.</t>
        <t>Implementors using libraries are cautioned to check if the libraries fix up URIs along with validating them.
For example a library that quietly replaces space with "%20" or treats backslashes as
slashes would miss invalid URIs.  Other URI libraries check the rules of specific schemes
which goes beyond the requirements here.</t>
        <section anchor="format-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="format-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="format-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="format-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="format-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 section="4" sectionFormat="comma" target="RFC9562"/>.</t>
          <t>Note 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", as shown in <xref target="format-uri-schemes"/>.</t>
        </section>
        <section anchor="format-uri-schemes">
          <name>Checking Scheme-Specific Syntax</name>
          <t>This section is non-normative.</t>
          <t>The "uri", "uri-reference", "iri" and "iri-reference" attributes check only
the generic syntax of resource identifiers.  Schema authors who need the
rules of a particular URI scheme can add them with "pattern" alongside
"format".</t>
          <t>For example, <xref section="4" sectionFormat="comma" target="RFC9562"/> defines a URN form for UUIDs, such
as "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6".  The following schema
constrains URIs to that form:</t>
          <artwork><![CDATA[
{
  "type": "string",
  "format": "uri",
  "pattern":
    "^urn:uuid:[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$"
}
]]></artwork>
          <t>The "format" keyword checks that the string is a URI, and "pattern" adds
the rules of the "urn:uuid" namespace: the prefix, followed by a UUID in
the hex-and-dash form.</t>
        </section>
      </section>
      <section anchor="format-templates">
        <name>Templates</name>
        <section anchor="format-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="format-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="format-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="format-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="format-expressions">
        <name>Expressions</name>
        <section anchor="format-regex">
          <name>"regex"</name>
          <t>This attribute applies to string inputs.</t>
          <t>A string input is accepted by this attribute if it is a valid
regular expression.  It is <bcp14>RECOMMENDED</bcp14> that implementations determine
validity using the "Pattern" grammar of <xref target="ECMA262"/>, Section 22.2.1
in Unicode mode (as with the "u" flag), including its early error
rules in <xref target="ECMA262"/>, Section 22.2.1.1.  Implementations that validate
formats <bcp14>MUST</bcp14> accept at least the subset of ECMA-262 defined in
<xref target="regex-interop"/>.</t>
        </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 <bcp14>MUST NOT</bcp14> cause the containing instance
to be considered invalid.</t>
        <t>Meta-schemas that do not use "$vocabulary" <bcp14>SHOULD</bcp14> 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">
        <name>Implementation Requirements</name>
        <t>Due to security and performance concerns, as well as the open-ended nature of
possible content types, implementations <bcp14>MUST NOT</bcp14> 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 <bcp14>MAY</bcp14> offer the ability to decode, parse, and/or validate
the string contents automatically.  However, it <bcp14>MUST NOT</bcp14> perform these
operations by default, and <bcp14>MUST</bcp14> provide the validation result of each
string-encoded document separately from the enclosing document.  This
process <bcp14>SHOULD</bcp14> 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.</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
<bcp14>SHOULD</bcp14> 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 <bcp14>SHOULD</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be a string, which <bcp14>MUST</bcp14> 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 <bcp14>MAY</bcp14> be used with any media type that can be mapped into
JSON Schema's data model.</t>
        <t>The value of this property <bcp14>MUST</bcp14> be a valid JSON schema. It <bcp14>SHOULD</bcp14> 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>
        <artwork><![CDATA[
{
    "type": "string",
    "contentEncoding": "base64",
    "contentMediaType": "image/png"
}
]]></artwork>
        <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>
        <artwork><![CDATA[
{
    "type": "string",
    "contentMediaType": "text/html"
}
]]></artwork>
        <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 <bcp14>MUST</bcp14> 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>
        <artwork><![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"}
                }
            }
        ]
    }
}
]]></artwork>
        <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" <bcp14>SHOULD</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>RECOMMENDED</bcp14> 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 <bcp14>MUST</bcp14> be a boolean.  When multiple occurrences
of this keyword are applicable to a single sub-instance, applications
<bcp14>SHOULD</bcp14> 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
<bcp14>SHOULD</bcp14> refrain from usage of the declared property. It <bcp14>MAY</bcp14> 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 <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> be a boolean.  When multiple occurrences
of these keywords are applicable to a single sub-instance, the resulting
behavior <bcp14>SHOULD</bcp14> be as for a true value if any occurrence specifies a true value,
and <bcp14>SHOULD</bcp14> 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
<bcp14>MAY</bcp14> be ignored if sent to the owning authority, or <bcp14>MAY</bcp14> 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
<bcp14>MAY</bcp14> be returned as a blank document of some sort, or <bcp14>MAY</bcp14> 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 <bcp14>MAY</bcp14> 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>
          <artwork><![CDATA[
{
  "$id": "https://example.com/schema",
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "readOnly": true
    },
    "password": {
      "type": "string",
      "writeOnly": true
    }
  }
}
]]></artwork>
          <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 <bcp14>MUST</bcp14> 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
<bcp14>RECOMMENDED</bcp14> 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 <bcp14>MAY</bcp14> be used as described in
<xref section="5.1.4" sectionFormat="comma" target="RFC3986"/>.  It is <bcp14>RECOMMENDED</bcp14>
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 <bcp14>SHOULD</bcp14> 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 <bcp14>SHOULD NOT</bcp14> 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 <bcp14>SHOULD</bcp14> 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 <bcp14>MAY</bcp14> (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 <bcp14>SHOULD</bcp14> raise an error condition.</t>
        </section>
        <section anchor="detecting-a-meta-schema">
          <name>Detecting a Meta-Schema</name>
          <t>Implementations <bcp14>MUST</bcp14> 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 <bcp14>MAY</bcp14> 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 <bcp14>MUST NOT</bcp14> 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 <bcp14>SHOULD</bcp14> be used automatically.</t>
        <t>For example, consider this schema:</t>
        <artwork><![CDATA[
{
    "$id": "https://example.net/root.json",
    "items": {
        "type": "array",
        "items": { "$ref": "#item" }
    },
    "$defs": {
        "single": {
            "$anchor": "item",
            "type": "object",
            "additionalProperties": { "$ref": "other.json" }
        }
    }
}
]]></artwork>
        <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 <bcp14>MUST</bcp14> 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
<bcp14>SHOULD NOT</bcp14> 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>
          <artwork><![CDATA[
{
  "$id": "https://example.com/foo",
  "items": {
    "$id": "https://example.com/bar",
    "additionalProperties": { }
  }
}
]]></artwork>
          <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>
          <artwork><![CDATA[
{
  "$id": "https://example.com/foo",
  "items": {
    "$ref": "bar"
  }
}
]]></artwork>
          <artwork><![CDATA[
{
  "$id": "https://example.com/bar",
  "additionalProperties": { }
}
]]></artwork>
          <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>Schema authors <bcp14>SHOULD NOT</bcp14> rely on URIs that use a base other than the
resource's canonical URI.  Implementations may not support them, and
non-canonical URIs can also be more fragile in the face of refactoring.</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. This kind of schema is recognizable by the presence of "$id" outside
of the document root, since "$id" in a subschema indicates an embedded
schema resource.</t>
        <t>Each embedded Schema Resource <bcp14>MUST</bcp14> 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 <bcp14>SHOULD</bcp14> 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 <bcp14>MUST</bcp14> identify itself with a URI using the "$id" keyword,
and <bcp14>SHOULD</bcp14> make use of the "$schema" keyword to identify the dialect it is using, in the root of the
schema resource. It is <bcp14>RECOMMENDED</bcp14> 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 <bcp14>RECOMMENDED</bcp14> 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 <bcp14>MAY</bcp14> 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 <bcp14>MAY</bcp14> be embedded in a location other than "$defs" where the location is defined
as a schema value.</t>
          <t>A Bundled Schema Resource <bcp14>MUST NOT</bcp14> 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 <bcp14>MUST NOT</bcp14> 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
<bcp14>MUST</bcp14> 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 <bcp14>MAY</bcp14>
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 <bcp14>SHOULD NOT</bcp14> be validated by applying a meta-schema
to the Compound Schema Document as an instance. It is <bcp14>RECOMMENDED</bcp14> that an alternate
validation process be provided in order to validate Schema Documents. Each Schema Resource
<bcp14>SHOULD</bcp14> be separately validated against its associated meta-schema.</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,
<bcp14>MAY</bcp14> 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 <bcp14>MUST NOT</bcp14> 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 <bcp14>SHOULD NOT</bcp14> make
use of infinite recursive nesting like this; the behavior is undefined.</t>
        </section>
        <section anchor="duplicate-resources-and-anchors">
          <name>Duplicate resources and anchors</name>
          <t>The effect of specifying the same fragment name multiple times within
the same resource, using any combination of "$anchor" and/or
"$dynamicAnchor", or of specifying the same URI for multiple resources
within the same document, is undefined.  Implementations <bcp14>MAY</bcp14>
raise an error if such usage is detected.</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.  See <xref target="security"/> for the security implications
of blindly interpreting targets as schemas.</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 <bcp14>MUST NOT</bcp14> 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 <bcp14>RECOMMENDED</bcp14> 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 <bcp14>SHOULD</bcp14> set long-lived caching headers on JSON Schemas.
HTTP clients <bcp14>SHOULD</bcp14> observe caching headers and not re-request documents within
their freshness period.
Distributed systems <bcp14>SHOULD</bcp14> make use of a shared cache and/or caching proxy.</t>
          <t>Clients <bcp14>SHOULD</bcp14> 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 <bcp14>SHOULD</bcp14> 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 <bcp14>SHOULD</bcp14> 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 <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14>
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 <bcp14>MAY</bcp14>
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 <bcp14>MUST</bcp14> cause all
keyword sub-evaluations that accepted the input to become irrelevant</t>
          </li>
          <li>
            <t>A keyword that accepts the input <bcp14>MUST</bcp14> cause all keyword sub-evaluations
that rejected the input to become irrelevant</t>
          </li>
          <li>
            <t>A schema object that accepts the input <bcp14>MUST NOT</bcp14> 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 <bcp14>MUST NOT</bcp14> ever
subsequently be deemed relevant.</t>
          </li>
        </ul>
        <t>Annotations and errors <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> only
appear in a schema resource's root schema.</t>
        <t>A keyword <bcp14>MAY</bcp14> 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 <bcp14>SHOULD</bcp14> 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 <bcp14>MUST NOT</bcp14> result in a circular dependency.
Keywords <bcp14>MAY</bcp14> 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 <bcp14>MUST NOT</bcp14> define interactions outside of these mechanisms.</t>
      </section>
      <section anchor="default-behaviors">
        <name>Default Behaviors</name>
        <t>A missing keyword <bcp14>MUST NOT</bcp14> produce a false assertion result, <bcp14>MUST
NOT</bcp14> produce annotation results, and <bcp14>MUST NOT</bcp14> 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
<bcp14>SHOULD</bcp14> 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 <bcp14>MUST NOT</bcp14> result in annotations.</t>
      </section>
      <section anchor="unrecognized">
        <name>Handling unrecognized or unsupported keywords</name>
        <t>Implementations <bcp14>SHOULD</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST NOT</bcp14> change while processing an input, but
keywords that affect URI-reference resolution <bcp14>MAY</bcp14> 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 <bcp14>MAY</bcp14> apply any boolean logic operation
to the assertion results of subschemas, but <bcp14>MUST NOT</bcp14> 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>
          <artwork><![CDATA[
{
    "type": ["string", "null"],
    "maxLength": 255
}
]]></artwork>
          <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 <bcp14>MUST</bcp14> 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 <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MAY</bcp14> 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 <bcp14>MAY</bcp14> 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 <bcp14>SHOULD</bcp14>
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 <bcp14>SHOULD</bcp14> 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 <bcp14>MAY</bcp14> deviate from this as supported by their
specific languages and platforms, however it is <bcp14>RECOMMENDED</bcp14> 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 <bcp14>SHOULD</bcp14> provide at least one of the "flag", "basic", or "detailed"
format and <bcp14>MAY</bcp14> provide the "verbose" format.  If it provides one or more of the
"detailed" or "verbose" formats, it <bcp14>MUST</bcp14> also provide the "flag" format.
Implementations <bcp14>SHOULD</bcp14> 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 <bcp14>SHOULD</bcp14> 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 <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> be expressed as a JSON Pointer, and it <bcp14>MUST</bcp14> 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 (where "absolute"
is used in a different sense than the "absolute-URI" terminology from RFC3986, in that
the definition does not exclude fragments).  The value <bcp14>MUST</bcp14>
be expressed as a full URI using the canonical URI of the relevant schema resource
with a JSON Pointer fragment, and it <bcp14>MUST NOT</bcp14> include by-reference applicators
such as "$ref" or "$dynamicRef" as non-terminal path components.
It <bcp14>MAY</bcp14> end in such keywords if the error or annotation is for that
keyword, such as an unresolvable reference.</t>
          <artwork><![CDATA[
https://example.com/schemas/common#/$defs/count/minimum
]]></artwork>
          <t>This information <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be an object containing a boolean property named "valid".  When
additional information about the result is required, the output <bcp14>MUST</bcp14> 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"/>)
<bcp14>SHOULD</bcp14> be omitted, and annotations and errors from such evaluations
<bcp14>MUST</bcp14> 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 <bcp14>SHOULD</bcp14> 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
<bcp14>RECOMMENDED</bcp14> 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 <bcp14>RECOMMENDED</bcp14> 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>
          <artwork><![CDATA[
{
  "$id": "https://example.com/polygon",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "validProp": true
  },
  "additionalProperties": false
}
]]></artwork>
          <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="extending-format">
      <name>Extending <tt>format</tt></name>
      <t>The format keyword (<xref target="format-vocab"/>) may be extended by registering new format attributes (<xref target="iana-format"/>).</t>
      <section anchor="custom-format-attributes">
        <name>Custom format attributes</name>
        <t>Save for agreement between
parties, schema authors <bcp14>SHALL NOT</bcp14> expect a peer implementation to support
custom format attributes.  See <xref target="format-implementation"/> for how
implementations handle format attributes they do not recognize.</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 <bcp14>RECOMMENDED</bcp14> to define additional keywords in a custom vocabulary rather than
unregistered format attributes if interoperability is desired.</t>
      </section>
      <section anchor="non-string-values">
        <name>Non-string values</name>
        <t>Format attributes in this specification are defined for string values.  New
format attributes could conceivably be defined for use with numeric values.</t>
      </section>
    </section>
    <section anchor="meta-schemas">
      <name>Meta-schemas and Vocabularies</name>
      <t>A schema that itself describes a schema is called a meta-schema.
Meta-schemas are used to validate JSON Schemas.
Meta-schemas are critical for extensibility.</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 <bcp14>MUST</bcp14> 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-schema authors, beyond choosing vocabularies,
can impose additional constraints such as forbidding certain keywords, or
performing unusually strict syntactical validation, as might be done
during a development and testing cycle.</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 anchor="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.  Each vocabulary typically identifies
a meta-schema consisting only of the vocabulary's keywords.</t>
        <t>Since vocabularies are identified by URIs in the meta-schema, generic
implementations can load extensions to support previously unknown
vocabularies.  A vocabulary URI is an identifier.  It <bcp14>MAY</bcp14> be a URL, but if
so the nature of the retrievable resource is undefined.  Vocabulary authors
<bcp14>MAY</bcp14> use the URL of the vocabulary specification, in a human-readable media
type such as text/html or text/plain, as the vocabulary URI.</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>
        <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>
        <section anchor="vocabulary-keyword-extended">
          <name>The <tt>$vocabulary</tt> keyword</name>
          <t>In a meta-schema, the $vocabulary keyword identifies 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;
an implementation <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be
processed in a manner consistent with the semantic definitions contained
within the vocabulary.</t>
          <t>Meta-schemas that do not use "$vocabulary" <bcp14>MUST</bcp14> be considered to require the
Core vocabulary as if its URI were present with a value of true. Meta-schemas
that do use this keyword <bcp14>MUST</bcp14> explicitly list the Core vocabulary, which <bcp14>MUST</bcp14>
have a value of true indicating that it is required.</t>
          <t>The value of this keyword <bcp14>MUST</bcp14> be an object.  The property names in the
object <bcp14>MUST</bcp14> be absolute URIs and each URI <bcp14>MUST</bcp14> be normalized.
Each URI that appears as a property name identifies a specific set of
keywords and their semantics.</t>
          <t>The values of the object properties <bcp14>MUST</bcp14> be booleans.
If the value is true, then implementations that do not recognize
the vocabulary <bcp14>MUST NOT</bcp14> validate any input against schemas that
declare this meta-schema with "$schema".  This does not prevent other
processing of those schemas, such as checking them against their
meta-schema.  If the value is false, implementations
that do not recognize the vocabulary <bcp14>SHOULD</bcp14> proceed with processing
such schemas.  The value has no impact if the implementation
understands the vocabulary.</t>
          <t>The "$vocabulary" keyword <bcp14>SHOULD</bcp14> be used in the root schema of any schema
resource intended for use as a meta-schema.  It <bcp14>MUST NOT</bcp14> appear in subschemas.</t>
          <t>The "$vocabulary" keyword <bcp14>MUST</bcp14> 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>
        <section anchor="default-vocabularies">
          <name>Default vocabularies</name>
          <t>If "$vocabulary" is absent, an implementation <bcp14>MAY</bcp14> 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 is built for a specific purpose,
then it <bcp14>SHOULD</bcp14> assume the use of all of the most relevant vocabularies
for that purpose.</t>
          <t>For example, an implementation that is a validator
<bcp14>SHOULD</bcp14> 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 (so that implementations can
find all vocabulary requirement information in one place).
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>.</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 <bcp14>MAY</bcp14> be published between
specification drafts in order to correct errors.  Implementations
<bcp14>SHOULD</bcp14> 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="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 in this specification.
Certain vocabularies are optional to support, which is explained in detail in
the relevant sections.</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 <bcp14>MUST NOT</bcp14> 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 <bcp14>SHOULD</bcp14> guard against
excessive consumption of system resources in such a scenario.</t>
      <t>Servers <bcp14>MUST</bcp14> 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 <bcp14>MUST NOT</bcp14> 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 <bcp14>MUST NOT</bcp14> 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>
      <t>Interpreting a reference target as a schema when it is not known to be one
(see <xref target="non-schemas"/>) is analogous to fetching a schema over HTTP but receiving
a response with a Content-Type other than application/json-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.</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 <bcp14>SHOULD NOT</bcp14> be encoded with a fractional
part.</t>
      </section>
      <section anchor="regex-interop">
        <name>Regular Expressions</name>
        <t>Keywords <bcp14>MAY</bcp14> use regular expressions to express constraints, or constrain
the input value to be a regular expression.
These regular expressions <bcp14>SHOULD</bcp14> be valid according to the regular expression
dialect described in <xref target="ECMA262"/>, Section 22.2.1.</t>
        <t>Unless otherwise specified by a keyword, regular expressions <bcp14>MUST NOT</bcp14> be
considered to be implicitly anchored at either end.  All regular expression
keywords in this specification are un-anchored.</t>
        <t>Regular expressions <bcp14>SHOULD</bcp14> 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 <bcp14>SHOULD</bcp14> 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 <bcp14>MUST NOT</bcp14> 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="applicationjson-schemajson">
        <name>application/json-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: json-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>
          <li>
            <t>Deprecated alias names for this type: application/schema+json</t>
          </li>
          <li>
            <t>Intended usage: COMMON</t>
          </li>
        </ul>
      </section>
      <section anchor="applicationschemajson">
        <name>application/schema+json</name>
        <t>This MIME media type is registered for clarity and interoperability.
It is frequently used already, but it could also describe something
other than "JSON Schema" that is a schema language in JSON, so it is
registered as OBSOLETE in favor of application/json-schema+json
(<xref target="RFC6838"/>).</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>
          <li>
            <t>Intended usage: OBSOLETE</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 anchor="iana-format">
        <name>JSON Schema Format Attributes Registry</name>
        <t>IANA is requested to create a new registry, "JSON Schema Format
Attributes", in a new "JSON Schema" registry group.  The registry
lists the format attribute values that can be used with the "format"
keyword (<xref target="format-vocab"/>).</t>
        <t>The registration policy is Specification Required
(<xref section="4.6" sectionFormat="comma" target="RFC8126"/>).</t>
        <t>Each registration contains:</t>
        <dl>
          <dt>Name:</dt>
          <dd>
            <t>The format attribute, as used in the "format" keyword.  Names
consist of lowercase ASCII letters, digits, and hyphens
("-"), and begin with a letter.</t>
          </dd>
          <dt>Input Types:</dt>
          <dd>
            <t>The input types that the format attribute applies to, such as
"string" (<xref target="input"/>).  Inputs of other types are accepted.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>A brief description of what the format attribute accepts.</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>A specification that defines the syntax the format attribute
checks, precisely enough for independent implementations to agree.</t>
          </dd>
        </dl>
        <t>Registering a format attribute does not change the requirements of the
Format-Assertion vocabulary (<xref target="format-implementation"/>): implementations
are required to support the format attributes defined in this
specification, and <bcp14>MAY</bcp14> support others from this registry.</t>
        <section anchor="instructions-for-designated-experts">
          <name>Instructions for Designated Experts</name>
          <t>The designated experts <bcp14>SHOULD</bcp14> check that a proposed format attribute:</t>
          <ul spacing="normal">
            <li>
              <t>checks syntax only: whether a value is accepted depends only on the
value itself and on static data such as calendar dates generally,
and not on external data, network lookups, or the
current date and time;</t>
            </li>
            <li>
              <t>has a syntax definition that leaves little room for
implementations to disagree, and that names any parts that are
optional to check;</t>
            </li>
            <li>
              <t>has a name that is not confusingly similar to a registered name.</t>
            </li>
          </ul>
          <t>Experts are encouraged to ask for test cases of valid and invalid
values.</t>
        </section>
        <section anchor="initial-registry-contents">
          <name>Initial Registry Contents</name>
          <t>IANA is requested to populate the registry with the following entries.
All of these initial format attributes have the Input Types value "string".</t>
          <table>
            <name>Initial contents of the JSON Schema Format Attributes registry</name>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">Description</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">date-time</td>
                <td align="left">A date and time with a time zone offset</td>
                <td align="left">
                  <xref target="format-date-time"/></td>
              </tr>
              <tr>
                <td align="left">date</td>
                <td align="left">A full calendar date</td>
                <td align="left">
                  <xref target="format-date"/></td>
              </tr>
              <tr>
                <td align="left">time</td>
                <td align="left">A time of day with a time zone offset</td>
                <td align="left">
                  <xref target="format-time"/></td>
              </tr>
              <tr>
                <td align="left">duration</td>
                <td align="left">An RFC 3339 duration</td>
                <td align="left">
                  <xref target="format-duration"/></td>
              </tr>
              <tr>
                <td align="left">email</td>
                <td align="left">An email address (ASCII only)</td>
                <td align="left">
                  <xref target="format-email"/></td>
              </tr>
              <tr>
                <td align="left">idn-email</td>
                <td align="left">An email address, allowing non-ASCII characters</td>
                <td align="left">
                  <xref target="format-idn-email"/></td>
              </tr>
              <tr>
                <td align="left">hostname</td>
                <td align="left">An Internet host name (ASCII only)</td>
                <td align="left">
                  <xref target="format-hostname"/></td>
              </tr>
              <tr>
                <td align="left">idn-hostname</td>
                <td align="left">A host name, allowing non-ASCII characters</td>
                <td align="left">
                  <xref target="format-idn-hostname"/></td>
              </tr>
              <tr>
                <td align="left">ipv4</td>
                <td align="left">An IPv4 address in dotted-quad form</td>
                <td align="left">
                  <xref target="format-ipv4"/></td>
              </tr>
              <tr>
                <td align="left">ipv6</td>
                <td align="left">An IPv6 address</td>
                <td align="left">
                  <xref target="format-ipv6"/></td>
              </tr>
              <tr>
                <td align="left">uri</td>
                <td align="left">An absolute URI</td>
                <td align="left">
                  <xref target="format-uri"/></td>
              </tr>
              <tr>
                <td align="left">uri-reference</td>
                <td align="left">A URI or a relative reference</td>
                <td align="left">
                  <xref target="format-uri-reference"/></td>
              </tr>
              <tr>
                <td align="left">iri</td>
                <td align="left">An absolute IRI, allowing non-ASCII characters</td>
                <td align="left">
                  <xref target="format-iri"/></td>
              </tr>
              <tr>
                <td align="left">iri-reference</td>
                <td align="left">An IRI or a relative reference</td>
                <td align="left">
                  <xref target="format-iri-reference"/></td>
              </tr>
              <tr>
                <td align="left">uuid</td>
                <td align="left">A UUID, without a <tt>urn:uuid:</tt> prefix</td>
                <td align="left">
                  <xref target="format-uuid"/></td>
              </tr>
              <tr>
                <td align="left">uri-template</td>
                <td align="left">A URI Template</td>
                <td align="left">
                  <xref target="format-uri-template"/></td>
              </tr>
              <tr>
                <td align="left">json-pointer</td>
                <td align="left">A JSON Pointer</td>
                <td align="left">
                  <xref target="format-json-pointer"/></td>
              </tr>
              <tr>
                <td align="left">relative-json-pointer</td>
                <td align="left">A Relative JSON Pointer</td>
                <td align="left">
                  <xref target="format-relative-json-pointer"/></td>
              </tr>
              <tr>
                <td align="left">regex</td>
                <td align="left">A regular expression in the ECMA-262 dialect</td>
                <td align="left">
                  <xref target="format-regex"/></td>
              </tr>
            </tbody>
          </table>
        </section>
      </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://262.ecma-international.org/17.0/">
          <front>
            <title>ECMAScript 2026 Language Specification, 17th Edition</title>
            <author>
              <organization>European Computer Manufacturers Association</organization>
            </author>
            <date year="2026" 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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </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="RFC1034">
          <front>
            <title>Domain names - concepts and facilities</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised basic definition of The Domain Name System. It obsoletes RFC-882. This memo describes the domain style names and their used for host address look up and electronic mail forwarding. It discusses the clients and servers in the domain name system and the protocol used between them.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1034"/>
          <seriesInfo name="DOI" value="10.17487/RFC1034"/>
        </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="RFC5892">
          <front>
            <title>The Unicode Code Points and Internationalized Domain Names for Applications (IDNA)</title>
            <author fullname="P. Faltstrom" initials="P." role="editor" surname="Faltstrom"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document specifies rules for deciding whether a code point, considered in isolation or in context, is a candidate for inclusion in an Internationalized Domain Name (IDN).</t>
              <t>It is part of the specification of Internationalizing Domain Names in Applications 2008 (IDNA2008). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5892"/>
          <seriesInfo name="DOI" value="10.17487/RFC5892"/>
        </reference>
        <reference anchor="RFC5893">
          <front>
            <title>Right-to-Left Scripts for Internationalized Domain Names for Applications (IDNA)</title>
            <author fullname="H. Alvestrand" initials="H." role="editor" surname="Alvestrand"/>
            <author fullname="C. Karp" initials="C." surname="Karp"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>The use of right-to-left scripts in Internationalized Domain Names (IDNs) has presented several challenges. This memo provides a new Bidi rule for Internationalized Domain Names for Applications (IDNA) labels, based on the encountered problems with some scripts and some shortcomings in the 2003 IDNA Bidi criterion. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5893"/>
          <seriesInfo name="DOI" value="10.17487/RFC5893"/>
        </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="RFC9562">
          <front>
            <title>Universally Unique IDentifiers (UUIDs)</title>
            <author fullname="K. Davis" initials="K." surname="Davis"/>
            <author fullname="B. Peabody" initials="B." surname="Peabody"/>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <date month="May" year="2024"/>
            <abstract>
              <t>This specification defines UUIDs (Universally Unique IDentifiers) --
also known as GUIDs (Globally Unique IDentifiers) -- and a Uniform
Resource Name namespace for UUIDs. A UUID is 128 bits long and is
intended to guarantee uniqueness across space and time. UUIDs were
originally used in the Apollo Network Computing System (NCS), later
in the Open Software Foundation's (OSF's) Distributed Computing
Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the OSF DCE specification with the
kind permission of the OSF (now known as "The Open Group"). Information from earlier versions of the OSF DCE specification have
been incorporated into this document. This document obsoletes RFC
4122.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9562"/>
          <seriesInfo name="DOI" value="10.17487/RFC9562"/>
        </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 H. Andrews" initials="H. 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>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="ISO8601" target="https://www.iso.org/standard/70907.html">
          <front>
            <title>Date and time - Representations for information interchange - Part 1: Basic rules</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2019" month="February"/>
          </front>
          <seriesInfo name="ISO" value="8601-1:2019"/>
        </reference>
        <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 H. Andrews" initials="H. 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 4218?>

<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>
      <artwork><![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"
        }
    }
}
]]></artwork>
      <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.</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>
      <artwork><![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"
            }
        }
    }
}
]]></artwork>
      <t>strict-tree schema, guards against misspelled properties:</t>
      <artwork><![CDATA[
{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://example.com/strict-tree",
    "$dynamicAnchor": "node",

    "$ref": "tree",
    "unevaluatedProperties": false
}
]]></artwork>
      <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 <bcp14>SHOULD</bcp14> provide a meta-schema that validates the
expected usage of the vocabulary's keywords on their own.  Such meta-schemas
<bcp14>SHOULD</bcp14> not forbid additional keywords, and <bcp14>MUST</bcp14> 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>
        <artwork><![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"
    }
  }
}
]]></artwork>
        <t>This meta-schema describes only a single extension vocabulary.</t>
        <artwork><![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"
    }
  }
}
]]></artwork>
        <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="changes-from-2020-12">
      <name>Important changes from JSON Schema 2020-12</name>
      <t>This appendix is non-normative.  It summarizes changes from "2020-12"
that can affect implementations.</t>
      <ul spacing="normal">
        <li>
          <t>Applicators are no longer required to produce annotations.</t>
        </li>
        <li>
          <t>Keywords with behavior defined in terms of annotations are
now defined in terms of behavior, allowing choice of implementation
mechanism.</t>
        </li>
        <li>
          <t>An annotation's value is always the keyword's value (<xref target="annotations"/>).
Computed annotation values are no longer permitted.</t>
        </li>
        <li>
          <t>Relevance (<xref target="relevance"/>) governs both output and dependency
information, replacing the 2020-12 rules for discarding annotations
from failed subschemas.</t>
        </li>
        <li>
          <t>Keywords are not permitted to modify the input during evaluation
(<xref target="val-ann"/>).  Modifications need to be in a separate step.</t>
        </li>
        <li>
          <t>"application/json-schema+json" is the media type for JSON Schema.
"application/schema+json" is registered as an obsolete alias
(<xref target="iana-considerations"/>).</t>
        </li>
        <li>
          <t>Format checking is more clearly a requirement, meeting schema authors'
expectations.  Several format attributes are much more narrowly defined
so that implementations validate more consistently with each other.</t>
        </li>
      </ul>
    </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-04">
        <name>draft-ietf-jsonschema-json-schema-04</name>
        <ul spacing="normal">
          <li>
            <t>Remove footnotes, folding into text or resolving issue or deleting.</t>
          </li>
          <li>
            <t>Strengthen requirements for 'format' in several ways, both overall
and for individual format attributes.</t>
          </li>
          <li>
            <t>Request an IANA registry for format attributes.</t>
          </li>
          <li>
            <t>Updates the IANA registry request for "application/json-schema+json".</t>
          </li>
          <li>
            <t>Move some more details on vocabularies to the meta-schema section.</t>
          </li>
        </ul>
      </section>
      <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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
IYvOaG/y8nXXeqDKvH7UCbeThFRPK3uUem5bqKGbHOakRrOOz8Fj10Z2710i
VHl29DLA6KWCx/afsv49lHVJ7RLY1d6+EInyTuvmqRxJcF/7knLpnNQ0CRtA
sU2wAbeo/ianPYzIhe+7Y/nYNMlhlo7XWh43XAw5a3KXHW8SdEVONleNrUSs
6LHU6CuVn2HxzcXC7oZrfFf4P8uMmlIxdFncziW+QKBKoWPUzZt+cLDMck3t
EbGfI3ore/aJJxyVtWzLfcPWzkyJPjTLUJoSSqkuKAMh2kr1Ya6ok7O5Ax3P
0uKhJci7rVBJJjWlCBE2UlgGKwp9VWr1nZb+oaYZAdjIqEfhVe5HHnkg+jfu
fHRA9v4MSE6jB5HIi61gAEP7SMaN4NZ/kyxgvcS38Ua59o1Kko+/Uk6vlPpB
2aLSaXysew3YqLdNKgK5j7l1Y/H+Zfo1O8d57a3ZyajLARK1NTtThMI5Sqqk
1/iiyJvsGEM7n/V0YuEIzLP1I5D5K85E8VYt77ovsUOi6SITGptploKiBQWK
gW5I/6tVIbQ4qifoNsXD77EXE7HJmTr6h+RpiNx6PqMXoM/EmXWbotRDbB0V
y8HjfoEFvj8ZkpzCN8z8lIoQA/ziXcYuqZZaI3lFG4Sgl37ozSLQLa+nXN6a
WZGGHypdlcCKyL0y981+nWnwkxfUbNmb9+J6VFR/Xbw/p5I0ooILzusblqpB
3+e+mujITpymxgTK17druffGhS4qHEcJc0p6S5/WhMiWY6fbTywomQijHhWT
7B0hmWDOJ3T09PAF6tYzshtG5T6kuwL2+agyAZtJx8cB7u6PkCKuKQ2dlCqp
FZHXEsPJlbFJfzOU0dai8hTPNLi5odLUUl2Au6xGUqbGKDD6pdbSUA1gIG0d
4bdd/yx7D/cfMfJp+l5+vLf/8N7DB5/vP3zg3/qM84VQxxgQBG/ztLdtfuzh
V8++5vbbAh2Blq4jaBAbNcBFWjc/rPNZpI+pRneHtn/H7pqHFGUQUBSW+PGf
9+g0dCF1zzFab7yE8nrNBsc4vcRJj15EFax3Lyp0VtVtY/6Nol2YQ46TTlSo
+i41II8C/EIlpox7P1ZkyC7LBQtj2cy6DnwtnpCYUWuJU/I0y9t2aWKI2LDs
OIJklk3Wp5SajSF7TmJWQ0SR7WowQyspYgmap8jQIpHbQVDvq2Pji7tifGw4
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

-->

</rfc>
