<?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-vasters-json-structure-cond-composition-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title>JSON Structure: Conditional Composition</title>
    <seriesInfo name="Internet-Draft" value="draft-vasters-json-structure-cond-composition-03"/>
    <author fullname="Clemens Vasters">
      <organization>Microsoft Corporation</organization>
      <address>
        <email>clemensv@microsoft.com</email>
      </address>
    </author>
    <date year="2026" month="June" day="09"/>
    <area>Web and Internet Transport</area>
    <workgroup>Building Blocks for HTTP APIs</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 41?>

<t>This document specifies JSON Structure Conditional Composition, an extension to
JSON Structure Core that introduces composition constructs for combining multiple
schema definitions. In particular, this specification defines the semantics,
syntax, and constraints for the keywords <tt>allOf</tt>, <tt>anyOf</tt>, <tt>oneOf</tt>, and <tt>not</tt>,
as well as the <tt>if</tt>/<tt>then</tt>/<tt>else</tt> conditional construct.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://json-structure.github.io/conditional-composition/draft-vasters-json-structure-cond-composition.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-vasters-json-structure-cond-composition/"/>.
      </t>
      <t>
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/json-structure/conditional-composition"/>.</t>
    </note>
  </front>
  <middle>
    <?line 51?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document specifies JSON Structure Conditional Composition, an extension to JSON Structure Core <xref target="JSTRUCT-CORE"/> that introduces conditional composition constructs for combining multiple schema definitions. In particular, this specification defines the semantics, syntax, and constraints for the keywords <tt>allOf</tt>, <tt>anyOf</tt>, <tt>oneOf</tt>, and <tt>not</tt>, as well as the <tt>if</tt>/<tt>then</tt>/<tt>else</tt> conditional construct.</t>
    </section>
    <section anchor="terminology-and-conventions">
      <name>Terminology and Conventions</name>
      <t>The key words MUST, MUST NOT, SHALL, SHALL NOT, REQUIRED, SHOULD, and OPTIONAL are to be interpreted as described in <xref target="RFC2119"/> and <xref target="RFC8174"/>.</t>
      <t>Unless otherwise specified, all references to "non-schema" refer to a JSON Structure Core non-schema object, which is an inert JSON object that does not declare a type constraint.</t>
    </section>
    <section anchor="composition-and-evaluation-model">
      <name>Composition and Evaluation Model</name>
      <t>The keywords introduced in this document extend the set of keywords allowed for non-schemas and schemas as defined in JSON Structure Core. In particular, the keywords defined herein MAY extend all non-schema and schema definitions.</t>
      <t>The focus of JSON Structure Core is on data definitions. The conditional composition keywords introduced in this document allow authors to define conditional matching rules that use these fundamental data definitions.</t>
      <t>A schema document using these keywords is not a data definition; rather, it is a rule set for evaluating JSON node instances against schema definitions and for laying the groundwork for validation.</t>
      <t>Fundamentally, evaluating a JSON node against a schema involves matching the node against the schema's constraints.</t>
      <t>The outcome of evaluating a JSON node against a schema is ultimately a boolean value that states whether the node met all constraints defined in the schema. The evaluation also creates an understanding of which constraint was met for each subschema during evaluation.</t>
      <t>A schema evaluation engine traverses the given JSON node and the schema definition, evaluating the node and the schema recursively. When a conditional composition keyword is encountered, the engine evaluates each subschema independently against the current node and then combines the results as specified by the composition keyword.</t>
    </section>
    <section anchor="conditional-composition-keywords">
      <name>Conditional Composition Keywords</name>
      <t>This section defines several composition keywords that combine schema definitions with evaluation rules. Each keyword has a specific evaluation semantics that determines the outcome of the validation process.</t>
      <section anchor="allOf">
        <name><tt>allOf</tt></name>
        <t>The value of the <tt>allOf</tt> keyword MUST be a type-union array containing at least one schema object. A JSON node is valid against <tt>allOf</tt> if and only if it is valid against every schema in the array.</t>
        <t>Consider the following non-schema, which does not define its own type but rather contains an <tt>allOf</tt> keyword with three subschemas:</t>
        <sourcecode type="json"><![CDATA[
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "a": { "type": "string" }
      },
      "required": ["a"],
      "additionalProperties": true
    },
    {
      "type": "object",
      "properties": {
        "b": { "type": "number" }
      },
      "required": ["b"],
      "additionalProperties": true
    },
    {
      "type": "object",
      "properties": {
        "c": { "type": "boolean" }
      },
      "required": ["c"],
      "additionalProperties": true
    }
  ]
}
]]></sourcecode>
        <t>Here, a JSON node evaluates to <tt>true</tt> if it is an object with at least three properties <tt>a</tt>, <tt>b</tt>, and <tt>c</tt>, where <tt>a</tt> is a string, <tt>b</tt> is a number, and <tt>c</tt> is a boolean:</t>
        <sourcecode type="json"><![CDATA[
{
  "a": "string",
  "b": 42,
  "c": true
}
]]></sourcecode>
        <t>The JSON node satisfies all constraints defined by all subschemas. Conflicting constraints among subschemas result in an unsatisfiable schema—for example, if two subschemas require the same property to have different types or if one of the subschemas has <tt>additionalProperties</tt> set to <tt>false</tt>.</t>
      </section>
      <section anchor="anyOf">
        <name><tt>anyOf</tt></name>
        <t>The value of the <tt>anyOf</tt> keyword MUST be a type-union array containing at least one schema object. A JSON node is valid against <tt>anyOf</tt> if and only if it is valid against at least one of the schemas in the array.</t>
        <t>Consider the following schema:</t>
        <sourcecode type="json"><![CDATA[
{
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "a": { "type": "string" }
      },
      "required": ["a"],
      "additionalProperties": true
    },
    {
      "type": "object",
      "properties": {
        "b": { "type": "number" }
      },
      "required": ["b"],
      "additionalProperties": true
    },
    {
      "type": "object",
      "properties": {
        "c": { "type": "boolean" }
      },
      "required": ["c"],
      "additionalProperties": true
    }
  ]
}
]]></sourcecode>
        <t>Here, a JSON node evaluates to <tt>true</tt> if it is an object with at least one of the properties <tt>a</tt>, <tt>b</tt>, or <tt>c</tt>, where <tt>a</tt> is a string, <tt>b</tt> is a number, and <tt>c</tt> is a boolean:</t>
        <sourcecode type="json"><![CDATA[
{
  "a": "string"
}
]]></sourcecode>
        <t>or</t>
        <sourcecode type="json"><![CDATA[
{
  "b": 42,
  "c": true
}
]]></sourcecode>
        <t>Both JSON nodes satisfy the constraints defined by at least one subschema.</t>
      </section>
      <section anchor="oneOf">
        <name><tt>oneOf</tt></name>
        <t>The value of the <tt>oneOf</tt> keyword MUST be a type-union array containing at least one schema object. A JSON node is valid against <tt>oneOf</tt> if and only if it is valid against exactly one of the schemas in the array.</t>
        <t>Consider the following schema:</t>
        <sourcecode type="json"><![CDATA[
{
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "a": { "type": "string" }
      },
      "required": ["a"],
      "additionalProperties": true
    },
    {
      "type": "object",
      "properties": {
        "b": { "type": "number" }
      },
      "required": ["b"],
      "additionalProperties": true
    },
    {
      "type": "object",
      "properties": {
        "c": { "type": "boolean" }
      },
      "required": ["c"],
      "additionalProperties": true
    }
  ]
}
]]></sourcecode>
        <t>Here, a JSON node evaluates to <tt>true</tt> if it is an object with exactly one of the properties <tt>a</tt>, <tt>b</tt>, or <tt>c</tt>, where <tt>a</tt> is a string, <tt>b</tt> is a number, and <tt>c</tt> is a boolean:</t>
        <sourcecode type="json"><![CDATA[
{
  "a": "string"
}
]]></sourcecode>
        <t>The following JSON node evaluates to <tt>false</tt> because it matches two subschemas:</t>
        <sourcecode type="json"><![CDATA[
{
  "a": "string",
  "b": 42
}
]]></sourcecode>
      </section>
      <section anchor="not">
        <name><tt>not</tt></name>
        <t>The value of the keyword <tt>not</tt> is a single schema object, which MAY be a type union. A JSON node is valid against <tt>not</tt> if it is not valid against the schema. For example, the schema is written as follows:</t>
        <sourcecode type="json"><![CDATA[
{
  "not": { "type": "string" }
}
]]></sourcecode>
        <t>Here, a JSON node evaluates to <tt>true</tt> if it is not a string:</t>
        <sourcecode type="json"><![CDATA[
42
]]></sourcecode>
      </section>
      <section anchor="if-then-else">
        <name><tt>if</tt>/<tt>then</tt>/<tt>else</tt></name>
        <t>The values of the keywords <tt>if</tt>, <tt>then</tt>, and <tt>else</tt> are schema objects. If the processed JSON node is valid against the <tt>if</tt> schema, the <tt>then</tt> schema further constrains the JSON node and MUST match the input. If the processed JSON node is not valid against the <tt>if</tt> schema, the <tt>else</tt> schema further constrains the JSON node and MUST match the input.</t>
        <t>Consider the following schema:</t>
        <sourcecode type="json"><![CDATA[
{
  "if": {
    "properties": {
      "a": { "type": "string" }
    },
    "required": ["a"]
  },
  "then": {
    "properties": {
      "b": { "type": "number" }
    },
    "required": ["b"]
  },
  "else": {
    "properties": {
      "c": { "type": "boolean" }
    },
    "required": ["c"]
  }
}
]]></sourcecode>
        <t>Here, a JSON node evaluates to <tt>true</tt> if it is an object with a property <tt>a</tt> that is a string; then it must also have a property <tt>b</tt> that is a number:</t>
        <sourcecode type="json"><![CDATA[
{
  "a": "string",
  "b": 42
}
]]></sourcecode>
        <t>Otherwise, if the JSON node does not have a property <tt>a</tt> that is a string, it must have a property <tt>c</tt> that is a boolean:</t>
        <sourcecode type="json"><![CDATA[
{
  "c": true
}
]]></sourcecode>
        <t>or</t>
        <sourcecode type="json"><![CDATA[
{
  "a": 42,
  "c": false
}
]]></sourcecode>
      </section>
      <section anchor="enabling-the-extensions">
        <name>Enabling the Extensions</name>
        <t>The conditional composition extensions can be enabled in a schema or meta-schema
by adding the <tt>JSONSchemaConditionalComposition</tt> key to the <tt>$uses</tt> clause when
referencing the extended meta-schema:</t>
        <sourcecode type="json"><![CDATA[
{
  "$schema": "https://json-structure.org/meta/extended/v0/#",
  "$id": "myschema",
  "$uses": [
    "JSONSchemaConditionalComposition"
  ],
  "oneOf" : [
    { "type": "string" },
    { "type": "number" }
  ]
}
]]></sourcecode>
        <t>Conditional composition is enabled by default in the validation meta-schema:</t>
        <sourcecode type="json"><![CDATA[
{
  "$schema": "https://json-structure.org/meta/validation/v0/#",
  "$id": "myschema",
  "type": "object",
  "oneOf" : [
    { "type": "string" },
    { "type": "number" }
  ]
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <ul spacing="normal">
        <li>
          <t>The use of composition keywords does not alter the security model of JSON Structure Core; however, excessive nesting or overly complex compositions may impact performance and resource usage.</t>
        </li>
        <li>
          <t>Implementations MUST ensure that all subschema references resolve within the same document or trusted sources to prevent external schema injection.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not require any IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="JSTRUCT-CORE" target="https://json-structure.github.io/core/draft-vasters-json-structure-core.html">
        <front>
          <title>JSON Structure Core</title>
          <author fullname="Clemens Vasters">
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
    </references>
    <?line 355?>

<section numbered="false" anchor="changes-from-draft-vasters-json-structure-cond-composition-01">
      <name>Changes from draft-vasters-json-structure-cond-composition-01</name>
      <ul spacing="normal">
        <li>
          <t>Aligned introduction terminology with document title ("Conditional
Composition" instead of "Conditionals").</t>
        </li>
        <li>
          <t>Improved awkward sentence structure in the introduction.</t>
        </li>
        <li>
          <t>Removed unused/obsolete RFC 4646 from normative references.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="changes-from-draft-vasters-json-structure-cond-composition-00">
      <name>Changes from draft-vasters-json-structure-cond-composition-00</name>
      <ul spacing="normal">
        <li>
          <t>No changes; date update only.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
e+C80UxwD70BdiI2CjBSnD375DFfpkFZryLBRqueAdQYXiNeV2IB2fSqTZd9
gul5kadco+IpclXhSTvS1wDKeK6+npmcNWu9//zr31xqP8kVFoBDsqzdVF0S
7FdX/tDtBKtuyR9L1FiR5XNeb1hGAkO7cyBDaOZxMaJGID3ti4gpt2/k4rmk
1VwAXV4REujSRT/ouiG/Gug6drcA3Q6PYApvh9thsBu9E2wkwVd4/AqPXwyP
UUD2YiQy+H8KkUGdSl8Z9BnYfFZBg0Zv44EztLP9sNlJ8gBCHlncFhOQhS96
kcUP+bWQxbO7TTv3Saa0IrhnYGEBvgLLV2C5K7D0xOP/FVcmnWC/TifXaCCj
U0k7V9CMN2TobacFumWzF5gTuNCWNaAFf/qAJQCKG+ZMAGLFFbwI6y7aO2xg
RzDs3AQljnDwFq3ZugPiPZuXcf8XbXJg4kbn1tLuhvHm3LEFSF+X7V8WWW7D
z1GJmMG8jXF3d/4v9vL5iJ6M6D42ublic8PTEWo830eYI0Ib1x370+FHE8y0
EYCq8hmjh1MJEVbN/ID5BLrzWocVsqtXbgeiuy3FZYYjkV/m5bq2N0nS7+Fd
aZymv1iaO9aVfN6AWz/gfb5keKzbKReJfzUgG9/E4bOQ38thFnEgu93E4fOQ
3csidSzuqbtrV2aErO5UsIXXp26LkFCupsUJbc3y8i2eN4vnhW8r7oR+J+FQ
yq0lO/HUbCDt8O2Rd9iIujM6jUdfUxauto87rabstppcDCIIPyqxSg57wEfh
TJY2QJV/Q4Azak5rw1HhddvA7UCRwnEz2vyldThvoTe79IDilbLSb7wl1MNm
WZBiSpY84zfRPm20TcutKkUKj36AooZldVpwdUPJLZNwMBgouhMpyBAxdYYU
raEe+LPD678uqfTigCgcBHoH5w8P9lx0PMgp1AerrafiHpJoTaM5uEkv+kSD
+xrfoYqmRe2BjOHVN3GqN/3O82vcxLv0zi8wPtYS0u+fXNkavieDtRRvMllP
A3l/1kj2xBkdaeTIroDsMhyPG/+GzsWjN4j3EZ/3UHShyPbu6zcZLwvri0Ug
J/hA95qzzadiWW1o03qIGKWClwMCSmV4xwtJUuFVsWWehfoU86ZTNaybVmt0
pAJ4wZ/UlKkrZlqZqtYpySwXah8KHBMBPsJzk7nc0Xdj4WuYztZbfLJOtApI
RdgbTsFoe6w50qTPHDTwC6HkuDKIr7U6D6fTmqKv2ZT/yR2Y8DnM8eHbw11P
5LKUu17ofnPSWDzs28ly68jJNBy/0hctM5l+5BOfpSwXmDLX1equX/I9Si7G
Lp5U9scBI+iAw+KwyBfudDD6WCb6zMIVrEZm/jpL/HYQJSWiMwYAPr5VMqNw
iYeZwe+8FzVCAt3P5uNGorM2IEtuEo34IYdjkWjqqVrxzLpEHGcH1QxeVVbR
52TiybdPvnWGaT46iyJg/5ea7+F15ntbidTRfUpH3wjXNf+hLQHmeph+LKsN
QGpB9jP9dCYnL07g9DAS4f5f0NcR/vcpAAA=

-->

</rfc>
