Skip to content

Split "unevaluatedItems" and "unevaluatedProperties" into their own vocabulary. #981

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Sep 26, 2020
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
214 changes: 118 additions & 96 deletions jsonschema-core.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2350,52 +2350,6 @@
</t>
</section>

<section title="unevaluatedItems" anchor="unevaluatedItems">
<t>
The value of "unevaluatedItems" MUST be a valid JSON Schema.
</t>
<t>
The behavior of this keyword depends on the annotation results of
adjacent keywords that apply to the instance location being validated.
Specifically, the annotations from "prefixItems", "items", and "contains",
which can come from those keywords when they are adjacent to the
"unevaluatedItems" keyword. Those two annotations, as well as
"unevaluatedItems", can also result from any and all adjacent
<xref target="in-place">in-place applicator</xref> keywords.
This includes but is not limited to the in-place applicators
defined in this document.
</t>
<t>
If no relevant annotations are present, the "unevaluatedItems"
subschema MUST be applied to all locations in the array.
If a boolean true value is present from any of the relevant annotations,
"unevaluatedItems" MUST be ignored. Otherwise, the subschema
MUST be applied to any index greater than the largest annotation
value for "prefixItems", which does not appear in any annotation
value for "contains".
</t>
<t>
This means that "prefixItems", "items", "contains", and all in-place
applicators MUST be evaluated before this keyword can be evaluated.
Authors of extension keywords MUST NOT define an in-place applicator
that would need to be evaluated before this keyword.
</t>
<t>
If the "unevaluatedItems" subschema is applied to any
positions within the instance 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>
Implementations that do not collect annotations MUST raise an error
upon encountering this keyword.
</t>
</section>

<section title="contains">
<t>
The value of this keyword MUST be a valid JSON Schema.
Expand Down Expand Up @@ -2503,56 +2457,6 @@
</t>
</section>

<section title="unevaluatedProperties" anchor="unevaluatedProperties">
<t>
The value of "unevaluatedProperties" MUST be a valid JSON Schema.
</t>
<t>
The behavior of this keyword depends on the annotation results of
adjacent keywords that apply to the instance location being validated.
Specifically, the annotations from "properties", "patternProperties",
and "additionalProperties", which can come from those keywords when
they are adjacent to the "unevaluatedProperties" keyword. Those
three annotations, as well as "unevaluatedProperties", can also
result from any and all adjacent
<xref target="in-place">in-place applicator</xref> keywords.
This includes but is not limited to the in-place applicators
defined in this document.
</t>
<t>
Validation with "unevaluatedProperties" applies only to the child
values of instance 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 child instance
validates 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 before this keyword.
</t>
<t>
The annotation result of this keyword is the set of instance
property names validated by this keyword's subschema.
Annotation results for "unevaluatedProperties" keywords from
multiple schemas applied to the same instance location are combined
by taking the union of the sets.
</t>
<t>
Omitting this keyword has the same assertion behavior as
an empty schema.
</t>
<t>
Implementations that do not collect annotations MUST raise an error
upon encountering this keyword.
</t>
</section>

<section title="propertyNames">
<t>
The value of "propertyNames" MUST be a valid JSON Schema.
Expand All @@ -2570,6 +2474,124 @@
</section>
</section>

<section title="A Vocabulary for Unevaluated Locations">
<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:
&lt;https://json-schema.org/draft/2019-09/vocab/unevaluated&gt;.
</t>
<t>
The current URI for the corresponding meta-schema is:
<eref target="https://json-schema.org/draft/2019-09/meta/unevaluated"/>.
</t>
<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 title="unevaluatedItems" anchor="unevaluatedItems">
<t>
The value of "unevaluatedItems" MUST be a valid JSON Schema.
</t>
<t>
The behavior of this keyword depends on the annotation results of
adjacent keywords that apply to the instance location being validated.
Specifically, the annotations from "prefixItems", "items", and "contains",
which can come from those keywords when they are adjacent to the
"unevaluatedItems" keyword. Those two annotations, as well as
"unevaluatedItems", can also result from any and all adjacent
<xref target="in-place">in-place applicator</xref> keywords.
This includes but is not limited to the in-place applicators
defined in this document.
</t>
<t>
If no relevant annotations are present, the "unevaluatedItems"
subschema MUST be applied to all locations in the array.
If a boolean true value is present from any of the relevant annotations,
"unevaluatedItems" MUST be ignored. Otherwise, the subschema
MUST be applied to any index greater than the largest annotation
value for "prefixItems", which does not appear in any annotation
value for "contains".
</t>
<t>
This means that "prefixItems", "items", "contains", and all in-place
applicators MUST be evaluated before this keyword can be evaluated.
Authors of extension keywords MUST NOT define an in-place applicator
that would need to be evaluated before this keyword.
</t>
<t>
If the "unevaluatedItems" subschema is applied to any
positions within the instance 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>
Implementations that do not collect annotations MUST raise an error
upon encountering this keyword.
</t>
</section>

<section title="unevaluatedProperties" anchor="unevaluatedProperties">
<t>
The value of "unevaluatedProperties" MUST be a valid JSON Schema.
</t>
<t>
The behavior of this keyword depends on the annotation results of
adjacent keywords that apply to the instance location being validated.
Specifically, the annotations from "properties", "patternProperties",
and "additionalProperties", which can come from those keywords when
they are adjacent to the "unevaluatedProperties" keyword. Those
three annotations, as well as "unevaluatedProperties", can also
result from any and all adjacent
<xref target="in-place">in-place applicator</xref> keywords.
This includes but is not limited to the in-place applicators
defined in this document.
</t>
<t>
Validation with "unevaluatedProperties" applies only to the child
values of instance 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 child instance
validates 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 before this keyword.
</t>
<t>
The annotation result of this keyword is the set of instance
property names validated by this keyword's subschema.
Annotation results for "unevaluatedProperties" keywords from
multiple schemas applied to the same instance location are combined
by taking the union of the sets.
</t>
<t>
Omitting this keyword has the same assertion behavior as
an empty schema.
</t>
<t>
Implementations that do not collect annotations MUST raise an error
upon encountering this keyword.
</t>
</section>
</section>

<section title="Output Formatting" anchor="output">
<t>
JSON Schema is defined to be platform-independent. As such, to increase compatibility
Expand Down