<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-jsonschema-json-schema-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title>JSON Schema</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-jsonschema-json-schema-01"/>
    <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>andrews_henry@yahoo.com</email>
      </address>
    </author>
    <date year="2026" month="June" day="12"/>
    <area>ART</area>
    <keyword>Internet-Draft</keyword>
    <keyword>JSON</keyword>
    <abstract>
      <?line 77?>

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

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

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

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

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

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

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

    "$ref": "tree",
    "unevaluatedProperties": false
}
]]></sourcecode>
      <t>input with misspelled field:</t>
      <sourcecode type="json"><![CDATA[
{
    "children": [ { "daat": 1 } ]
}
]]></sourcecode>
      <t>When we load these two schemas, we will notice the "$dynamicAnchor"
named "node" (note the lack of "#" as this is just the name)
present in each, resulting in the following full schema URIs:</t>
      <ul spacing="normal">
        <li>
          <t>"https://example.com/tree#node"</t>
        </li>
        <li>
          <t>"https://example.com/strict-tree#node"</t>
        </li>
      </ul>
      <t>In addition, JSON Schema implementations keep track of the fact
that these fragments were created with "$dynamicAnchor".</t>
      <t>If we apply the "strict-tree" schema to the input, we will follow
the "$ref" to the "tree" schema, examine its "children" subschema,
and find the "$dynamicRef": to "#node" (note the "#" for URI fragment syntax)
in its "items" subschema.  That reference resolves to
"https://example.com/tree#node", which is a URI with a fragment
created by "$dynamicAnchor".  Therefore we must examine the dynamic
scope before following the reference.</t>
      <t>At this point, the dynamic path is
"#/$ref/properties/children/items/$dynamicRef", with a dynamic scope
containing (from the outermost scope to the innermost):</t>
      <ol spacing="normal" type="1"><li>
          <t>"https://example.com/strict-tree#"</t>
        </li>
        <li>
          <t>"https://example.com/tree#"</t>
        </li>
        <li>
          <t>"https://example.com/tree#/properties/children"</t>
        </li>
        <li>
          <t>"https://example.com/tree#/properties/children/items"</t>
        </li>
      </ol>
      <t>Since we are looking for a plain name fragment, which can be
defined anywhere within a schema resource, the JSON Pointer fragments
are irrelevant to this check.  That means that we can remove those
fragments and eliminate consecutive duplicates, producing:</t>
      <ol spacing="normal" type="1"><li>
          <t>"https://example.com/strict-tree"</t>
        </li>
        <li>
          <t>"https://example.com/tree"</t>
        </li>
      </ol>
      <t>In this case, the outermost resource also has a "node" fragment
defined by "$dynamicAnchor".  Therefore instead of resolving the
"$dynamicRef" to "https://example.com/tree#node", we resolve it to
"https://example.com/strict-tree#node".</t>
      <t>This way, the recursion in the "tree" schema recurses to the root
of "strict-tree", instead of only applying "strict-tree" to the
input root, but applying "tree" to input children.</t>
      <t>This example shows both "$dynamicAnchor"s in the same place
in each schema, specifically the resource root schema.
Since plain-name fragments are independent of the JSON structure,
this would work just as well if one or both of the node schema objects
were moved under "$defs".  It is the matching "$dynamicAnchor" values
which tell us how to resolve the dynamic reference, not any sort of
correlation in JSON structure.</t>
    </section>
    <section anchor="working-with-vocabularies">
      <name>Working with vocabularies</name>
      <section anchor="best-practices-for-vocabulary-and-meta-schema-authors">
        <name>Best practices for vocabulary and meta-schema authors"</name>
        <t>Vocabulary authors should
take care to avoid keyword name collisions if the vocabulary is intended
for broad use, and potentially combined with other vocabularies.  JSON
Schema does not provide any formal namespacing system, but also does
not constrain keyword names, allowing for any number of namespacing
approaches.</t>
        <t>Vocabularies may build on each other, such as by defining the behavior
of their keywords with respect to the behavior of keywords from another
vocabulary, or by using a keyword from another vocabulary with
a restricted or expanded set of acceptable values.  Not all such
vocabulary re-use will result in a new vocabulary that is compatible
with the vocabulary on which it is built.  Vocabulary authors should
clearly document what level of compatibility, if any, is expected.</t>
        <t>Meta-schema authors should not use "$vocabulary" to combine multiple
vocabularies that define conflicting syntax or semantics for the same
keyword.  As semantic conflicts are not generally detectable through
schema validation, implementations are not expected to detect such
conflicts.  If conflicting vocabularies are declared, the resulting
behavior is undefined.</t>
        <t>Vocabulary authors SHOULD provide a meta-schema that validates the
expected usage of the vocabulary's keywords on their own.  Such meta-schemas
SHOULD not forbid additional keywords, and MUST not forbid any
keywords from the Core vocabulary.</t>
        <t>It is recommended that meta-schema authors reference each vocabulary's
meta-schema using the <xref target="allOf">"allOf"</xref> keyword,
although other mechanisms for constructing the meta-schema may be
appropriate for certain use cases.</t>
        <t>The recursive nature of meta-schemas makes the "$dynamicAnchor"
and "$dynamicRef" keywords particularly useful for extending
existing meta-schemas, as can be seen in the JSON Hyper-Schema
(<xref target="I-D.handrews-json-schema-hyperschema"/>) meta-schema
which extends the Validation meta-schema.</t>
        <t>Meta-schemas may impose additional constraints, including describing
keywords not present in any vocabulary, beyond what the meta-schemas
associated with the declared vocabularies describe.  This allows for
restricting usage to a subset of a vocabulary, and for validating
locally defined keywords not intended for re-use.</t>
        <t>However, meta-schemas should not contradict any vocabularies that
they declare, such as by requiring a different JSON type than
the vocabulary expects.  The resulting behavior is undefined.</t>
        <t>Meta-schemas intended for local use, with no need to test for
vocabulary support in arbitrary implementations, can safely omit
"$vocabulary" entirely.</t>
      </section>
      <section anchor="example-meta-schema">
        <name>Example meta-schema with vocabulary declarations</name>
        <t>This meta-schema explicitly declares both the Core and Applicator vocabularies,
together with an extension vocabulary, and combines their meta-schemas with
an "allOf".  The extension vocabulary's meta-schema, which describes only the
keywords in that vocabulary, is shown after the main example meta-schema.</t>
        <t>The main example meta-schema also restricts the usage of the Unevaluated
vocabulary by forbidding the keywords prefixed with "unevaluated", which
are particularly complex to implement.  This does not change the semantics
or set of keywords defined by the other vocabularies. It just ensures
that schemas using this meta-schema that attempt to use the keywords
prefixed with "unevaluated" will fail validation against this meta-schema.</t>
        <t>Finally, this meta-schema describes the syntax of a keyword, "localKeyword",
that is not part of any vocabulary.  Presumably, the implementors and users
of this meta-schema will understand the semantics of "localKeyword".
JSON Schema does not define any mechanism for expressing keyword semantics
outside of vocabularies, making them unsuitable for use except in a
specific environment in which they are understood.</t>
        <t>This meta-schema combines several vocabularies for general use.</t>
        <sourcecode type="json"><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/meta/general-use-example",
  "$dynamicAnchor": "meta",
  "$vocabulary": {
    "https://json-schema.org/draft/2020-12/vocab/core": true,
    "https://json-schema.org/draft/2020-12/vocab/applicator": true,
    "https://json-schema.org/draft/2020-12/vocab/validation": true,
    "https://example.com/vocab/example-vocab": true
  },
  "allOf": [
    {"$ref": "https://json-schema.org/draft/2020-12/meta/core"},
    {"$ref": "https://json-schema.org/draft/2020-12/meta/applicator"},
    {"$ref": "https://json-schema.org/draft/2020-12/meta/validation"},
    {"$ref": "https://example.com/meta/example-vocab"}
  ],
  "patternProperties": {
    "^unevaluated": false
  },
  "properties": {
    "localKeyword": {
      "$comment": "Not in vocabulary, but validated if used",
      "type": "string"
    }
  }
}
]]></sourcecode>
        <t>This meta-schema describes only a single extension vocabulary.</t>
        <sourcecode type="json"><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/meta/example-vocab",
  "$dynamicAnchor": "meta",
  "$vocabulary": {
    "https://example.com/vocab/example-vocab": true
  },
  "type": ["object", "boolean"],
  "properties": {
    "minDate": {
      "type": "string",
      "pattern": "\d\d\d\d-\d\d-\d\d",
      "format": "date"
    }
  }
}
]]></sourcecode>
        <t>As shown above, even though each of the single-vocabulary meta-schemas
referenced in the general-use meta-schema's "allOf" declares its
corresponding vocabulary, this new meta-schema must re-declare them.</t>
        <t>The standard meta-schemas that combine all vocabularies defined by
the Core and Validation specification, and that combine all vocabularies
defined by those specifications as well as the Hyper-Schema specification
(<xref target="I-D.handrews-json-schema-hyperschema"/>),
demonstrate additional complex combinations.  These URIs for these
meta-schemas may be found in the Validation and Hyper-Schema specifications,
respectively.</t>
        <t>While the general-use meta-schema can validate the syntax of "minDate",
it is the vocabulary that defines the logic behind the semantic meaning
of "minDate".  Without an understanding of the semantics (in this example,
that the input value must be a date equal to or after the date
provided as the keyword's value in the schema), an implementation can
only validate the syntactic usage.  In this case, that means validating
that it is a date-formatted string (using "pattern" to ensure that it is
validated even when "format" functions purely as an annotation, as explained
in the the validation specification (<xref target="I-D.bhutton-json-schema-validation"/>).</t>
      </section>
    </section>
    <section anchor="references-and-generative-use-cases">
      <name>References and generative use cases</name>
      <t>While the presence of references is expected to be transparent
to validation results, generative use cases such as code generators
and UI renderers often consider references to be semantically significant.</t>
      <t>To make such use case-specific semantics explicit, the best practice
is to create an annotation keyword for use in the same
schema object alongside of a reference keyword such as "$ref".</t>
      <t>For example, here is a hypothetical keyword for determining
whether a code generator should consider the reference
target to be a distinct class, and how those classes are related.
Note that this example is solely for illustrative purposes, and is
not intended to propose a functional code generation keyword.</t>
      <sourcecode type="json"><![CDATA[
{
  "allOf": [
    {
      "classRelation": "is-a",
      "$ref": "classes/base.json"
    },
    {
      "$ref": "fields/common.json"
    }
  ],
  "properties": {
    "foo": {
      "classRelation": "has-a",
      "$ref": "classes/foo.json"
    },
    "date": {
      "$ref": "types/dateStruct.json"
    }
  }
}
]]></sourcecode>
      <t>Here, this schema represents some sort of object-oriented class.
The first reference in the "allOf" is noted as the base class.
The second is not assigned a class relationship, meaning that the
code generator should combine the target's definition with this
one as if no reference were involved.</t>
      <t>Looking at the properties, "foo" is flagged as object composition,
while the "date" property is not.  It is simply a field with
sub-fields, rather than an instance of a distinct class.</t>
      <t>This style of usage requires the annotation to be in the same object
as the reference, which must be recognizable as a reference.</t>
    </section>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This draft is based on great amounts of superb work by creators
and contributors to JSON Schema.  The authors of the 2020-12 spec
include Ben Hutton and Greg Dennis.  Thanks also to Jason Desrosiers.</t>
      <t>Past contributors include, with thanks:
Gary Court,
Francis Galiegue,
Kris Zyp,
Geraint Luff
Daniel Perrett,
Erik Wilde,
Evgeny Poberezkin,
Brad Bowman,
Gowry Sankar,
Donald Pipowitch,
Dave Finlay,
Denis Laxalde,
Phil Sturgeon,
Shawn Silverman,
and Karen Etheridge.</t>
    </section>
    <section anchor="change-log">
      <name>Change Log</name>
      <t><cref anchor="_22">This section to be removed before leaving Internet-Draft status.</cref></t>
      <section anchor="draft-dusseault-json-schema-01">
        <name>draft-dusseault-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-dusseault-json-schema-00">
        <name>draft-dusseault-json-schema-00</name>
        <t>Compared to the "2020-12" version of JSON Schema, this draft makes the following changes.</t>
        <ul spacing="normal">
          <li>
            <t>Consolidate the 2020-12 core and validation documents</t>
          </li>
          <li>
            <t>Delevel headers for a more readable Table of Contents</t>
          </li>
          <li>
            <t>Shift terminology to a terminology section</t>
          </li>
          <li>
            <t>Reorder conceptually: intro, keywords, processing and output, extensibility.</t>
          </li>
          <li>
            <t>Define input and instance as different things.</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
7B6Js8e3h0HoFoMKFUiQcrhunN64J2QMde0qLjla78tDhXksDhlXgl0VU7vu
96yKGL+MJgCwR9xq/IvlOncO8fR6NdgsH5XJh3woSH/IAyhWFej3DNovhEPF
PI2w2lUG98r5rFwRWFciwXyF+xtoMEVKp1kcR+GaG/LQjNTV2330MC+IATBw
skdx4zjQKgQxDtgieUq12dFBr3laXlsV6jU7pIZoxWm2Ru8cVw/QnjY1cmRh
IHws7K4jsoABMoHozjSBXOZTjEA63YnRMRRJjD9pBbIB6rZdlUk5SDuWdpRD
LIrKqtDjVAfVm85ULzWtCBa1AfCdKGeigMk5Ok53aYqwuQwOWJeKH5H5MREP
WeLurrzHTUYrUiiJjeEKS48M3LkbnOc4RYGm8ak/ZimI0hjQXxwN8szrHJcB
fbtXMMsb7DcCOiENDayecOTInejNqsLL+e1xoLr8Cmi7A6gmwxaa5TE4eFEU
QeXoHUPnqEn9v/B4DX7FFVgyX1ioniNy5QdFtE+6y8gz2xU1NBE1XdP3cwNn
7QIKjVYuO7cSMalktXpNiTBEyrXrGG9XEJIxVXMmxIsKOok2YGPQgad0F4HY
p+LYl81yfY1UK1gUDVfkzvfzZaNlTOGecvpfU28pjTeOGJcetwIrq19Fvf+o
i8Uo3w0mS6jVI/fojiOBfVuEryhmXCLojtgNwanJG/bqOgvBbPl0AiUHRRAJ
slIINmdktUABGW3rB21NSavCviolxnRLa6LWYuSlBb9UTEzbpX+lmhgp+v6v
H+akPPlvDF5aIjYVnhNYr/GLUSWUHqW4POcoFit0uT75V3Fzwoo3+ZZlP+3E
yIrlULRGXsJmet7lq87cTNngWS8oiq6mQ6EKxZtxX4xHec6EzpKOKDz1WifH
edJVdV9pH/tXghl1bkmptGxLIAMpa9UcAK8oErI9QrK9XqDQv9f3QYeVKkm1
fY2/pF4hMK16V2hHSCmYbzU7CS6lJ03eg7SB74tyKTrNm1ud/OVtSl8jCyKo
Guoe5GnwopUs7618HeAt2vq8aD1uizdv/ssPj+5/efezr4gtkbxB8BpZ+ysn
TKJvISHjnHRfxudS1PAzMlyzLtsxEGSbb1NYYsjCWyeoJtfL9Z7TWMTOAknu
qtmy/pGnZJAHKjTGTrpmmSS5deGU81gS/VhwM3RebCRF8gCqzdcUJRHuKbEk
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
Kvx9x/gDD4BM4zMLxFcT4USdPD+4olft6kFelckIfbIsh9Mn80aiP/1lwf+b
2X/8Mc5eoadouUdW89TUI6ptmVYNF7XDSGVXmgLr05rOxkHsumRWsoFvBEEa
H/2oU+HgSijR2MMR212vGfa6BO6m67h5VVrDO0QyZgFL+UrUNwXU7iHwMg4w
O4n6CIFBDUqFMhxsyBI0UIqxb2gzFapVKIBUFJwSVrWwgstHP8QmnubPXrHx
uu1ZtKw1cnctieopQtUxJy4Lnau+gUy0vMDXl7UN00LzcLjr2WxwyDBYOIzg
fsMGgbFkcLCl3mYHZJpaixP0nZo87/w3prLNVmDbU7UQwCPbN7ZKAPOS5Ah4
I1XSBJuqVNVuKwqGcfYaUXSEGcFGBdAIxpNtW66JJVe3GSRAYjY6ENkQor99
1ElLbUwyAxxAH1Mvz1yCCB5OH8UnJOsMAPFFdNDimcEnEPDCueszFiV0Zwi8
1G1W/k0UMQab4+MxtbJfNRAtQHBSsWTweB0hLiPPt4fxB8eRYVhqAiKW/cDR
rPS0nF3uttt8TuJh8ZdQRZxCpicr7krs8LJxj1rctOzpmTdFxnc3giGM3EEm
BE2O/h3yYaej3zJHCGA75AnC2qXO/dvj/DLtSiqXZPAyLS2OneEO6E5lLN32
YoUZYgo1Yf3At/TTXnDue1w9BlKJEWNdhC0KtvAGgiaumcc8xH4IAcwyszgL
zfXqQm2SOvhazXiR6WCNS+CIDCpLKR1qousg25XTYuP3NetT0MNg39a92VW/
1TzmU1pfEkPbGmDQAv7N3HnglfBNgOAjhLyCmNSay0r+psgjH6K+5JrIKsFy
z1gWy+UOcps2hAKQc/MtR9DMUcWwN+y0DBCTxbDCQgyUrp52rsoC+v6DhENJ
Z2i7We26hCq9MsQTSoA/1rL9ISeVPo7UtO6ESyHi864Uj6hCVLl974auXdY3
9i2/Puwa60D3hl0ET9AJ/fUJ/O+9Xpqy9E2zUUhiSycQ32/HSGISV5b9PVtn
TYBRbqhfTNzD6bG+1TVNQbQi9j34NYD6p/C6ZcdyLLujow0yDDxTQONN9ZbT
vUeZROMbn3UYyFbs9o9EJ4L64MVBSeoustWwWocxIKAvHDi03b6VxB25EH2B
p1KT33YAdLrgcYo0IB1lzYjK4LYQmcvL5kRePHTLFTC2Ic5Hhn+RKBt53xEk
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
uaH/DTcf9xrtmgIA

-->

</rfc>
