<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 4.0.5) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-27" category="std" consensus="true" submissionType="IETF" updates="8610, 8949" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title>Concise Diagnostic Notation (CDN)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-27"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2026" month="July" day="20"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 121?>

<t>This document formalizes and consolidates the definition of the Concise
Diagnostic Notation (CDN) of the Concise Binary Object Representation
(CBOR), addressing implementer experience.</t>
      <t>Replacing CDN's previous informal descriptions, it updates
RFC 8949, obsoleting its Section 8, and RFC 8610, obsoleting its
Appendix G.</t>
      <t>It also specifies registry-based extension points and uses them
to support text representations such as of epoch-based dates/times and of IP
addresses and prefixes.</t>
      <t><cref anchor="status">(This cref will be removed by the RFC editor:)<br/>
This is the editorial round focusing on editorial cleanup, specifically where that causes moving text around.<br/>
It does not have WG input yet on any renaming decisions (CDN name, b1/t1 name), ABNF cleanup, or Rohan's suggestion to fix the questionable figure in <xref format="counter" target="floating-point-values-float"/>.</cref></t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cbor-wg.github.io/edn-literal/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        cbor Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/edn-literal"/>.</t>
    </note>
  </front>
  <middle>
    <?line 142?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Concise Binary Object Representation (CBOR) (RFC8949) <xref target="STD94"/>
    is a data format whose design goals include the possibility of
    extremely small code size, fairly small message size, and
    extensibility without the need for version negotiation.
In addition to the binary interchange format, the original CBOR specification
    described a text-based "diagnostic notation" (<xref section="6" sectionFormat="of" target="RFC7049"/>, now Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>), in
    order to facilitate conversation about CBOR data items without having
    to resort to binary data.
<xref section="G" sectionFormat="of" target="RFC8610"/> extended this into what also became known as
Extended Diagnostic Notation (EDN), often including <xref section="4.2" sectionFormat="of" target="RFC8742"/> and draft revisions of the present document.
Diagnostic notation is now specified by this document, obsoleting all these
previous descriptions, and is known as Concise Diagnostic Notation (CDN).</t>
      <t>Diagnostic notation syntax is based on JSON, with extensions
for representing CBOR constructs such as binary data and tags.</t>
      <t>The interchange format created by standardizing CDN is not intended to
compete with the actual binary interchange format CBOR, but enables
the use of a shared diagnostic notation in tools for and in documents
about CBOR.
However, between tools for CBOR development and diagnosis, document
generation systems, continuous integration (CI)
environments, configuration files, and user interfaces for viewing and
editing for all these, CDN is often "interchanged".
Therefore, CDN deserves a specification that facilitates
interoperability within this domain and reliable translation to and
from CBOR.
CDN is not designed or intended for general-purpose use in protocol
elements exchanged between systems engaged in processes outside those
listed here.</t>
      <t>​This document consolidates and formalizes the definition of CDN,
providing a formal grammar (see <xref target="grammar"/> and <xref target="app-grammars"/>), and
incorporating small changes based on implementation experience.
It updates <xref target="RFC8949"/> by obsoleting Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
<xref target="RFC8610"/> by obsoleting <xref section="G" sectionFormat="of" target="RFC8610"/>.
It is intended to serve as the single reference target that can be used
in specifications that use CDN.</t>
      <t>It also specifies two registry-based extension points for the
diagnostic notation:
one for additional encoding indicators, and
one for adding application-oriented "prefixed" literal forms.
It uses these registries to add encoding indicators for a more
complete coverage of encoding variation,
and to add prefixed literal forms that enhance CDN with text
representations of various kinds of data items.
Among others, these include epoch-based date/times, IP addresses
and prefixes <xref target="RFC9164"/>, and Concise Resource Identifiers (CRI
<xref target="I-D.ietf-core-href"/>), as well cryptographic hash values computed from byte strings.</t>
      <t>In addition, this document registers a media type identifier
and a content-format for CDN.  This does not
elevate its status as an interchange format, but recognizes that
interaction between tools is often smoother if media types can be used.</t>
      <aside>
        <t>Examples in RFCs often do not use media type identifiers, but
special sourcecode type names that are allocated
in <eref target="https://www.rfc-editor.org/materials/sourcecode-types.txt">https://www.rfc-editor.org/materials/sourcecode-types.txt</eref>.
At the time of writing, this resource lists four sourcecode type
names that can be used in RFCs for including CBOR data items and
CBOR-related languages:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cbor</tt> (which is actually not useful, as CBOR is a binary format
and cannot be used in textual examples in an RFC),</t>
          </li>
          <li>
            <t><tt>cbor-diag</tt> (which is another name for CDN, as is now defined in the
present document),</t>
          </li>
          <li>
            <t><tt>cbor-pretty</tt> (which is a possibly annotated and pretty-printed
hexdump of an encoded CBOR data item, along the lines of the
grammar of <xref target="h-grammar"/>, as used for instance for some of the examples
in <xref section="A.3" sectionFormat="of" target="RFC9290"/>), and</t>
          </li>
          <li>
            <t><tt>cddl</tt> (which is used for the Concise Data Definition Language,
CDDL, see <xref target="terminology"/> below).</t>
          </li>
        </ul>
      </aside>
      <t>Note that CDN is not meant to be the only text-based representation of
CBOR data items.
For instance, <xref target="YAML"/> <xref target="RFC9512"/> is able to represent most CBOR
data items, possibly requiring use of YAML's extension points.
YAML does not provide certain features that can be useful with tools
and documents needing text-based representations of CBOR data items
(such as embedded CBOR or encoding indicators),
but it does provide a host of other features that CDN does not provide
such as anchor/alias data sharing, at a cost of higher implementation
and learning complexity.</t>
      <section anchor="structure-of-this-document">
        <name>Structure of This Document</name>
        <t><xref target="diagnostic-notation"/> of this document
defines CDN.
After introductory material, <xref target="app-lit"/> further
illustrates the concept of prefixed literals by
defining a number of them in app-extensions.
<xref target="encoding-indicators"/> describes syntax that can be interpreted by a
diagnostic implementation to take note/take control of which of
possibly several encoding variants is in use for a data item; this
syntax always includes an underscore ("<tt>_</tt>") and therefore is visually
easy to ignore.
<xref target="cdn-tags"/> defines mechanisms
for dealing with unknown prefixes as well as
deliberately elided information.
<xref target="grammars"/> gives the formal syntax of CDN in ABNF.
This is followed by the conventional sections for
<xref format="title" target="sec-iana"/> (<xref format="counter" target="sec-iana"/>),
<xref format="title" target="seccons"/> (<xref format="counter" target="seccons"/>),
and References (<xref format="counter" target="sec-normative-references"/>, <xref format="counter" target="sec-informative-references"/>).
An informational comparison of CDN with CDDL follows in
<xref target="cdn-and-cddl"/>.</t>
      </section>
      <section anchor="terminology">
        <name>Terminology and Conventions</name>
        <t>The term "ABNF" in this document refers to the
language defined in <xref target="STD68"/> as extended in <xref target="RFC7405"/>, where the
"characters" of Section <xref target="RFC5234" section="2.3" sectionFormat="bare"/> of RFC 5234 <xref target="STD68"/> are Unicode scalar
values.
Where names for ABNF rules are used in the text, they are shown in
<tt>typewriter</tt> font (not distinguishable in the plaintext rendition of
this document).
Brief snippets of grammar may also be given in the text as I-Regexp regular
expressions <xref target="RFC9485"/>.</t>
        <t>The term "CDDL" (Concise Data Definition Language) refers to the data
definition language defined in
<xref target="RFC8610"/> and its registered extensions (such as those documented in
<xref target="RFC9165"/>, <xref target="RFC9741"/>, and <xref target="RFC9682"/>).
Additional information about the relationship between the two
languages CDN and CDDL is captured in <xref target="cdn-and-cddl"/>.</t>
        <t>Examples sometimes need to be quoted in the text, in particular in
cases where the typewriter font used for example text cannot be
distinguished in the plaintext rendition of this document.
ASCII quotes, however, are already taken: <tt>true</tt>, <tt>"true"</tt>, <tt>'true'</tt>,
and <tt>`true`</tt> are all different literals in CDN and should not be
confused.
Therefore, a different quoting convention as in »<tt>true</tt>« or »<tt>"true"</tt>«
is used for examples in the text where this is needed to remain
unambiguous.</t>
        <!-- text adapted from RFC 9581 -->
<t>Superscript notation denotes exponentiation.
For example, 2 to the power of 64+1 is notated: 2<sup>64+1</sup>.
In the plain-text rendition of this specification, superscript
notation is not available and exponentiation is therefore rendered by
the surrogate notation seen here in the plain-text rendition.</t>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in <xref target="BCP14"/> (<xref target="RFC2119"/>) (<xref target="RFC8174"/>) when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="non-objectives-of-this-document">
        <name>(Non-)Objectives of this Document</name>
        <t>Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> states the objective of defining a
common human-readable diagnostic notation with CBOR.
In particular, it states:</t>
        <blockquote>
          <t>All actual interchange always happens in the binary format.</t>
        </blockquote>
        <section anchor="for-humans">
          <name>For Humans</name>
          <t>One important application of CDN is the notation of CBOR data for
humans: in specifications, on whiteboards, and for entering test data.
A number of features, such as comments inside prefixed string literals, are mainly
useful for people-to-people communication via CDN.
Programs also often output CDN for diagnostic purposes, such as in
error messages or to enable comparison (including generation of diffs
via tools) with test data.</t>
        </section>
        <section anchor="determinism">
          <name>Determinism?</name>
          <t>For comparison with test data, it is often useful if different
implementations generate the same (or similar) output for the same
CBOR data items.
This is comparable to the objectives of deterministic serialization
for CBOR data items themselves (Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).
However, there are even more representation variants in CDN than in
binary CBOR, and there is little point in specifically endorsing a
single variant as "deterministic" when other variants may be more
useful for human understanding, e.g., the <tt>&lt;&lt; &gt;&gt;</tt> notation as
opposed to, say, hexadecimal <tt>h''</tt> notation;
a CDN generator may have quite a few options
that control what presentation variant is most desirable for the
application that it is being used for.</t>
          <t>Because of this, a deterministic representation is not defined for
CDN.
More generally speaking, there is no expectation for "roundtripping":
Converting CDN to binary CBOR and back to CDN will generally not achieve exactly
the same result as the original input CDN.
This possibly
was created by humans or by a different CDN generator and may contain
presentation information that is not represented in the binary CBOR.</t>
        </section>
        <section anchor="basic">
          <name>Basic Output Format</name>
          <t>However, there is a certain expectation that CDN generators can be
configured to some basic output format, which:</t>
          <ul spacing="normal">
            <li>
              <t>looks like JSON where that is possible;</t>
            </li>
            <li>
              <t>inserts encoding indicators, if any, only where the binary form differs from
Preferred Serialization (Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>);</t>
            </li>
            <li>
              <t>uses hexadecimal representation (<tt>h''</tt>) for byte strings, not
<tt>b64''</tt> or embedded CBOR (<tt>&lt;&lt;&gt;&gt;</tt>);</t>
            </li>
            <li>
              <t>does not generate elaborate blank space (newlines, indentation) for
pretty-printing, but does use common blank spaces such as after <tt>,</tt>
and <tt>:</tt>.</t>
            </li>
          </ul>
          <t>See <xref target="repertoire"/> for more considerations about the character
repertoire used for CDN source text.</t>
          <t>Additional features such as ensuring
deterministic map ordering (Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) on output,
or even deviating from the basic
configuration in some systematic way, can further assist in comparing
test data.
Information obtained from a CDDL model can help in choosing
prefixed literals or specific string representations such
as embedded CBOR or <tt>b64''</tt> in the appropriate places.</t>
        </section>
        <section anchor="evolution">
          <name>Evolution</name>
          <t>Diagnostic notation was initially designed for interchange situations where backward compatibility was considered less critical than in binary CBOR interchanges. This allowed for quite freely making extensions in <xref section="G" sectionFormat="of" target="RFC8610"/> and <xref section="4.2" sectionFormat="of" target="RFC8742"/>. However, with increased interchange between CBOR-related tools, this unrestricted evolution is less desirable.</t>
          <t>The present specification supports a more controlled path of evolving CDN through two well-defined extension points: one general (<xref target="app-lit"/>) and one specific to diagnostic processing of encoding variants (<xref target="encoding-indicators"/>).</t>
          <t>The present specification makes two changes to the <xref target="RFC8610"/> extensions that are not entirely backward compatible. These changes are detailed in <xref target="comment-discussion"/> and in <!--concat-removed--> the aside at the end of <xref target="strings"/>. Some syntax from the original diagnostic notation is being deprecated (<xref target="ei-string"/>) and replaced (<xref target="ilxs"/>). These changes are deemed acceptable now because the updated features were originally introduced under more permissive conditions. With CDN now more rigidly defined and focusing evolution on the new extension points, such changes are no longer foreseen.</t>
        </section>
        <section anchor="repertoire">
          <name>Character Repertoire of Source</name>
          <t>Similar to JSON, CDN is designed to enable representing all CBOR data
items using a source character repertoire just containing printable
ASCII characters (<tt>%x20-7e</tt> in ABNF) and newlines.
However, if appropriate, CDN can also make full use of larger Unicode
repertoires.</t>
          <t>CDN generators may provide configuration to consistently select either
the unescaped (directly readable) or an escaped (ASCII equivalent) form of
characters in string literals; the latter allows CDN to be used when the
diagnostic value of fully escaped characters may be desired or in
environments where non-ASCII characters may not enjoy full data
transparency.
Similar to JSON, CDN is designed to allow a simple tool to convert any
CDN (including CDN with app-extensions unknown to the tool)
into a fully escaped (printable ASCII and newlines only) form, as well
as to inversely recover unescaped characters for all escapes where
this is possible or for certain subsets of the characters (such as
Unicode categories L, M, N, P, S, plus Zs or just ASCII space).</t>
          <t>Special considerations apply to newlines in the source.
On some platforms, a CARRIAGE RETURN character (U+000D or CR, often seen
escaped as "\r" in many programming languages) is always
added in front of a LINE FEED (U+000A or LF) to represent a newline
(which are then referred to as CRLF).
On other platforms, carriage returns are not used at line breaks at
all, so a newline is just an LF.
(Platforms that use just a CARRIAGE RETURN by itself to signify an end
of line are no longer relevant and the files they produce are out of
scope for this document.)</t>
          <t>Files are often freely converted between these two newline
representations, including by source code revision control systems.
To ensure that platforms will generate the same bytes in the CBOR data
items created from input in either conversion state, CDN <bcp14>MUST</bcp14> create
the same processing result independent of which newline representation
is used by its input.</t>
          <t>To deal with this variability in platform presentation of newlines,
Unicode CARRIAGE RETURN characters that exist in the input unescaped are
ignored as if they were not in the input wherever they appear.
Specifically, any carriage return characters that may be present in a
CDN (text or byte) string literal are not copied into the resulting string.
If a carriage return is needed in a CBOR string data item, it can be
added explicitly, for instance by using the escaped form <tt>\r</tt> in
single-quoted or double-quoted strings.</t>
        </section>
      </section>
    </section>
    <section anchor="diagnostic-notation">
      <name>Concise Diagnostic Notation (CDN)</name>
      <t>CBOR is a binary interchange format.  To facilitate documentation and
debugging, and in particular to facilitate communication between
entities cooperating in debugging, this document defines a simple
human-readable diagnostic notation.  All actual interchange always
happens in the binary format.</t>
      <t>Note that diagnostic notation truly was designed as a diagnostic
format; it originally was not meant to be parsed.
Therefore, no formal definition (as in ABNF) was given in the original
documents.
Recognizing that formal grammars can aid interoperation of tools and
usability of documents that employ CDN, <xref target="grammars"/> now provides ABNF
definitions.</t>
      <t>CDN is a true superset of JSON as it is defined in <xref target="STD90"/> in
conjunction with <xref target="RFC7493"/> (that is, any interoperable <xref target="RFC7493"/> JSON
text also is a CDN text), extending it both to cover the greater
expressiveness of CBOR and to increase its usability.</t>
      <t>CDN borrows the JSON syntax for numbers (integer and
floating-point, <xref target="numbers"/>), certain simple values (<xref target="simple-values"/>),
UTF-8 <xref target="STD63"/> text
strings, arrays, and maps (maps are called objects in JSON; the
diagnostic notation extends JSON here by allowing any data item in the
map key position).</t>
      <!-- ## Prefixed Literals {#app-lit} -->

<t>CDN provides <em>literals</em> that represent CBOR data items textually.
Many of the forms of literals provided are predefined by this
document, but it also defines an extension point that enables defining
additional <em>application-oriented extension literals</em>.
These are also known as <em>prefixed literals</em>, as they start
with a <em>prefix</em> that identifies the application-oriented extension and
possibly a specific variant of that.
<xref target="app-lit"/> discusses these in more details and defines a number of
app-extensions that are included with this specification.</t>
      <t>As CDN is used for truly diagnostic purposes, its implementations <bcp14>MAY</bcp14>
support generation and possibly ingestion of CDN for CBOR data items
that are well-formed but not valid.
It is <bcp14>RECOMMENDED</bcp14> that an implementation enables such usage only
explicitly by configuration (such as an API or CLI flag).
Validity of CBOR data items is discussed in Section <xref target="RFC8949" section="5.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
with basic validity discussed in Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
tag validity discussed in Section <xref target="RFC8949" section="5.3.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
Tag validity is more likely a subject for individual
app-extensions, while the two cases of basic validity
(for text strings and for maps) are addressed in Sections
<xref format="counter" target="text-validity"/> and <xref format="counter" target="map-validity"/> under the heading
of <em>validity</em>.</t>
      <t>The rest of this section provides an overview over specific features
of CDN, starting with certain common syntactical features and then
going through kinds of CBOR data items roughly in the order of CBOR major
types.
Any additional detailed syntax discussion needed has been deferred to
<xref target="grammar"/>.</t>
      <t>Additional information about implementation and use of CDN is
continuously being collected by the community in <xref target="CDN-WIKI"/>.</t>
      <section anchor="comments">
        <name>Comments</name>
        <t>For presentation to humans, CDN text may benefit from comments.
JSON famously does not provide for comments, and the original
diagnostic notation in <xref section="6" sectionFormat="of" target="RFC7049"/> inherited this property.</t>
        <t>CDN provides two comment syntaxes, which can be used where the
syntax allows blank space (outside of constructs such as numbers,
string literals, etc.):</t>
        <ul spacing="normal">
          <li>
            <t>inline comments, delimited by slashes ("<tt>/</tt>") or by C-style "<tt>/*</tt>"
and "<tt>*/</tt>":  </t>
            <t>
In a position that allows blank space, each of the following is
considered blank space (and thus effectively a comment):  </t>
            <ul spacing="normal">
              <li>
                <t>any text that starts with a slash followed by a character that is not a
star or a slash, up to another slash, or</t>
              </li>
              <li>
                <t>any text that starts with "<tt>/*</tt>" up to and including the next following "<tt>*/</tt>"</t>
              </li>
            </ul>
          </li>
          <li>
            <t>end-of-line comments, delimited by "<tt>#</tt>" or "<tt>//</tt>" and an end of line (LINE
FEED, U+000A):  </t>
            <t>
In a position that allows blank space, any text starting with "<tt>#</tt>"
or "<tt>//</tt>" and ending with and including the end of the line is
considered blank space (and thus effectively a comment).</t>
          </li>
        </ul>
        <t>Comments can be used to annotate a CBOR structure as in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
/grasp-message/ [/M_DISCOVERY/ 1, /session-id/ 10584416,
                 /objective/ [/objective-name/ "opsonize",
                              /D, N, S/ 7, /loop-count/ 105]]
]]></sourcecode>
        <t>This reduces to <tt>[1, 10584416, ["opsonize", 7, 105]]</tt>.</t>
        <t>Another example, combining
the use of inline and end-of-line comments:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{
 /kty/ 1 : 4, # Symmetric
 /alg/ 3 : 5, # HMAC 256-256
  /k/ -1 : h'6684523ab17337f173500e5728c628547cb37df
             e68449c65f885d1b73b49eae1'
}
]]></sourcecode>
        <t>This reduces to <tt>{1: 4, 3: 5, -1:
h'6684523AB17337F173500E5728C628547CB37DFE68449C65F885D1B73B49EAE1'}</tt>.</t>
        <t>A CDN file used for configuration might look like this (employing
'//' end of line comments throughout and an ornamental C-Style comment at the start):</t>
        <sourcecode type="cbor-diag"><![CDATA[
/* ### MyApp Configuration
 * John Example, 2026-06-09
 */
{
  // Top-level config for the app
  "appName": "MyApp", // short name shown in UI
  "version": "1.2.0",
  ...: ...
}
]]></sourcecode>
        <aside>
          <t>Note that app-extensions can define their own
internal comment syntaxes for text inside strings, which may or may
not mimic the overall comment syntax of CDN.
The h'' syntax (<xref target="h-grammar"/>), which the framework for app-extensions
was designed to include as an instance, provides an
equivalent to the overall comment syntax inside its text strings.
Similarly, b64'' (<xref target="b64-grammar"/>) provides a subset of that limited to
"<tt>#</tt>" end-of-line comments (the slash character "<tt>/</tt>" is used in the
alphabet in classic base64 encoding).
None of the other app-extensions supplied in this
specification provides for such a kind of internal comment syntax.</t>
        </aside>
        <section anchor="comment-discussion">
          <name>Discussion</name>
          <t><xref section="G.6" sectionFormat="of" target="RFC8610"/> introduced comments into the diagnostic
notation syntax, limited to inline comments using a bare "<tt>/</tt>" as the
comment delimiter.
It however also hinted at the potential desire to add
end-of-line comments, mentioning both "<tt>//</tt>" and "<tt>#</tt>" as start delimiters.</t>
          <t>The present specification adds both, as well as C-style inline
comments ("<tt>/*</tt>" and "<tt>*/</tt>" delimiters).</t>
          <t>This introduces a backwards-incompatible change, restricting
slash-delimited comments that were allowed by <xref section="G.6" sectionFormat="of" target="RFC8610"/>
in two ways:</t>
          <ul spacing="normal">
            <li>
              <t>Inline comments no longer can be empty: The construct "<tt>//</tt>" that was
an empty comment in <xref section="G.6" sectionFormat="of" target="RFC8610"/> is now used instead to introduce an
end-of-line comment.
(Note that "<tt>//</tt>" still can be used in what is visually "within" a
slash-delimited comment like in the second example below; its first
slash actually ends the current comment and the second slash starts
a new one.)</t>
            </li>
            <li>
              <t>Enabling the use of C-style inline comments can extend the scope of
what previously were parsed as slash-delimited comments: for instance, "<tt>/*foo/</tt>"
was a complete comment in <xref section="G.6" sectionFormat="of" target="RFC8610"/> and now is the beginning of a
C-style comment that goes on up to a "<tt>*/</tt>".</t>
            </li>
          </ul>
          <t>As an example for what is enabled by this change, the introduction of C-style inline comments enables a
comment explaining a COSE algorithm identifier, as in</t>
          <sourcecode type="cbor-diag"><![CDATA[
4 /* HMAC 256/64 */
]]></sourcecode>
          <t>instead of the previously conventional, but often less familiar</t>
          <sourcecode type="cbor-diag"><![CDATA[
4 / HMAC 256//64 /
]]></sourcecode>
        </section>
      </section>
      <section anchor="numbers">
        <name>Numbers</name>
        <!--
## Hexadecimal, Octal, and Binary Numbers {#hexadecimal-octal-and-binary-numbers}
 -->

<t>In addition to JSON's decimal number literals, CDN provides hexadecimal, octal,
and binary number literals in the usual C-language notation (<tt>0x</tt>, <tt>0o</tt> prefix only, and <tt>0b</tt>,
respectively).</t>
        <t>CBOR distinguishes two basic kinds of numbers: integers and floating
point values.
Numbers composed only of digits (of the respective base) are
interpreted as CBOR integers (major type 0/1, or where the number
cannot be represented in this way, major type 6 with tag 2/3).
A leading "<tt>+</tt>" sign is a no-op, and a leading "<tt>-</tt>" sign inverts the
sign of the number.
So <tt>0</tt>, <tt>000</tt>, <tt>+0</tt> all represent the same integer zero, as does <tt>-0</tt>.
Similarly,
<tt>1</tt>, <tt>001</tt>, <tt>+1</tt> and <tt>+0001</tt> all stand for the same positive integer one, and
<tt>-1</tt> and <tt>-0001</tt> both designate the same negative integer minus one.</t>
        <t>Using a decimal point (<tt>.</tt>) and/or an exponent (<tt>e</tt> for decimal, <tt>p</tt>
for hexadecimal) turns the number into a floating point number (part
of major type 7) instead, irrespective of whether it is an integral
number mathematically.
Note that, in floating point numbers, <tt>0.0</tt> is not the same number as
<tt>-0.0</tt>, even if they are mathematically equal.</t>
        <t>In <xref target="tab-numbers"/>, all the items on a row are the same number (also
shown in CBOR, hexadecimally), but they are distinct from items in a
different row.</t>
        <table anchor="tab-numbers">
          <name>Example Sets of Equivalent Notations for Some Numbers</name>
          <thead>
            <tr>
              <th align="left">CDN</th>
              <th align="left">CBOR hex</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>4711</tt>, <tt>0x1267</tt>, <tt>0o11147</tt>, <tt>0b1001001100111</tt></td>
              <td align="left">
                <tt>19 1267</tt> # uint</td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.5</tt>, <tt>0.15e1</tt>, <tt>15e-1</tt>, <tt>0x1.8p0</tt>, <tt>0x18p-4</tt></td>
              <td align="left">
                <tt>F9 3E00</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0</tt>, <tt>+0</tt>, <tt>-0</tt></td>
              <td align="left">
                <tt>00     </tt> # uint</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0.0</tt>, <tt>+0.0</tt></td>
              <td align="left">
                <tt>F9 0000</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>-0.0</tt></td>
              <td align="left">
                <tt>F9 8000</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>Infinity</tt></td>
              <td align="left">
                <tt>F9 7C00</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>-Infinity</tt></td>
              <td align="left">
                <tt>F9 FC00</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>NaN</tt></td>
              <td align="left">
                <tt>F9 7E00</tt> # float16</td>
            </tr>
          </tbody>
        </table>
        <t>The non-finite floating-point values <tt>Infinity</tt>, <tt>-Infinity</tt>, and <tt>NaN</tt> are
written exactly as in this sentence (this is also a way they can be
written in JavaScript, although JSON does not allow them).
<tt>NaN</tt> in CDN stands for the NaN value with a zero sign bit and an all-zero
significand except for a set quiet bit; this is represented as
<tt>F9 7E 00</tt> in CBOR Preferred Serialization.</t>
        <aside>
          <t><xref target="tab-float-encoding"/> shows how the floating point numbers 1.1 and 1.5
as well as these three non-finite values are encoded, both in preferred serialization (Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) and when
encoding indicators (please see <xref target="encoding-indicators"/>) are given.</t>
          <!-- $ edn-abnf -e '1.5, 1.5_1, 1.5_2, 1.5_3' -tcbor | cborseq2pretty.rb
 -->

  <table anchor="tab-float-encoding">
            <name>Encoding indicators on floating point values</name>
            <thead>
              <tr>
                <th align="left">CDN</th>
                <th align="left">CBOR hex</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>1.1</tt></td>
                <td align="left">
                  <tt>fb 3ff199999999999a</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>1.1_1</tt>, <tt>1.1_2</tt></td>
                <td align="left">(error)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>1.1_3</tt></td>
                <td align="left">
                  <tt>fb 3ff199999999999a</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>1.5</tt>, <tt>1.5_1</tt></td>
                <td align="left">
                  <tt>f9 3e00</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>1.5_2</tt></td>
                <td align="left">
                  <tt>fa 3fc00000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>1.5_3</tt></td>
                <td align="left">
                  <tt>fb 3ff8000000000000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>Infinity</tt>, <tt>Infinity_1</tt></td>
                <td align="left">
                  <tt>f9 7c00</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>Infinity_2</tt></td>
                <td align="left">
                  <tt>fa 7f800000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>Infinity_3</tt></td>
                <td align="left">
                  <tt>fb 7ff0000000000000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>-Infinity</tt>, <tt>-Infinity_1</tt></td>
                <td align="left">
                  <tt>f9 fc00</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>-Infinity_2</tt></td>
                <td align="left">
                  <tt>fa ff800000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>-Infinity_3</tt></td>
                <td align="left">
                  <tt>fb fff0000000000000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>NaN</tt>, <tt>NaN_1</tt></td>
                <td align="left">
                  <tt>f9 7e00</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>NaN_2</tt></td>
                <td align="left">
                  <tt>fa 7fc00000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>NaN_3</tt></td>
                <td align="left">
                  <tt>fb 7ff8000000000000</tt></td>
              </tr>
            </tbody>
          </table>
        </aside>
        <!--decnumber-->
<t>See items <xref format="counter" target="decnumber"/> to <xref format="counter" target="intnumber"/> in the bullet list at the end of <xref target="grammar"/> for additional details of the CDN number syntax.</t>
        <t>(Note that literals for further number formats, e.g., for representing
rational numbers as fractions, or for other NaN values than the one called <tt>NaN</tt>, can
be added as app-extensions.
Background information beyond that in <xref target="STD94"/> about the representation
of numbers in CBOR can be found in the informational document
<xref target="I-D.bormann-cbor-numbers"/>.)</t>
      </section>
      <section anchor="strings">
        <name>Strings</name>
        <t>CBOR distinguishes two kinds of strings: text strings (the bytes in
the string constitute UTF-8 <xref target="STD63"/> text, major type 3), and byte strings
(CBOR does not further characterize the bytes that constitute the
string, major type 2).</t>
        <t>(UTF-8) text strings can be directly represented (unprefixed) in CDN either as double-quoted (<xref target="dq-lit"/>)
or as raw strings (<xref target="raw-lit"/>), while byte strings can be represented as
single-quoted strings (<xref target="sq-lit"/>).
The latter is useful for byte strings carrying
bytes that can be meaningfully notated as UTF-8 text.</t>
        <t>Many strings are best notated as prefixed literals, which may
provide detailed access to the bits within those bytes (see
<xref target="encoded-byte-strings"/>).
Using an app-extension
prefix, prefixed literals can be constructed out of single-quoted strings and
raw strings, as well as sequence literals (cf. <xref target="app-lit"/>).</t>
        <aside>
          <t anchor="concat-removed">Before prefixed literals were turned into a general extension point for diagnostic notation, <xref section="G.4" sectionFormat="of" target="RFC8610"/> added a syntax for concatenating strings by just
juxtaposing them.
This syntax was not widely implemented and is problematic in the
presence of optional commas; it is now entirely removed from CDN and replaced by app-extensions such as <xref target="t1b1"/>.</t>
        </aside>
        <section anchor="dq-lit">
          <name>Double-Quoted String Literals</name>
          <t>CDN enables notating text strings in a form compatible to that of notating text
strings in JSON (i.e., as a double-quoted string literal), with a
number of usability enhancements.
JSON allows no control characters in text-string literals;
if needed, they can be specified using escapes such as <tt>\t</tt> or <tt>\r</tt>.
This also applies to CDN, and all escaping rules apply as in JSON,
with a single exception:
In CDN, string literals additionally can contain newlines (LINEFEED
U+000A), which are copied into the resulting string like other
characters in the string literal.
To deal with variability in platform presentation of newlines, any
carriage return characters (U+000D) that may be present in the CDN
string literal are not copied into the resulting string (see <xref target="repertoire"/>).</t>
          <t>JSON's escape scheme for characters that are not on Unicode's basic
multilingual plane (BMP) is cumbersome (see Section <xref target="RFC8259" section="7" sectionFormat="bare"/> of RFC 8259 <xref target="STD90"/>).
CDN keeps it, but also adds the syntax <tt>\u{NNN}</tt> where NNN is the
Unicode scalar value as a hexadecimal number.
This means the following are equivalent (the first <tt>o</tt> is escaped as
<tt>\u{6f}</tt> for no particular reason):</t>
          <sourcecode type="cbor-diag"><![CDATA[
"D\u{6f}mino's \u{1F073} + \u{2318}"   # \u{}-escape 3 chars
"D\u006Fmino's \uD83C\uDC73 + \u2318"  # escape JSON-like
"Domino's 🁳 + ⌘"                       # unescaped
]]></sourcecode>
        </section>
        <section anchor="sq-lit">
          <name>Single-Quoted String Literals</name>
          <t>Analogously to text-string literals delimited by double quotes, CDN
allows the use of single quotes (without a prefix) to express
byte-string literals with UTF-8 text; for instance, the following are
equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
'hello world'
h'68656c6c6f20776f726c64'
]]></sourcecode>
          <t>The escaping rules of JSON strings are applied equivalently for
text-based byte-string literals, e.g., <tt>\\</tt> stands for a single
backslash and <tt>\'</tt> stands for a single quote.
However, to facilitate parsing, in single-quoted strings CDN excludes
certain escaping mechanisms available for double-quoted strings:</t>
          <ul spacing="normal">
            <li>
              <t><tt>\/</tt> is an escape in JSON that is available for double-quoted CDN
text strings as
well to ensure all JSON texts are CDN literals.
Since CDN's single-quoted strings do not occur in JSON, this legacy
compatibility feature is not available for them.</t>
            </li>
            <li>
              <t><tt>\u</tt>-based escapes are not available for characters in the range
from U+0020 through U+007E (essentially, printable ASCII).</t>
            </li>
          </ul>
          <t>All other escaping mechanisms that are available in double-quoted
string literals are available in single-quoted string literals.</t>
          <t>Single-quoted string literals can occur unprefixed and stand for the
byte string that encodes its text string value (the "content"), or be
prefixed by what looks like an app-extension prefix (see
<xref target="app-lit"/>).</t>
          <t>In a prefixed string literal, the text content of the single-quoted
string literal is not used directly as a byte string, but is further
processed in a way that is defined by the meaning given to the prefix.
Depending on the prefix, the result of that processing can, but often
is not, a byte string value.</t>
          <t>Prefixed string literals (whether single-quoted after the
prefix or a raw string (<xref target="raw-lit"/>)) are used for
prefixed literals (see <xref target="app-lit"/>, such as base-encoded byte string literals (see <xref target="encoded-byte-strings"/>).
<!-- XXX -->
(Additional kinds of base-encoded string literals can be defined as
prefixed literals by registering their prefixes;
there is no fundamental difference between the original two predefined
base-encoded string literal prefixes (<xref target="encoded-byte-strings"/>: <tt>h</tt>, <tt>b64</tt>) and any such potential
future extension literal prefixes; for simplicity of expression, both
cases are referred to as "prefixed literals".)</t>
        </section>
        <section anchor="raw-lit">
          <name>Raw String Literals</name>
          <t>Both double-quoted and single-quoted string literals handle
backslashes in a special way.
For string data items that employ backslashes themselves, possibly with additional layers
of processing giving this "escaping" mechanism specific application semantics, this can
lead to an exponential duplication of backslashes that has informally
been described as "quoting hell".</t>
          <t>CDN therefore also allows text strings to be notated as raw string
literals, which do not perform any special processing on backslashes,
i.e., treat
them as raw string content like any other characters.
Instead, data transparency is provided by enclosing the entire string content in starting
and ending delimiters built as a sequence of one or more backquote
(»<tt>`</tt>«, U+0060 GRAVE ACCENT) characters.</t>
          <t>For example, the string content »<tt>[^ \t\n\r"'`]</tt>«, an I-Regexp character class
that excludes blank space and quoting characters, can be notated as:</t>
          <artwork><![CDATA[
 ``[^ \t\n\r"'`]``
]]></artwork>
          <t>instead of</t>
          <artwork><![CDATA[
 "[^ \\t\\n\\r\"'`]"
]]></artwork>
          <t>By using more backquotes for each of the outer delimiters than the longest
sequence of backquotes that can be found in the string, internal
backquotes do not prematurely end the string literal.
An example for a raw string that contains a double backquote and
therefore is notated starting and ending with a triple backquote:</t>
          <sourcecode type="cbor-diag"><![CDATA[
```To emulate typographic quotes, sometimes double backward and
forward single quotes are used, as in ``text.''
```
]]></sourcecode>
          <t>This mechanism is easy to use for the large majority of cases.
However, without additional rules:</t>
          <ul spacing="normal">
            <li>
              <t>raw strings could not be used for empty string data items, which
therefore need to be notated using double- or single-quoted strings.
(Obviously, there is no need to escape the content of empty strings,
so this should not be a problem.)</t>
            </li>
            <li>
              <t>raw strings could not be used for string
data items that start or end with backquotes, as these would
amalgamate with the start and end delimiters.</t>
            </li>
          </ul>
          <t>To address these cases (predominantly the latter), two additional
rules are added to perform after processing the backquotes used as
delimiters:</t>
          <ul spacing="normal">
            <li>
              <t>any single newline (LF or CRLF, see <xref target="repertoire"/>) at the start of
the inner string is removed to
yield the string content.
As a result:  </t>
              <artwork><![CDATA[
 ```a```
]]></artwork>
              <t>
can also be expressed as  </t>
              <artwork><![CDATA[
 ```
 a```
]]></artwork>
              <t>
In addition to enabling leading backquotes in raw strings, this can
 be very useful for documentation strings etc.  </t>
              <t>
This rule also allows notating »<tt>``text''</tt>« as:  </t>
              <artwork><![CDATA[
```
``text''```
]]></artwork>
            </li>
            <li>
              <t>if the first rule does not apply, but the inner string starts
with a space character as well as ends with one, exactly one single space
character starting the inner string together with exactly one single space
character ending the inner string are removed to yield the string
content.  </t>
              <t>
This allows notating »<tt>a = ``foo``</tt>« as:  </t>
              <artwork><![CDATA[
``` a = ``foo`` ```
]]></artwork>
            </li>
          </ul>
          <t>If neither of these rules apply, the inner string between the raw
delimiters is used as the raw string unchanged.</t>
          <t>(The examples given here are minimal in that they show how the
additional rules work; more complex examples would be necessary to
provide additional motivation why this is a good way to handle the
various cases.)</t>
        </section>
        <section anchor="embedded">
          <name>CBOR Sequence Literals</name>
          <t>In diagnostic notation, a sequence of zero or more CBOR data item literals can
be enclosed in <tt>&lt;&lt;</tt> and <tt>&gt;&gt;</tt> and separated by comma or blank space, optionally prefixed by an
app-extension prefix; this specification speaks of <em>sequence literals</em>.
CDN mainly deals with individual data items, not with CBOR sequences
<xref target="RFC8742"/>, so the CBOR sequence represented by the sequence literal needs
to be further processed to obtain the value of the literal.</t>
          <t>Prefixed sequence literals refer to the app-extension (see
<xref target="app-lit"/>) identified by the prefix and apply the extension to its
sequence content, resulting in a single data item.
This data item may be a string or not (always), depending on
the definition of the app-extension.</t>
          <t>An unprefixed sequence literal applies CBOR encoding to the
data items in its content, taken as a CBOR sequence.
The value of the
literal thus is a byte string with the encoded content; this is
commonly referred to as
<em>embedded CBOR</em>.
For instance, each pair of columns in the following are equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
   <<1>>              h'01'
   <<1, 2>>           h'0102'
   <<"hello", null>>  h'65 68656c6c6f f6'
   <<>>               h''
]]></sourcecode>
          <t>A diagnostic implementation is expected to honor encoding indicators
(please see <xref target="encoding-indicators"/>)
on the individual items in the supplied sequence before assembling
them into an encoded CBOR sequence.
For instance, each pair of columns in the following are equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
   <<1_1>>              h'190001'
   <<1_0, 2_2>>         h'1801 1a00000002'
   <<"hello"_0, null>>  h'7805 68656c6c6f f6'
]]></sourcecode>
          <t>For prefixed sequence literals, the processing of arguments that use
specific encoding variants can be defined by the app-extension being
used.
See <xref target="ilxs"/> for an example of where this is done.
Encoding indicators on the arguments are ignored if the app-extension
does not define special handling of encoding variants.</t>
        </section>
        <section anchor="text-validity">
          <name>Validity of Text Strings</name>
          <t>To be valid CBOR, Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> requires that text
strings are byte sequences in UTF-8 <xref target="STD63"/> form.
CDN provides several ways to construct such byte strings (in
particular, see also <xref target="t1b1"/>).
These mechanisms might operate on subsequences that do not themselves
constitute UTF-8, e.g., by building larger sequences out of
concatenating the subsequences; for validity of a text string
resulting from these mechanisms it is only of importance that the
result is UTF-8.
Double-quoted, single-quoted, and raw string literals have been defined
such that they lead to byte sequences that are UTF-8: the source
language of CDN is UTF-8, and all escaping mechanisms lead only to
adding further UTF-8 characters.
Only app-extensions (invoked in prefixed literals) can
generate non-UTF-8 byte sequences.</t>
          <t>As discussed at the start of <xref target="diagnostic-notation"/>, CDN
implementations <bcp14>MAY</bcp14> support generation and possibly ingestion of CDN
for CBOR data items that are well-formed but not valid; when this is
enabled, such implementations <bcp14>MAY</bcp14> relax the requirement on text
strings to be valid UTF-8.</t>
          <t>CBOR has no requirements for its text strings except for conformance to
<xref target="STD63"/>.
The same applies to CDN and its source language.
No additional Unicode processing or validation such as normalization
or checking whether a scalar value is actually assigned is foreseen by
CDN, particularly not any processing that is dependent on a specific
Unicode version.
Such processing, if offered, <bcp14>MUST NOT</bcp14> get in the way of processing the
data item represented in CDN (i.e., it may be appropriate to issue
warnings but not to error out or to generate output that does not match
the input at the UTF-8 level).</t>
        </section>
      </section>
      <section anchor="arrays-and-maps">
        <name>Arrays and Maps</name>
        <t>CDN borrows the JSON syntax for arrays and maps.
(Maps are called objects in JSON.)</t>
        <t>For maps, CDN extends the JSON syntax by allowing any data item in the
map key position (before the colon).</t>
        <section anchor="mandatory-separators-optional-terminators">
          <name>Mandatory Separators, Optional Terminators</name>
          <t>JSON requires the use of a comma as a separator character between
the elements of an array as well as between the members (key/value
pairs) of a map.
(These commas also were required in the original diagnostic
notation defined in <xref target="STD94"/> and <xref target="RFC8610"/>.)
The separator commas are now optional in the places where CDN syntax
allows commas; however, where no comma is used in a separator
position, there must be blank space (composed of at least one space, newline, and/or
comment) instead.
(Stylistically, leaving out the commas is more idiomatic when they
occur at line breaks, which provide the blank space.)</t>
          <t>In addition, CDN also allows, but does not require, a trailing comma before the closing bracket/brace,
enabling an easier to maintain "terminator" style of their use.</t>
          <t>In summary, the following eight examples are all equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 3]
[1, 2, 3,]
[1  2  3]
[1  2  3,]
[1  2, 3]
[1  2, 3,]
[1, 2  3]
[1, 2  3,]
]]></sourcecode>
          <t>as are</t>
          <sourcecode type="cbor-diag"><![CDATA[
{1: "n", "x": "a"}
{1: "n", "x": "a",}
{1: "n"  "x": "a"}
# etc.
]]></sourcecode>
          <t>As a comma and/or blank/comment is mandatory in a separator position,
»<tt>[11]</tt>« is unambiguously an array with a single element (the
integer 11), different from »<tt>[1 1]</tt>« or »<tt>[1,1]</tt>«.
As this is a general rule, »<tt>[[] []]</tt>« or »<tt>[[],[]]</tt>« are well-formed
CDN, while »<tt>[[][]]</tt>« is not.</t>
          <aside>
            <t>CDDL's comma separators in the equivalent contexts (CDDL groups) are
  entirely optional
  (and actually are terminators, which together with their optionality
  allows them to be used like separators as well, or even not at all).
  In summary, comma use is now aligned between CDN and CDDL, in a
  fully backward compatible way.
  (CDDL does allow the stylistically questionable »<tt>a = [[][]]</tt>«, though.)</t>
          </aside>
        </section>
        <section anchor="map-validity">
          <name>Validity of Maps</name>
          <t>As discussed at the start of <xref target="diagnostic-notation"/>, CDN implementations <bcp14>MAY</bcp14> support
generation and possibly ingestion of CDN for CBOR data items that are
well-formed but not valid (Section <xref target="RFC8949" section="5.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          <t>For maps, this is relevant for map keys that occur more than once, as
in this CDN that is not representing a valid CBOR data item:</t>
          <sourcecode type="cbor-diag"><![CDATA[
{1: "to", 1: "from"}
]]></sourcecode>
        </section>
      </section>
      <section anchor="tags">
        <name>Tags</name>
        <t>A tag is
written as a decimal unsigned integer (no leading zeros except for the
actual tag number zero, i.e., <tt>0|[1-9][0-9]*</tt>) for the tag number, followed by the tag content
in parentheses; for instance, a date in the format specified by RFC 3339
(ISO 8601) could be
notated as:</t>
        <t indent="5">0("2013-03-21T20:04:00Z")</t>
        <t>or the equivalent epoch-based time:</t>
        <t indent="5">1(1363896240)</t>
        <t>The tag number can be followed by an encoding indicator giving the
encoding of the tag head.  For example, a diagnostic implementation encodes:</t>
        <t indent="5">1_1(1363896240)</t>
        <t>...(assuming Preferred Serialization for the tag content) as:</t>
        <sourcecode type="cbor-pretty"><![CDATA[
d9 0001        # tag(1)
   1a 514b67b0 # unsigned(1363896240)
]]></sourcecode>
      </section>
      <section anchor="simple-values">
        <name>Simple values</name>
        <t>CDN uses JSON syntax for the simple values True (»<tt>true</tt>«), False
(»<tt>false</tt>«), and Null (»<tt>null</tt>«).
Undefined is written »<tt>undefined</tt>« as in JavaScript.</t>
        <t>These and all other simple values can be given as "simple()" with the
appropriate decimal unsigned integer (<tt>0|[1-9][0-9]*</tt>) in the parentheses.
For example, »<tt>simple(42)</tt>«
indicates major type 7, value 42, and »<tt>simple(20)</tt>« indicates
»<tt>false</tt>«.</t>
      </section>
    </section>
    <section anchor="app-lit">
      <name>Prefixed Literals</name>
      <t>After a short overview of prefixed literals in general, this
section defines a number of app-extensions included with this
specification.</t>
      <t>Prefixed literals start with a <em>prefix</em> that identifies the
app-extension and possibly a specific variant of
that, immediately followed by a sequence literal (<xref target="embedded"/>) or a
single-quoted or raw string literal (<xref target="strings"/>).</t>
      <t>The string-based forms use their string literal as a shorthand form
for a sequence literal representing a sequence with exactly that one
text string data item, e.g., <tt>b64`Zm9v`</tt> is a shorthand for
<tt>b64&lt;&lt;"Zm9v"&gt;&gt;</tt> or <tt>b64&lt;&lt;`Zm9v`&gt;&gt;</tt> (this specific example obviously
depends on <tt>Zm9v</tt> being allowed and meaning the same within the
different forms of string literals used in the example).</t>
      <aside>
        <t>This notation is generalized from
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, which provides for notating byte
strings in a number of <xref target="RFC4648"/> base encodings, where the encoded text
is enclosed in single quotes, prefixed by a prefix (»h« for
base16, »b32« for base32, »h32« for base32hex, »b64« for base64 or
base64url).</t>
        <t>This syntax can be thought to establish a name space, with the names
"h", "b32", "h32", and "b64" taken, but other names being unallocated.
The present specification allows registering additional names for this namespace,
which it calls <em>app-extension identifiers</em>.</t>
      </aside>
      <t>More precisely, an <em>app-extension identifier</em> is a registered name consisting of a
lowercase ASCII letter (<tt>[a-z]</tt>) and zero or more additional ASCII
characters that are either lowercase letters, digits, or hyphens (<tt>[a-z0-9-]</tt>).
»false«, »true«, »null«, and »undefined« cannot be used as such
identifiers and are reserved.</t>
      <t>app-extension identifiers are registered in the "App-Extension Identifiers" registry
(<xref target="appext-iana"/>).</t>
      <t>An app-extension (such as <tt>dt</tt>) <bcp14>MAY</bcp14> also define the meaning of
one additional prefix derived from its app-extension identifier by
replacing each lowercase character by its uppercase counterpart (such
as <tt>DT</tt>).
As a convention, using the all-uppercase variant implies making use of
a CBOR tag appropriate for this app-extension (such
as tag number 1 for <tt>DT</tt>, where in contrast the prefix <tt>dt</tt> stands for
the unwrapped tag content).</t>
      <t>In summary, an app-extension identifier gives rise to one or two
prefixes, one that is lexically identical to the
identifier (i.e., all lowercase), and potentially another one that is an
all-uppercase variation of it.
In addition to specifying which of these two variations exhibits which
specific semantics, the app-extension specifies what input the
extension takes.</t>
      <t>When the prefix is used immediately in front of a single-quoted or a raw
string, the input takes the form of a single text string CBOR data
item (this is useful only if the app-extension is designed to
receive a text string as input).
When used immediately in front of a sequence literal, the input is a
CBOR sequence of elements of the sequence literal as input.
(For a single parameter, this is equivalent to receiving a single CBOR
data item as the argument.)
The app-extension can provide behavior that depends on the
number of items supplied as input to it and their data types; it
cannot distinguish between its prefix being used with a single-quoted
string, a raw string, or a CBOR sequence composed of a single text
string data item (as illustrated for instance in Tables <xref format="counter" target="tab-equiv-dt"/>,
<xref format="counter" target="tab-equiv-ip"/>, and <xref format="counter" target="tab-equiv-hash"/>).</t>
      <t>This specification defines a number of generally applicable
app-extensions (<xref target="app-lit"/>), both to motivate
making these extensions generally available, and to illustrate the
concept.</t>
      <t>Of these, the app-extensions <tt>h</tt>, <tt>b64</tt>, <tt>t1</tt>, <tt>b1</tt>, <tt>dt</tt> and <tt>ip</tt> are
mandatory to implement.
(As mentioned, for simplicity we use the term "app-extensions" for the
mechanism discussed in this section even if it is
used to describe a part of base CDN.)</t>
      <section anchor="encoded-byte-strings">
        <name>Base-Encoded Byte String Literals: h and b64</name>
        <t>Besides the unprefixed byte string literals that are analogous to JSON text
string literals, CDN provides prefixed literals that can represent
byte strings by base-encoding them, typically notated as prefixed
string literals.
The app-extension identifier selects one of the base encodings
<xref target="RFC4648"/>, without padding.
Most often, the base encoding is
enclosed in a single-quoted or raw string literal, prefixed by »h« for base16 or
»b64« for base64 or base64url (the actual encodings of the latter two
have the same meaning where they overlap, so the string remains unambiguous).
For example, the byte string consisting of the four bytes <tt>12 34 56 78</tt>
(given in hexadecimal here) could be written <tt>h'12345678'</tt> or
<tt>b64'EjRWeA'</tt> when using single-quoted string literals, or
<tt>h`12345678`</tt> or <tt>b64`EjRWeA`</tt> when using raw string literals.</t>
        <aside>
          <t>(Note that Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> also mentions »b32« for
base32 and »h32« for base32hex.
This has not been implemented widely
and therefore is not directly included in this specification.
These and further byte string formats now can easily be added back as
prefixed literals.)</t>
        </aside>
        <t>Examples often benefit from some blank space (spaces, line breaks) in
byte string literals.
In the base-encoded byte string literals, blank space is ignored in
the input; for instance, the following are equivalent:</t>
        <sourcecode type="cbor-diag"><![CDATA[
   h'48656c6c6f20776f726c64'
   h'48 65 6c 6c 6f 20 77 6f 72 6c 64'
   h'4 86 56c 6c6f
     20776 f726c64'
]]></sourcecode>
        <t>The internal syntax of prefixed single-quote literals such
as <tt>h''</tt> and <tt>b64''</tt> also allow comments as blank space (see <xref target="comments"/>).</t>
        <sourcecode type="cbor-diag"><![CDATA[
   h'68656c6c6f20776f726c64'
   h'68 65 6c /doubled l!/ 6c 6f # hello
     20 /space/
     77 6f 72 6c 64' /world/
]]></sourcecode>
        <t>Slash characters are part of the base64 classic alphabet (see
Table 1 in <xref section="4" sectionFormat="of" target="RFC4648"/>), and they therefore need to be in the
<tt>b64''</tt> set of characters that contribute to the byte string.
Therefore, only end-of-line comments starting with <tt>#</tt> are available inside
b64 byte string literals.</t>
        <sourcecode type="cbor-diag"><![CDATA[
   b64'/base64 not a comment/ but one follows # comment'
   h'FDB6AC 7BAE27A2D69CA2699E9EDFDBBADA2779FA25 968C2C'
]]></sourcecode>
        <t>These two byte string literals stand for the same byte string; the
deliberately confusing base64 content starts with
<tt>b64'/bas'</tt> which is the same as h'FDB6AC' and ends with b64'lows'
which is the same as <tt>h'968C2C'</tt>.</t>
      </section>
      <section anchor="dt">
        <name>Date and Time: dt</name>
        <t>The app-extension identifier "dt" is used to notate a
date/time literal that can be used as an Epoch-Based Date/Time as per
Section <xref target="RFC8949" section="3.4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</t>
        <t>The content of the literal is a single Standard Date/Time String as per
Section <xref target="RFC8949" section="3.4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, as a text or byte string.</t>
        <t>The value of the literal is a number representing the result of a
conversion of the given Standard Date/Time String to an Epoch-Based
Date/Time.
If fractional seconds are given in the text (production
<tt>time-secfrac</tt> in <xref target="abnf-grammar-dt"/>), the value is a
floating-point number; the value is an integer number otherwise.
In the all-uppercase variant of the app-prefix, the value is enclosed
in a tag number 1.</t>
        <t>Each row of <xref target="tab-equiv-dt"/> shows an example of "dt" notation and
equivalent notation not using a prefixed literal.</t>
        <table anchor="tab-equiv-dt">
          <name>dt and DT literals vs. plain CDN</name>
          <thead>
            <tr>
              <th align="left">dt literal</th>
              <th align="left">plain CDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16Z'</tt></td>
              <td align="left">
                <tt>-14159024</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.0Z'</tt></td>
              <td align="left">
                <tt>-14159024.0</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.5Z'</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt`1969-07-21T02:56:16.5Z`</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt&lt;&lt;'1969-07-21T02:56:16.5Z'&gt;&gt;</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt&lt;&lt;"1969-07-21T02:56:16.5Z"&gt;&gt;</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt&lt;&lt;`1969-07-21T02:56:16.5Z`&gt;&gt;</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>DT'1969-07-21T02:56:16Z'</tt></td>
              <td align="left">
                <tt>1(-14159024)</tt></td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="dt-grammar"/> for an ABNF definition for the text string input of <tt>dt</tt> literals.</t>
      </section>
      <section anchor="ip">
        <name>IP Addresses and Related Structures: ip</name>
        <t>The app-extension identifier "ip" is used to notate an IP
address literal that can be used as an IP address as per <xref section="3" sectionFormat="of" target="RFC9164"/>.</t>
        <t>The input of the literal is a single text string representing an IPv4address or IPv6address as per
<xref section="3.2.2" sectionFormat="of" target="RFC3986"/>.</t>
        <t>With the lowercase app-string prefix <tt>ip</tt>, the value of the literal is a
byte string representing the binary IP address.
With the uppercase app-string prefix <tt>IP</tt>, the literal is such a byte string
tagged with tag number 54, if an IPv6address is used, or tag number
52, if an IPv4address is used.</t>
        <t>As an additional case, the uppercase app-string prefix <tt>IP</tt> can be used
with an IP address prefix such as <tt>2001:db8::/56</tt> or <tt>192.0.2.0/24</tt>, with the equivalent tag as its value.
(Note that <xref target="RFC9164"/> representations of address prefixes need to
implement the truncation of the address byte string as described in
<xref section="4.2" sectionFormat="of" target="RFC9164"/>; see example below.)
For completeness, the lowercase variant <tt>ip'2001:db8::/56'</tt> or  <tt>ip'192.0.2.0/24'</tt> stands for
an unwrapped <tt>[56,h'20010db8']</tt> or <tt>[24,h'c00002']</tt>; however, in this case the information
on whether an address is IPv4 or IPv6 often needs to come from the context.</t>
        <t>Note that this app-extension provides no direct representation
of the "Interface format"
defined in <xref section="3.1.3" sectionFormat="of" target="RFC9164"/>, an address combined with an
optional prefix length and an optional zone identifier, and therefore
no way to reference a zone identifier at all.
(If needed, this format can be put together by building their
structures explicitly, e.g., an interface format without a zone
identifier can be represented as in <tt>52([ip'192.0.2.42',24])</tt>, or an
interface format with zone identifier 42 as in
<tt>54([ip'fe80::0202:02ff:ffff:fe03:0303',64,42])</tt>.)</t>
        <t>Each row of <xref target="tab-equiv-ip"/> shows an example of "ip" notation and
equivalent notation not using a prefixed literal.</t>
        <table anchor="tab-equiv-ip">
          <name>ip and IP literals vs. plain CDN</name>
          <thead>
            <tr>
              <th align="left">ip literal</th>
              <th align="left">plain CDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>ip'192.0.2.42'</tt></td>
              <td align="left">
                <tt>h'c000022a'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>ip&lt;&lt;'192.0.2.42'&gt;&gt;</tt></td>
              <td align="left">
                <tt>h'c000022a'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'192.0.2.42'</tt></td>
              <td align="left">
                <tt>52(h'c000022a')</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'192.0.2.0/24'</tt></td>
              <td align="left">
                <tt>52([24,h'c00002'])</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>ip'2001:db8::42'</tt></td>
              <td align="left">
                <tt>h'20010db8000000000000000000000042'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'2001:db8::42'</tt></td>
              <td align="left">
                <tt>54(h'20010db8000000000000000000000042')</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'2001:db8::/64'</tt></td>
              <td align="left">
                <tt>54([64,h'20010db8'])</tt></td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="ip-grammar"/> for an ABNF definition for the content of <tt>ip</tt> literals.</t>
      </section>
      <section anchor="hash">
        <name>Cryptographic Hash Values: hash</name>
        <t>The app-extension identifier "hash" is used to notate the
input to a cryptographic hash function as well as to identify such a hash
function.
Its value is a byte string that represents the output of that
hash function.</t>
        <t>The input of the literal is a (text or byte) string, optionally followed by either
an integer or a text string that identifies the hash function in the
COSE Algorithms registry of the CBOR Object Signing and Encryption
(COSE) registry group <xref target="IANA.cose"/>, either by the identifier (value:
integer or string), or, if no algorithm is registered with this value,
by its name used in the registry.
If the second item is not given, the default algorithm used is -16
("SHA-256").</t>
        <t>No uppercase variant prefix is defined for the app-extension
identifier "hash".</t>
        <table anchor="tab-equiv-hash">
          <name>hash literals vs. plain CDN</name>
          <thead>
            <tr>
              <th align="left">hash literal</th>
              <th align="left">plain CDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo'&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash'foo'</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', -16&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', "SHA-256"&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', -44&gt;&gt;</tt></td>
              <td align="left">h'F7FBBA6E0636F890E56FBBF3283E524C<br/>6FA3204AE298382D624741D0DC663832<br/>6E282C41BE5E4254D8820772C5518A2C<br/>5A8C0C7F7EDA19594A7EB539453E1ED7'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', "SHA-512"&gt;&gt;</tt></td>
              <td align="left">h'F7FBBA6E0636F890E56FBBF3283E524C<br/>6FA3204AE298382D624741D0DC663832<br/>6E282C41BE5E4254D8820772C5518A2C<br/>5A8C0C7F7EDA19594A7EB539453E1ED7'</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="t1b1">
        <name>String Concatenation: b1 and t1</name>
        <t><cref anchor="t1b1name">This section uses the placeholders t1 and b1 as provisional
app-extension identifiers, allowing the text to stabilize while
the actual names are still being decided by the WG.</cref></t>
        <t>The "b1" and "t1" app-extensions allow a (byte or text) string to be built
up from multiple (byte or text) string literals; these are then
concatenated into a single string.</t>
        <t>The following four text string values (adapted from <xref section="G.4" sectionFormat="of" target="RFC8610"/>) are equivalent:</t>
        <artwork><![CDATA[
"Hello world"
t1<<"Hello ", "world">>
t1<<"Hello", h'20', "world">>
t1<<h'48656c6c6f20776f726c64'>>
]]></artwork>
        <t>Similarly, the following byte string values are equivalent:</t>
        <artwork><![CDATA[
'Hello world'
b1<"Hello world">
b1<<'Hello ', 'world'>>
b1<<'Hello ', h'776f726c64'>>
b1<<'Hello', h'20', 'world'>>
b1<<h'48656c6c6f20776f726c64', '', b64''>>
b1<<h'4 86 56c 6c6f', h' 20776 f726c64'>>
]]></artwork>
        <t>As the examples show, text strings and byte strings can mix within such a
concatenation, so that, for instance, byte string literal notation can be used
inside a sequence of concatenated text string notation literals, to
encode characters that may be better represented in an encoded way.</t>
        <t>This is realized by simply joining together the bytes in the
sequence of string arguments to the b1/t1 app-extension,
proceeding from left to right.</t>
        <t>For "b1", the joining operation results in a byte string.
For "t1", the joining operation results in a text string, and the
result therefore needs to be valid UTF-8 except for "diagnostic"
implementations that support and are enabled for generation/ingestion
of CDN for CBOR data items that are well-formed but not valid; see
also <xref target="text-validity"/>.</t>
        <t>Besides strings, arguments to t1/b1 may include ellipses, in which
case the result will be an ellipsis data item in turn (see
<xref target="elision"/>).
The semantic processing of these is governed by the
following rules:</t>
        <ul spacing="normal">
          <li>
            <t>A single <tt>...</tt> is a general ellipsis, which by itself can stand for
any data item, but when used as argument to t1/b1 must stand in for
a string value.</t>
          </li>
          <li>
            <t>Multiple adjacent ellipses are equivalent to a single ellipsis.</t>
          </li>
          <li>
            <t>When an ellipsis is concatenated (on one or both sides) with
strings, the result is a CBOR tag number CPA888 that contains an
array with joined together spans of such strings plus the ellipses
represented by <tt>/CPA/888(null)</tt>.</t>
          </li>
          <li>
            <t>Arguments with nested ellipses are flattened and the above
equivalences applied, so that, for instance, these values are
equivalent:  </t>
            <artwork><![CDATA[
h'48656c6c6f...776f726c64'
b1<<h'48656c6c6f...', ..., h'...776f726c64'>>
b1<<'Hello', ..., 'world'>>
]]></artwork>
          </li>
          <li>
            <t>If there is no ellipsis in the concatenated list, the result of
processing the list will always be a single string data item.</t>
          </li>
        </ul>
      </section>
      <section anchor="ilxs">
        <name>Creating Indefinite-length Encoded Strings: ilbs and ilts</name>
        <t>The <tt>ilbs</tt> and <tt>ilts</tt> app-extensions are semantically
identical to <tt>t1</tt> and <tt>b1</tt> at the data model level, but instead of
concatenating the arguments to a single (byte/text) string data item,
they build an indefinite length string out of the arguments, with one
chunk of the correct major type (byte string/text string for
<tt>ilbs</tt>/<tt>ilts</tt>, respectively) created per argument.</t>
        <t>A diagnostic implementation would honor encoding indicators on each of
the arguments, creating a chunk with the same encoding.
As the app-extension is already implying indefinite length encoding,
there is no point in applying an encoding indicator to the entire
prefixed literal.</t>
        <artwork><![CDATA[
'Hello world'                4b 48656c6c6f20776f726c64
ilbs<<>>                     5f ff
ilbs<<"Hello world">>        5f 4b 48656c6c6f20776f726c64 ff
ilbs<<'Hello ', "world">>    5f 46 48656c6c6f20 45 776f726c64 ff
ilbs<<'Hello '_0, 'world'>>  5f 5806 48656c6c6f20 45 776f726c64 ff
]]></artwork>
        <t>There is no way to include ellipses in an indefinite length string.</t>
      </section>
      <section anchor="cri">
        <name>Concise Resource Identifiers: The "cri" Extension</name>
        <t>The
app-extension identifier "<tt>cri</tt>" is used to notate
a CDN literal for a CRI reference as defined in <xref target="I-D.ietf-core-href"/>.</t>
        <t>The input of the literal is a URI Reference as per <xref target="RFC3986"/> or an IRI
Reference as per <xref target="RFC3987"/>.</t>
        <t>The value of the literal is a CRI reference that can be converted to
the text of the literal using the procedure of <xref section="6.1" sectionFormat="of" target="I-D.ietf-core-href"/>.  <!-- {{cri-to-uri}}. -->
Note that there may be more than one CRI reference that can be
converted to the URI/IRI reference given; implementations are expected
to favor the simplest variant available and make non-surprising
choices otherwise.
In the all-uppercase variant of the app-prefix, the value is enclosed
in a tag number 99.</t>
        <t>As an example, the CDN</t>
        <sourcecode type="cbor-diag"><![CDATA[
cri'https://example.com/bottarga/shaved'
CRI'https://example.com/bottarga/shaved'
]]></sourcecode>
        <t>is equivalent to</t>
        <sourcecode type="cbor-diag"><![CDATA[
[-4, ["example", "com"], ["bottarga", "shaved"]]
99([-4, ["example", "com"], ["bottarga", "shaved"]])
]]></sourcecode>
        <t>See <xref target="cri-grammar"/> for an ABNF definition for the content of <tt>cri</tt> literals.</t>
      </section>
      <section anchor="floating-point-values-float">
        <name>Floating-Point Values: float</name>
        <!-- IEEE754-oriented literals for more floating point values -->

<t>The "<tt>float</tt>" app-extension enables the notation of 2-byte,
4-byte, and 8-byte byte strings to express floating point values
(mt=7, ai=25/26/27 respectively) by giving their IEEE 754
representation.
A text string used as an argument is interpreted exactly as a hex
literal (like the <tt>h</tt> prefix); the result is used as the
byte string.</t>
        <t>The prefixed literal is interpreted as an encoded data
item would be that prefixes the byte string by a single byte 0xF9
(2 bytes, i.e., binary16), 0xFA (4 bytes, i.e., binary32), and 0xFB (8
bytes, i.e., binary64), respectively.
Byte strings of a different length than 2, 4, or 8 raise an error.
Note that the interpretation as an encoded data item does not create
or imply an encoding indicator; that can be added separately.</t>
        <t>Example (tool used: <tt>edn-abnf -afloat -e</tt>):</t>
        <artwork><![CDATA[🔧 "[float'fe00', float'fe00'_2, float'47110815']" -tpretty ➔
83             # array(3)
   F9 FE00     # primitive(65024)
   FA FFC00000 # primitive(4290772992)
   FA 47110815 # primitive(1192298517)

🔧 "[float'fe00', float'fe00'_2, float'47110815', 0x1.22102ap+15]" ➔
[float'fe00', float'fe00'_2, 37128.08203125, 37128.08203125]
]]></artwork>
        <t>The purpose of this app-extension is to close a gap in CDN's
<xref target="IEEE754"/> binary64 support:
Without this (or a similar) extension there is no way to represent NaN
values different from the one called out at the end of Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>: "(for many applications, the single NaN encoding
0xf97e00 will suffice)".
For finite floating point numbers, the decimal or hex floating point
representations are preferred.</t>
      </section>
    </section>
    <section anchor="encoding-indicators">
      <name>Encoding Indicators</name>
      <t>Sometimes it is useful to indicate in the diagnostic notation which of
several alternative CBOR representations are actually used; for example, a
data item written »1.5« by a diagnostic decoder might have been
encoded in CBOR as a half-, single-, or double-precision float.</t>
      <t>Encoding indicators are always optional:
CDN is usually used to describe CBOR data items at the data model
level.
For some diagnostic purposes, it is useful to represent the choice of
a serialization variation by including encoding indicators.
Implementations of CDN generally do not need to provide this
functionality in full; if they do, they can be called "diagnostic
implementations".
To be able to process CDN that contains encoding indicators,
a CDN-consuming implementation <bcp14>MUST</bcp14> accept them (i.e., process or
ignore the presence or absence of each encoding indicator).
It is <bcp14>RECOMMENDED</bcp14> to provide a warning for each encoding
indicator value that is encountered but not further processed.</t>
      <t>When creating CDN as input for a diagnostic CBOR encoder in order to
obtain specific encoding choices, encoding indicators may be placed
manually or by the software generating the CDN.
Where no encoding indicator is placed, a diagnostic CBOR encoder is expected to
generate Preferred Serialization (Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) with
definite-length encoding only.
Similarly, when using CDN as output for a diagnostic CBOR decoder, a
basic diagnostic configuration of the tool is expected to provide
encoding indicators only in places where the CBOR input did not use
Preferred Serialization with definite-length encoding (see also
<xref target="basic"/>).
Diagnostic implementations of CDN that process encoding indicators as
discussed here are expected to document their diagnostic behavior and
the processing options that can be selected.</t>
      <section anchor="syntax-semantics-examples">
        <name>Syntax, Semantics, Examples</name>
        <t>Encoding indicators start with
an underscore and comprise all immediately following characters that are alphanumeric or
underscore.
For example, <tt>_</tt> or <tt>_3</tt>.
Encoding indicators can be ignored by anyone not
interested in this information.</t>
        <t>Encoding indicators are placed immediately to the right of the data
item or of a syntactic feature that can stand for the data item the
encoding of which the encoding indicator is controlling.
<xref target="tab-ei"/> provides examples for data items with definite length
encoding indicators used with various kinds of data items ("mt" = major
type, "ignoring e.i." = example encoding when ignoring the encoding indicators).
Examples for encoding indicators controlling indefinite length
encoding can be found in the context of explanations in
<xref target="ei-container"/> and <xref target="ei-string"/>.</t>
        <table anchor="tab-ei">
          <name>Examples of Definite Length Encoding Indicators for Different Data Items</name>
          <thead>
            <tr>
              <th align="left">mt</th>
              <th align="left">examples</th>
              <th align="left">encoding (in hex)</th>
              <th align="left">ignoring e.i.</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">
                <tt>1_1</tt><br/><tt>0x4711_3</tt></td>
              <td align="left">190001<br/>1b0000000000004711</td>
              <td align="left">01<br/>194711</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">
                <tt>-1_1</tt></td>
              <td align="left">390000</td>
              <td align="left">20</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">
                <tt>'A'_1</tt></td>
              <td align="left">59000141</td>
              <td align="left">4141</td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">
                <tt>"A"_1</tt></td>
              <td align="left">79000161</td>
              <td align="left">6161</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">
                <tt>[_1 "bar"]</tt></td>
              <td align="left">99000163626172</td>
              <td align="left">8163626172</td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">
                <tt>{_1 "bar": 1}</tt></td>
              <td align="left">b900016362617201</td>
              <td align="left">a16362617201</td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">
                <tt>1_1(4711)</tt></td>
              <td align="left">d90001191267</td>
              <td align="left">c1191267</td>
            </tr>
            <tr>
              <td align="left">7</td>
              <td align="left">
                <tt>1.5_2</tt><br/><tt>0x4711p+03_3</tt></td>
              <td align="left">fa3fc00000<br/>fb4101c44000000000</td>
              <td align="left">f93e00<br/>fa480e2200</td>
            </tr>
          </tbody>
        </table>
        <t>(In the following, an abbreviation of the form <tt>ai=</tt>nn gives nn as
the numeric value of the field <em>additional information</em>, the low-order 5
bits of the initial byte: see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
This field is used in encoding the "argument", i.e., the value, tag, or
length; <tt>ai=0</tt> to <tt>ai=23</tt> mean that the value of the <tt>ai</tt> field
immediately <em>is</em> the argument, <tt>ai=24</tt> to <tt>ai=27</tt> mean that the
argument is carried in 2<sup>ai-24</sup> (1, 2, 4, or 8)
additional bytes, and <tt>ai=31</tt> means that indefinite-length
encoding is used.)</t>
        <t>An underscore followed by a decimal digit <tt>n</tt> indicates that the
item was or is to be encoded with an additional information
value of <tt>ai=</tt>24+<tt>n</tt>.
(The item associated to the encoding indicator may be the preceding
item, or, for arrays and maps, the item starting with the
preceding bracket or brace.)
For an example involving floating point values (Section <xref target="RFC8949" section="3.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>),
<tt>1.5_1</tt> is a half-precision floating-point
number (2<sup>1</sup> = 2 additional bytes or 16 bits), while <tt>1.5_3</tt> is encoded as
double precision (2<sup>3</sup> = 8 additional bytes or 64 bits).
For a tool consuming CDN in a diagnostic mode, encountering an
encoding indicator that does not provide enough space to correctly
encode the unchanged data item given is an error; there is no
truncation or rounding that would change the data item encoded.</t>
        <aside>
          <t>Truncation or rounding semantics imply performing changes at the data
model level, which is outside the scope of encoding indicators.
Such operations can be provided by app-extensions.</t>
        </aside>
        <t>The encoding indicator <tt>_</tt> (an underscore on its own) is used to
indicate indefinite-length encoding.
Indefinite-length encoding uses <tt>ai=31</tt>, which could have been
indicated by <tt>_7</tt>, which is therefore not used and marked as reserved
(as are <tt>_4</tt>, <tt>_5</tt>, and <tt>_6</tt>, which would stand for <tt>ai=28</tt> to
<tt>ai=30</tt>, values currently not in use in CBOR; these encoding
indicators will be available if and when CBOR is extended to make use
of them).</t>
        <t>Note that the encoding indicator <tt>_</tt> is only available behind the opening
brace/bracket for <tt>map</tt> and <tt>array</tt> (<xref target="ei-container"/>): strings
originally had a now deprecated special syntax
<tt>streamstring</tt> for indefinite-length encoding except for the special
cases <tt>''_</tt> and <tt>""_</tt> (<xref target="ei-string"/>).</t>
        <t>The encoding indicators <tt>_0</tt> to <tt>_3</tt> indicate <tt>ai=24</tt>
to <tt>ai=27</tt>, respectively; they therefore stand for 1, 2, 4, and 8
bytes of additional information (ai) following the initial byte in the
head of the data item.</t>
        <t>Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> does not address <tt>ai=0</tt> to
<tt>ai=23</tt> — the assumption seems to have been that Preferred Serialization
(Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) will be used when converting CBOR
diagnostic notation to an encoded CBOR data item, so leaving out the
encoding indicator for a data item with a Preferred Serialization
will implicitly use <tt>ai=0</tt> to <tt>ai=23</tt> if that is possible.
The present specification allows making this explicit:</t>
        <t><tt>_i</tt> ("immediate") stands for encoding with <tt>ai=0</tt> to <tt>ai=23</tt>, i.e.,
it indicates that the argument is encoded directly in the initial byte
of the CBOR item.</t>
        <t>Encoding indicators are an extension point for CDN; <xref target="reg-ei"/> defines
a registry for additional values.</t>
        <t>Specific forms of encoding indicators are discussed in further detail
in <xref target="ei-container"/> for arrays and maps and in <xref target="ei-string"/> for the
deprecated syntax for indefinite-length strings.</t>
      </section>
      <section anchor="ei-container">
        <name>Encoding Indicators of Arrays and Maps</name>
        <t>A single underscore can be written after the opening brace of a map or
the opening bracket of an array to indicate that the data item was
represented in indefinite-length format.  For example, <tt>[_ 1, 2]</tt>
contains an indicator that an indefinite-length representation was
used to represent the data item <tt>[1, 2]</tt>.</t>
        <t>At the same position, encoding indicators for specifying the size of
the array or map head for definite-length format can be used instead,
specifically <tt>_i</tt> or <tt>_0</tt> to <tt>_3</tt>.  For example, <tt>[_0 false, true]</tt> can be
used to specify the encoding of the array <tt>[false, true]</tt> as <tt>98 02 f4 f5</tt>.</t>
      </section>
      <section anchor="ei-string">
        <name>Deprecated: Indefinite-length Encoding Indicators for Strings</name>
        <t>In CBOR, indefinite-length encoded (byte or text) strings are composed of
"chunks" (Section <xref target="RFC8949" section="3.2.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
        <t>The original diagnostic notation (<xref section="6.1" sectionFormat="of" target="RFC7049"/>) provided
a special syntax <tt>streamstring</tt> for them, which was retained and
further clarified in Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
This syntax represents the individual chunks in
sequence within parentheses, each optionally followed by a comma, with
an encoding indicator <tt>_</tt> immediately after the opening parenthesis:
e.g., <tt>(_ h'0123', h'4567')</tt> or <tt>(_ "foo", "bar")</tt>.
The overall type (byte string or text string) of the string is
provided by the types of the individual chunks, which all need to be
of the same type (Section <xref target="RFC8949" section="3.2.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
        <t>In this syntax, an indefinite-length string with no chunks inside, <tt>(_ )</tt>
would be ambiguous as to whether a byte string (encoded <tt>5f ff</tt>) or a text string
(encoded <tt>7f ff</tt>) is meant and is therefore not used.
The basic forms <tt>''_</tt> and <tt>""_</tt> can be used instead and are reserved for
the case of no chunks only — not as short forms for the (permitted,
but not really useful) encodings with only empty chunks, which
need to be notated as <tt>(_ '')</tt>, <tt>(_ "")</tt>, etc.,
when it is desired to preserve the chunk structure.</t>
        <t>With this document, the <tt>streamstring</tt> syntax is now deprecated; new
CDN documents should instead use the <tt>ilbs</tt>/<tt>ilts</tt> app-extensions
(<xref target="ilxs"/>) to build indefinite-length encoded strings.</t>
      </section>
    </section>
    <section anchor="cdn-tags">
      <name>Tag-based Representations of CDN Input in Binary CBOR</name>
      <t>In some cases, a CDN consumer cannot construct actual CBOR items that
represent the CBOR data intended for eventual interchange.
This document defines a CBOR tags-based representation for two such cases:</t>
      <ul spacing="normal">
        <li>
          <t>The CDN consumer does not know (or does not implement) an
app-extension identifier used in the CDN document
(<xref target="unknown"/>) but wants to preserve the information for a later
processor.</t>
        </li>
        <li>
          <t>The generator of some CDN intended for human consumption (such as in
a specification document) may not want to include parts of the final
data item, destructively replacing complete subtrees or possibly
just parts of a lengthy string by <em>elisions</em> (<xref target="elision"/>).</t>
        </li>
      </ul>
      <aside>
        <t>Implementation note:
Typically, the ultimate applications will fail if they encounter tags
unknown to them, which the ones defined in this section likely are.
Where chains of tools are involved in processing CDN, it may be useful
to fail earlier than at the ultimate receiver in the chain unless
specific processing options (e.g., command line flags) are given that
indicate which of these CDN-related tags are expected at this stage in the
chain.</t>
      </aside>
      <section anchor="unknown">
        <name>Handling unknown app-extension identifiers</name>
        <t>During ingestion of CDN,
prefixed literals are usually decoded and
transformed into the corresponding data item.
If an app-extension is not known or not implemented by the
ingesting process, this is usually an error and processing has to
stop.</t>
        <t>However, in certain cases, it can be desirable to exceptionally carry an
uninterpreted app-extension literal in an ingested
data item, allowing to postpone its decoding to a specific later
stage of ingestion.</t>
        <t>This specification defines a CBOR Tag for this purpose:
The Diagnostic Notation Unresolved App-Extension Tag, tag
number CPA999 (<xref target="iana-tags"/>).
The content of this tag is an array of a text string for the
app-extension prefix, and another array:</t>
        <ul spacing="normal">
          <li>
            <t>For app-strings, the second array contains a single item, a text
string containing the text notated by the single-quoted string in the
app-string.</t>
          </li>
          <li>
            <t>For app-sequences, the second array contains zero or more items,
which represent each item in the sequence contained in the
app-sequence.</t>
          </li>
        </ul>
        <t>For example, <tt>cri'https://example.com'</tt> can be represented as
<tt>/CPA/ 999(["cri", ["https://example.com"]])</tt>, and
<tt>hash&lt;&lt;"data", -44&gt;&gt;</tt> as <tt>/CPA/ 999(["hash", ["data", -44]])</tt>.</t>
        <!-- edn-abnf -fe "cri'https://example.com'" -->
<!-- edn-abnf -fe 'hash<<"data", -44>>' -->

<t>If a stage of ingestion is not prepared to handle the Unresolved
App-Extension Tag, this is an error and processing has to
stop, as if this stage had been ingesting an unknown or unimplemented
app-extension literal itself.</t>
        <t><cref anchor="cpa">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
      </section>
      <section anchor="elision">
        <name>Handling information deliberately elided from a CDN document</name>
        <t>When using CDN for exposition in a document or on a whiteboard, it is
often useful to be able to leave out parts of a CDN document that are
not of interest at that point of the exposition.</t>
        <t>To facilitate this, this specification
supports the use of an <em>ellipsis</em> (notated as three or more dots
in a row, as in <tt>...</tt>) to indicate parts of a CDN document that have
been elided (and therefore cannot be reconstructed).</t>
        <t>Upon ingesting CDN as a representation of a CBOR data item for further
processing, the occurrence of an ellipsis usually is an error and
processing has to stop.</t>
        <t>However, it is useful to be able to process CDN documents with
ellipses in the automation scripts for the documents using them.
This specification defines a CBOR Tag that can be used in the ingestion
for this purpose:</t>
        <t>The Diagnostic Notation Ellipsis Tag, tag number CPA888 (<xref target="iana-tags"/>).
The content of this tag is one of:</t>
        <ol spacing="normal" type="1" start="1"><li>
            <t>null (indicating a data item entirely replaced by an ellipsis);</t>
          </li>
          <li>
            <t>an array, the elements of which are alternating between parts
of a string and the actual elisions, represented as ellipses
carrying a null as content.</t>
          </li>
        </ol>
        <t>Elisions can stand in for entire subtrees, e.g. in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, ..., 3]
{ "a": 1,
  "b": ...,
  ...: ...
}
]]></sourcecode>
        <t>A single ellipsis (or key/value pair of ellipses) can imply eliding
multiple elements in an array (members in a map). If more detailed
control is required, a data definition language such as CDDL can be
employed.
(Note that the tag-based representation form defined here does not allow multiple
key/value pairs with an ellipsis as a key: the CBOR data item would
not be valid.)</t>
        <t>Subtree elisions can be represented in a CBOR data item by using
<tt>/CPA/888(null)</tt> as the placeholder CBOR data item:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 888(null), 3]
{ "a": 1,
  "b": 888(null),
  888(null): 888(null)
}
]]></sourcecode>
        <t>Elisions also can be used as part of a (text or byte) string:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": t1<<"Herewith I buy", ..., "gned: Alice & Bob">>
  "bytes_in_IRI": b1<<'https://a.example/', ..., '&q=Übergrößenträger'>
  "signature": h'4711...0815',
}
]]></sourcecode>
        <t>The examples "contract" and "bytes_in_IRI" combine (text and byte)
string concatenation via the t1/b1 app-extension (<xref target="t1b1"/>) with an
ellipsis.
The example
"signature" uses special syntax that allows the use of ellipses
between the bytes notated <em>inside</em> <tt>h''</tt> literals.</t>
        <t>String elisions can be represented in a CBOR data item by a tag CPA888
that wraps an array containing string parts alternating with ellipsis
indicators:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": /CPA/888(["Herewith I buy", 888(null),
                        "gned: Alice & Bob"]),
  "bytes_in_IRI": 888(['https://a.example/', 888(null),
                       '&q=Übergrößenträger']),
  "signature": 888([h'4711', 888(null), h'0815']),
}
]]></sourcecode>
        <t>Note that the use of elisions is different from "commenting out" CDN
text, e.g.:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "signature": h'4711/.../0815',
  # ...: ...
}
]]></sourcecode>
        <t>The consumer of this CDN will ignore the comments and therefore will
have no idea after ingestion that some information has been elided;
validation steps may then simply fail instead of being informed about
the elisions.</t>
      </section>
    </section>
    <section anchor="grammars">
      <name>ABNF Definitions</name>
      <t>This section collects grammars in ABNF form (<xref target="STD68"/> as extended in
<xref target="RFC7405"/>) that serve to define the syntax of CDN and some
prefixed literals.</t>
      <aside>
        <t>Implementation note: The ABNF definitions in this section are
intended to be useful in a Parsing Expression Grammar (PEG) parser
interpretation (see <xref section="A" sectionFormat="of" target="RFC8610"/> for an introduction into PEG).</t>
      </aside>
      <section anchor="grammar">
        <name>Overall ABNF Definition for Concise Diagnostic Notation</name>
        <t>This subsection provides an overall ABNF definition for the syntax of
concise diagnostic notation.</t>
        <aside>
          <t>This ABNF definition treats all single-quoted string literals the same,
whether they are unprefixed and constitute byte string literals, or
prefixed and their content subject to further processing.
The text string value of the single-quoted strings that goes into that
further processing is described using separate ABNF definitions in
<xref target="app-grammars"/>; as a convention, the grammar for the content of an
app-string with prefix, say, <tt>p</tt>, is described by an ABNF definition
with the rule name <tt>app-string-p</tt>.</t>
          <t>As an implementation note, some implementations may want to integrate
the parsing and processing of app-string content for certain
app-extensions with the overall grammar.
Example grammars for such integrated parsers are provided with this
specification in <xref target="integrated-grammars"/>.</t>
        </aside>
        <t>For simplicity, the internal parsing for the built-in CDN prefixes is
specified in the same way.
ABNF definitions for <tt>h''</tt>/<tt>h``</tt> and <tt>b64''</tt>/<tt>b64``</tt> are
provided in <xref target="h-grammar"/> and <xref target="b64-grammar"/>.</t>
        <figure anchor="abnf-grammar">
          <name>Overall ABNF Definition of CDN</name>
          <sourcecode type="abnf" name="cdn.abnf"><![CDATA[
seq             = S [item *(MSC item) SOC]
one-item        = S item S
item            = map / array / tagged
                / number / simple
                / string / streamstring

string1         = (tstr / bstr) spec
string          = string1 / ellipsis
ellipsis        = 3*"." ; "..." or more dots

number          = (hexfloat / hexint / octint / binint
                   / decnumber / nonfin) spec
sign            = "+" / "-"
decnumber       = [sign] (1*DIGIT ["." *DIGIT] / "." 1*DIGIT)
                         ["e" [sign] 1*DIGIT]
hexfloat        = [sign] "0x" (1*HEXDIG ["." *HEXDIG] / "." 1*HEXDIG)
                         "p" [sign] 1*DIGIT
hexint          = [sign] "0x" 1*HEXDIG
octint          = [sign] "0o" 1*ODIGIT
binint          = [sign] "0b" 1*BDIGIT
nonfin          = %s"Infinity"
                / %s"-Infinity"
                / %s"NaN"
simple          = %s"false"
                / %s"true"
                / %s"null"
                / %s"undefined"
                / %s"simple(" S simple-number S ")"
simple-number   = "25" %x30-35         ; 250-255
                / "2" %x30-34 DIGIT    ; 200-249
                / "1" 2DIGIT           ; 100-199
                / %x34-39 DIGIT        ; 40-99
                / "3" %x32-39          ; 32-39
                ;; there are no simple values between 24-31
                / "2" %x30-33          ; 20-23
                / "1" DIGIT            ; 10-19
                / DIGIT                ; 0-9
uint            = "0" / DIGIT1 *DIGIT
tagged          = uint spec "(" S item S ")"

app-prefix      = lcalpha *lcldh ; including h and b64
                / ucalpha *ucldh ; tagged variant, if defined
app-string      = app-prefix sqstr
app-sequence    = app-prefix "<<" seq ">>"
app-rstring     = app-prefix rawstring
rawstring       = startrawdelim
                  raw-inner
                  alikerawdelim
rawdelim        = 1*"`"
startrawdelim   = rawdelim
                  ; width (number of backquotes) distinguishes
                  ; between following alikerawdelim and shortrawdelim
alikerawdelim   = rawdelim ; width == previous startrawdelim
shortrawdelim   = rawdelim ; width < previous startrawdelim
rawchars        = 1*(%x0a/%x0d / %x20-5f / %x61-7e / NONASCII)
raw-inner       = 1*(rawchars / shortrawdelim)

sqstr           = SQUOTE *single-quoted SQUOTE
bstr            = app-string / sqstr / app-rstring / rawstring
                / app-sequence / embedded
                  ; note: rawstring is text; app-... can be any type
tstr            = DQUOTE *double-quoted DQUOTE
embedded        = "<<" seq ">>"

array           = "[" (specms S item *(MSC item) SOC / spec S) "]"
map             = "{" (specms S keyp *(MSC keyp) SOC / spec S) "}"
keyp            = item S ":" S item

; We allow %x09 HT in prose, but not in string literals
blank           = %x09 / %x0A / %x0D / %x20
lblank          = %x0A / %x20  ; Not HT or CR (gone)
non-slash       = blank / %x21-2e / %x30-7F / NONASCII
non-slash-star  = blank / %x21-29 / %x2b-2e / %x30-7F / NONASCII
non-star        = blank / %x21-29 / %x2b-7F / NONASCII
ends-in-star    = *non-star 1*"*"
non-lf          = %x09 / %x0D / %x20-7F / NONASCII
eol-comment     = "#" / "//"
comment         = "/" non-slash-star *non-slash "/"
                / "/*" ends-in-star
                       *(non-slash-star ends-in-star) "/"
                / eol-comment *non-lf %x0A
; optional space
S               = *blank *(comment *blank)
; mandatory space
MS              = (blank/comment) S
; mandatory comma and/or space
MSC             = ("," S) / (MS ["," S])
; optional comma and/or space
SOC             = S ["," S]

; check semantically that strings are either all text or all bytes
; note that there must be at least one string to distinguish
streamstring    = "(_" MS string *(MSC string) SOC ")"
spec            = ["_" *wordchar]
specms          = ["_" *wordchar MS]

double-quoted   = unescaped
                / SQUOTE
                / "\" escapable-d

single-quoted   = unescaped
                / DQUOTE
                / "\" escapable-s

escapable1      = %s"b" ; BS backspace U+0008
                / %s"f" ; FF form feed U+000C
                / %s"n" ; LF line feed U+000A
                / %s"r" ; CR carriage return U+000D
                / %s"t" ; HT horizontal tab U+0009
                / "\"   ; \ backslash (reverse solidus) U+005C

escapable-d     = escapable1
                / DQUOTE
                / "/"   ; / slash (solidus) U+002F (JSON!)
                / (%s"u" hexchar) ;  uXXXX      U+XXXX

escapable-s     = escapable1
                / SQUOTE
                / (%s"u" hexchar-s) ;  uXXXX      U+XXXX

hexchar         = "{" (1*"0" [ hexscalar ] / hexscalar) "}"
                / non-surrogate
                / two-surrogate
non-surrogate   = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
two-surrogate   = high-surrogate "\" %s"u" low-surrogate
high-surrogate  = "D" ("8"/"9"/"A"/"B") 2HEXDIG
low-surrogate   = "D" ("C"/"D"/"E"/"F") 2HEXDIG
hexscalar       = "10" 4HEXDIG / HEXDIG1 4HEXDIG
                / non-surrogate / 1*3HEXDIG

; single-quote hexchar-s: don't allow 0020..007e
hexchar-s       = "{" (1*"0" [ hexscalar-s ] / hexscalar-s) "}"
                / non-surrogate-s
                / two-surrogate
non-surrogate-s = "007F"                 ; rubout
                / "00" ("0"/"1"/"8"/"9"/HEXDIGA) HEXDIG
                / "0" HEXDIG1 2HEXDIG
                / non-surrogate-1
non-surrogate-1 = ((DIGIT1 / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
hexscalar-s     = "10" 4HEXDIG / HEXDIG1 4HEXDIG
                / non-surrogate-1 / HEXDIG1 2HEXDIG
                / ("1"/"8"/"9"/HEXDIGA) HEXDIG
                / "7F"
                / HEXDIG1

; Note that no other C0 characters are allowed, including %x09 HT
unescaped       = %x0A ; new line
                / %x0D ; carriage return -- ignored on input
                / %x20-21
                     ; omit 0x22 "
                / %x23-26
                     ; omit 0x27 '
                / %x28-5B
                     ; omit 0x5C \
                / %x5D-7F
                / NONASCII

newline         = [%x0D] %x0A
DQUOTE          = %x22    ; " double quote
SQUOTE          = "'"     ; ' single quote
DIGIT           = %x30-39 ; 0-9
DIGIT1          = %x31-39 ; 1-9
ODIGIT          = %x30-37 ; 0-7
BDIGIT          = %x30-31 ; 0-1
HEXDIGA         = "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
HEXDIG          = DIGIT / HEXDIGA
HEXDIG1         = DIGIT1 / HEXDIGA
lcalpha         = %x61-7A ; a-z
lcldh           = lcalpha / DIGIT / "-"
ucalpha         = %x41-5A ; A-Z
ucldh           = ucalpha / DIGIT / "-"
ALPHA           = lcalpha / ucalpha
wordchar        = "_" / ALPHA / DIGIT ; [_a-z0-9A-Z]
NONASCII        = %x80-D7FF / %xE000-10FFFF
]]></sourcecode>
        </figure>
        <t>While an ABNF grammar defines the set of character strings that are
considered to be valid CDN by this ABNF, the mapping of these
character strings into the generic data model of CBOR is not always
obvious.</t>
        <t><cref anchor="move3">Further information can be moved up to Section 2 by
splitting it up into information specific to the ABNF grammar and
general information.</cref></t>
        <t>The following additional items should help in the interpretation:</t>
        <ol spacing="normal" type="1" start="1"><li>
            <t>As mentioned in the terminology (<xref target="terminology"/>), the ABNF terminal
  values in this document define Unicode scalar values (characters)
  rather than their UTF-8 encoding.  For example, the Unicode PLACE OF
  INTEREST SIGN (U+2318) would be defined in ABNF as %x2318.</t>
          </li>
          <li anchor="cr">
            <t>See <xref target="repertoire"/> for more considerations about the
  character repertoire used for CDN source text and, in particular,
  the special handling of newline characters in the source.</t>
          </li>
          <li anchor="decnumber">
            <t><tt>decnumber</tt> stands for an integer in the usual decimal notation, unless at
  least one of the optional parts starting with "." and "e" are
  present, in which case it stands for a floating point value in the
  usual decimal notation.  Note that the grammar allows <tt>3.</tt> for
  <tt>3.0</tt> and <tt>.3</tt> for <tt>0.3</tt> (also for hexadecimal floating point
  below); implementers are advised that some platform numeric parsers
  accept only a subset of the floating point syntax in this document
  and may require some preprocessing to use here.</t>
          </li>
          <li>
            <t><tt>hexint</tt>, <tt>octint</tt>, and <tt>binint</tt> stand for an integer in the usual base 16/hexadecimal
  ("0x"), base 8/octal ("0o"), or base 2/binary ("0b") notation.
  <tt>hexfloat</tt> stands
  for a floating point number in the usual hexadecimal notation (which
  uses a mantissa in hexadecimal and an exponent in decimal notation,
  see Section 5.12.3 of <xref target="IEEE754"/>, Section 6.4.4.3 of <xref target="C"/>, or Section
  5.13.4 of <xref target="Cplusplus"/>; floating-suffix/floating-point-suffix from
  the latter two is not used here).</t>
          </li>
          <li anchor="intnumber">
            <t>For <tt>hexint</tt>, <tt>octint</tt>, <tt>binint</tt>, and when <tt>decnumber</tt> stands for an integer, the
   corresponding CBOR data item is represented using major type 0 or 1
   if possible, or using tag 2 or 3 if not.
   In the latter case, this specification does not define any encoding
   indicators that apply.
   If fine control over encoding is desired, this can be expressed by
   being explicit about the representation as a tag:
   E.g., <tt>987654321098765432310</tt>, which is equivalent to <tt>2(h'35 8a 75
   04 38 f3 80 f5 f6')</tt> in its Preferred Serialization, might be
   written as <tt>2_3(h'00 00 00 35 8a 75 04 38 f3 80 f5 f6'_1)</tt> if
   leading zeros need to be added during serialization to obtain
   specific sizes for tag head, byte string head, and the overall byte
   string.  </t>
            <t>
When <tt>decnumber</tt> stands for a floating point value, and for
<tt>hexfloat</tt> and <tt>nonfin</tt>, a floating point data item with major
type 7 is used; diagnostic implementations employ Preferred
Serialization unless the item was modified by an
encoding indicator, which then needs to be <tt>_1</tt>, <tt>_2</tt>, or <tt>_3</tt>.
For this, the number range needs to fit into an <xref target="IEEE754"/> binary64 (or the size
corresponding to the encoding indicator), and the precision will be
adjusted to binary64 before further applying Preferred Serialization
(or to the size corresponding to the encoding indicator).
Tag 4/5 representations are not generated in these cases.
Future app-prefixes could be defined to allow more control for
obtaining a tag 4/5 representation directly from a hex or decimal
floating point literal.</t>
          </li>
          <li anchor="spec">
            <t><tt>spec</tt> stands for an encoding indicator.
  See <xref target="encoding-indicators"/> for details.</t>
          </li>
          <li anchor="rawstring-grammar">
            <t>The ABNF grammar for raw strings is lenient; a parser needs to
  implement the ABNF comments on <tt>alikerawdelim</tt> and <tt>shortrawdelim</tt> as
  well.
  <tt>shortrawdelim</tt> only matches sequences of backquotes that are
  shorter than <tt>startrawdelim</tt>.
  <tt>alikerawdelim</tt> only matches sequences of backquotes that are
  exactly as long as <tt>startrawdelim</tt>.</t>
          </li>
        </ol>
        <aside>
          <t>In a PEG parser that implements predicates, these matching rules
can for instance be implemented as follows:</t>
          <artwork><![CDATA[
 startrawdelim = rawdelim&{|(rd)|@rdlen = rd.text_value.length}
 shortrawdelim = rawdelim&{|(rd)|rd.text_value.length < @rdlen}
 alikerawdelim = rawdelim&{|(rd)|rd.text_value.length == @rdlen}
]]></artwork>
        </aside>
      </section>
      <section anchor="app-grammars">
        <name>ABNF Definitions for App-Extension Content</name>
        <t>This subsection provides ABNF definitions for the content of
prefixed literals defined in <xref target="STD94"/> and in this
specification, where applicable.
These grammars describe the <em>decoded</em> content of the single-quoted or
raw string components that
combine with prefixes to form
prefixed literals.
Each of these may integrate ABNF rules defined in <xref target="abnf-grammar"/>,
which are not always repeated here.</t>
        <t><xref target="tab-prefixes"/> summarizes the app-prefix values defined in this document.</t>
        <table anchor="tab-prefixes">
          <name>App-prefix Values Defined in this Document</name>
          <thead>
            <tr>
              <th align="left">app-prefix</th>
              <th align="left">content of single-quoted or raw string</th>
              <th align="left">result type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">hexadecimal form of binary data</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">H</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">base64 forms (classic or base64url) of binary data</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">B64</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">RFC 3339 date/time</td>
              <td align="left">number (int or float)</td>
            </tr>
            <tr>
              <td align="left">DT</td>
              <td align="left">"</td>
              <td align="left">Tag 1 on the above</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP address or prefix</td>
              <td align="left">byte string, <br/>array of length and byte string</td>
            </tr>
            <tr>
              <td align="left">IP</td>
              <td align="left">"</td>
              <td align="left">Tag 54 (IPv6) or 52 (IPv4) on the above</td>
            </tr>
            <tr>
              <td align="left">hash</td>
              <td align="left">string (usually used with sequences)</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">HASH</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">t1</td>
              <td align="left">strings (usually used with sequences)</td>
              <td align="left">text string</td>
            </tr>
            <tr>
              <td align="left">T1</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">b1</td>
              <td align="left">strings (usually used with sequences)</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">B1</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">cri</td>
              <td align="left">RFC 3986 URI or URI reference</td>
              <td align="left">CBOR structure representing equivalent CRI</td>
            </tr>
            <tr>
              <td align="left">CRI</td>
              <td align="left">"</td>
              <td align="left">Tag 99 on the above</td>
            </tr>
            <tr>
              <td align="left">float</td>
              <td align="left">floating point value from input bytes</td>
              <td align="left">floating point value (mt=7)</td>
            </tr>
            <tr>
              <td align="left">FLOAT</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
        <t>Note that implementation platforms may already provide implementations
of grammars used in app-extensions, such as of RFC 3339 for
<tt>dt''</tt> and of IP address syntax for <tt>ip''</tt>.
CDN-based tools may want to use these implementation libraries instead
of using the grammars that are provided here as a reference.</t>
        <t>For convenience, the common definitions in <xref target="abnf-grammar-ext-common"/>
are not repeated in the below ABNF grammars.</t>
        <figure anchor="abnf-grammar-ext-common">
          <name>Common Rules Used in app-extension ABNF grammars</name>
          <sourcecode type="abnf" name="cdn-extcommon.abnf"><![CDATA[
ALPHA           = %x41-5a / %x61-7a
DIGIT           = %x30-39 ; 0-9
HEXDIG          = DIGIT / HEXDIGA
HEXDIGA         = "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
lblank          = %x0A / %x20  ; Not HT or CR (gone)
non-lf          = %x20-7f / NONASCII
NONASCII        = %x80-D7FF / %xE000-10FFFF
]]></sourcecode>
        </figure>
        <section anchor="h-grammar">
          <name>h: ABNF Definition of Hexadecimal representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in hex,
such as <tt>h''</tt>, <tt>h'0815'</tt>, or <tt>h'/head/ 63 /contents/ 66 6f 6f'</tt>
(another representation of <tt>&lt;&lt; "foo" &gt;&gt;</tt>), is described by the ABNF in <xref target="abnf-grammar-h"/>.
This syntax accommodates both lowercase and uppercase hex digits, as
well as blank space (including comments) around each hex digit.</t>
          <figure anchor="abnf-grammar-h">
            <name>ABNF Definition of Hexadecimal Representation of a Byte String</name>
            <sourcecode type="abnf" name="cdn-ext-h.abnf"><![CDATA[
app-string-h    = S *(HEXDIG S HEXDIG S / ellipsis S)
                  [eol-comment *non-lf]
ellipsis        = 3*"."
non-slash       = lblank / %x21-2e / %x30-7f / NONASCII
non-slash-star  = lblank / %x21-29 / %x2b-2e / %x30-7f / NONASCII
non-star        = lblank / %x21-29 / %x2b-7f / NONASCII
ends-in-star    = *non-star 1*"*"
non-lf          = %x20-7f / NONASCII
eol-comment     = "#" / "//"
S               = *lblank *(comment *lblank)
comment         = "/" non-slash-star *non-slash "/"
                / "/*" ends-in-star
                       *(non-slash-star ends-in-star) "/"
                / eol-comment *non-lf %x0A
]]></sourcecode>
          </figure>
          <aside>
            <t>The comment syntax provided inside the hex string is intended to
mimic the overall syntax for comments in CDN (<xref target="comments"/>).<br/>
Implementation note: Comments and blank space are also described by
the following search regexp, which can be used to remove them.
For display, the regexp is split along the outer
alternative into four lines, which need to be combined before use;
<tt>\z</tt> stands for the end of the string and is notated <tt>$</tt> in some
regexp dialects.</t>
            <artwork><![CDATA[
  \s|
  /\*(?:[^*]*\*+)(?:[^/*][^*]*\*+)*/|
  /[^/*][^/]*/|
  (?:#|//)[^\n]*(?:\n|\z)
]]></artwork>
          </aside>
        </section>
        <section anchor="b64-grammar">
          <name>b64: ABNF Definition of Base64 representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in base64 is
described by the ABNF in <xref target="abnf-grammar-b64"/>.</t>
          <t>This syntax allows both the classic (<xref section="4" sectionFormat="of" target="RFC4648"/>) and the
URL-safe (<xref section="5" sectionFormat="of" target="RFC4648"/>) alphabet to be used.
It accommodates, but does not require base64 padding.
Note that inclusion of classic base64 makes it impossible to have
comments based on slash characters in b64, as "<tt>/</tt>" is valid base64-classic.</t>
          <figure anchor="abnf-grammar-b64">
            <name>ABNF definition of Base64 Representation of a Byte String</name>
            <sourcecode type="abnf" name="cdn-ext-b64.abnf"><![CDATA[
app-string-b64  = B *(4(b64dig B))
                  [b64dig B b64dig B ["=" B "=" / b64dig B ["="]] B]
                  ["#" *non-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
B               = *lblank *(comment *lblank)
comment         = "#" *non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="dt-grammar">
          <name>dt: ABNF Definition of RFC 3339 Representation of a Date/Time</name>
          <t>The syntax of the content of <tt>dt</tt> literals can be described by the
ABNF for <tt>date-time</tt> in <xref target="abnf-grammar-dt"/>.
This is derived from <xref target="RFC3339"/> as summarized in <xref section="3" sectionFormat="of" target="RFC9165"/>.</t>
          <figure anchor="abnf-grammar-dt">
            <name>ABNF Definition of RFC3339 Representation of a Date/Time</name>
            <sourcecode type="abnf" name="cdn-ext-dt.abnf"><![CDATA[
app-string-dt   = date-time

date-fullyear   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                          ; month/year
time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap sec
                          ; rules
time-secfrac    = "." 1*DIGIT
time-numoffset  = ("+" / "-") time-hour ":" time-minute
time-offset     = "Z" / time-numoffset

partial-time    = time-hour ":" time-minute ":" time-second
                  [time-secfrac]
full-date       = date-fullyear "-" date-month "-" date-mday
full-time       = partial-time time-offset

date-time       = full-date "T" full-time
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ip-grammar">
          <name>ip: ABNF Definition of Textual Representation of an IP Address</name>
          <t>The syntax of the content of <tt>ip</tt> literals can be described by the
ABNF for <tt>IPv4address</tt> and <tt>IPv6address</tt> in <xref section="3.2.2" sectionFormat="of" target="RFC3986"/>,
as included in slightly updated form in <xref target="abnf-grammar-ip"/>.</t>
          <figure anchor="abnf-grammar-ip">
            <name>ABNF Definition of Textual Representation of an IP Address</name>
            <sourcecode type="abnf" name="cdn-ext-ip.abnf"><![CDATA[
app-string-ip = IPaddress ["/" uint]

IPaddress     = IPv4address
              / IPv6address

; ABNF from RFC 3986, re-arranged for PEG compatibility:

IPv6address   =                            6( h16 ":" ) ls32
              /                       "::" 5( h16 ":" ) ls32
              / [ h16               ] "::" 4( h16 ":" ) ls32
              / [ h16 *1( ":" h16 ) ] "::" 3( h16 ":" ) ls32
              / [ h16 *2( ":" h16 ) ] "::" 2( h16 ":" ) ls32
              / [ h16 *3( ":" h16 ) ] "::"    h16 ":"   ls32
              / [ h16 *4( ":" h16 ) ] "::"              ls32
              / [ h16 *5( ":" h16 ) ] "::"              h16
              / [ h16 *6( ":" h16 ) ] "::"

h16           = 1*4HEXDIG
ls32          = ( h16 ":" h16 ) / IPv4address
IPv4address   = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet     = "25" %x30-35         ; 250-255
              / "2" %x30-34 DIGIT    ; 200-249
              / "1" 2DIGIT           ; 100-199
              / %x31-39 DIGIT        ; 10-99
              / DIGIT                ; 0-9

DIGIT1        = %x31-39 ; 1-9
uint          = "0" / DIGIT1 *DIGIT
]]></sourcecode>
          </figure>
        </section>
        <section anchor="cri-grammar">
          <name>cri: ABNF Definition of URI Representation of a CRI</name>
          <t>It can be expected that implementations of the app-extension
identifier "<tt>cri</tt>" will make use of platform-provided URI
implementations, which will include a URI parser.</t>
          <t>In case such a URI parser is not available or inconvenient to
integrate,
a grammar of the content of <tt>cri</tt> literals is provided by the
ABNF for <tt>URI-reference</tt> in Section <xref target="RFC3986" section="4.1" sectionFormat="bare"/> of RFC 3986 <xref target="RFC3986"/> with certain
re-arrangements taken from <xref target="ip-grammar"/>;
these are reproduced in <xref target="abnf-grammar-cri"/>.
If the content is not ASCII only (i.e., for IRIs), first apply
<xref section="3.1" sectionFormat="of" target="RFC3987"/> and apply this grammar to the result.</t>
          <figure anchor="abnf-grammar-cri">
            <name>ABNF Definition of URI Representation of a CRI</name>
            <sourcecode type="abnf" name="cdn-ext-cri.abnf"><![CDATA[
app-string-cri = URI-reference
; ABNF from RFC 3986:

URI           = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part     = "//" authority path-abempty
                 / path-absolute
                 / path-rootless
                 / path-empty

URI-reference = URI / relative-ref

absolute-URI  = scheme ":" hier-part [ "?" query ]

relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

relative-part = "//" authority path-abempty
                 / path-absolute
                 / path-noscheme
                 / path-empty

scheme        = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )

authority     = [ userinfo "@" ] host [ ":" port ]
userinfo      = *( unreserved / pct-encoded / sub-delims / ":" )
host          = IP-literal / IPv4address / reg-name
port          = *DIGIT

IP-literal    = "[" ( IPv6address / IPvFuture  ) "]"

IPvFuture     = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )

; Use IPv6address, h16, ls32, IPv4adress, dec-octet as re-arranged
; for PEG Compatibility in Figure 6 of [RFC XXXX]:

IPv6address   =                            6( h16 ":" ) ls32
              /                       "::" 5( h16 ":" ) ls32
              / [ h16               ] "::" 4( h16 ":" ) ls32
              / [ h16 *1( ":" h16 ) ] "::" 3( h16 ":" ) ls32
              / [ h16 *2( ":" h16 ) ] "::" 2( h16 ":" ) ls32
              / [ h16 *3( ":" h16 ) ] "::"    h16 ":"   ls32
              / [ h16 *4( ":" h16 ) ] "::"              ls32
              / [ h16 *5( ":" h16 ) ] "::"              h16
              / [ h16 *6( ":" h16 ) ] "::"

h16           = 1*4HEXDIG
ls32          = ( h16 ":" h16 ) / IPv4address
IPv4address   = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet     = "25" %x30-35         ; 250-255
              / "2" %x30-34 DIGIT    ; 200-249
              / "1" 2DIGIT           ; 100-199
              / %x31-39 DIGIT        ; 10-99
              / DIGIT                ; 0-9

reg-name      = *( unreserved / pct-encoded / sub-delims )

path          = path-abempty    ; begins with "/" or is empty
                 / path-absolute   ; begins with "/" but not "//"
                 / path-noscheme   ; begins with a non-colon segment
                 / path-rootless   ; begins with a segment
                 / path-empty      ; zero characters

path-abempty  = *( "/" segment )
path-absolute = "/" [ segment-nz *( "/" segment ) ]
path-noscheme = segment-nz-nc *( "/" segment )
path-rootless = segment-nz *( "/" segment )
path-empty    = 0<pchar>

segment       = *pchar
segment-nz    = 1*pchar
segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
                 ; non-zero-length segment without any colon ":"

pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

query         = *( pchar / "/" / "?" )

fragment      = *( pchar / "/" / "?" )

pct-encoded   = "%" HEXDIG HEXDIG

unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
reserved      = gen-delims / sub-delims
gen-delims    = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                 / "*" / "+" / "," / ";" / "="
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="integrated-grammars">
        <name>ABNF Definitions for Integrated Extension Parsers</name>
        <t>For some applications of CDN, it is an optimization to integrate
parsers for the content of some prefixed string literals into
the main parser, handling both the string literal syntax (e.g., escapes such
as <tt>\'</tt> and <tt>\\</tt>) and the syntax of the extension content in one go.</t>
        <t>For app-extensions that only use printable ASCII characters
(from U+0020 to U+007E) minus single-quote <tt>'</tt> and backslash <tt>\</tt>, the ABNF
such as that given in <xref target="app-grammars"/> can be directly used as an
integrated parser, after adding some glue ABNF.
For instance, for app-string-dt, add an alternative to <tt>bstr</tt> that
points to a rule for prefixed single-quoted string literals (<xref target="abnf-grammar-sq-glue"/>).</t>
        <figure anchor="abnf-grammar-sq-glue">
          <name>Glue ABNF for Integrated DT Parser</name>
          <sourcecode type="abnf" name="cdn-glue.abnf"><![CDATA[
bstr            = sq-app-string-dt /
                  app-string / sqstr / app-sequence / embedded
sq-app-string-dt = (%s"dt'"/%s"DT'") app-string-dt "'"
]]></sourcecode>
        </figure>
        <t>To facilitate writing integrated ABNF for more complex prefixed
string literals, the ABNF definitions in <xref target="abnf-grammar-sq"/> may
be useful and are used in the rest of this section.</t>
        <figure anchor="abnf-grammar-sq">
          <name>ABNF Definitions Useful for Integrated Extension Parsers</name>
          <sourcecode type="abnf" name="cdn-intcommon.abnf"><![CDATA[
i-HT =        %s"\t" / %s"\u" ("0009" / "{" *("0") "9}")
i-LF = %x0a / %s"\n" / %s"\u" ("000A" / "{" *("0") "A}")
i-CR = %x0d / %s"\r" / %s"\u" ("000D" / "{" *("0") "D}")

i-blank = i-LF / i-CR / " "
i-non-lf = i-HT / i-CR / %x20-26 / "\'" / %x28-5b
         / "\\" / %x5d-7f / i-NONASCII

i-NONASCII = NONASCII / %s"\u" ESCGE7F

; hex escaping for U+007F or greater
ESCGE7F = "D" ("8"/"9"/"A"/"B") 2HEXDIG
          %s"\u" "D" ("C"/"D"/"E"/"F") 2HEXDIG
        / FOURHEX1 / "0" HEXDIG1 2HEXDIG / "00" TWOHEX1
        / "{" *("0")
          ("10" 4HEXDIG / HEXDIG1 4HEXDIG
           / FOURHEX1 / HEXDIG1 2HEXDIG / TWOHEX1)
          "}"

; xxxx - 0xxx - Dhigh\uDloow
FOURHEX1 = (DIGIT1 / "A"/"B"/"C" / "E"/"F") 3HEXDIG
         / "D" ODIGIT 2HEXDIG
; 00xx - ASCII + 007F
TWOHEX1  = ("8"/"9" / HEXDIGA) HEXDIG / "7F"
]]></sourcecode>
        </figure>
        <t>Similarly, for integrated parsers for prefixed literals built from raw strings, the ABNF
definitions in <xref target="abnf-grammar-rs"/> can be useful.
<tt>alikerawdelim</tt> only matches sequences of backquotes that are exactly as
long as a previous <tt>startrawdelim</tt>.</t>
        <figure anchor="abnf-grammar-rs">
          <name>ABNF Definitions Useful for Raw String Integrated Extension Parsers</name>
          <sourcecode type="abnf" name="cdn-raw-intcommon.abnf"><![CDATA[
r-non-lf = %x0D / %x20-5f / %x61-7f / NONASCII / shortrawdelim
]]></sourcecode>
        </figure>
        <t>Four subsections with ABNF for integrated parsers follow, a pair for
<tt>h''</tt> and <tt>b64''</tt>, and a pair for <tt>h``</tt> and <tt>b64``</tt>.
There is no expectation for a new app-extension to supply ABNF
for an integrated parser (or any ABNF at all!), in particular if the
parsing function is likely to be fulfilled by a platform library.
If ABNF for the content of a single-quoted string is available in an
app-extension specification, ABNF for an integrated parser can
be written as a separate activity or also automatically derived (see
also <xref target="CDN-WIKI"/>, where more information about implementing integrated
parsers is being collected).</t>
        <section anchor="sq-h-grammar">
          <name>h'': ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/> and common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/> and <xref format="counter" target="abnf-grammar-sq"/>, ABNF such as
that shown in <xref target="abnf-grammar-sq-h"/> can be used as an integrated parser
for <tt>h</tt> prefixed single-quote strings.</t>
          <figure anchor="abnf-grammar-sq-h">
            <name>ABNF Definition for Integrated Hex Parser</name>
            <sourcecode type="abnf" name="cdn-int-hsq.abnf"><![CDATA[
sq-app-string-h = %s"h'" s-app-string-h "'"
s-app-string-h = h-S *(HEXDIG h-S HEXDIG h-S / ellipsis h-S)
    [eol-comment *i-non-lf]

h-S = *(i-blank) *(h-comment *(i-blank))
h-non-slash = i-blank / %x21-26 / "\'" / %x28-2e
            / %x30-5b / "\\" / %x5d-7f / i-NONASCII
h-non-slash-star = i-blank / %x21-26 / "\'" / %x28-29 / %x2b-2e
                 / %x30-5b / "\\" / %x5d-7f / i-NONASCII
h-non-star = i-blank / %x21-26 / "\'" / %x28-29 / %x2b-5b
           / "\\" / %x5d-7f / i-NONASCII
h-ends-in-star = *h-non-star 1*"*"
h-comment = "/" h-non-slash-star *h-non-slash "/"
          / "/*" h-ends-in-star
                 *(h-non-slash-star h-ends-in-star) "/"
          / eol-comment *i-non-lf i-LF
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-b64-grammar">
          <name>b64'': ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/> and common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/> and <xref format="counter" target="abnf-grammar-sq"/>, ABNF such as
that shown in <xref target="abnf-grammar-sq-b64"/> can be used as an integrated parser
for <tt>b64</tt> prefixed single-quote strings.</t>
          <figure anchor="abnf-grammar-sq-b64">
            <name>ABNF Definition for Integrated Base64 Parser</name>
            <sourcecode type="abnf" name="cdn-int-b64sq.abnf"><![CDATA[
sq-app-string-b64 = %s"b64'" s-app-string-b64 "'"
s-app-string-b64  = b64-S *(4(b64dig b64-S))
                  [b64dig b64-S b64dig b64-S
                   ["=" b64-S "=" / b64dig b64-S ["="]] b64-S]
                  ["#" *i-non-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
b64-S           = *i-blank *(b64-comment *i-blank)
b64-comment     = "#" *i-non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-h-raw-grammar">
          <name>h``: ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/> and common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/>, <xref format="counter" target="abnf-grammar-sq"/>
and
<xref format="counter" target="abnf-grammar-rs"/>, ABNF such as that shown in <xref target="abnf-grammar-rs-h"/> can
be used as an integrated parser for <tt>h</tt> prefixed raw strings.</t>
          <figure anchor="abnf-grammar-rs-h">
            <name>ABNF Definition for Integrated Raw String Hex Parser</name>
            <sourcecode type="abnf" name="cdn-int-hraw.abnf"><![CDATA[
raw-app-string-h = %s"h" startrawdelim r-app-string-h
r-app-string-h = rh-S *(HEXDIG rh-S HEXDIG rh-S / ellipsis rh-S)
    (eol-comment *r-non-lf alikerawdelim / alikerawdelim)
rh-S = *(lblank) *(rh-comment *(lblank))
rh-2 = %x61-7f / NONASCII / shortrawdelim
rh-non-slash = lblank / %x21-2e / %x30-5f / rh-2
rh-non-slash-star = lblank / %x21-29 / %x2b-2e / %x30-5f / rh-2
rh-non-star = lblank / %x21-29 / %x2b-5f / rh-2
rh-ends-in-star = *rh-non-star 1*"*"
rh-comment = "/" rh-non-slash-star *rh-non-slash "/"
           / "/*" rh-ends-in-star
                  *(rh-non-slash-star rh-ends-in-star) "/"
           / eol-comment *r-non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-b64-raw-grammar">
          <name>b64``: ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/>, common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/>, <xref format="counter" target="abnf-grammar-sq"/>
and <xref format="counter" target="abnf-grammar-rs"/> as well as the rule
<tt>b64dig</tt> from <xref target="abnf-grammar-sq-b64"/>, ABNF such as
that shown in <xref target="abnf-grammar-rs-b64"/> can be used as an integrated parser
for <tt>b64</tt> prefixed raw strings.</t>
          <figure anchor="abnf-grammar-rs-b64">
            <name>ABNF Definition for Integrated Raw String Base64 Parser</name>
            <sourcecode type="abnf" name="cdn-int-b64raw.abnf"><![CDATA[
raw-app-string-b64 = %s"b64" startrawdelim r-app-string-b64
r-app-string-b64  = rb64-S *(4(b64dig rb64-S))
                  [b64dig rb64-S b64dig rb64-S
                   ["=" rb64-S "=" / b64dig rb64-S ["="]] rb64-S]
                  ("#" *r-non-lf alikerawdelim / alikerawdelim)
rb64-S           = *lblank *(rb64-comment *lblank)
rb64-comment     = "#" *r-non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t><cref anchor="to-be-removed">RFC Editor: please replace RFC-XXXX with the RFC
number of this RFC, [IANA.concise-diagnostic-notation] with a
reference to the new registry group, and remove this note.</cref></t>
      <section anchor="appext-iana">
        <name>Concise Diagnostic Notation App-extension Identifiers Registry</name>
        <t>IANA is requested to create an "App-Extension Identifiers"
registry in a new "Concise Diagnostic Notation" registry group
[IANA.concise-diagnostic-notation], with the policy "expert review"
(Section <xref target="RFC8126" section="4.5" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions">The experts are instructed to be frugal in the allocation of
app-extension identifiers that are suggestive of generally applicable semantics,
keeping them in reserve for app-extensions that are likely to enjoy wide
use and can make good use of their conciseness.
The experts are also instructed to direct the registrant to provide a
specification (Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>), but can make exceptions,
for instance when a specification is not available at the time of
registration but is likely forthcoming.
If the experts become aware of app-extension identifiers that are deployed and
in use, they may also initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>App-Extension Identifier:</dt>
          <dd>
            <t>a lowercase ASCII <xref target="STD80"/> string that starts with a letter and can
contain letters, digits, and hyphens after that (<tt>[a-z][a-z0-9-]*</tt>).
No other entry in the registry can have the same
app-extension identifier.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
app-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana">
          <name>Initial Content of app-extension Identifier Registry</name>
          <thead>
            <tr>
              <th align="left">app-extension identifier</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">h32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">false</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">true</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">null</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">undefined</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">pragma</td>
              <td align="left">Reserved for future use</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">Date/Time</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP Address/Prefix</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">hash</td>
              <td align="left">Cryptographic Hash</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">b1</td>
              <td align="left">Byte String Concatenation</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">t1</td>
              <td align="left">Text String Concatenation</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">cri</td>
              <td align="left">Constrained Resource Identifier</td>
              <td align="left">RFC-XXXX, <xref target="I-D.ietf-core-href"/></td>
            </tr>
            <tr>
              <td align="left">float</td>
              <td align="left">Floating-Point Value</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="reg-ei">
        <name>Encoding Indicators</name>
        <t>IANA is requested to create an "Encoding Indicators"
registry in the newly created "Concise Diagnostic Notation" registry group
[IANA.concise-diagnostic-notation], with the policy "specification required"
(Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions-ei">The experts are instructed to be frugal in the allocation of
encoding indicators that are suggestive of generally applicable semantics,
keeping them in reserve for encoding indicator registrations that are likely to enjoy wide
use and can make good use of their conciseness.
If the experts become aware of encoding indicators that are deployed and
in use, they may also solicit a specification and initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Encoding Indicator:</dt>
          <dd>
            <t>an ASCII <xref target="STD80"/> string that starts with an underscore letter and
can contain zero or more underscores, letters and digits after that
(<tt>_[_A-Za-z0-9]*</tt>). No other entry in the registry can have the same
Encoding Indicator.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description.
This description may employ an abbreviation of the form <tt>ai=</tt>nn,
where nn is the numeric value of the field <em>additional information</em>, the
low-order 5 bits of the initial byte (see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
app-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana-ei"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana-ei">
          <name>Initial Content of Encoding Indicator Registry</name>
          <thead>
            <tr>
              <th align="left">Encoding Indicator</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">_</td>
              <td align="left">Indefinite-Length Encoding (ai=31)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_i</td>
              <td align="left">ai=0 to ai=23</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_0</td>
              <td align="left">ai=24</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_1</td>
              <td align="left">ai=25</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_2</td>
              <td align="left">ai=26</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_3</td>
              <td align="left">ai=27</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_4</td>
              <td align="left">Reserved (for ai=28)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_5</td>
              <td align="left">Reserved (for ai=29)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_6</td>
              <td align="left">Reserved (for ai=30)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_7</td>
              <td align="left">Reserved (see _)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <aside>
          <t>As the "Reference" column reflects, all the encoding indicators
initially registered are already defined in Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
with the exception of <tt>_i</tt>, which is defined in <xref target="grammar"/> of the
present document.</t>
        </aside>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types"
registry <xref target="IANA.media-types"/>.</t>
        <table anchor="new-media-type">
          <name>New Media Type application/cdn</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">cdn</td>
              <td align="left">application/cdn</td>
              <td align="left">RFC-XXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>cdn</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (UTF-8)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC XXXX</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Tools interchanging a human-readable form of CBOR</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>The syntax and semantics of fragment identifiers is as specified for
"application/cbor".  (At publication of RFC XXXX, there is no
fragment identification syntax defined for "application/cbor".)</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t><br/>
            </t>
            <dl>
              <dt>Deprecated alias names for this type:</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>Magic number(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.cdn</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>CBOR WG mailing list (cbor@ietf.org),
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>LIMITED USE</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>Concise diagnostic notation represents CBOR data items, which are the
format intended for actual interchange.
The media type application/cdn is intended to be used
within documents about CBOR data items, in diagnostics for human
consumption, and in other representations of CBOR data items that
are necessarily text-based such as in configuration files or other
data edited by humans, often under source-code control.</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-format">
        <name>Content-Format</name>
        <t>IANA is requested to register a Content-Format number in the
<xref section="&quot;CoAP Content-Formats&quot;" relative="#content-formats" sectionFormat="bare" target="IANA.core-parameters"/>
sub-registry, within the "Constrained RESTful Environments (CoRE)
Parameters" Registry <xref target="IANA.core-parameters"/>, as follows:</t>
        <table anchor="tab-content-format">
          <name>New Content-Format for application/cdn</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/cdn</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>TBD1 is to be assigned from the space 256..9999, according to the
procedure "IETF Review or IESG Approval", preferably a number less
than 1000.</t>
      </section>
      <section anchor="iana-tags">
        <name>Tags</name>
        <t><cref anchor="cpa_1">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
        <t>In the "CBOR Tags" registry <xref target="IANA.cbor-tags"/>, IANA is requested to assign the
tags in <xref target="tab-tag-values"/> from the "specification required" space
(suggested assignments: 888 and 999), with the present document as the
specification reference.</t>
        <table anchor="tab-tag-values">
          <name>Values for Tags</name>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">CPA888</td>
              <td align="left">null or array</td>
              <td align="left">Diagnostic Notation Ellipsis</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="right">CPA999</td>
              <td align="left">array</td>
              <td align="left">Diagnostic Notation<br/>Unresolved App-Extension</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="STD94"/> apply, including by applying
the considerations about the CBOR format to the CDN format in an
analogous sense.
Security considerations documented in <xref target="RFC8610"/> for the CDDL language
often are also applicable to the CDN language in an analogous sense.</t>
      <t>The CDN specification defines two explicit extension points:
app-extension identifiers (<xref target="appext-iana"/>) and encoding
indicators (<xref target="reg-ei"/>).
Extensions introduced through these can have their own security
considerations, which need to be considered in the specification for
the extension (see, e.g., <xref section="5" sectionFormat="of" target="I-D.ietf-cbor-edn-e-ref"/>).</t>
      <t>Implementers of tools that support the use of CDN extensions need to
avoid inadvertently introducing a vector that allows attackers to
invoke extensions not planned for by the tool operator, who might not
have considered security considerations of specific extensions such as
those posed by their use of dereferenceable identifiers (<xref section="6" sectionFormat="of" target="I-D.bormann-t2trg-deref-id"/>).</t>
      <t>Tools might require explicitly enabling the use of each extension that
is not on an allowlist.
(This task can possibly be made less onerous by combining it with a
mechanism for supplying any parameters that control such an extension.)</t>
      <t>Tools that process app-extensions — directly from their use in
CDN or later via Tag CPA999 (<xref target="unknown"/>) — need to be configured out of
band to enable processing each specific app-extension only if
that is desired.
An allowlist built out of the mandatory-to-implement application
extensions may be an exception.</t>
      <t>Similarly, inputs to validators may be prepared with partially
specified subtrees by representing ellipses via Tag CPA888
(<xref target="elision"/>).
Validators that want to accept such partially specified CBOR data
items need to require explicit configuration to do so.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
          <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
            <front>
              <title>Concise Binary Object Representation (CBOR)</title>
              <author fullname="C. Bormann" initials="C." surname="Bormann"/>
              <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
              <date month="December" year="2020"/>
              <abstract>
                <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
                <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="94"/>
            <seriesInfo name="RFC" value="8949"/>
            <seriesInfo name="DOI" value="10.17487/RFC8949"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8742"/>
          <seriesInfo name="DOI" value="10.17487/RFC8742"/>
        </reference>
        <referencegroup anchor="STD68" target="https://www.rfc-editor.org/info/std68">
          <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234">
            <front>
              <title>Augmented BNF for Syntax Specifications: ABNF</title>
              <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
              <author fullname="P. Overell" initials="P." surname="Overell"/>
              <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>
        </referencegroup>
        <referencegroup anchor="STD63" target="https://www.rfc-editor.org/info/std63">
          <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629">
            <front>
              <title>UTF-8, a transformation format of ISO 10646</title>
              <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
              <date month="November" year="2003"/>
              <abstract>
                <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="63"/>
            <seriesInfo name="RFC" value="3629"/>
            <seriesInfo name="DOI" value="10.17487/RFC3629"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC7405">
          <front>
            <title>Case-Sensitive String Support in ABNF</title>
            <author fullname="P. Kyzivat" initials="P." surname="Kyzivat"/>
            <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="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC3987">
          <front>
            <title>Internationalized Resource Identifiers (IRIs)</title>
            <author fullname="M. Duerst" initials="M." surname="Duerst"/>
            <author fullname="M. Suignard" initials="M." surname="Suignard"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>This document defines a new protocol element, the Internationalized Resource Identifier (IRI), as a complement of the Uniform Resource Identifier (URI). An IRI is a sequence of characters from the Universal Character Set (Unicode/ISO 10646). A mapping from IRIs to URIs is defined, which means that IRIs can be used instead of URIs, where appropriate, to identify resources.</t>
              <t>The approach of defining a new protocol element was chosen instead of extending or changing the definition of URIs. This was done in order to allow a clear distinction and to avoid incompatibilities with existing software. Guidelines are provided for the use and deployment of IRIs in various protocols, formats, and software components that currently deal with URIs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3987"/>
          <seriesInfo name="DOI" value="10.17487/RFC3987"/>
        </reference>
        <reference anchor="RFC9164">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes</title>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This specification defines two Concise Binary Object Representation (CBOR) tags for use with IPv6 and IPv4 addresses and prefixes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9164"/>
          <seriesInfo name="DOI" value="10.17487/RFC9164"/>
        </reference>
        <reference anchor="RFC9485">
          <front>
            <title>I-Regexp: An Interoperable Regular Expression Format</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="T. Bray" initials="T." surname="Bray"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document specifies I-Regexp, a flavor of regular expression that is limited in scope with the goal of interoperation across many different regular expression libraries.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9485"/>
          <seriesInfo name="DOI" value="10.17487/RFC9485"/>
        </reference>
        <reference anchor="IANA.cose" target="https://www.iana.org/assignments/cose">
          <front>
            <title>CBOR Object Signing and Encryption (COSE)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <referencegroup anchor="BCP26" target="https://www.rfc-editor.org/info/bcp26">
          <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
            <front>
              <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
              <author fullname="M. Cotton" initials="M." surname="Cotton"/>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <author fullname="T. Narten" initials="T." surname="Narten"/>
              <date month="June" year="2017"/>
              <abstract>
                <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
                <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
                <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="26"/>
            <seriesInfo name="RFC" value="8126"/>
            <seriesInfo name="DOI" value="10.17487/RFC8126"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="STD80" target="https://www.rfc-editor.org/info/std80">
          <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc20">
            <front>
              <title>ASCII format for network interchange</title>
              <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
              <date month="October" year="1969"/>
            </front>
            <seriesInfo name="STD" value="80"/>
            <seriesInfo name="RFC" value="20"/>
            <seriesInfo name="DOI" value="10.17487/RFC20"/>
          </reference>
        </referencegroup>
        <reference anchor="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="21" month="November" year="2025"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) rather than as a
   sequence of characters.  This approach simplifies parsing,
   comparison, and reference resolution in environments with severe
   limitations on processing power, code size, and memory size.

   This RFC updates RFC 7595 by adding a column on the "URI Schemes"
   registry.


   // (This "cref" paragraph will be removed by the RFC editor:) After
   // approval of -28 and nit fixes in -29, the present revision -30
   // contains two more small fixes for nits that were uncovered in the
   // RPC intake process.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-30"/>
        </reference>
        <reference anchor="IEEE754" target="https://ieeexplore.ieee.org/document/8766229">
          <front>
            <title>IEEE Standard for Floating-Point Arithmetic</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="IEEE Std" value="754-2019"/>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2019.8766229"/>
        </reference>
        <reference anchor="C" target="https://www.iso.org/standard/82075.html">
          <front>
            <title>Information technology — Programming languages — C</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2024" month="October"/>
          </front>
          <seriesInfo name="ISO/IEC" value="9899:2024"/>
          <annotation> 
The standard is widely known as C23. Its technical content is also available via <eref target="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf">https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf</eref>.</annotation>
          <refcontent>Edition 5</refcontent>
        </reference>
        <reference anchor="Cplusplus" target="https://www.iso.org/standard/83626.html">
          <front>
            <title>Programming languages — C++</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2024" month="October"/>
          </front>
          <seriesInfo name="ISO/IEC" value="14882:2024"/>
          <annotation> 
The standard is widely known as C++23. Its technical content is also available via <eref target="https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf">https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf</eref>.</annotation>
          <refcontent>Edition 7</refcontent>
        </reference>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
            <front>
              <title>Key words for use in RFCs to Indicate Requirement Levels</title>
              <author fullname="S. Bradner" initials="S." surname="Bradner"/>
              <date month="March" year="1997"/>
              <abstract>
                <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
          </reference>
          <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
            <front>
              <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <date month="May" year="2017"/>
              <abstract>
                <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
          </reference>
        </referencegroup>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC9290">
          <front>
            <title>Concise Problem Details for Constrained Application Protocol (CoAP) APIs</title>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="October" year="2022"/>
            <abstract>
              <t>This document defines a concise "problem detail" as a way to carry machine-readable details of errors in a Representational State Transfer (REST) response to avoid the need to define new error response formats for REST APIs for constrained environments. The format is inspired by, but intended to be more concise than, the problem details for HTTP APIs defined in RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9290"/>
          <seriesInfo name="DOI" value="10.17487/RFC9290"/>
        </reference>
        <referencegroup anchor="STD90" target="https://www.rfc-editor.org/info/std90">
          <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
            <front>
              <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
              <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
              <date month="December" year="2017"/>
              <abstract>
                <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
                <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="90"/>
            <seriesInfo name="RFC" value="8259"/>
            <seriesInfo name="DOI" value="10.17487/RFC8259"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC7493">
          <front>
            <title>The I-JSON Message Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2015"/>
            <abstract>
              <t>I-JSON (short for "Internet JSON") is a restricted profile of JSON designed to maximize interoperability and increase confidence that software can process it successfully with predictable results.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7493"/>
          <seriesInfo name="DOI" value="10.17487/RFC7493"/>
        </reference>
        <reference anchor="I-D.bormann-cbor-numbers">
          <front>
            <title>On Numbers in CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="1" month="March" year="2026"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR), as defined in STD 94
   (RFC 8949), is a data representation format whose design goals
   include the possibility of extremely small code size, fairly small
   message size, and extensibility without the need for version
   negotiation.

   Among the kinds of data that a data representation format needs to be
   able to carry, numbers have a prominent role, but also have inherent
   complexity that needs attention from protocol designers, from
   implementers of CBOR libraries, and from implementers of the
   applications that use them.

   This document gives an overview over number formats available in CBOR
   and some notable CBOR tags registered, and it attempts to provide
   information about opportunities and potential pitfalls of these
   number formats.


   // This is still rather drafty, pieced together from various
   // components, so it has a higher level of redundancy than ultimately
   // desired.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-numbers-03"/>
        </reference>
        <reference anchor="RFC9165">
          <front>
            <title>Additional Control Operators for the Concise Data Definition Language (CDDL)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, provides "control operators" as its main language extension point.</t>
              <t>The present document defines a number of control operators that were not yet ready at the time RFC 8610 was completed:.plus,.cat, and.det for the construction of constants;.abnf/.abnfb for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and.feature for indicating the use of a non-basic feature in an instance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9165"/>
          <seriesInfo name="DOI" value="10.17487/RFC9165"/>
        </reference>
        <reference anchor="RFC9741">
          <front>
            <title>Concise Data Definition Language (CDDL): Additional Control Operators for the Conversion and Processing of Text</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="March" year="2025"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, provides "control operators" as its main language extension point. RFCs have added to this extension point in both an application-specific and a more general way.</t>
              <t>The present document defines a number of additional generally applicable control operators for text conversion (bytes, integers, printf-style formatting, and JSON) and for an operation on text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9741"/>
          <seriesInfo name="DOI" value="10.17487/RFC9741"/>
        </reference>
        <reference anchor="RFC9682">
          <front>
            <title>Updates to the Concise Data Definition Language (CDDL) Grammar</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="November" year="2024"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), as defined in RFCs 8610 and 9165, provides an easy and unambiguous way to express structures for protocol messages and data formats that are represented in Concise Binary Object Representation (CBOR) or JSON.</t>
              <t>This document updates RFC 8610 by addressing related errata reports and making other small fixes for the ABNF grammar defined for CDDL.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9682"/>
          <seriesInfo name="DOI" value="10.17487/RFC9682"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-edn-e-ref">
          <front>
            <title>External References to Values in CBOR Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="1" month="March" year="2026"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR, RFC 8949) is a data
   format whose design goals include the possibility of extremely small
   code size, fairly small message size, and extensibility without the
   need for version negotiation.

   CBOR diagnostic notation (EDN) is widely used to represent CBOR data
   items in a way that is accessible to humans, for instance for
   examples in a specification.  At the time of writing, EDN did not
   provide mechanisms for composition of such examples from multiple
   components or sources.  This document uses EDN application extensions
   to provide two such mechanisms, both of which insert an imported data
   item into the data item being described in EDN:

   The e'' application extension provides a way to import data items,
   particularly constant values, from a CDDL model (which itself has
   ways to provide composition).

   The ref'' application extension provides a way to import data items
   that are described in EDN.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-e-ref-03"/>
        </reference>
        <reference anchor="I-D.bormann-t2trg-deref-id">
          <front>
            <title>The "dereferenceable identifier" pattern</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="24" month="February" year="2026"/>
            <abstract>
              <t>   In a protocol or an application environment, it is often important to
   be able to create unambiguous identifiers for some meaning (concept
   or some entity).

   Due to the simplicity of creating URIs, these have become popular for
   this purpose.  Beyond the purpose of identifiers to be uniquely
   associated with a meaning, some of these URIs are in principle
   _dereferenceable_, so something can be placed that can be retrieved
   when encountering such a URI.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-deref-id-07"/>
        </reference>
        <reference anchor="RFC9512">
          <front>
            <title>YAML Media Type</title>
            <author fullname="R. Polli" initials="R." surname="Polli"/>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <author fullname="E. Aro" initials="E." surname="Aro"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document registers the application/yaml media type and the +yaml structured syntax suffix with IANA. Both identify document components that are serialized according to the YAML specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9512"/>
          <seriesInfo name="DOI" value="10.17487/RFC9512"/>
        </reference>
        <reference anchor="YAML" target="https://yaml.org/spec/1.2.2/">
          <front>
            <title>YAML Ain't Markup Language (YAML™) Version 1.2</title>
            <author initials="O." surname="Ben-Kiki" fullname="Oren Ben-Kiki">
              <organization/>
            </author>
            <author initials="C." surname="Evans" fullname="Clark Evans">
              <organization/>
            </author>
            <author initials="I." surname="döt Net" fullname="Ingy döt Net">
              <organization/>
            </author>
            <date year="2021" month="October" day="01"/>
          </front>
          <refcontent>Revision 1.2.2</refcontent>
        </reference>
        <reference anchor="CDN-WIKI" target="https://github.com/cbor-wg/edn/wiki">
          <front>
            <title>CDN Wiki</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 3040?>

<section anchor="cdn-and-cddl">
      <name>CDN and CDDL</name>
      <t>This appendix is for information.</t>
      <t>CDN was designed as a language to provide a human-readable
representation of an instance, i.e., a single CBOR data item or CBOR
sequence.
CDDL was designed as a language to describe an (often large) set of
such instances (which itself constitutes a language), in the form of a
<em>data definition</em> or <em>grammar</em> (or sometimes called <em>schema</em>).</t>
      <t>The two languages share some similarities, not the least because they
have mutually inspired each other.
But they have very different roots:</t>
      <ul spacing="normal">
        <li>
          <t>CDN syntax is an extension to JSON syntax <xref target="STD90"/>.<br/>
(Any (interoperable) JSON text is also valid CDN.)</t>
        </li>
        <li>
          <t>CDDL syntax is inspired by ABNF's syntax <xref target="STD68"/>.</t>
        </li>
      </ul>
      <t>For engineers that are using both CDN and CDDL, it is easy to write
"CDDLisms" or "CDNisms" into their drafts that are meant to be in the
other language.
(This is one more of the many motivations to always validate formal
language instances with tools.)</t>
      <t>Important differences include:</t>
      <ul spacing="normal">
        <li>
          <t>Comment syntax.  CDDL inherits ABNF's semicolon-delimited end of
line characters, while CDN finds nothing in JSON that could be inherited here.
Inspired by JavaScript, CDN simplifies JavaScript's copy of the
original C comment syntax to be delimited by single slashes (where
line breaks are not of interest); it also adds traditional C-style
inline comments (<tt>/*</tt> ... <tt>*/</tt>) and end-of-line comments
that start with <tt>#</tt> or <tt>//</tt>.  </t>
          <dl spacing="compact">
            <dt>CDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
{ / alg / 1: -7 / ECDSA 256 / }
{ 1:   # alg
    -7 # ECDSA 256
}
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>? 1 =&gt; int / tstr,  ; algorithm identifier</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Syntax for tags.  CDDL's tag syntax is part of the system for
referring to CBOR's fundamentals (the major type 6, in this case)
and (with <xref target="RFC9682"/>) allows specifying the actual tag number
separately, while CDN's tag syntax is a simple decimal number and a
pair of parentheses.  </t>
          <dl>
            <dt>CDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
98([h'', # empty encoded protected header
    {},  # empty unprotected header
    ...  # rest elided here
   ])
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>COSE_Sign_Tagged = #6.98(COSE_Sign)</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Embedded CBOR.  CDN has a special syntax to describe the content of
byte strings that are encoded CBOR data items.  CDDL can specify
these with a control operator, which looks very different.  </t>
          <dl>
            <dt>CDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
98([<< {/alg/ 1: -7 /ECDSA 256/} >>, # == h'a10126'
    ...                              # rest elided here
   ])
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>serialized_map = bytes .cbor header_map</tt></t>
            </dd>
          </dl>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="list-of-figures">
      <name>List of Figures</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="abnf-grammar"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar"/></t>
        </dd>
        <dt><xref target="abnf-grammar-ext-common"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-ext-common"/></t>
        </dd>
        <dt><xref target="abnf-grammar-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-b64"/></t>
        </dd>
        <dt><xref target="abnf-grammar-dt"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-dt"/></t>
        </dd>
        <dt><xref target="abnf-grammar-ip"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-ip"/></t>
        </dd>
        <dt><xref target="abnf-grammar-cri"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-cri"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-glue"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-glue"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq"/></t>
        </dd>
        <dt><xref target="abnf-grammar-rs"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-rs"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-b64"/></t>
        </dd>
        <dt><xref target="abnf-grammar-rs-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-rs-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-rs-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-rs-b64"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="list-of-tables">
      <name>List of Tables</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="tab-numbers"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-numbers"/></t>
        </dd>
        <dt><xref target="tab-float-encoding"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-float-encoding"/></t>
        </dd>
        <dt><xref target="tab-equiv-dt"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-dt"/></t>
        </dd>
        <dt><xref target="tab-equiv-ip"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-ip"/></t>
        </dd>
        <dt><xref target="tab-equiv-hash"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-hash"/></t>
        </dd>
        <dt><xref target="tab-ei"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-ei"/></t>
        </dd>
        <dt><xref target="tab-prefixes"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-prefixes"/></t>
        </dd>
        <dt><xref target="tab-iana"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-iana"/></t>
        </dd>
        <dt><xref target="tab-iana-ei"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-iana-ei"/></t>
        </dd>
        <dt><xref target="new-media-type"/>:</dt>
        <dd>
          <t><xref format="title" target="new-media-type"/></t>
        </dd>
        <dt><xref target="tab-content-format"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-content-format"/></t>
        </dd>
        <dt><xref target="tab-tag-values"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-tag-values"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The concept of application-oriented extensions to diagnostic notation,
as well as the definition for the "dt" extension, were inspired by the
CoRAL work by Klaus Hartke.</t>
      <t>(TBD)</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
QSSeAK2bP+zVPsaw9YsnBsmg6OEnwZxS1OqkLWKuH7gZgLLl3cy+XSF/r1jw
Yld6LYWQTH7oTcRlJPhs+KwJbf7USIhHupK+gTERJACWNmUdGRiPCU/yQeBG
DHAxLARQnztQYffT2q1L96FsNtvklu2xLXUVX0ezOwoJ9itPSYLFdv1kse+C
XIYA2ExMuzDh0YYchy9sM7EcYxRgVpKxkMUM+zZ5A389vNBNzFtJuZRWW1dq
bSCPwBRciamtOUXXKskuhdoZemdQjdbffrwOnB7s1atPfU+SAcPc6XpcIdz3
zCpPkzL5esgoimqIoLAMovgN6ZLVaJFpYRq74mjTOw4N8QoMVnUYEx8gGlCg
UnCEen0pW6ZDXKZd2q2LYSUAVFUYECSi+CSrCxPn87YuKY2FbXZiWg9KZj37
LaIgcVeSXkTFlJRlU22cttBV51RUIeGOxu6LtieO2CBKrygDnJ0XhqJ4C+1w
yXwgALMXOyr/YmMjdi6HiMT1BUU3oUANpHNOFQw1+pZr4YDkdluFEwnGHqMr
/YuXs2N6Qfkrr767UwkmP8Df/M3fkBm/6SUwWRtOMEfdFZi6LgpA4eoa1dhG
CqL1JbltmvIQ7T+2BOpik85N6LVxQ89iv36IqxmGhiaXQqs+sUzXoaW5CxIn
erJE2+10POJQBkrRIDDbaE212BDN3EqedZvhOFdUWzFlkuJiXFcL9gJJ24Qo
j6uVZRpboGuwve2Bfgmosy3zGBRS6gkFcwT8h+jQJ8kXUNK5z56lMZptUQc3
kkv9V+tdhPn7/vulLZTsdbli9cth1iq6w8gtampk7yPcbUYOQISGofcNR/Bd
VqFfu7eIbyI4m5kpMogm1ZXEXHqBKBRquwnKjIerjkpK7zPd6Vd3SjL9bEdq
WJVp5IDCV0OS0UrbWIDVBREcfa7PdRo8W5ejA6pq7RJGDroSaXWEg3IafpnB
1F9+W7HWX2JJAbxNN+EklpQLq7gTpuqYNlbtlOAZOmO/PJfYXDhrfYrGgdkq
cxVMyKZSnYjKk3Fek/ISmFzYMBDehMsNR84QhtablOpdUU4t7pAQVzV//j12
6dCTyc//wtlW477+1cvTv77Qp2dnF89et4K9hN0pQusyLQ+He/P3+ofyh/SH
vLE3ecsDA77YljQueJ5i45VUxJFOU35KFe7Pdviwq2gbwuiOXTLq9NbcftSk
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
LqXm8F88SNPBJEu7VzZCVOGMB17bVko2YEWhm+iyRYYRGHDZMKHvd7pToFOk
Evrd21u8cBCd/pjSNADxrAFjBKDV927VCM95sXYkPZ9OSHLlSz72/0d1LSCT
q7gN82pdM0UhEPQqvVQ0fKF4B/fxZNkCHBggJ+dCHwrf6I5EEt7eRkYAt5K3
vhHgG5rggCD33T/Lt/Jyu59aT4v0TjuM+5or/BMsKb7ZWL9o2w5r9nPfIubX
Wh14o1dpVoD38loMDHAEpdfkluT6wLrZx6r1EY53HEHlfvTokeq9qLJu+MFT
KKpw1fz96fqR8y2O5O7dYUcUHNm9fHkRDIaUmOXIrGH2dV7GHwYH0YesvcdN
nGI31fqqamqyOX1bV+vn9P/jTlQzYKnlWndevZK4Bur160697C9vj7rKy6pX
jPmQnvFAdDlEzymVCLvPbML3teAzs/FYf8OpIQddBHZ6HuFEDO2TSSgG1jVn
p2ZO2YC3zIF5GUDS0vCXqee335PZtq+Wanrh7Sv7wbk1q/0qx9vDCh+G43ke
0BVeK4N5bivB2ii7rQzu9lspUwj8VuZRCPN9m+NKaXEvdFWpcO4YlLw7Btq9
47+1X0sl3+rNZVdJT7MqIzssZjUfKljNG7AMgZNiruWBzbxWBw75xyxND/bA
xljEAnK+ch7KDJG47F/Cxsi7EvPEAnvqreEbatfX5hFQDI+OiEAl5M2WD0fk
L3YxUM1HAe8hKtPAZCnP0gljIV9kX8c2hKIHqsYxlQxs7GWDCEBo6PZzEqs0
IIVkVnzfO8DFKh9tc0NnwNR+7RCzeHvkQ8HZhM1gbQwW70JSHyV2zXUR1eMl
Eekc/RLcbci9j41x5+Em9h1wWOff+JqVEYVem5p2+ykDGjV4aDHTlDrKb+h3
82ip9qcXh/+1dLx0tPTHOn9uLh3bB0tNTqUfNo/lOyV7dNNs1g//62h4DAJH
w5ujX+qaNu9+p+tPKve/N3LAdPfW54No/JrNT59o9fPovnsSlcywHcG2JNY8
vCFx4fpkzI/qp8XjJ+tPngH/SV8XRh8//Jjk6XkQVWetmBYWmafZ1MEzdRvR
3jTYDcWp0toUGNMb3b4xbPFwzeypBdj8ct29psI6OaJk5oyiemmsHkwsw8gu
TRHXITMxuwwtwKiXGKI27jQ7MWagWE8K/UQXN2db5SPHDfWGWOiTGn2hLVi9
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
/wuk2Cu8x/0BAA==

-->

</rfc>
