<?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.33 (Ruby 3.1.4) -->
<?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-05" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.1 -->
  <front>
    <title>YAML Media Type</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpapi-yaml-mediatypes-05"/>
    <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="May" day="08"/>
    <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 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>
          <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.
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"/>.</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 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>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{{Section 8.1 of JSON}}
   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 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,
which 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 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">
              <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="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>
        <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="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <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">
              <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>
      </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="15" month="April" 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-13"/>
        </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>
    <?line 548?>

<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 references 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,
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:
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

-->

</rfc>
