<?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.15 (Ruby 3.1.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-03" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.13.1 -->
  <front>
    <title>YAML Media Type</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpapi-yaml-mediatypes-03"/>
    <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="2022" month="August" day="05"/>
    <area>Applications and Real-Time</area>
    <workgroup>HTTPAPI</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document registers
the application/yaml media type
and the +yaml structured syntax suffix
on the IANA Media Types registry.</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>
    <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 the relevant media type and structured syntax suffix previously had not 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.</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.</t>
        <t>This document uses the Augmented BNF defined in <xref target="RFC5234"/> and updated
by <xref target="RFC7405"/>.</t>
        <t>The terms  "content", "content negotiation", "resource",
and "user agent"
in this document are to be interpreted as in <xref target="SEMANTICS"/>.</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",
"node", "alias node", "anchor" and "anchor name"
in this document are to be interpreted as in <xref target="YAML"/>.</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 <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"/>,
while percent-encoding those characters 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 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 URL <tt>file.yaml#*foo</tt>
references 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 URL <tt>file.yaml#*document_2</tt> references 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"/></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>
        </dl>
        <!-- HTTP is not an application. Cited first para of abstract of YAML -->
<!-- 1.2 specification. -->

<dl>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>See <xref target="application-yaml-fragment"/></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</li>
          <li>Magic number(s)  N/A</li>
          <li>File extension(s):  yaml, yml</li>
          <li>Macintosh file type code(s):  N/A</li>
        </ul>
        <dl>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>See Authors' Addresses section.</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 Authors' Addresses section.</t>
          </dd>
        </dl>
        <!-- The media type template needs to stand on its own.
-->

<dl>
          <dt>Change controller:</dt>
          <dd>
            <t>IESG</t>
          </dd>
        </dl>
        <!-- There needs to be a change controller.  -->

</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"/></t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>see <xref target="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 in <xref target="application-yaml"/>
do not apply unless explicitly expressed.</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>See <xref target="application-yaml"/></t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>See <xref target="application-yaml"/></t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>httpapi@ietf.org or art@ietf.org</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>See Authors' Addresses section</t>
          </dd>
        </dl>
        <!-- The template needs to stand on its own.
-->

<dl>
          <dt>Change controller:</dt>
          <dd>
            <t>IESG</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>While this document is based on a given YAML version <xref target="YAML"/>,
the media type registration does not imply a specific 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-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[
# 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 JSON:</t>
        <ul spacing="normal">
          <li>multi-document YAML streams;</li>
          <li>non UTF-8 encoding, since YAML supports UTF-16 and UTF-32 in addition to 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 impact on 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 attempts to do that
can infinite-loop traversing the YAML representation graph at some point,
for example:</t>
        <ul spacing="normal">
          <li>when trying to serialize it 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[
x: &x
  y: *x
]]></sourcecode>
        </figure>
        <t>Even if a representaion graph is not cyclic, treating it as a simple tree could lead to improper behaviors
(such as the "billion laughs" problem).</t>
        <figure anchor="example-yaml-1e9lol">
          <name>A billion laughs document</name>
          <sourcecode type="yaml"><![CDATA[
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 all the documents in a stream beforehand.</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:
this can break signature validation.</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 has updated 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 below.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Media Type</th>
            <th align="left">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 has updated 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 below.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Suffix</th>
            <th align="left">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">
              <organization/>
            </author>
            <author fullname="K. Zyp" initials="K." surname="Zyp">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <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="JSON">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker">
              <organization/>
            </author>
            <author fullname="P. Overell" initials="P." surname="Overell">
              <organization/>
            </author>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC7405">
          <front>
            <title>Case-Sensitive String Support in ABNF</title>
            <author fullname="P. Kyzivat" initials="P." surname="Kyzivat">
              <organization/>
            </author>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7405"/>
          <seriesInfo name="DOI" value="10.17487/RFC7405"/>
        </reference>
        <reference anchor="SEMANTICS">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="Roy T. Fielding">
              <organization>Adobe</organization>
            </author>
            <author fullname="Mark Nottingham">
              <organization>Fastly</organization>
            </author>
            <author fullname="Julian Reschke">
              <organization>greenbytes GmbH</organization>
            </author>
            <date day="12" month="September" year="2021"/>
            <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.

 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="Internet-Draft" value="draft-ietf-httpbis-semantics-19"/>
        </reference>
        <reference anchor="URI">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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>
        <reference anchor="MEDIATYPE">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed">
              <organization/>
            </author>
            <author fullname="J. Klensin" initials="J." surname="Klensin">
              <organization/>
            </author>
            <author fullname="T. Hansen" initials="T." surname="Hansen">
              <organization/>
            </author>
            <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>
      </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">
              <organization>Fachhochschule Dortmund</organization>
            </author>
            <author fullname="Glyn Normington">
	 </author>
            <author fullname="Carsten Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="25" month="April" year="2022"/>
            <abstract>
              <t>   JSONPath defines a string syntax for selecting and extracting values
   within a JavaScript Object Notation (JSON, RFC 8259) value.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-jsonpath-base-05"/>
        </reference>
        <reference anchor="RFC7464">
          <front>
            <title>JavaScript Object Notation (JSON) Text Sequences</title>
            <author fullname="N. Williams" initials="N." surname="Williams">
              <organization/>
            </author>
            <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>
    <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[
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 references and alias nodes.</name>
          <sourcecode type="example"><![CDATA[
 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 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) Mueller,
Ben Hutton,
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>
      </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:
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

-->

</rfc>
