<?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-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title>JSON Schema</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-jsonschema-json-schema-02"/>
    <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="July" day="01"/>
    <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="audiences">
        <name>Audiences</name>
        <t>This specification has three reading audiences: authors of JSON Schemas, implementors
of validation or other software, and authors of meta-schemas.</t>
        <ul spacing="normal">
          <li>
            <t>For schema authors, the chapter on terminology (<xref target="terminology"/>) might be the first
read, followed by chapters about
core keywords (<xref target="core-keywords"/>),
subschema keywords (<xref target="subschema-keywords"/>) and
structural keywords (<xref target="structural-keywords"/>)
as these are the keywords most commonly used when authoring schemas. In addition,
the formats used with the <tt>format</tt> keyword are defined in <xref target="format-vocab"/>.  Other
sections up to and including <xref target="metadata"/> may be interesting depending on
the topic of the chapter.</t>
          </li>
          <li>
            <t>Implementors will need to understand the requirements in sections 3 through 10 but also
the requirements on loading and processing schemas (<xref target="loading-and-processing"/>),
keyword behaviors (<xref target="keyword-behaviors"/>), and formatted output (<xref target="output"/>).
Refer to the appendix on annotations (<xref target="annotations-appendix"/>) for additional
guidance on approaches to implementing annotations.</t>
          </li>
          <li>
            <t>Authors of meta-schemas including extensions to JSON Schema will want to read
the chapter on <xref target="extensibility"/> and <xref target="vocabularies-appendix"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="functionality">
        <name>Functionality</name>
        <t>A JSON Schema implementation takes input in the form of a JSON-compatible data
structure and performs validation and, if the input is accepted as a valid
instance, returns a standard annotation output.</t>
        <section anchor="validation">
          <name>Validation</name>
          <t>In computer science terms, a JSON Schema document (a <em>schema</em>) notates a <em>grammar</em>
that describes a <em>language</em> of 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">
      <name>Overall Definitions and Requirements</name>
      <t>This section is the start of normative requirements.</t>
      <section anchor="schema-document">
        <name>JSON Schema Documents</name>
        <t>A JSON Schema, with its specific rules or constraints to describe and
validate JSON data, is represented in digital form as a JSON schema document.</t>
        <t>A JSON Schema MUST be an <em>object</em> or a boolean.
When a schema is an object, it can be seen to be a schema from the '$schema'
keyword in the object.  See below for special treatment of the boolean schemas.</t>
        <t>Schemas are used to validate inputs that may be <xref target="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.
In this example, a project has all of the properties of a task
and a collection.</t>
            <artwork><![CDATA[
{
  "$defs": {
    "task": {
      "$anchor": "task",
      "type": "object",
      "required": ["title", "deadline"],
      "properties": {
        "title": { "type": "string" },
        "deadline": { "type": "string", "format": "date" },
        "done": { "type": "boolean" }
      }
    },
    "collection": {
      "$anchor": "collection",
      "type": "object",
      "required": ["items"],
      "properties": {
        "items": {
          "type": "array",
          "items": { "$ref": "#task" }
        }
      }
    },
    "project": {
      "allOf": [
        { "$ref": "#task" },
        { "$ref": "#collection" }
      ]
    }
  },
  "$ref": "#/$defs/project"
}
]]></artwork>
          </section>
        </section>
        <section anchor="anyof">
          <name>"anyOf"</name>
          <t>This keyword's value MUST be a non-empty array.
Each item of the array MUST be a valid JSON Schema.</t>
          <t>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>
          <t>Examples of using anyOf:</t>
          <ul spacing="normal">
            <li>
              <t>Defining objects that can satisfy one or more schemas,
such as attachments that can be a <tt>note</tt> or a <tt>task</tt> OR satisfy both schemas.</t>
            </li>
            <li>
              <t>Requiring alternate fields in an object, when combined with the "required" keyword: a
contact could require a <tt>work_email</tt> or require a <tt>work_phone</tt>, and putting
both <tt>require</tt> keywords inside the <tt>anyOf</tt> keyword allows either to satisfy the schema.</t>
            </li>
          </ul>
        </section>
        <section anchor="oneof">
          <name>"oneOf"</name>
          <t>This keyword's value MUST be a non-empty array.
Each item of the array MUST be a valid JSON Schema.</t>
          <t>An input validates successfully against this keyword if it validates
successfully against exactly one schema defined by this keyword's value.</t>
          <t>Similar to anyOf and allOf, oneOf can be used in combination with object
definitions to allow only one object definition to be satisfied.  Compare
to the example for "anyOf": using "oneOf" with an attachment envelope
would allow the attachment to satisfy the <tt>note</tt> or <tt>task</tt> schema but
not both.  A task might have a duration or a due date but not both.</t>
        </section>
        <section anchor="not">
          <name>"not"</name>
          <t>This keyword's value MUST be a valid JSON Schema.</t>
          <t>An input is valid against this keyword if it fails to validate
successfully against the schema defined by this keyword.</t>
          <t>For example, a product schema could require the property
<tt>expiration_date</tt> if the <tt>validity</tt> property does
NOT have a value equal to <tt>forever</tt>.  Or, if
two properties could either be present or both absent
but not appear at the same time, this can be expressed in many ways but
possibly the briefest is</t>
          <sourcecode type="json"><![CDATA[
  {
    "not": {
      "required": ["approved_date", "rejected_date"]
    }
  }
]]></sourcecode>
        </section>
        <section anchor="if">
          <name>"if"</name>
          <t>This keyword's value MUST be a valid JSON Schema.</t>
          <t>This 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>Inputs 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
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,
and below for an example using if/then/else.</t>
        </section>
        <section anchor="else">
          <name>"else"</name>
          <t>This keyword's value MUST be a valid JSON Schema.</t>
          <t>When "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>
          <artwork><![CDATA[
{
  "if": { 
    "properties": { "type": { "const": "physical" } }, 
    "required": ["type"]
  },
  "then": { "required": ["street", "city"] },
  "else": { "required": ["url"] },
  "$comment": "Credit to jsonic.io for this example"
}
]]></artwork>
        </section>
        <section anchor="dependentschemas">
          <name>"dependentSchemas"</name>
          <t>This keyword specifies subschemas that are evaluated 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 anchor="example-of-requiring-rejection-reason-if-rejection-date-is-set">
            <name>Example of requiring rejection reason if rejection date is set</name>
            <artwork><![CDATA[
{
  "type": "object",
  "properties": {
    "applicant": { "type": "string" },
    "approved_date": { "type": "string", "format": "date" },
    "rejected_date": { "type": "string", "format": "date" },
    "rejection_reason": { "type": "string" }
  },
  "required": ["applicant"],
  "not": {
    "required": ["approved_date", "rejected_date"]
  },
  "dependentSchemas": {
    "rejected_date": {
      "required": ["rejection_reason"]
    }
  }
}
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="keywords-for-applying-subschemas-to-arrays">
        <name>Keywords for Applying Subschemas to Arrays</name>
        <t>Each of these keywords defines a rule for applying its
subschema(s) to array items, and combining their results.</t>
        <section anchor="prefixitems">
          <name>"prefixItems"</name>
          <t>The value of "prefixItems" MUST be a non-empty array of valid JSON Schemas.</t>
          <t>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.</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.  If <tt>prefixItems</tt> is not present,
"items" applies its subschema to all input array elements.</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.</t>
          <t>Omitting this keyword has the same assertion behavior as
an empty schema.</t>
          <t>Examples of <tt>items</tt> can be found in other examples in this specification.
One of the clearest is in <xref target="output-structure"/>, where the <tt>items</tt> keyword
requires the input to be a list of points objects.</t>
        </section>
        <section anchor="contains">
          <name>"contains"</name>
          <t>The value of this keyword MUST be a valid JSON Schema.</t>
          <t>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>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>The subschema MUST be applied to every array element even after the first
match has been found, if annotations are being collected.</t>
          <sourcecode type="json"><![CDATA[
{
  "type": "object",
  "properties": {
    "title": { "type": "string" },
    "assignees": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": { "type": "string" },
          "role": { "enum": ["owner", "reviewer", "observer"] }
        },
        "required": ["name", "role"]
      },
      "contains": {
        "properties": { "role": { "const": "owner" } },
        "required": ["role"]
      },
      "maxContains": 1
    }
  },
  "required": ["title", "assignees"]
}
]]></sourcecode>
        </section>
      </section>
      <section anchor="keywords-for-applying-subschemas-to-objects">
        <name>Keywords for Applying Subschemas to Objects</name>
        <t>Each of these keywords defines a rule for applying its
subschema(s) to object
properties and combining their results.</t>
        <section anchor="properties">
          <name>"properties"</name>
          <t>The value of "properties" MUST be an object.
Each value of this object MUST be a valid JSON Schema.</t>
          <t>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.</t>
          <t>Omitting this keyword has the same assertion behavior as
an empty object.</t>
          <t>In this example, the properties of a simple contact record are defined,
with two properties required.</t>
          <artwork><![CDATA[
{
  "type": "object",
  "required": ["name", "email"],
  "properties": {
    "name": { "type": "string" },
    "email": { "type": "string", "format": "email" },
    "phone_numbers": {
      "type": "object",
      "additionalProperties": {
        "type": "string",
        "pattern": "^[+]?[0-9 ().\\-]{7,20}$"
      }
    }
  }
}
]]></artwork>
        </section>
        <section anchor="additionalProperties">
          <name>"additionalProperties"</name>
          <t>The value of "additionalProperties" MUST be a valid JSON Schema.</t>
          <t>The behavior of this keyword depends on the presence of
"properties" and "patternProperties" within the same schema object.
Validation with "additionalProperties" applies only to the child
values of input names that do not appear in "properties"
match regular expressions in "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.</t>
          <t>Omitting this keyword has the same assertion behavior as
an empty schema.</t>
          <t>One of the most frequent examples of using "additionalProperties" is to
give it a value of <tt>false</tt> to forbid all unspecified properties.
See <xref target="output-structure"/> for an example of this.</t>
          <t>In the example above for <xref target="properties"/>, the "phone_numbers" field
can have any internal properties with names such as "home", "office" or
"cell", but the value for any property inside "phone_numbers" is
constrained to the format of a phone number by "additionalProperties".</t>
        </section>
        <section anchor="patternproperties">
          <name>"patternProperties"</name>
          <t>The value of "patternProperties" MUST be an object. Each property name
of this object SHOULD be a valid regular expression, according to the
ECMA-262 regular expression dialect. Each property value of this object
MUST be a valid JSON Schema.</t>
          <t>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.</t>
          <t>Omitting this keyword has the same assertion behavior as
an empty object.</t>
          <t>In this example, an alternative to the schema example in <xref target="properties"/>,
phone numbers are instead represented as top-level fields ending in "_phone".
A field like "office_phone" is constrained to the format given.</t>
          <artwork><![CDATA[
{
  "type": "object",
  "required": ["name", "email"],
  "properties": {
    "name": { "type": "string" },
    "email": { "type": "string", "format": "email" }
  },
  "patternProperties": {
    "_phone$": {
      "type": "string",
      "pattern": "^[+]?[0-9 ().\\-]{7,20}$"
    }
  }
}
]]></artwork>
        </section>
        <section anchor="propertynames">
          <name>"propertyNames"</name>
          <t>The value of "propertyNames" MUST be a valid JSON Schema.</t>
          <t>If the input is an object, this keyword 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>
          <t>In this example, the "participants" field can have zero or one of each of the
roles for an incident response process, but no undefined roles.</t>
          <artwork><![CDATA[
{
  "type": "object",
  "required": ["title", "participants"],
  "properties": {
    "title": { "type": "string" },
    "participants": {
      "type": "object",
      "propertyNames": {
        "enum": ["incident_commander", "communications_lead", "responder", "scribe", "observer"]
      },
      "additionalProperties": {
        "type": "object",
        "required": ["name", "email"],
        "properties": {
          "name": { "type": "string" },
          "email": { "type": "string", "format": "email" }
        }
      }
    }
  }
}
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="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>Meta-schemas that do not use "$vocabulary" SHOULD be considered to
require this vocabulary as if its URI were present with a value of true.</t>
      <t>The current URI for this vocabulary, known as the Unevaluated Applicator
vocabulary, is:</t>
      <t>&lt;https://json-schema.org/draft/2020-12/vocab/unevaluated&gt;.</t>
      <t>The current URI for the corresponding meta-schema is:</t>
      <t><eref target="https://json-schema.org/draft/2020-12/meta/unevaluated">https://json-schema.org/draft/2020-12/meta/unevaluated</eref>.</t>
      <section anchor="keyword-independence-1">
        <name>Keyword Independence</name>
        <t>Schema keywords typically operate independently, without
affecting each other's outcomes. However, the keywords in this
vocabulary are notable exceptions:</t>
        <ul spacing="normal">
          <li>
            <t>"unevaluatedItems", whose behavior depends on "prefixItems",
"items", "contains", and itself</t>
          </li>
          <li>
            <t>"unevaluatedProperties", whose behavior depends on "properties",
"patternProperties", "additionalProperties" and itself</t>
          </li>
        </ul>
      </section>
      <section anchor="unevaluatedItems">
        <name>"unevaluatedItems"</name>
        <t>The value of "unevaluatedItems" MUST be a valid JSON Schema.</t>
        <t>The behavior of this keyword depends on adjacent keywords "prefixItems", "items", and "contains".
If those keywords do not limit the application of "unevaluatedItems",
the "unevaluatedItems" subschema MUST be applied to all locations in the array.</t>
        <t>Defined in terms of annotations, if the annotation output of "prefixItems",
"items" or "contains"  is a boolean 'true', then "unevaluatedItems" MUST be ignored.
Otherwise, the subschema
MUST be applied to any index greater than the largest annotation
value for "prefixItems" and "items", which does not appear in any annotation
value for "contains".  Thus,
"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".</t>
        <t>Omitting this keyword has the same assertion behavior as
an empty schema.</t>
        <t>The <tt>unevaluatedItems</tt> keyword can be very similar to the <tt>items</tt> keyword in
some examples, like the example in <xref target="annotations-appendix"/> where <tt>prefixItems</tt>
is used to define exactly three items in a list and further items are forbidden,
and in that example <tt>unevaluatedItems</tt> could replace <tt>items</tt>.  Here's an example
where <tt>unevaluatedItems</tt> is doing work that could not be done by <tt>items</tt>, constraining
a list to be only numbers (and the first two numbers must be geospatial points).
An input with seven numbers in a list might validate, but an input with a string
would fail on <tt>unevaluatedItems</tt> because the string was not evaluated by the
<tt>items</tt> definition.</t>
        <artwork><![CDATA[
{
  "type": "array",
  "allOf": [
    {
      "prefixItems": [
        { "type": "number", "minimum": -90, "maximum": 90 },
        { "type": "number", "minimum": -180, "maximum": 180 }
      ]
    },
    {
      "items": { "type": "number" }
    }
  ],
  "unevaluatedItems": false
}
]]></artwork>
      </section>
      <section anchor="unevaluatedproperties">
        <name>"unevaluatedProperties"</name>
        <t>The value of "unevaluatedProperties" MUST be a valid JSON Schema.</t>
        <t>The behavior of this keyword depends on adjacent keywords "properties", "patternProperties",
and "additionalProperties".</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.</t>
        <t>Omitting this keyword has the same assertion behavior as
an empty schema.</t>
        <t>As an example of using unevaluatedProperties, imagine a schema similar
to the one in <xref target="unevaluatedItems"/> but instead of a list, the geospatial
data is an object such as</t>
        <artwork><![CDATA[
  {"lat": 37.77, "long": -122.42, "dist": 34.1, "alt": 35}
]]></artwork>
        <t>The additional values could all be constrained to numbers using</t>
        <artwork><![CDATA[
  "unevaluatedProperties": { "type": "number" }
]]></artwork>
      </section>
    </section>
    <section anchor="structural-keywords">
      <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" by setting the maximum
number of array elements permitted to match the "contains" schema.</t>
          <t>As an example of <tt>maxContains</tt> and how it modifies <tt>contains</tt>, the example
in <xref target="contains"/> constrains the assignees list to contain maximum one
assignee of type 'owner', though other types of assignees are unlimited.</t>
        </section>
        <section anchor="mincontains">
          <name>"minContains"</name>
          <t>The value of this keyword MUST be a non-negative integer.</t>
          <t>Validation MUST always succeed against this keyword; its validation
effect is to modify the behavior of "contains" by modifying the minimum
number of array elements required to match the "contains" schema.</t>
          <t>Omitting this keyword has the same behavior as a value of 1.</t>
          <t>The example for <tt>contains</tt> and <tt>maxContains</tt> could easily be imagined
to use <tt>minContains</tt> instead.  An exercise for the reader is to extend
the example in <xref target="contains"/> to require the assignees list to have
exactly one owner AND at least one reviewer (hint: using <tt>allOf</tt> is one solution).</t>
        </section>
      </section>
      <section anchor="validation-keywords-for-objects">
        <name>Validation Keywords for Objects</name>
        <section anchor="maxproperties">
          <name>"maxProperties"</name>
          <t>The value of this keyword MUST be a non-negative integer.</t>
          <t>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 specification. Implementations that cannot provide full
validation support MUST refuse to process the schema.</t>
          <t>An implementation that supports the Format-Assertion vocabulary:</t>
          <ul spacing="normal">
            <li>
              <t>MUST still 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="metadata">
      <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">
      <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
implementation-specific and MUST NOT be relied upon for interoperability.</t>
        </section>
      </section>
      <section anchor="hypermedia">
        <name>RESTful / Hypermedia Schema References</name>
        <t>JSON and JSON schemas are not always used for HTTP
resources or other hypermedia resources, and
the rest of this document assumes no one protocol, nor does it even assume
network access.  However since HTTP resources in JSON with JSON Schemas
to describe them are pretty common in Web APIs, this section
describes how to process JSON texts in a more RESTful
manner when using protocols that support media types and
Web linking (<xref target="RFC8288"/>).</t>
        <section anchor="linking-to-a-schema">
          <name>Linking to a Schema</name>
          <t>It is RECOMMENDED that instances described by a schema provide a link to
a downloadable JSON Schema using the link relation "describedby", as defined by
Linked Data Protocol 1.0, (<xref target="LDP"/> Section 8.1.</t>
          <t>In HTTP, such links can be attached to any response using the
Link header (<xref target="RFC8288"/>). An example of such a header would be:</t>
          <artwork><![CDATA[
        Link: <https://example.com/my-hyper-schema>; rel="describedby"
]]></artwork>
        </section>
        <section anchor="usage-over-http">
          <name>Usage Over HTTP</name>
          <t>When used for hypermedia systems over a network,
HTTP (<xref target="RFC9110"/>) is frequently the protocol of choice for
distributing schemas. Misbehaving clients can pose problems for server
maintainers if they pull a schema over the network more frequently than
necessary, when it's instead possible to cache a schema for a long period of
time.</t>
          <t>HTTP servers SHOULD set long-lived caching headers on JSON Schemas.
HTTP clients SHOULD observe caching headers and not re-request documents within
their freshness period.
Distributed systems SHOULD make use of a shared cache and/or caching proxy.</t>
          <t>Clients SHOULD set or prepend a User-Agent header specific to the JSON Schema
implementation or software product. Since symbols are listed in decreasing order
of significance, the JSON Schema library name/version should precede the more
generic HTTP library name (if any). For example:</t>
          <artwork><![CDATA[
        User-Agent: product-name/5.4.1 so-cool-json-schema/1.0.2 curl/7.43.0
]]></artwork>
          <t>Clients SHOULD be able to make requests with a "From" header so that server
operators can contact the owner of a potentially misbehaving script.</t>
        </section>
      </section>
    </section>
    <section anchor="keyword-behaviors">
      <name>Keyword Behaviors</name>
      <t>JSON Schema keywords fall into several general behavior categories.
Assertions validate that an instance satisfies constraints, producing
a boolean result.  Annotations attach information that applications
may use in any way they see fit.
Applicators apply subschemas to parts of input and combine
their results.</t>
      <t>Extension keywords SHOULD stay within these categories, keeping in mind
that annotations in particular are extremely flexible.  Complex behavior
is usually better delegated to applications on the basis of annotation
data than implemented directly as schema keywords.  However, extension
keywords MAY define other behaviors for specialized purposes.</t>
      <t>Evaluating an input against a schema involves processing all of the
keywords in the schema against the appropriate locations within the input.
Typically, applicator keywords are processed until a schema object with no
applicators (and therefore no subschemas) is reached.  The appropriate
location in the input is evaluated against the assertion and
annotation keywords in the schema object.
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">
      <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>
        <artwork><![CDATA[
{
  "$id": "https://example.com/polygon",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$defs": {
    "point": {
      "type": "object",
      "properties": {
        "x": { "type": "number" },
        "y": { "type": "number" }
      },
      "additionalProperties": false,
      "required": [ "x", "y" ]
    }
  },
  "type": "array",
  "items": { "$ref": "#/$defs/point" },
  "minItems": 3
}
]]></artwork>
        <sourcecode type="json"><![CDATA[
[
  {
    "x": 2.5,
    "y": 1.3
  },
  {
    "x": 1,
    "z": 6.7
  }
]
]]></sourcecode>
        <t>This input will fail validation and produce errors, but it's trivial to deduce
examples for passing schemas that produce annotations.</t>
        <t>Specifically, the errors it will produce are:</t>
        <ul spacing="normal">
          <li>
            <t>The second object is missing a "y" property.</t>
          </li>
          <li>
            <t>The second object has a disallowed "z" property.</t>
          </li>
          <li>
            <t>There are only two objects, but three are required.</t>
          </li>
        </ul>
        <t>Note that the error message wording as depicted in these examples is not a
requirement of this specification.  Implementations SHOULD craft error messages
tailored for their audience or provide a templating mechanism that allows their
users to craft their own messages.</t>
        <section anchor="flag">
          <name>Flag</name>
          <t>In the simplest case, merely the boolean result for the "valid" 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 3954?>

<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="annotations-appendix">
      <name>Using annotations in implementations</name>
      <t>Annotations gathered while evaluating some keywords can be used to
simplify the logic of evaluating other dependent keywords.  Whether
annotations are used in keyword evaluation or not, the implementor must make sure that
results are identical.  Thus, this section is OPTIONAL.</t>
      <t>As an example, the <tt>properties</tt> keyword produces annotations which can be used
in the implementation of <tt>additionalProperties</tt>, <tt>required</tt> and
<tt>unevaluatedProperties</tt>.  With this schema:</t>
      <artwork><![CDATA[
{
  "type": "object",
  "required": ["X", "Y"],
  "properties": {
    "X": { "type": "number" },
    "Y": { "type": "number" }
  },
  "additionalProperties": false
}
]]></artwork>
      <t>The following table shows the annotation result of <tt>properties</tt> for
three different inputs, and how <tt>additionalProperties</tt> and <tt>required</tt>
implementations could use that result.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Input</th>
            <th align="left">"properties" annotation</th>
            <th align="left">"additionalProperties" result</th>
            <th align="left">"required" result</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>{"X": 1, "Y": 2}</tt></td>
            <td align="left">
              <tt>["X", "Y"]</tt></td>
            <td align="left">valid</td>
            <td align="left">valid</td>
          </tr>
          <tr>
            <td align="left">
              <tt>{"X": 1, "Y": 2, "radius": 5}</tt></td>
            <td align="left">
              <tt>["X", "Y"]</tt></td>
            <td align="left">invalid (<tt>"radius"</tt> not in annotation)</td>
            <td align="left">valid</td>
          </tr>
          <tr>
            <td align="left">
              <tt>{"X": 1}</tt></td>
            <td align="left">
              <tt>["X"]</tt></td>
            <td align="left">valid</td>
            <td align="left">invalid (<tt>"Y"</tt> absent)</td>
          </tr>
        </tbody>
      </table>
      <t>Similarly, the <tt>prefixItems</tt> keyword produces an annotation which is
used by <tt>items</tt> and <tt>unevaluatedItems</tt>.  The annotation value is the
largest index to which <tt>prefixItems</tt> applied a subschema.  Consider
this schema for a structured log entry with a timestamp, action, and
username fields, and preventing additional fields:</t>
      <artwork><![CDATA[
{
  "prefixItems": [
    { "type": "string", "format": "date-time" },
    { "type": "string" },
    { "type": "string" }
  ],
  "items": false
}
]]></artwork>
      <t>This schema, when applied to the inputs in the table below, produces
annotation output from <tt>prefixItems</tt> evaluation. Then,
<tt>items</tt> uses the <tt>prefixItems</tt> annotation to start where <tt>prefixItems</tt>
left off, applying only to indices greater than the annotation value.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Input</th>
            <th align="left">"prefixItems" annotation</th>
            <th align="left">"items" result</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>["2026-06-24T10:00:00Z", "created", "alice"]</tt></td>
            <td align="left">
              <tt>2</tt></td>
            <td align="left">valid (no elements beyond index 2)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>["2026-06-24T10:00:00Z", "created", "alice", "extra"]</tt></td>
            <td align="left">
              <tt>2</tt></td>
            <td align="left">invalid (index 3 not evaluated by <tt>prefixItems</tt>)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>["2026-06-24T10:00:00Z", "created"]</tt></td>
            <td align="left">
              <tt>1</tt></td>
            <td align="left">valid (no elements beyond index 1)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>[]</tt></td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">valid (no elements at all)</td>
          </tr>
        </tbody>
      </table>
      <t>The following table summarizes which keywords produce annotations
that can be used in the implementation of other keywords:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Keyword</th>
            <th align="left">Annotation value</th>
            <th align="left">Used by</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>properties</tt></td>
            <td align="left">set of matched property names</td>
            <td align="left">
              <tt>additionalProperties</tt>, <tt>unevaluatedProperties</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>patternProperties</tt></td>
            <td align="left">set of matched property names</td>
            <td align="left">
              <tt>additionalProperties</tt>, <tt>unevaluatedProperties</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>additionalProperties</tt></td>
            <td align="left">set of validated property names</td>
            <td align="left">
              <tt>unevaluatedProperties</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>prefixItems</tt></td>
            <td align="left">largest index evaluated, or <tt>true</tt></td>
            <td align="left">
              <tt>items</tt>, <tt>unevaluatedItems</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>items</tt></td>
            <td align="left">
              <tt>true</tt> if any elements evaluated</td>
            <td align="left">
              <tt>unevaluatedItems</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>contains</tt></td>
            <td align="left">array of evaluated indices, or <tt>true</tt></td>
            <td align="left">
              <tt>unevaluatedItems</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>unevaluatedItems</tt></td>
            <td align="left">
              <tt>true</tt> if any elements evaluated</td>
            <td align="left">
              <tt>unevaluatedItems</tt> in parent schemas</td>
          </tr>
          <tr>
            <td align="left">
              <tt>unevaluatedProperties</tt></td>
            <td align="left">set of validated property names</td>
            <td align="left">
              <tt>unevaluatedProperties</tt> in parent schemas</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="vocabularies-appendix">
      <name>Working with vocabularies</name>
      <section anchor="best-practices-for-vocabulary-and-meta-schema-authors">
        <name>Best practices for vocabulary and meta-schema authors</name>
        <t>Vocabulary authors should
take care to avoid keyword name collisions if the vocabulary is intended
for broad use, and potentially combined with other vocabularies.  JSON
Schema does not provide any formal namespacing system, but also does
not constrain keyword names, allowing for any number of namespacing
approaches.</t>
        <t>Vocabularies may build on each other, such as by defining the behavior
of their keywords with respect to the behavior of keywords from another
vocabulary, or by using a keyword from another vocabulary with
a restricted or expanded set of acceptable values.  Not all such
vocabulary re-use will result in a new vocabulary that is compatible
with the vocabulary on which it is built.  Vocabulary authors should
clearly document what level of compatibility, if any, is expected.</t>
        <t>Meta-schema authors should not use "$vocabulary" to combine multiple
vocabularies that define conflicting syntax or semantics for the same
keyword.  As semantic conflicts are not generally detectable through
schema validation, implementations are not expected to detect such
conflicts.  If conflicting vocabularies are declared, the resulting
behavior is undefined.</t>
        <t>Vocabulary authors SHOULD provide a meta-schema that validates the
expected usage of the vocabulary's keywords on their own.  Such meta-schemas
SHOULD not forbid additional keywords, and MUST not forbid any
keywords from the Core vocabulary.</t>
        <t>It is recommended that meta-schema authors reference each vocabulary's
meta-schema using the <xref target="allOf">"allOf"</xref> keyword,
although other mechanisms for constructing the meta-schema may be
appropriate for certain use cases.</t>
        <t>The recursive nature of meta-schemas makes the "$dynamicAnchor"
and "$dynamicRef" keywords particularly useful for extending
existing meta-schemas, as can be seen in the JSON Hyper-Schema
(<xref target="I-D.handrews-json-schema-hyperschema"/>) meta-schema
which extends the Validation meta-schema.</t>
        <t>Meta-schemas may impose additional constraints, including describing
keywords not present in any vocabulary, beyond what the meta-schemas
associated with the declared vocabularies describe.  This allows for
restricting usage to a subset of a vocabulary, and for validating
locally defined keywords not intended for re-use.</t>
        <t>However, meta-schemas should not contradict any vocabularies that
they declare, such as by requiring a different JSON type than
the vocabulary expects.  The resulting behavior is undefined.</t>
        <t>Meta-schemas intended for local use, with no need to test for
vocabulary support in arbitrary implementations, can safely omit
"$vocabulary" entirely.</t>
      </section>
      <section anchor="example-meta-schema">
        <name>Example meta-schema with vocabulary declarations</name>
        <t>This meta-schema explicitly declares both the Core and Applicator vocabularies,
together with an extension vocabulary, and combines their meta-schemas with
an "allOf".  The extension vocabulary's meta-schema, which describes only the
keywords in that vocabulary, is shown after the main example meta-schema.</t>
        <t>The main example meta-schema also restricts the usage of the Unevaluated
vocabulary by forbidding the keywords prefixed with "unevaluated", which
are particularly complex to implement.  This does not change the semantics
or set of keywords defined by the other vocabularies. It just ensures
that schemas using this meta-schema that attempt to use the keywords
prefixed with "unevaluated" will fail validation against this meta-schema.</t>
        <t>Finally, this meta-schema describes the syntax of a keyword, "localKeyword",
that is not part of any vocabulary.  Presumably, the implementors and users
of this meta-schema will understand the semantics of "localKeyword".
JSON Schema does not define any mechanism for expressing keyword semantics
outside of vocabularies, making them unsuitable for use except in a
specific environment in which they are understood.</t>
        <t>This meta-schema combines several vocabularies for general use.</t>
        <sourcecode type="json"><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/meta/general-use-example",
  "$dynamicAnchor": "meta",
  "$vocabulary": {
    "https://json-schema.org/draft/2020-12/vocab/core": true,
    "https://json-schema.org/draft/2020-12/vocab/applicator": true,
    "https://json-schema.org/draft/2020-12/vocab/validation": true,
    "https://example.com/vocab/example-vocab": true
  },
  "allOf": [
    {"$ref": "https://json-schema.org/draft/2020-12/meta/core"},
    {"$ref": "https://json-schema.org/draft/2020-12/meta/applicator"},
    {"$ref": "https://json-schema.org/draft/2020-12/meta/validation"},
    {"$ref": "https://example.com/meta/example-vocab"}
  ],
  "patternProperties": {
    "^unevaluated": false
  },
  "properties": {
    "localKeyword": {
      "$comment": "Not in vocabulary, but validated if used",
      "type": "string"
    }
  }
}
]]></sourcecode>
        <t>This meta-schema describes only a single extension vocabulary.</t>
        <sourcecode type="json"><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/meta/example-vocab",
  "$dynamicAnchor": "meta",
  "$vocabulary": {
    "https://example.com/vocab/example-vocab": true
  },
  "type": ["object", "boolean"],
  "properties": {
    "minDate": {
      "type": "string",
      "pattern": "\d\d\d\d-\d\d-\d\d",
      "format": "date"
    }
  }
}
]]></sourcecode>
        <t>As shown above, even though each of the single-vocabulary meta-schemas
referenced in the general-use meta-schema's "allOf" declares its
corresponding vocabulary, this new meta-schema must re-declare them.</t>
        <t>The standard meta-schemas that combine all vocabularies defined by
the Core and Validation specification, and that combine all vocabularies
defined by those specifications as well as the Hyper-Schema specification
(<xref target="I-D.handrews-json-schema-hyperschema"/>),
demonstrate additional complex combinations.  These URIs for these
meta-schemas may be found in the Validation and Hyper-Schema specifications,
respectively.</t>
        <t>While the general-use meta-schema can validate the syntax of "minDate",
it is the vocabulary that defines the logic behind the semantic meaning
of "minDate".  Without an understanding of the semantics (in this example,
that the input value must be a date equal to or after the date
provided as the keyword's value in the schema), an implementation can
only validate the syntactic usage.  In this case, that means validating
that it is a date-formatted string (using "pattern" to ensure that it is
validated even when "format" functions purely as an annotation, as explained
in 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-ietf-jsonschema-json-schema-02">
        <name>draft-ietf-jsonschema-json-schema-02</name>
        <ul spacing="normal">
          <li>
            <t>Add a section near the front of the document explaining what sections
are written for distinct readers</t>
          </li>
          <li>
            <t>Add examples for keywords up to the end of section 6 (up to "unevaluatedProperties")</t>
          </li>
          <li>
            <t>Move annotation implementation suggestions out of the normative core
text and into an informative appendix, simplifying the main text for
readers who are not implementing</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ietf-jsonschema-json-schema-01">
        <name>draft-ietf-jsonschema-json-schema-01</name>
        <ul spacing="normal">
          <li>
            <t>Clarify terminology by using JSON Text when talking about serialized JSON, and
structured document when talking about what a schema operates on.</t>
          </li>
          <li>
            <t>Add examples for $anchor, $ref, $defs, $comment, allOf, if and then</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ietf-jsonschema-json-schema-00">
        <name>draft-ietf-jsonschema-json-schema-00</name>
        <t>Compared to the "2020-12" version of JSON Schema, this draft makes the following changes.</t>
        <ul spacing="normal">
          <li>
            <t>Consolidate the 2020-12 core and validation documents</t>
          </li>
          <li>
            <t>Delevel headers for a more readable Table of Contents</t>
          </li>
          <li>
            <t>Shift terminology to a terminology section</t>
          </li>
          <li>
            <t>Reorder conceptually: intro, keywords, processing and output, extensibility.</t>
          </li>
          <li>
            <t>Define input and instance as different things.</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9y9a3fbVpIu/H3/Chw661jykLItJ07ifJhRbGeiOXHsY8uT
mTftjiESlNAmATZASlZreX77W/ddGwBlyfGkp0+vXrFIAvtau3ZdnqqaTCZh
Xa4XxaPs3149/zl7NT0tlnmY1dMqX8KXsyafrydlsZ5P/tLWVUs/058T+fve
fpjm6+Kkbi4eZe16FtrN8bJs27Ku1hcraOLw6dEPWXYryxdt/SgbldWsWBXw
n2o9GmejYlau66bMF/jh8OB7+Kdu4K+XRz+MQt4U+aPs4OVRmELfRdVu2kfZ
utkU4V1xcV43s0chyybZYbUumqpYT57gaOkrnExYlY+yX9f1dJy1dbNuinkL
f10s8Y834exR9iCEfLM+rRtoZgKvZRlP+qeyzbMnm7Yt8s1iTT/ATMvFo2wB
v/xLs54v96b1kn6om5O8Kv+Wr2G+j7In+TrPjpq8audFA+Mq1yX8clbQo02N
y8wT1g7LCmZ0sJf90pQnp2s3hoNNuy4r/70MIc/zfzn+2/z9Hkw4aeXHveyg
mjXFeeua+bGomovuT9oSf/XbKT7zLxf5aV3TtEJVN0saNi7v08fPDvYf7j+i
N225Mpn7o+zppqlXRV5lj+vlagMbkT3Lq808n643TdG02UHb1tOS1odeE2rD
Zl9Nm3K1zn7Kq5NNflJkr1bFtJyXU3o4+2rvfvYUFktfnAGVPcr2792/P7n3
kJvKm5Ni/Sg7Xa9Xj+7ePT8/3yumQJIl0QO1ki/2YJR3V5vjhbTb3p2Xi6K9
S0+267s4kAlMcG81m1OrbdGURVtW81rniY88yl6tYcHyZpbpG/DrT09eDC3M
hHfk1R5OqYRz0sgPui2v1sVZ0f+RFvTw+2ewls2qbuKiWZP/BjvZnBed5v6t
Pq3S7z/eEhDds3xxWq+bvNPaQXtav+v/SE0+b/Lpoui1Kpv6U1m9K2Z8Cl4s
8vUcCCm7v3cv3b+vgGfA+m3bwvMHtGVHL+/is3dfPn08WcxWE/xwb3//4d0t
m/TLg8fZywLodwnMRY5j91149D+e/fTzqyv27Ggv+77JLzpLclQu069pMY6K
9+tNvijXF2kbT/ayH+vFAsilt/FPctj3/o/U3GPgmOVZPQa+Md3rbdZP+cUy
r7pbRUe4+xu19qycNnVbz9dpSy/3sqP6uOw29BIIEWk7/Y0ael0BJ2hamGVW
z/FEVseb5uQ0bRY4zNEpMIC27rbMHOjVwO9XtY7MCbfUU9foZ2iwXeXTooVO
cSeRtrKdo9MSTyWzit1RQmz3vp3c35/c++Y6xHbvWyK298vFBIfeTvCr+/v3
vrkpyfVbCGEymWT5cQsHaroOwd212ayYlxVMaX1aZEu4HfIM781slK9WyrPu
8l37T3jvwgWZ0/U2Oc5bOGxzYtYB/oGWWuCosIEn1Bh0tiEujCtLPcIg871w
4K/6bJlfZDlcdc06w0sWBgjss82AAeexhVkGEsEGprkeh/P8AgZbZ0D8OJkM
V4TuC3hl3tTLrFyPaftO63N8jrgxPnherk/hx71wdDo4PeDbLfDYacHz9Iux
auqzEqaX5TPe5nwR5kWOQ5s0QLrUyQkzJO5n6/Jlx8VFDaM7P81hxnBvHeP6
wHVdzGgRkxf5DZ17u8f7uCxns0URwi2UPJp6BmuEjDDZVhgqLLy9CRsC3ckG
FbQ8ttpDywySyipv1uV0s8ibxUU43qyzql7Dok8XmxaOzOKCd3EN2wDjGiKo
M2BNTJZja1c+nsKiNgvg1nBIz8oT/jbgqHS3cCFhhDC9RYd8YPvKNmuTu1q7
9MOY1rAA0NiyrOpFfXJBk14WwGeqsl3CBMsK5gIH/iSsauiWyLaGp2og3iZp
6vgiA6ENtgiIYxyAccoHfCVPnnSP8Qgv9DQALS0KoMLjAr/ZwNFJHsn1gduw
cPU0P8aFx27/uimbgreEFoimqo0W76GFNexbvVmD8EOLgwcPKLPFZVvjUuna
Z/A3XBawvAvYvZxlaz4qJf2IGwwS7+wCD3VWLlcL6rhu2oALM6tXeNqy1QJY
ILZ+DkcCWrIHYRzES4GwbM94Xfay7JC6yPEorWqYfYBRNrTotPrUZZ798q80
npzazkzqxreA7eIBuHUr+7lei3CFd9YZ9Ixd8txBMM9QMm+z0bPXr45Qqsd/
s5+f098vn/7f14cvnz7Bv1/9ePDTT/aHPvHqx+evf4Lfg/wV33z8/Nmzpz8/
4ZefHfzniNdu9PzF0eHznw9+GuHipCuOZxCW7rgIRNerpsBFgsOpJxEJPru8
/F8vf3i8f//+tx8+yBYi3cIUcAmxNztq9gEO16bAT8tieVw0pMrwLuCf9fFf
gC7wr7wBsQFnU230OTjusOz413ENKkGOLH2EWg3+Owc1qdCZVZvFYuusAvCR
3qzwGLo5fbP/Fc8Jdu0AzhqejHbwBJ/myKOaoiAKpBOhzz8SSalLVHiEPY3C
r5HloBbHBxllkHMYMs/JNbUs1rlokUhYd7If4B3+rI+N6ZQBy1ihYgGten6y
c3npPn74sAuMGZQlZOj41rxs2nXA2YyBuBeL+hxWBjiJtAZn4RhObSA2Jepk
i23iFxP9Alodo0Yrw/LP2bf+YZxjUH4O5yN5wb72bwRa+KIteFtP3WCWdYuX
8nJZV3DMkWXBrVVUsji4R7p6cBHZ1TgONHu6k1t5C29E/PYtf/1W++BLylMN
PzAhFgiUk2XPcRNDW9CVAO2tmEnPIvuGt3Ar8Xb48IHkCaXMoiUGwwo//gW3
JA5jXa/KKfNH212igENHTzDqxSKrChgZ9LhBeRnFgxm95PkyDtzG9wCpuN6A
BHn/Xoa3JpodQu8VIKVFLXQOTQp7c0uKGyZPTOCJSXyCSELX77g4hQsURwvP
y5cT+xIfpfZ5VeNFgU/zX/DIXniJtxbOEscJ8geu1nsSwapKeC114D5O9DEk
OuLdUTI62cAhrPCOqLC1ps5hTiSz2XnliVtrtPgHw0fTbTQwQLgOaDTQmL93
aa/Oc2BO8AOeudA5uJeX8vJxiQoTEAquy+Wl3bUgW7s5Mcv6YVNNeU6oY3UE
V5sL85t1/o70Alxd4ph8BnA2Ii/DSVrBs8egvyKthigfEwkUDT7vxSb8Hngc
k6m0DGxjOi1WwnBzfjqo5DqGuUOLVUvCs9gL4jpHMeEWzO7fraMQDlHaEvtJ
OyW+y3fQuCPg2CWwk2e/8Q79tptRBygeZ7+BFLxc5s1vIZE46aeFGFp+w0UZ
EjpRNM9xkthrq9JkbKEt1tteRc66KPm8N5sFk9t0AZoFCFggOGW/0QL+hquG
7KikGwIlHvlEGksh2sECNTVgfiCptLRh2HMpUjTuKFBbewFbD+QxJXGK9sGP
jLprubl2Cc9ge9YMiG7LFeic1CMQ1m+y63XzG6wssIzsXVWfV7THMHbec/hx
14Qo5AY8Hlh4ZEJIZ1Fmj/QSRQ1YIpolLewYPxYoRuS0aCAC5ic5ElKPwYHK
VkWys4Zx4kiGtLZMf78pU9U+WJhrir+wmNp7FyZe1gsiws67e0SUuNC2NJ0j
B1SCg4SfkR6jVNRmJPHxSeAWQRn25wouhs1izYNzTIgEgOJ9jr2MYWsWzNSB
ya7PC7j3XG9orYDNh9MCq5uvipbMxnDZkVx8ClI2GQpQ8SlYsM5Bx5vq2mL3
aJHAzcTNXoIUJruZ+4Eqm1cRVnYB++I1zVgJr0lEgwfR7km3AbBSGIx+hOND
6mtc3kxvMtmSNUx3vruXHcC8gYrgNIMUCQSMYjgI9Saojfj9ggf71w0ZJYgx
NyiPI2MDiWvTkJGktQM0prtQG+Rh1Kuip6MIazqwXelyXbzeoxprd47eaygb
TInRVqjwgfxLCzaSNR8HIbzf3L7/htZpzyXpiK03QAU0S6Bi3jcQ9crlZolM
dsHsLrgD5xrQbVO2wkPHsfkTSsTq2I9x8T03/xYNEMJjjPeyqSYnNRBWEFWq
AppFKpwVwPSaItAQ8f3TctUaBeP2EKXOCuigiHo4EH/2qjhD3TDjawjalTXF
5kRGGxvZuNkqMxJjxqxs8+OF3k9yrbE40MCwmDhItdsAC6RbCf5Zig8DCOC5
dOvWgAVrEkOP0XbTkhcGehhFGuaxwRGcbxb8KIolfIqVG6cnPOkB6IpeknWF
RhaO0vh9FmSTTRzB7NGgP8rInKHLTouMcmENR8U9jiYNOCwsMFfIgNGmlYyk
wm2IPRt/hEOd8tF2V5RFknXnqJQz+eNmdOcGLZ3CIsKcYAjz8gTUABJEnGjM
S5mw2DHNYTM9zcjqlqMBYVnSfREP3BRoD81I/QOA9/jJSVOc8BUj3HldnxQo
1I+jjia2NLbrVadELY5y/IHQjmVSxxcrtB7OMhQqYfUv8Drtzx101JYtFLkI
EtQ7f1iDwEiCGu0GDPoUdDXchK7oZes/25D6E4XyMbOxs7qctXRp+fWHzmEX
Ny0sfgGrhw2QoZJYKDUubE8dic70KGaNRFmGU3QCog7qkOthU2bfgonCN/o8
QRpKJTo7kvFs38w26lpGOUsfZMHXkb43B/F0/49QSWqPhhPcZneUgu4QTQ/a
hwfFQNhUMdYGvwV8cON14YzGwPkO4g+m/MIlcgwsjwk02Nex/WjrI7IFdVw1
lnGkZxAF4PDkqP2DOg2MFO+mRfE+GjTjNFoWeWhgi0yFZdyRurkYd8yMbbE8
XpBQLCxlMkfjib4Fm9kG0t9t5Khq+2dh3kenm1Ya1m0zNi5SCCwuSD3Td4sL
sj62yB9gMLiecBCzw7vPcUlQDiAzJs2oWLTFOaxaYRcgyl9JN2rGtStNLbhi
t3UmUKAjmwOdGBKGYITtZrWqmzULtsBMQ8q7yObYpvMvQBPF4zgv3xezINx8
9MXIyXPIgZar07wt/0ZrXzYqC8+yinaVFq70ZtoAn4AP4CGAnRM9ei7Ko1zS
1zipAc+TGGTFcoLGw7peI9mvqAm1GuD1TKzTK7DI+4yUcZvWW9bYGTO3LDX5
InC4tK1ma8JzUfkexLow+OiaDR9EdHQ2YcxkmGxZ9EbTJAoeT0uayTpdVLod
KpI+L8IS76BF+a4QU7VtCSzQeQPittlN5qTWVZN1U57hbqTUPQ5AmNIbCsj6
Vt7wNVrNCpkPsRy8b7wbI7KUcYCHjmELYPy/nIIAQEI+sjvdbBtih6DH1P4y
f4+yJNuFUXzL2TDBq+A4lVuQUm0hxaxnlGXnCRvc8EGgmLo6wRunmgJ7B5Yw
U7XfEQycwhqVBOwaRf6mmMD7Y8cFxUHFKBPqF1Y8oTlQGdxJQB5dtrzZOWnk
nqrGdvmbTRDOF2nS74kmgK3lcIqmqHOay6SMluXcmQH8KPTu8qdV+EOQ26nk
Vcu9cQk2zy/HWLtsxVnkrFBIIbDFwZo3Hk/biaw2tR2nVkNWgJabluzD8n1d
zwLyri2GL3Jiwn8WzOK8sTsbNnYnF6k3KooNfC+9amV3yTKGRFXwQTy+iF6m
IUrElULyX6CgydcVCubDb8WbU5Q/JAyQfCPN7IXXVVNM6xOlsBmc3NnGv8vX
DizGmfJklSVBdFOpLl73eMrLBeuZagxlgoP9WpEajjZk2AbXrztosi7if1zg
VYF2b9atcH58racEyNcdHB88Z9lR9AyQBNeqTwefQwHRWb2NSb5f9/1m/C7d
wayFlVGwRZaD+1eRwRlFcZIu1gWJ+Uu46GDYMwJ+taodtUKJ8Hq7LheLoOJM
rroT9RWlG7TN3qExId7kzh3TyGm8JRmovA/eVLwdRiwQ24erFfSVni0qdJ3d
TrAc9zxK3qF0584hCs7d4USvT4GgPtpY1AKdqEgqMPKGRcn3Rx4tTMHeH9CD
gBJJPiAZjrab6ciMXboWqC1sgOUs5LJiUx75AXW7xVxYMHCCxBoze+HU+Lri
2Q3IuaI6tL3mxI16UoImo/yIh3VH78A7gS6otMfndC9jf/qn57rYqNyjiWNP
OFQbhTy1SqD0Rw0zHbtt6tiRSQ2T451nd3hId8ZeAFKiCR9HLcB5ed0yufhr
2xlhPNqFbeemC8KhNHtvFIdppVQYRl0YeSpZB+CKareAVKL5muAtaOIj1EWi
HZFtwF9Gcb2yl3KI3MLdibI//8R2KulnU5UghKM3Pt52eLVkr18eIvUGYmZ5
q6wvBxnpYglKqTbALA03s6rxJVSLIgWFKb4gdijXxY5Zziu2fV5e/jOQx8Ov
vn2IjiESzEN+3NaLDaweNItuJCSgB99+83CcvRIL65d7D8gRBQsgSiFOPHHw
1M27Nrlj7HIgxq4KsvF7Gr+qkXfIq5U3bSABgtcTIVJ3Ukd1htgCogR6hEBU
LDTo3e6ctcRIAz5sQ6ELyiQEGwrOy+SMC97TO/G+0Z0s1n1lxztIyThCZhsk
nTD33qkUr8N+2sRb1cZrnhZMTbaho0DcufMMSdKf2zuOSO94h4w/j63J0kxJ
5ofVg8RicegS/EtQb+RV7A2NHU38Sr0l63o1WRRnxUK/Z0VC+FjRnBVknWLY
mceVKNNACxUamuSgk3TKTd1uxWHUcwcgZsVZX5lzkErzfd4yNTP3LsT65M3Y
cJRVExI2bl58f25pAqfkeGzliljU05yNfCQvKSBJ1+zVgHefNKPboAYt29s0
j9vRJnybVIJELYssNfogtTdSyqgN0dVAwFcbnrPsSZcgyT2fU5fhNozzNgjQ
De6LYO9IK+Rdcf2fFiDK1YvZXrosZj/GFpDN8IhQqcHrtlKaQCM+y61dO4PQ
+hPzUW5axlbNQQGib0yq2UWeH/hoq8Nj1n2vyox1xRf5hk7EA9rgqusRRi1M
5G65r/X3lnW3xKiHBng81R0fV7x62ObL0htdHd0nTwqgcHgydMB2ZJOp0fYM
q2n+ojxe/7ey52T5X2RPnICJJPDSYxYub9X82AdF8Aj3Lt3Bw5Nl+P2OFxFd
6p4nPTGr3eUtMTPq0D905IWxojfjqsmppYlFu6AjbqJKWz4zuI3ZfhAtwkAE
s/IEFGB2fWTxilCZIZ7qVIhRSxSKV7WITSR/CbBqL/xCeJlUEuMnxygcCiG3
6Jvhw2/PioUYztgXwqdCx63E7ZDjBtUcNDGSxwPXB81QqBoROYtBQgZloJ0Q
gseKqrjVITgmXeHmvxo7f7NzS//e7Th9CSxKljZ3sNnBOIAZ80IRaAzQh7t/
sBuvEjPUhEFIsLnEZZAShYHi2ezIl20mML58QS4MGAALx9eGOwf0CnCfq0Vu
eE5UqliX9UZNNLAcieWpQz1qyedvRX9l3B2j7Rh6xzCspIkWXcV9nQFIA9++
7anLy7ApQGFaN030hEVj/0CrNBDfLGEVGMqgI+sQE4gTJcuWpCLPL1JjCNvW
yOMenLmp7RkqvCuwZe33guWoQsROmk1QGyvh6iJsyuyLO3wvjOBOGpEfOhrm
HJzO7blX/xPV3NnYkLwo+utRdsDURL6nFOmct+o2EoQHd3UJHI3WNb48z8vF
tnf1LZ7BI3g9gwZ+MatG0rbIQqgygcR6XJ5s6g1DFxtG9S3ROm50EWEMrdqq
lfbMKva6VTqXjQ5CsAjHbVQtWovzkbHFU3iuYYs1sOrTDfRKUKwCxW60Tqb3
lZwWkv9eRUzCqygo8A2kaILLWygXdi+GaG7wUhWLoH+U2pJ1x9Jmzw7+M6ja
l2pk0JjHntNnvtxUSGnHoVQTMoIWiLwLtLszIlzNK848cnwRhsb3YO8rnA7a
CfTs6MlZNeXSN6dODeTV9XS6iQZaoTUdHVn+iBuicb7tbwLikWdiohbZFXWx
6oIdyTjfkM5XXVMo7olN/7ggI75t396gZiA8Pe8OY5zx8cfTjptHpgzG6g7C
r0nmyRcU0QJa4K9/vv8GLhKUsaIylr+L3gJodwnX2Rka03LlQEnwhUyhaOGW
exTCf/3Xf2V4m4RLCt0ZUUQRHOsRTgiuGPqSxHc86xahFJ8jsTzDJzi+6EP4
gI2Sw5B4lIAanAnCI0+wmVnSihwXPWwcWzDwCg1QJTy3/CgLtZFG3C9j3y4R
BFuVTfLpiEjYzqxsp5u2tf2YKUL5w4dtAERSAkSxy5Z4THD6Q5yhJRdNUUUs
Mnou/4qRcyp8M2YZKYRnLFMZsdhvbFL7RpXRLUWGaA5Syac5GVjtOLinJCBH
J0rmCX0ubQ+9iSXx5kGddyzc7bzeLGbRthS1l6QpYyQ8oPNCIxI0fkptoAwX
XeChHlruPbx92HNji912uR65WPX4o4OA4zHFz+piY0gFxKfl6o92cLIiwqke
R9qir/IzuC3J9mHoZlYo1FbKGlgCPvDqdoQHEvzpo3bUeh5MQ8p8y2ghw0VC
A175nvhoSboOoTUM8ZhXJ/SM3rp6f/YANxSkHgKGWqBowAOVyAt6JwS9guPP
LDVitJhc3PIkUwg+iM4NMlgXOh8HEwOBYLVizZiDQcQoGGHEODLuSkJJtAdi
IdyBNq9OvuhkjXvHbXAQijbBkSjcRt4cl0CGzcUENIJp2ZIYhGx4cv8e+ltK
hELwC/z6OCpGulIU16KN83xoqWRqMLLXcIfUFE8E/yGzUNtrR6JitB2UtQTE
6RH02CAwnWnRVMktPisphA8oagGSMN6zpmGKdo56MQ3VGfYKZEIegEyq+hJG
uRgT7G4QMJn6hzyU51dvywPVyX/c5W7Py/YUZQC0p4rlFG9lHb/Etsoksu4k
RJdisSOCYqA93j4yQKt+56IOeHHb4amGJhePPAmMDCOgkKAzFULrBhT0Sr35
6ah0d4NhONrILVAhLCvaQ719pmTjE1/iee2PRcpyYHrj6D4ky2FIGcea/Ftk
csAFGWou+ObElAyzWhSJ1C5yHIz2Z4RlUuOeC/c8jQT2cR2TTxS9TGrkJSwJ
qIAggCxVtmtP6coQryHiANPoHI6YJNCZCpbkx4GrivR0A06OKNwVTx3xVhDy
QbYh5ky98lI5hSoOVGMWNvKUClhs1urQxZJCKqoab004eSkYW4YgpkoiIDlf
BqZDP9zTv0qEfDg6r9WJRXYNXMY2L1Xc5LOIKHpsD5GgfHfyPaUWDtxInGNg
z9dZkeDLEZI6hVWcCUs17hIntRcsy0RE6BD8+xHGwJDqRFADuAC+QxOl+w65
fvc74v/dL+W4yWXUuEHiQSEGOIHln9inbgOykhJHnUxziYcVzXvIH2jO3ZfZ
hOzezStZXV4ilD+pe/yj+7Io8Py2wLXoQNHhwYv3lKwNOZmI8bP9TsctY5qS
DmUPiDxum9EDYziIYOzVUzZE0UvQBI0T0XhLdhKbIcDMoxYMIvZyBXbYMoF6
fbI+HQc1SNAD6UrKtUaoD17u4JhHWUWwFFrn9DYn4akpOF4XJSV3ukwyu5Kn
Bca2NIW/1PwFsFNSehwxSlC4r9oRMRoQAY5obl3gRfu3oqnhbsnFg3BSEWmj
vIjnTQ5VPHAnG+DRcHJZ6rwoC+BHppv2QzQEhpb4s1G8PsmbGaFP+Fwi79Mb
Is4JDZwJypQ9235x7CbOIxyAjRoi7ZFmyiED5vYLMUxUvwMW+X1T5zMgyXZV
5O8IEWzX4xzNcgScAnpF7/sc5UXJWgTDgJNvNoKmBdlFA99VgJUfxVKlAYYg
1nEcHerUQLVqv4sBHnfROA636gm55MlYyh6ArKcVg2SniDccwYrSChRRT9OY
Gba9OvBElBqDR9xCG7ALOaVGiNiQ9AUDDurM4DoKBgmpaSnYg0QCd0MI2o4n
K4EYk+eMc8KIlBElWvYDCqYXm5qhlVIhY0xsiIVGX+LMWsIhzGq6Ms0vJZE8
8hLfXPIiDgePi+xGHp0Vq02DYe/sw203Ajf0yL8QlFLJ2h6Jxk51pBg0O6Aa
i4lK3HKJeEa3l+2gARllwD5kiNB3tp63gzyihlcnMOj9HYFd3uvikmoFO5Kx
4T03N0FENz0m5RXA1LCJD5PyKMYhZNazv8AyVxHeDF081ehQ56FXPAqjPVWq
cVC0YRAlRxBxjNmAuMW3R4y9Rad3sVj0/UMH/2kmCj9bW4IqmrMMeIt0Iz85
dFre9ngOWcRMPkV9FCV54zowrxN02LF9MLu89Gg3wlC9rhiZZK8I/eA9Noyr
i3Y10ZNELjLPVBt/U5kpvk+hGanpOurmivPA66qqk5gmAgJjBDqP192SwuJ/
UPfuYWSj2eUtMzB+4FhCEs2I8bDiY1bS+2wCRgPqw28efPvhA9uDhnCp+KR5
kx3X1pPOaKmACMd/6gDa3PLmnecHsr7shZ0DuKti4rAetaqFnyWB3qCEFcok
PJRroLPdPnL8moElgrJtUfkJAyvj4hseIXOEo8CwGlxW2vkXNbHC9lMS81jv
eLNe2fujbmfUm0RsJj/h7hC2Y2iby9R4LGb3h9/eu49H6ofu6iaeRDn4fsWG
OhG6Q5Dt4BDgLp2eqmbsRy4veruE8xWRTjAO6rPuuGGTdoa6hQV7UbCA8cuD
x7cpphRlKfIwCgp66L2wc3n5z/DG3i9PJvh7ifkJ2vXE3sTsaPv37+1/RYkN
IoVsWf/qCrLki0Ku8DkFyVqinoBXOrqBsO1Z9KxmB3DPDnbFAex1QE5Ma75t
wbPhNf3YXGBFnxhgGmG6SVahq1/WGzOvwvblSBK2GL8JctH+OvoCztRpDVq8
sO83O7f4GxDohTmyjZVycGT/SvgSyrlDnhoRkNiLp/ZOWp5/J1tnapEVBAFB
v8nK6iyyiSeLf9jxuLzdNMFUuURRirgepvhoSsm9gSINpfzsYtwdIoSbD2JL
tIPCQRlm4EDtW/2THgKDDxEiv5ON4vIW210wPYfnpN07m++SAZsOSgrHJqAE
DmgiVNn6Av2LqDjyCHGvKVYfRBK+BTphB5bNKHB2KNzsthiE5ONokmGwKcQH
VvXwSHIqJBsYj8bHJpMQIi3shcPO23IFknjhkY7FhbYprw4g+hPJI7up5NEd
Ca64Qt/pYY2/QaLi8EpyYYBWJ0EYDWuj6YKJG7w3fNUWWJRmg0XMPhaYOXE3
ev6T5Ci0jNoveSiS8U9M3mYRKM3mkZgOXToRUtvElcfgqXlH/CIZV3TCUM4j
nn0b1jwBkvvzrhqUPAF/t3OyXmJwLOkkxSzVIWhglSqR5jeCc5BCYlWiRgdx
1G6cmokZk1DA1qt6Rf4ZzREkgRAYWnlaMi7tqQMrRbOsU2oWlioDObukyShY
u8XVMcUTLeuMPVjrcqv19QRpHg0EuJMlrUUHMOjRcsgCSFHkW9yjB4WAheA0
QdESV5Fx8QityTH7JoNV9WhOKKeao4eYVO2KlHqGS45L7aK7WfGRsKwlZeuI
sWASz0SL3tlCxr0p5Ey3PF6wRkZk1JPAlDRoF49VN1+UZwcWzsdQhxIjWFuG
vlsQH+nuBHlYqehr45KHddbcY8D8XIR4iZ1JTI+LNiaQWt28o1AhJOKIATP3
qMpcYqslGOZjtG+Ypnx5K00FFsLjJFeYSR0u/55cHLKzBLya0Y4SS+F4OLUT
9dSALSK+iMpe08zZ7uws+d3gzR0zo+Mvzhmwm3g8GPPELClGaqGNafRFfGeE
LnHx+Zij4HEnTlgSGGqEJOzXjxzGj0hLbMAHvQ6fKOB8dl+SK5/lsrxs0eCf
FU2joyOWTzgZS21IYqIlj2BOSrk4qLOQxB16eqN4d5wMcnJaaWiVXIkeYN6f
7aMQ/vdi/R0mk20f3b3rcqJTSlnK7nh3/97+vcn9/bv05l2kp/99sv5ub3s/
BBNsVzX7qP2Qqcdfr9cdvke9vdm54Qu7ex7mhqHZHK6tK2zhhomcP7BC48DB
V71dL3pmIoKDJde6hoGdw87vhmO4qCtFMcRI8Tp6LXGcyMcw/0MEYM43hKyf
1osFebbVXPG0OiubuiKLU3Af+kcb4XNJ6KdQ6nExx9nyCMxyJCK23VTjTNH2
bMZekYsOPfXLFSpfivBzBzttUUTgkSCQR0w29tFzW3LgGN9MISQaxhu1F8SB
SriG+5YYS4SqCIZPoMNpo6pLx2AUQnZKYDBLKBqO0mDKjSpyKWcwlqHJeXDC
Y2mJAyLIO8Oor+wtnJa3YRAO+EASMPL7eKr0XULEUzTiXnLy2hRHzgP3abiS
A5jgCLUP4hqH89inPcauWfRRn9HGR3QcnQNb6GiWqufhOpDovW10EFvaOEjP
EDBJsUxkcRXlx7/Tf5SEVbs9u9Aj0DTWLksWBXtlIiMOobFicEsGa5cf082C
iJCwbcTjDiLTTs2QbK7efFaEHempw9GHdXXCWErv0o75mGmlYN/Fc5mr/ZMP
qLsrQW6InwxHp1vmH3THV9c+iT/3OWPweKUoBANkzSXzWRnR4J04Xwwg8GFf
kgsYoWsqAoqcgseeUWYkXafXuwXWIa+SC3Ss5gyG8rJDrxeKQ5QxnMIz1YCD
i/NNgj1dyj3LUJcdWSYj2rYkEzkm0QrG/PYIAOshEQI8i5kAND3f0NCPi5Ag
5TCutMJ4Nkm3gLQaHb1iq858uLiGwHHWE1XlXAz+dThgFWNOjk6d593iJJFK
RIGylxyKuo1e/W3c8an+yDvJUZuSSsx3l7I5c7MJdC+xcIg3qrDMEjRVGgAz
HnSg/hQRKJzlJabx6HNQQpYzCye3RJIdLRFMRATArAAu1YSlfAg4gk3Lwg4M
Qjt1hJJoZWPefMLWT1A4wGGFxB7Oii8Gw989XS8XeFboA9kTVSLwHeAd8uuf
9984ClC/uirDzneleyZuYWS8c2d5KTkzGzHL7ilMbUfmiwqd8UjyxvmGvaV6
7lCtifhrSi3Kme4EQRPvSc6/r5cTc/hkhKS7jLujC4Oj666WXHE0KjVRxPgV
NjxE23I8UxJYzZKXJRZLRhAig+pukhjfJYktmRk/jJP0FeHaTrw91vabYklR
uyT0IyQAydUacYbI4SQZbNiImk88Dib+rhW4dbJB0KECt5L2tgc7d0VyuZxr
Y/JNmnKnm1PkivtuWExJpIO5o7eYtDDJEIT0SXwpzSczLIckvvDtIzOV/gR4
Ig+tB7JmbVJmz9UE4t0wMCDJMrqoz2OwEVBqqo8+M6kT3d/oFE5+vW2web41
sYGBu6qfJzvZQjmxdNM9Y9HlFoacYpWr9BZGppKuEM6BpLTx0PUOXDSaLU0y
80CHVJKeWxopo0SFA1PASGJGZuhBDDK73fZFXzlUGIpYn0fZcEf58Y+YaFOC
Gtn4uEss4RhORHCjWDX4mqCQKKauEDh7J0xfeJqbFfF2w9j3sv1afQfti3BM
yDpLy2AoYZHXEW0PBzmYsMW2yxfTkcgJydt2s2QGK25YXP5OtqzIvvvR1ceb
crHeArQhDz6GnVr8Z683yQNAy4jpm5piAfd81SFFM3JLw7D2nSSivVMgop3P
K3PlIJJDIjpASK2xep4MmOLs/Z04cjlXP8NulRUIp+VaXRsdKvJg4/Vp4ber
61ZLzyJauZgNpeoCa5VCgKKoJE9wWP3oC3gIoxdCWy5LVMPjtcO3L0hHtUBM
CVBOs+hciYG5SUTX893Q71VcvAxzd+8ExWw2xaqQhAvxIkBl03kFYg0VuQLC
FVeAsoJZsWT/BjcefuVDzYFa7pU3O7fk24n7dheksgdvZDdfr2aUcRg4gwuP
JrL490SUg13lZ5OEVp1sZiyLi/RLEJP2lPKV0A3dIT0y1LU+AZLFEpNBlOSA
jigl5K4xfdwfjwoa01x/A/2QZUisWySLY1Inrx5GiNgAOIdtSkgGGJOi8HXV
kcsZ6sYutoxvYvg+asKJUtGJbbQMBHcsLBEndkejScNwNOle9lSdth0gJ+Pb
S/QktaUmJ3HZoo8xjbPy83FWSGQ/ZjbGy8qnBfGBiJrEb1nP6KSvaf9DUv+A
4GLxfFTRsezsccTDGHO5Jv1H0MY2qODTmFCMf3T77UjYH35Jmg0frl+KY0u8
a8+ySsqYK180LE8Tf6Bt+GWnigbuHt3WBJ+PtjqJA/JfsXUNr/fIpLaE9d7H
wih3nKAYVVRtEuU7RrdHfMawVZCCcDv6dc4jV1AEmxZxaEQCdziN9JlLO3Jn
2OT45d4+kZjkmbD3BN9LZaYo/5gZewX9C4cM7hL2QdbNGhHbWfYSzc2Xl9rK
BCuVWqUMODjCpfC7RNSTRAx5THA4q6siiWaBCeOYLB0+Q+FrU7/hlCDE2yQz
0clVL5ZsdySKL84KUbQpwX/MvzYQZE5qwnlOIEiVcJPbRVrE5amA/WFUVJrX
d16so0pHGSpCrMwiX9MW/Iy+Jhgv4tJ14IecY8/zFWc/YppgvxYLecykOEoo
htAK73NB9y5pDt4w5XoDP5O1iQNlBnmXDz7qXGsYJlUUbJHD9gUZZHyRar8Q
MkjLvVT5Ms32ahklAl7v/k2mol2cFhvtkfLxYe1FbA4CtP3rRswqLZlQ+f4T
YKfLvhFjXHuR4T1Ug93e8V6SjOWy4jJayQgc0/5Mrg79/05bklhK7K0YS7E8
Ywu7dgMp3orSfXwxu8BFnB7Il5cKvoJ7idMvDGLyzAzKeQUXxewkhid55ukJ
jdgDOkJcqoyYIcUsh5zLQTS5mOYarhOyM9lOl2uXV31ecCr5dc3y0CByTWVi
PPprDh0gjKzzxbiqVXoxdLRXfyiYdQCn4mRZoaefpquXnmnU/FlIMm38yq1J
HP1qsZbifSRYGlDToPMUEBOv0j78QYsZaHNTMtYMYQbVZGCBGwYyST0SESbY
ShGnwnBRJrGQeptQR2QSjpjXyaIgqrWzJmgoh5PayjZ1Y/hZn+C094olVCu5
ZQRAZlEVOSobkfOZgFc36e1v4e/i77WbTB3AEe6YpnvwEXlwjjM8yMTwOO2X
ilOslGG8EoODMG6YcnUMTL3HkJO1r5yPmYsbnifpBwKvrrT6EpUhNSMIwQO5
c+g/cNXZWU76vOQbDl2pkUuhUp7XYrppsDinXVdmDk5NBQink/NCWEpGoKWn
MQLeq47ffI/uCvY0MDOE//+azAc0GuT6u1IWdo2Zbji7PdeU4zQJJOBztntb
v2i8qSk2eT4ndDEKGWirqDlwZkMh93zWGtYWtnj7jYhD76wNMSp0yCzEzdNI
ThnKaxMIZzUfOAlsjBF0ythZmrc7kiUynXyf+CVnTiPSAKm4WCPH2vnTrweT
/y+f/O1Pb3apthBJW2Qd2Rn96bfRblpVELcvBhRyG7DNlNisxcbuTb6Flqj0
6inmGtwZTbCN2Gxr7Uo5srJGaMRob7Qr1i0CQYsI8/rV5ODV48NDs7/+x7Of
brfZz4+xSLIEH0n8IBmuqe415Vb5SjwNBYdRoSKSVkptk5uDtsdCoNbl0sKF
Ymh19GxvjJY51ssiJxIOf7duQncbx2kkdk+npZQ+BAXKDApUSswNM4xSEUSa
av0WaH6s7OvdrhL0h17iljHTNulRSVQr3hWYLJHEktmsoahH8cIdYQbl5Duf
tRczkrBfGT3MxludsGyQleOGgxZDek/i8532cWlxE+S8Lesz9sfio1J3dQMi
b0slR4vzEbHrUVOwCKEQfcLgj8X0NisWFKxEMZ6EzyOpEI88DYA/uoTAjZYr
LNcGr103cHLyCw0IlxATydmOZ1cdp6awckB8s2bHHztVqcoA1n5r4nMF0tJm
AUpOsVixrKRYSzWssTaC3jj6vEcJf+R/lPJnhM45zOOjhVnxu+hVs6Q/o1PY
s99kyfFbMZbBm7fk2wkt2Cj7IFmDUGW55hvwAr0FpA/MOXbKGxYTD9HGJXmI
bP/8t/C969d9ncXT9siekVGM0+cG1sX9qi56eOJXTNBRFFTTdgprPHrTeXZg
Nd2v8jKtj/apGT8+jLtPUwfDzyaP+k/xb/3rQ9D/SrYmpQgyIMd8Csie3qbc
6C2mhCRNXG50YxxSmbKfqFPPreoaZGNNpFkSNC7pYjY4yJanUmSrRZjG7+Uo
Rn4R84nigYwxtZZ+QD97pwo7KuS9X//88A0lg7IbtGXGvWWM2DAKs3HqImCy
tkC8g32RBuzXnMfIxFEwKSXxvUZQEGY6XjZY10uAN1YAfp2GCliyTCd7Wbxb
JpHaAfFrE59Q/4gXBE0ZbJGSaF312rQO5itaU1WgcZ5wzDBisVVQUBNszJjV
CbTBmc7Rt6iogUNf6sV2SLyv8dcBQwdXLdYyNKm/u4chMQrbKgIZyI9s0pOX
cY1e6vJ4OJxHrKL8T6qorF1rNpdEvQmahlhla1r3jWXozecMM+BqY1RXiqkB
p6h4CUXfcJEwq5lp0RGSU4Zi7QuLtI+HQ/aaAKBH24R/0R3ccWPLGSu/LEmr
JxLHRDZDNxsuOdDgP8uCihby6rIKog5PWVVybsSLPFCZGKqZjEWeEX87ME/c
4aR+S1+ISmfmMh6jqYqi3VFyD1FBspgYsxEYXl8LUkjljo5yE3a2OJ5geJKd
D1Mzfl9rGsOOTqbmKlmwiVMZ46NrFAZSYMLwxIPh3Yv3p8By1roRmTzYgbc7
/kdyf7JuwyfJL6yJh1tPVOieqCy7+ZEKeqQU2ctWJp9gneMsZa6RGs0NxqkV
w01OXXRvy9sM9+axd3onQzdD/ltviif35DnWqxIQjLjDt9l2xr4/j07DRF6Y
0sFaIJNgGmFrlj4Do9dYSdkVBfIYEnrgVyULSusF+jL9q1m6NNe8MXQfumpz
HKRELKC5Fuj6mLwviTvfcq3A6jNzZlUAYyl5EztbxbLz3rDQAu+/HZOs4l2b
9FMuggzcF2cFp3Xs6EASL71FEHppTQ+LQb/++es3KuuQOAuizcyLNvyl8lZB
5SVup7klcgmuZlNZLTDHg5k908SelJFDvGInEhCrVlbsV/szR0c3bYhIN2me
Gw3Bkrdvt3L2+8hLBkhywqCOnaELvPRxtq/U45BqpbhGAzop2YFi9Oqcd+nw
2cELtDnMyJ6apGArudgEcMFMVQWfLAkbeLA/Qa64oSRBpIxJ/i4C5GGZYk7M
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
qHTixGLZZF/lZaRAnrD2YZq0BVG8RPbGLUWOQ2E8q1eg5VIavcF1k0e/zU2/
mkmE402PGIwGuh2R5aH6T7+Wmv2cGCAtEfu91xwaNoj46oFPyTjnjZazQsVO
uAY3oiH1X0pqNxf78/VrOoJ3Pr1DJSYfia135/bJnZPb19Yd4TxV8yuO9THc
gqnw1lO31TmAoqlUu4+hhcJ5kM8qKtyuxsbRrybfiwLVwrfqlbWMVI79v+uZ
fjGPcOxO9smlesuh1N9kP6FEorOscOQ3/rZv8+Sj+rHn3Ocpa6F4mQm8MeqR
Zhk0e7quWKswpqDeq5TiHWJ5tE6zvFB0Fpg7ivTcqdjr1L3z9uwc2iho7+lb
w9lzDLyRgk1T6U/T8aMQNlRTLkupWysA7IeLs9s8z1oKYPQevbSRZYuEziDV
deSExaIwsFTWGVQFcJv4+Fe5XSm7ZG0Rzz8YM4/+8qSeL/7ylDQdiL/xR2Z/
z49QQ1x0hnZG7sPos39Fe9OK/mWvyff/tq+18PzdavLvk7wpnOkpd2Hylw/z
7/6eBUj85a/9d3m8+Y3jCDdY1X+/IuOK9+HR5N9/PUFD+M+vfz3B93ls5edf
v3qTG1aQ7Ktqs2BvWt529NXXr6ZX9ICBdwnkQGxkgJkQWqJ4Pj/+pjoqWglj
KLubG9EOU+eQdEm1wIkGgFRLlnVHk79OjpXvO/76F/g1HccuzO1ZVvCpWmd+
4Ojk5ORY3q215DXti8lffpyQjvSAuGEoUtdX7U3+wEo5ILDnxGPE0mBarbVW
3a4cB/EJ6S8hmh6zN7Am04TvKXbRTMUbsqN+VpOmmxh32cQ/PGF15t639wYq
TL6QAmJZ/JP/DhSiII4pNp+36zcPv/kqKnLUiwPsi3B8w8ziHGd6nMgY7hY8
0B9Wj/bznf8tfvrDylH/+ZRcULpo3nXf3ryX/6R6fE9HvHvoD+BhrcTHvWB/
Icc//XKxPN04GdQVQsX5qIXhD+Mu5QQl0TwaV17v4p3Xr82l98YrwwxUzPFX
TYHklPjXpiuhTPMSvys1iPCNB0KY5F7+7YHPKLVSbvfkwNaY6c77KXvEHYsS
ruOcpTo+NDPCmtDQP2lz9Tr//3fZ/wW7bDabwW0Ad7iIEmlBLmTjFMg2wlIR
5mQmqCzrKQllaJwqCQjVlFQNtHg8f+YqwasNHdareYtnmWtiO586X0aTX7AI
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
AgA=

-->

</rfc>
