<?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.34 (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-08" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.2 -->
  <front>
    <title>YAML Media Type</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpapi-yaml-mediatypes-08"/>
    <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="06"/>
    <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>
    <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 543?>

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

-->

</rfc>
