<?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.6.35 (Ruby 3.2.2) -->
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpapi-yaml-mediatypes-09" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.3 -->
  <front>
    <title>YAML Media Type</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpapi-yaml-mediatypes-09"/>
    <author initials="R." surname="Polli" fullname="Roberto Polli">
      <organization>Digital Transformation Department, Italian Government</organization>
      <address>
        <postal>
          <country>Italy</country>
        </postal>
        <email>robipolli@gmail.com</email>
      </address>
    </author>
    <author initials="E." surname="Wilde" fullname="Erik Wilde">
      <organization>Axway</organization>
      <address>
        <postal>
          <country>Switzerland</country>
        </postal>
        <email>erik.wilde@dret.net</email>
      </address>
    </author>
    <author initials="E." surname="Aro" fullname="Eemeli Aro">
      <organization>Mozilla</organization>
      <address>
        <postal>
          <country>Finland</country>
        </postal>
        <email>eemeli@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="June" day="27"/>
    <area>Applications and Real-Time</area>
    <workgroup>HTTPAPI</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 71?>

<t>This document registers
the application/yaml media type
and the +yaml structured syntax suffix
on the IANA Media Types registry,
intended to be used to identify document components
serialized according to the YAML specification.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpapi-yaml-mediatypes/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTPAPI Working Group mailing list (<eref target="mailto:httpapi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/httpapi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/httpapi/"/>.
        Working Group information can be found at <eref target="https://datatracker.ietf.org/wg/httpapi/about/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-httpapi/mediatypes/labels/yaml"/>.</t>
    </note>
  </front>
  <middle>
    <?line 80?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>YAML <xref target="YAML"/> is a data serialization format
that is capable of conveying one or multiple
documents in a single presentation stream
(e.g., a file or a network resource).
It is widely used on the Internet,
including in the API sector (e.g., see <xref target="OAS"/>),
but a corresponding media type and structured syntax suffix had not previously been registered by IANA.</t>
      <t>To increase interoperability when exchanging YAML streams,
and leverage content negotiation mechanisms when exchanging
YAML resources,
this specification
registers the <tt>application/yaml</tt> media type
and the <tt>+yaml</tt> structured syntax suffix <xref target="MEDIATYPE"/>.</t>
      <t>Moreover, it provides security considerations
and interoperability considerations related to <xref target="YAML"/>,
including its relation with <xref target="JSON"/>.</t>
      <section anchor="notational-conventions">
        <name>Notational Conventions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
These words may also appear in this document in
lower case as plain English words, absent their normative meanings.
<?line -8?>
        </t>
        <t>The terms  "content", "content negotiation", "resource",
and "user agent"
in this document are to be interpreted as in <xref target="HTTP"/>.</t>
        <t>The terms "fragment" and "fragment identifier"
in this document are to be interpreted as in <xref target="URI"/>.</t>
        <t>The terms "presentation", "stream", "YAML document", "representation graph", "tag",
"serialization detail",
"node", "alias node", "anchor" and "anchor name"
in this document are to be interpreted as in <xref target="YAML"/>.</t>
        <t>Figures containing YAML code always start with
the "%YAML 1.2" directive to improve readability.</t>
      </section>
      <section anchor="application-yaml-fragment">
        <name>Fragment identification</name>
        <t>A fragment identifies a node in a stream.</t>
        <t>A fragment identifier starting with "*"
is to be interpreted as a YAML alias node (see <xref target="fragment-alias-node"/>).</t>
        <t>For single-document YAML streams,
a fragment identifier that is empty
or that starts with "/"
is to be interpreted as a JSON Pointer <xref target="JSON-POINTER"/>
and is evaluated on the YAML representation graph,
walking through alias nodes;
in particular, the empty fragment identifier
references the root node.
This syntax can only reference the YAML nodes that are
on a path that is made up of nodes interoperable with
the JSON data model (see <xref target="int-yaml-and-json"/>).</t>
        <t>A fragment identifier is not guaranteed to reference an existing node.
Therefore, applications SHOULD define how an unresolved alias node
ought to be handled.</t>
        <section anchor="fragment-alias-node">
          <name>Fragment identification via alias nodes</name>
          <t>This section describes how to use
alias nodes (see Section 3.2.2.2 and 7.1 of <xref target="YAML"/>)
as fragment identifiers to designate nodes.</t>
          <t>A YAML alias node can be represented in a URI fragment identifier
by encoding it into bytes using UTF-8 <xref target="UTF-8"/>,
but percent-encoding of those characters is not allowed by the fragment rule
in <xref section="3.5" sectionFormat="of" target="URI"/>.</t>
          <t>If multiple nodes would match a fragment identifier,
the first occurrence of such match is selected.</t>
          <t>Users concerned with interoperability of fragment identifiers:</t>
          <ul spacing="normal">
            <li>SHOULD limit alias nodes to a set of characters
that do not require encoding
to be expressed as URI fragment identifiers:
this is generally possible since
anchor names are a serialization detail;</li>
            <li>SHOULD NOT use alias nodes that match multiple nodes.</li>
          </ul>
          <t>In the example resource below, the relative reference (see <xref section="4.2" sectionFormat="of" target="URI"/>) <tt>file.yaml#*foo</tt>
identifies the first alias node <tt>*foo</tt> pointing to the node with value <tt>scalar</tt>
and not the one in the second document;
whereas
the relative reference <tt>file.yaml#*document_2</tt> identifies the root node
of the second document <tt>{ one: [a, sequence]}</tt>.</t>
          <figure>
            <name>A YAML stream containing two YAML documents.</name>
            <sourcecode type="example"><![CDATA[
 %YAML 1.2
 ---
 one: &foo scalar
 two: &bar
   - some
   - sequence
   - items
 ...
 %YAML 1.2
 ---
 &document_2
 one: &foo [a, sequence]
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="media-type-and-structured-syntax-suffix-registrations">
      <name>Media Type and Structured Syntax Suffix registrations</name>
      <t>This section describes the information required to register
the above media type according to <xref target="MEDIATYPE"/></t>
      <section anchor="application-yaml">
        <name>Media Type application/yaml</name>
        <t>The media type for YAML text is <tt>application/yaml</tt>;
the following information serves as the registration form for this media type.</t>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>yaml</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
        </dl>
        <!-- RFC 6838:
   "N/A", written exactly that way, can be used in any field if desired
   to emphasize the fact that it does not apply or that the question was
   not omitted by accident.  Do not use 'none' or other words that could
   be mistaken for a response.
  -->

<dl>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A; unrecognized parameters should be ignored</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>see <xref target="security-considerations"/> of this document</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>see <xref target="interoperability-considerations"/> of this document</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="YAML"/>, this document</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Applications that need a human-friendly, cross language, Unicode
based data serialization language designed around the common native
data types of dynamic programming languages.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>See <xref target="application-yaml-fragment"/> of this document</t>
          </dd>
        </dl>
        <t>Additional information:</t>
        <ul spacing="normal">
          <li>Deprecated alias names for this type:  application/x-yaml, text/yaml, text/x-yaml.
These names are used, but not registered.</li>
          <li>Magic number(s)  N/A</li>
          <li>File extension(s): "yaml" (preferred), "yml". See <xref target="int-yaml-filename-extension"/> of this document.</li>
          <li>Macintosh file type code(s):  N/A</li>
          <li>Windows Clipboard Name: YAML</li>
        </ul>
        <dl>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>See the Authors' Addresses section of this document.</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>None.</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>See the Authors' Addresses section of this document.</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
      <section anchor="suffix-yaml">
        <name>The +yaml Structured Syntax Suffix</name>
        <t>The suffix
<tt>+yaml</tt> MAY be used with any media type whose representation follows
that established for <tt>application/yaml</tt>.
The media type structured syntax suffix registration form follows.
See <xref target="MEDIATYPE"/> for definitions of each of the registration form headings.</t>
        <dl>
          <dt>Name:</dt>
          <dd>
            <t>YAML Ain't Markup Language (YAML)</t>
          </dd>
          <dt>+suffix:</dt>
          <dd>
            <t>+yaml</t>
          </dd>
          <dt>References:</dt>
          <dd>
            <t><xref target="YAML"/>, this document</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>Same as "application/yaml"</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>Differently from <tt>application/yaml</tt>,
there is no fragment identification syntax defined
for +yaml.
</t>
            <t>A specific <tt>xxx/yyy+yaml</tt> media type
needs to define the syntax and semantics for fragment identifiers
because the ones defined for "application/yaml"
do not apply unless explicitly expressed.</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>Same as "application/yaml"</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>Same as "application/yaml"</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>httpapi@ietf.org or art@ietf.org</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>See the Authors' Addresses section of this document</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="interoperability-considerations">
      <name>Interoperability Considerations</name>
      <section anchor="int-yaml-evolving">
        <name>YAML is an Evolving Language</name>
        <t>YAML is an evolving language and, over time,
some features have been added and others removed.</t>
        <t>This <xref target="YAML"/> media type registration is independent of YAML version.
This allows content negotiation of version-independent YAML resources.</t>
        <t>Implementers concerned about features related to a specific YAML version
can specify it in YAML documents using the <tt>%YAML</tt> directive
(see Section 6.8.1 of <xref target="YAML"/>).</t>
      </section>
      <section anchor="int-yaml-streams">
        <name>YAML streams</name>
        <t>A YAML stream can contain zero or more YAML documents.</t>
        <t>When receiving a multi-document stream,
an application that only expects one-document streams,
ought to signal an error instead of ignoring the extra documents.</t>
        <t>Current implementations consider different documents in a stream independent,
similarly to JSON Text Sequences (see <xref target="RFC7464"/>);
elements such as anchors are not guaranteed to be referenceable
across different documents.</t>
      </section>
      <section anchor="int-yaml-filename-extension">
        <name>Filename extension</name>
        <t>The "yaml" filename extension is the preferred one;
it is the most popular and widely used on the web.
The "yml" filename extension is still used.
The simultaneous usage of two filename extensions in the same context
might cause interoperability issues
(e.g., when both a "config.yaml" and a "config.yml" are present).</t>
      </section>
      <section anchor="int-yaml-and-json">
        <name>YAML and JSON</name>
        <t>When using flow collection styles (see Section 7.4 of <xref target="YAML"/>)
a YAML document could look like JSON <xref target="JSON"/>,
thus similar interoperability considerations apply.</t>
        <t>When using YAML as a more efficient format
to serialize information intended to be consumed as JSON,
information not reflected in the representation graph
and classified as presentation or serialization detail
(see Section 3.2 of <xref target="YAML"/>) can be discarded.
This includes comments (see Section 3.2.3.3 of <xref target="YAML"/>),
directives, and alias nodes (see Section 7.1 of <xref target="YAML"/>)
that do not have a JSON counterpart.</t>
        <figure anchor="example-json-discards-information">
          <name>JSON replaces alias nodes with static values.</name>
          <sourcecode type="example"><![CDATA[
 %YAML 1.2
 ---
 # This comment will be lost
 # when serializing in JSON.
 Title:
   type: string
   maxLength: &text_limit 64

 Name:
   type: string
   maxLength: *text_limit  # Replaced by the value 64.
]]></sourcecode>
        </figure>
        <t>Implementers need to ensure that relevant
information will not be lost during the processing.
For example, they might consider acceptable
that alias nodes are replaced by static values.</t>
        <t>In some cases an implementer may want to
define a list of allowed YAML features,
taking into account that the following ones
might have interoperability
issues with <xref target="JSON"/>:</t>
        <ul spacing="normal">
          <li>multi-document YAML streams;</li>
          <li>non UTF-8 encoding. Before encoding YAML streams in UTF-16 or UTF-32,
it is important to note that <xref section="8.1" sectionFormat="of" target="JSON"/> mandates the use of UTF-8
when exchanging JSON texts between systems that are not part of a closed ecosystem,
and that Section 5.2 of <xref target="YAML"/> recommends the use of UTF-8;</li>
          <li>mapping keys that are not strings;</li>
          <li>circular references represented using anchor (see <xref target="sec-yaml-exhaustion"/>
and <xref target="example-yaml-cyclic"/>);</li>
          <li>
            <tt>.inf</tt> and <tt>.nan</tt> float values, since JSON does not support them;</li>
          <li>non-JSON types,
including the ones associated with tags like <tt>!!timestamp</tt>
that were included in the default schema of older YAML versions;</li>
          <li>tags in general, and specifically the ones that do not map
to JSON types like
custom and local tags such as <tt>!!python/object</tt> and
<tt>!mytag</tt> (see Section 2.4 of <xref target="YAML"/>);</li>
        </ul>
        <figure anchor="example-unsupported-keys">
          <name>Example of mapping keys and values not supported in JSON in a multi-document YAML stream</name>
          <sourcecode type="example"><![CDATA[
 %YAML 1.2
 ---
 non-json-keys:
   0: a number
   [0, 1]: a sequence
   ? {k: v}
   : a map
 ---
 non-json-keys:
   !date 2020-01-01: a timestamp
 non-json-value: !date 2020-01-01
 ...
]]></sourcecode>
        </figure>
      </section>
      <section anchor="int-fragment">
        <name>Fragment identifiers</name>
        <t>To allow fragment identifiers to traverse alias nodes,
the YAML representation graph needs to be generated before the fragment identifier evaluation.
It is important that this evaluation will not cause the issues mentioned in <xref target="int-yaml-and-json"/>
and in <xref target="security-considerations">Security considerations</xref> such as infinite loops and unexpected code execution.</t>
        <t>Implementers need to consider that the YAML version and supported features (e.g., merge keys)
can affect the generation of the representation graph (see <xref target="example-merge-keys"/>).</t>
        <t>In <xref target="application-yaml"/>, this document extends the use of specifications based on
the JSON data model with support for YAML fragment identifiers.
This is to improve the interoperability of already consolidated practices,
such as the one of writing <xref target="OAS">OpenAPI documents</xref> in YAML.</t>
        <t><xref target="ex-fragid"/> provides a non-exhaustive list of examples that could help
understand interoperability issues related to fragment identifiers.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Security requirements for both media type and media type suffix
registrations are discussed in Section 4.6 of <xref target="MEDIATYPE"/>.</t>
      <section anchor="sec-yaml-code-execution">
        <name>Arbitrary Code Execution</name>
        <t>Care should be used when using YAML tags,
because their resolution might trigger unexpected code execution.</t>
        <t>Code execution in deserializers should be disabled by default,
and only be enabled explicitly.
In those cases, the implementation should ensure - for example, via specific functions -
that the code execution results in strictly bounded time/memory limits.</t>
        <t>Many implementations provide safe deserializers addressing these issues.</t>
      </section>
      <section anchor="sec-yaml-exhaustion">
        <name>Resource Exhaustion</name>
        <t>YAML documents are rooted, connected, directed graphs
and can contain reference cycles,
so they can't be treated as simple trees (see Section 3.2.1 of <xref target="YAML"/>).
An implementation that treats them as simple trees
risks going into an infinite loop while traversing the YAML representation graph.
This can happen:</t>
        <ul spacing="normal">
          <li>when trying to serialize it as JSON;</li>
          <li>or when searching/identifying nodes using specifications based on the JSON data model (e.g., <xref target="JSON-POINTER"/>).</li>
        </ul>
        <figure anchor="example-yaml-cyclic">
          <name>A cyclic document</name>
          <sourcecode type="yaml"><![CDATA[
 %YAML 1.2
 ---
 x: &x
   y: *x
]]></sourcecode>
        </figure>
        <t>Even if a representation graph is not cyclic, treating it as a simple tree could lead to improper behaviors
(such as the "billion laughs"
or "Exponential Entity Expansion" problem).</t>
        <figure anchor="example-yaml-1e9lol">
          <name>A billion laughs document</name>
          <sourcecode type="yaml"><![CDATA[
 %YAML 1.2
 ---
 x1: &a1 ["a", "a"]
 x2: &a2 [*a1, *a1]
 x3: &a3 [*a2, *a2]
]]></sourcecode>
        </figure>
        <t>This can be addressed using processors limiting the anchor recursion depth
and validating the input before processing it;
even in these cases it is important
to carefully test the implementation you are going to use.
The same considerations apply when serializing a YAML representation graph
in a format that does not support reference cycles (see <xref target="int-yaml-and-json"/>).</t>
      </section>
      <section anchor="yaml-streams">
        <name>YAML streams</name>
        <t>Incremental parsing and processing of a YAML stream can produce partial results
and later indicate failure to parse the remainder of the stream;
to prevent partial processing, implementers might prefer validating and processing all the documents in a stream at the same time.</t>
        <t>Repeated parsing and re-encoding of a YAML stream can result
in the addition or removal of document delimiters (e.g., <tt>---</tt> or <tt>...</tt>)
as well as the modification of anchor names and other serialization details,
which can break signature validation.</t>
      </section>
      <section anchor="expressing-booleans">
        <name>Expressing booleans</name>
        <t>Section 10.3.2 of <xref target="YAML"/> specifies that only the scalars matching the
regular expression <tt>true|True|TRUE|false|False|FALSE</tt> are interpreted as booleans.
Older YAML versions were more tolerant (e.g., interpreting <tt>no</tt> and <tt>n</tt> as <tt>false</tt>,
and <tt>yes</tt> and <tt>y</tt> as <tt>true</tt>).
When the older syntax is used, a YAML implementation could then interpret
<tt>insecure: n</tt> as <tt>insecure: "n"</tt> instead of <tt>insecure: false</tt>.
To avoid these issues, express booleans only using the syntax defined
in Section 10.3.2 of <xref target="YAML"/>.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This specification defines the following new Internet media type <xref target="MEDIATYPE"/>.</t>
      <t>IANA is asked to update the "Media Types" registry at <eref target="https://www.iana.org/assignments/media-types">https://www.iana.org/assignments/media-types</eref>
with the registration information provided in the section below.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Media Type</th>
            <th align="left">Registration information section</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">application/yaml</td>
            <td align="left">
              <xref target="application-yaml"/> of this document</td>
          </tr>
        </tbody>
      </table>
      <t>IANA is asked to update the "Structured Syntax Suffixes" registry at <eref target="https://www.iana.org/assignments/media-type-structured-suffix">https://www.iana.org/assignments/media-type-structured-suffix</eref>
with the registration information provided in the section below.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Suffix</th>
            <th align="left">Registration information section</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">+yaml</td>
            <td align="left">
              <xref target="suffix-yaml"/> of this document</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="YAML" target="https://yaml.org/spec/1.2.2/">
          <front>
            <title>YAML Ain't Markup Language Version 1.2</title>
            <author initials="" surname="Oren Ben-Kiki">
              <organization/>
            </author>
            <author initials="" surname="Clark Evans">
              <organization/>
            </author>
            <author initials="" surname="Ingy dot Net">
              <organization/>
            </author>
            <author initials="" surname="Tina Müller">
              <organization/>
            </author>
            <author initials="" surname="Pantelis Antoniou">
              <organization/>
            </author>
            <author initials="" surname="Eemeli Aro">
              <organization/>
            </author>
            <author initials="" surname="Thomas Smith">
              <organization/>
            </author>
            <date year="2021" month="October" day="01"/>
          </front>
        </reference>
        <reference anchor="OAS">
          <front>
            <title>OpenAPI Specification 3.0.0</title>
            <author initials="" surname="Darrel Miller">
              <organization/>
            </author>
            <author initials="" surname="Jeremy Whitlock">
              <organization/>
            </author>
            <author initials="" surname="Marsh Gardiner">
              <organization/>
            </author>
            <author initials="" surname="Mike Ralphson">
              <organization/>
            </author>
            <author initials="" surname="Ron Ratovsky">
              <organization/>
            </author>
            <author initials="" surname="Uri Sarid">
              <organization/>
            </author>
            <date year="2017" month="July" day="26"/>
          </front>
        </reference>
        <reference anchor="JSON-POINTER">
          <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="MEDIATYPE">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols.  This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="JSON">
          <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="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="HTTP">
          <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="URI">
          <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="UTF-8">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems.  The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo.  UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values.  This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.ietf-jsonpath-base">
          <front>
            <title>JSONPath: Query expressions for JSON</title>
            <author fullname="Stefan Gössner" initials="S." surname="Gössner">
              <organization>Fachhochschule Dortmund</organization>
            </author>
            <author fullname="Glyn Normington" initials="G." surname="Normington">
         </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="10" month="June" year="2023"/>
            <abstract>
              <t>   JSONPath defines a string syntax for selecting and extracting JSON
   (RFC 8259) values from a JSON value.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-jsonpath-base-14"/>
        </reference>
        <reference anchor="RFC7464">
          <front>
            <title>JavaScript Object Notation (JSON) Text Sequences</title>
            <author fullname="N. Williams" initials="N." surname="Williams"/>
            <date month="February" year="2015"/>
            <abstract>
              <t>This document describes the JavaScript Object Notation (JSON) text sequence format and associated media type "application/json-seq".  A JSON text sequence consists of any number of JSON texts, all encoded in UTF-8, each prefixed by an ASCII Record Separator (0x1E), and each ending with an ASCII Line Feed character (0x0A).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7464"/>
          <seriesInfo name="DOI" value="10.17487/RFC7464"/>
        </reference>
      </references>
    </references>
    <?line 554?>

<section anchor="ex-fragid">
      <name>Examples related to fragment identifier interoperability</name>
      <section anchor="unreferenceable-nodes">
        <name>Unreferenceable nodes</name>
        <t>In this example, a couple of YAML nodes that cannot be referenced
based on the JSON data model
since their mapping keys are not strings.</t>
        <figure anchor="example-unsupported-paths">
          <name>Example of YAML nodes that are not referenceable based on JSON data model.</name>
          <sourcecode type="example"><![CDATA[
 %YAML 1.2
 ---
 a-map-cannot:
   ? {be: expressed}
   : with a JSON Pointer

 0: no numeric mapping keys in JSON
]]></sourcecode>
        </figure>
      </section>
      <section anchor="referencing-a-missing-node">
        <name>Referencing a missing node</name>
        <t>In this example the fragment <tt>#/0</tt> does not reference an existing node</t>
        <figure anchor="example-missing-node">
          <name>Example of a JSON Pointer that does not reference an existing node.</name>
          <sourcecode type="example"><![CDATA[
 %YAML 1.2
 ---
 0: "JSON Pointer `#/0` references a string mapping key."
]]></sourcecode>
        </figure>
      </section>
      <section anchor="representation-graph-with-anchors-and-cyclic-references">
        <name>Representation graph with anchors and cyclic references</name>
        <t>In this YAML document, the <tt>#/foo/bar/baz</tt> fragment identifier
traverses the representation graph and references the string <tt>you</tt>.
Moreover, the presence of a cyclic reference implies that
there are infinite fragment identifiers <tt>#/foo/bat/../bat/bar</tt>
referencing the <tt>&amp;anchor</tt> node.</t>
        <figure anchor="example-cyclic-graph">
          <name>Example of a cyclic reference and alias nodes.</name>
          <sourcecode type="example"><![CDATA[
 %YAML 1.2
 ---
 anchor: &anchor
   baz: you
 foo: &foo
   bar: *anchor
   bat: *foo
]]></sourcecode>
        </figure>
        <t>Many YAML implementations will resolve
<eref target="https://yaml.org/type/merge.html">the merge key "&lt;&lt;:"</eref> defined in YAML 1.1
in the representation graph.
This means that the fragment <tt>#/book/author/given_name</tt> references the string <tt>Federico</tt>
and that the fragment <tt>#/book/&lt;&lt;</tt> will not reference any existing node.</t>
        <figure anchor="example-merge-keys">
          <name>Example of YAML merge keys.</name>
          <sourcecode type="example"><![CDATA[
 %YAML 1.1
 ---
 # Many implementations use merge keys.
 the-viceroys: &the-viceroys
   title: The Viceroys
   author:
     given_name: Federico
     family_name: De Roberto
 book:
   <<: *the-viceroys
   title: The Illusion
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Thanks to Erik Wilde and David Biesack for being the initial contributors of this specification,
and to Darrel Miller and Rich Salz for their support during the adoption phase.</t>
      <t>In addition to the people above, this document owes a lot to the extensive discussion inside
and outside the HTTPAPI workgroup.
The following contributors have helped improve this specification by
opening pull requests, reporting bugs, asking smart questions,
drafting or reviewing text, and evaluating open issues:</t>
      <t>Tina (tinita) Müller,
Ben Hutton,
Carsten Bormann,
Manu Sporny
and Jason Desrosiers.</t>
    </section>
    <section numbered="false" removeInRFC="true" anchor="faq">
      <name>FAQ</name>
      <dl>
        <dt>Q: Why this document?</dt>
        <dd>
          <t>After all these years, we still lack a proper media-type for YAML.
This has some security implications too
(eg. wrt on identifying parsers or treat downloads)</t>
        </dd>
        <dt>Q: Why using alias nodes as fragment identifiers?</dt>
        <dd>
          <t>Alias nodes are a native YAML feature that allows
addressing any node in a YAML document.
Since YAML is not limited to string keywords,
not all nodes are addressable using JSON Pointers.
Alias nodes are thus the natural choice for fragment identifiers
<xref target="application-yaml-fragment"/>.</t>
        </dd>
        <dt>Q: Why not use plain names for alias nodes? Why not define plain names?</dt>
        <dd>
          <t>Using plain name fragments could have
limited the ability of future xxx+yaml
media types to define their plain name fragments.
Moreover, alias nodes starts with <tt>*</tt> so we found no reason
to strip it when using them in fragments.
</t>
          <t>Preserving <tt>*</tt> had another positive result:
it allows distinguishing
a fragment identifier expressed as an alias node from
one expressed in other formats.
In this document we included JSON Pointer <xref target="JSON-POINTER"/>
which is expected to start with <tt>/</tt>.
Moreover, since JSON Path <xref target="I-D.ietf-jsonpath-base"/> expressions
start with <tt>$</tt>, this mechanism can be extended to JSON Path too.</t>
        </dd>
        <dt>Q: Why not just use JSON Pointer as the primary fragment identifier?</dt>
        <dd>
          <t>Fragment identifiers in YAML always reference
YAML representation graph nodes.
JSON Pointer can only rely on string keywords so
it is not able to reference a generic node in the
representation graph.
</t>
          <t>Since JSON Pointer is a specification unrelated to YAML,
we decided to isolate the impacts of changes in JSON Pointer
on YAML fragments:
only fragments starting with "/" are "delegated" to an external spec,
and if <xref target="JSON-POINTER"/> changes, it will only affect fragments starting with "/".</t>
          <t>The current behaviour for empty fragments is the same
for both JSON Pointer and alias nodes.
Incidentally, it's the only sensible behaviour independently of <xref target="JSON-POINTER"/>.</t>
        </dd>
        <dt>Q: Why describe the YAML/JSON so closely?</dt>
        <dd>
          <t>In the context of Web APIs, YAML is widely used as a more compact way to serialize
content inteded to be consumed according to the JSON data model.
Typical examples are OpenAPI specifications and Kubernetes manifest files,
that can be serialized in both formats.
The YAML media type registration I-D is a spin-off and a building block
for the OpenAPI specification media type registration.
The YAML/JSON section aims at clarifying what developers should expect when using YAML
instead of JSON, and its content arose from common mistakes and FAQs.
</t>
          <t>Please note that we are not imposing any normative restriction on YAML streams;
this is because YAML is defined outside this document.
Instead, we only provide Interoperability and Security considerations that,
by their nature, are not normative.</t>
        </dd>
        <dt>Q: Do we forbid using non-UTF-8 YAML serialization?</dt>
        <dd>
          <t>No. Since <xref target="JSON"/> recommends UTF-8 in interoperability context
we suggest that using UTF-8 is an interoperable behavior.
This is aligned with Section 5.2 of <xref target="YAML"/> that explicitly
recommends UTF-8.</t>
        </dd>
        <dt>Q: Why media type registration information is outside the IANA Considerations?</dt>
        <dd>
          <t>We decided to follow the style adopted in <xref target="HTTP"/> where
the IANA Considerations in <xref section="18.8" sectionFormat="of" target="HTTP"/>
references the <tt>multipart/byteranges</tt> media type registration form
contained in the specification body <xref section="14.6" sectionFormat="of" target="HTTP"/>.</t>
        </dd>
      </dl>
    </section>
    <section numbered="false" removeInRFC="true" anchor="change-log">
      <name>Change Log</name>
      <section numbered="false" anchor="since-draft-ietf-httpapi-yaml-mediatypes-02">
        <name>Since draft-ietf-httpapi-yaml-mediatypes-02</name>
        <ul spacing="normal">
          <li>clarification on fragment identifiers #50.</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-httpapi-yaml-mediatypes-01">
        <name>Since draft-ietf-httpapi-yaml-mediatypes-01</name>
        <ul spacing="normal">
          <li>application/yaml fragment identifiers compatible with JSON Pointer #41 (#47).</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7VcbXfbxrH+jl+xoe5NLIekLNlxHDltqthyo9ZvteT65Pj4
hEtySaICARYLiGIc9bfcH3I/3fvH7jwzu8ACBOWkvc1pZQlY7M7Ozs7LM7M7
GAyiIi4Sc6x+PHnxXL0w01iri83KRHo8zs3VcTTNJqleUoNprmfFIDbFbLAo
ipVexYONXiaDJb4p6BM7uPdNNNGFmWf55ljF6SyLoniVH6siL21xdO/eN/eO
Ip0bfaxOVqskprZxllql06l6Y3QyuIiXJlpn+eU8z8rVsfrh4uL1yeuz6NJs
6On0WJ2lhclTUwyegpgosgV9+5NOspQI3BgbreJj9b7IJn1FP+J0atKir2yW
F7mZWfpts3S/FHk8oVeTbLnS7pclNaZXcZrEqekrmvhSr1ZxOv8QXZm0NMeR
Ui3ClMLEj9U7opkaqj/iNT1dZOAY2GSPDw6mutBFrieXJh+Cf8Msnx+s5weO
jQd6nJXFAX221HEin9HjP/im9ELnk0XdH5rhSXxl6v7w4GCcZ2trqo7py9ys
svrLeVwsyvGQJnvAC7me+7U8qJfxINFjk9gDrG4kXwxia0sz4BfEaLyIdFks
spyYMqBhFLHNHqs3Q/U6S5KYn4jYvMnGJi+y4DlRe6yextSzTtRFrlM7y/Il
y4J6alY6L5a8bGf0Ptap+mN2RYuOZ/y5ES7l2Theoc8/zPEAc+LXk6xMC8gf
Pt80qDsdqndxMjUBdad5fBk8ZNJOrtd6Ew5lqNFwjUZ/mOamGJIANoc6X8fF
zyZPSBjbA57kWTicWZokrh7ycC+yn+Mk0Y0BudmuiT0jCcVIUSpsu2LJxP49
5obhhj6J0y8K9ULnl+VKPdfpvNRzo/5qcgtuHw6P+AsSUPrg6N7R4eDw3uDe
IT+s1pf+G8h8XuUmVd+bdPDn+DIOXzwhebxUp1e0luHjs3S+oX1UqJeOY+75
RZxq9eJ//ztJTB4+f61pfyexVSdpkaVxVoYvW7zzXdFW01adL0lOZfY6n5ui
FnkIK28QuzKTA5rx8Aj74tXJeYNbr1YmpR2tzqlVPHOqSd0f3hvea7Do8OvB
va8HRw93seipznOTqBdxe25/MrlZbtS7BY2XTS7DV7Q8dqH+qPMpKZ7GRy/i
S6Pe6GS1sFkavnhDxL3RRXZlLzfh87d5rM51HpMcqj+dv3o5eP3q7OXF6Rv6
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
B1/vD6P/A5qDkfzOXwAA

-->

</rfc>
