<?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.40 (Ruby 4.0.2) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-25" category="std" consensus="true" submissionType="IETF" updates="8610, 8949" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title>Concise Diagnostic Notation (CDN)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-25"/>
    <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="May" day="18"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 124?>

<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/>
The present <tt>-25</tt> is intended for the May 2026 Working Group Last Call.
It corrects a clerical error in <tt>-24</tt>, which completes the work
started in PR #102 and adds a couple of paragraphs on editorial
conventions.
It also makes a leap ahead beyond <tt>-24</tt> by adopting and making a
detailed proposal (PR #105) for a renaming choice that was
discussed at the 2026-05-13 CBOR interim WG meeting.</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 150?>

<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 be able to converse 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>Standardizing CDN in addition to the actual binary interchange format CBOR does
not serve to create a competing interchange format, but enables the use of
a shared diagnostic notation in tools for and in documents about CBOR.
Still, 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" and therefore
merits a specification that facilitates interoperability within this
domain as well as 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 literal forms.
It uses these registries to add encoding indicators for a more
complete coverage of encoding variation,
and to add application-oriented literal forms that enhance CDN with text
representations of epoch-based date/times, of IP addresses
and prefixes <xref target="RFC9164"/>, and of Concise Resource Identifiers (CRI
<xref target="I-D.ietf-core-href"/>), as well as an application-oriented literal that
represents 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 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 has been built from Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> and <xref section="G" sectionFormat="of" target="RFC8610"/>.
The latter provided a number of useful extensions to the initial
diagnostic notation that was originally defined in <xref section="6" sectionFormat="of" target="RFC7049"/>.
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> and <xref section="G" sectionFormat="of" target="RFC8610"/> have
collectively been called "Extended Diagnostic Notation" (EDN),
now simplified as "Concise Diagnostic Notation" (CDN) giving
the present document its name.</t>
        <t>After introductory material, <xref target="app-ext"/>
illustrates the concept of application-oriented extension literals by
defining the "dt", "ip", "hash", and "cri" extensions.
<xref target="stand-in"/> defines mechanisms
for dealing with unknown application-oriented literals and
deliberately elided information.
<xref target="grammars"/> gives the formal syntax of CDN in ABNF, with
explanations for some features of and additions to this syntax, as an
overall grammar (<xref target="grammar"/>) and specific grammars for the content of
app-string and byte-string literals (<xref target="app-grammars"/>).
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>Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> defines the original CBOR diagnostic notation,
and <xref section="G" sectionFormat="of" target="RFC8610"/> supplies a number of extensions to the
diagnostic notation that form the basis for what is now the Concise Diagnostic Notation
(CDN).
The diagnostic notation extensions include popular features such as
embedded CBOR (encoded CBOR data items in byte strings) and comments.
A simple diagnostic notation extension that enables representing CBOR
sequences was added in <xref section="4.2" sectionFormat="of" target="RFC8742"/>.
As diagnostic notation is not used in the kind of interchange
situations where backward compatibility would pose a significant
obstacle, there is little point in not using these extensions; as at
least some elements of the extended form are now near-universally
used, the terms "diagnostic notation" and "extended diagnostic
notation" have become synonyms in the context of CBOR, with "concise
diagnostic notation" (CDN) now the preferred synonym, hinting at
knowledge of this updated specification.</t>
        <t>In a similar vein, 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 <tt>h''</tt>; 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, and there is no expectation for "roundtripping" from CDN to
CBOR and back, i.e., for an ability
to convert CDN to binary CBOR and back to CDN while achieving exactly
the same result as the original input CDN — the original CDN possibly
was created by humans or by a different CDN generator.</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>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 application extensions unknown to the tool)
into 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>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
application-oriented literals or specific string representations such
as embedded CBOR or <tt>b64''</tt> in the appropriate places.</t>
        </section>
      </section>
    </section>
    <section anchor="diagnostic-notation">
      <name>Overview over 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>
      <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
application-oriented 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="app-lit">
        <name>Application-Oriented Extension Literals</name>
        <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>, or <em>extension literals</em> for short.</t>
        <t>Extension literals start with a <em>prefix</em> that identifies the
application-oriented extension, immediately followed by a sequence
literal (<xref target="embedded"/>) or a single-quoted or raw string literal (<xref target="strings"/>).
The latter form uses its string literal as a shorthand
form for a sequence literal representing a sequence with exactly that
one text string data item.</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>application-extension identifiers</em>.</t>
        </aside>
        <t>More precisely, an <em>application-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>Application-extension identifiers are registered in the "Application-Extension Identifiers" registry
(<xref target="appext-iana"/>).</t>
        <t>An application-extension (such as <tt>dt</tt>) <bcp14>MAY</bcp14> also define the meaning of
one additional prefix derived from its application-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 application-oriented 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 application-extension identifier gives rise to one or two
application-extension 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 application 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.
When used immediately in front of a sequence literal, the input is a
CBOR sequence of elements of the sequence literal as input.
The application 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
application-oriented extensions (<xref target="app-ext"/>), both to motivate
making these extensions generally available, and to illustrate the
concept.</t>
        <t>Of these, the application-oriented extensions <tt>h</tt>, <tt>b64</tt>, <tt>dt</tt> and <tt>ip</tt> are
intended to be mandatory to implement.
(As mentioned, for simplicity we use the term "application-oriented
extensions" for the mechanism discussed in this section even if it is
used to describe a part of base CDN.)</t>
      </section>
      <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 now 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>
        <aside>
          <t>Note that application-oriented 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 application-oriented
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 application-oriented extensions supplied in this
specification provides for such a kind of internal comment syntax.</t>
        </aside>
        <section anchor="discussion">
          <name>Discussion</name>
          <t>As a not quite backward compatible change, this specification
restricts slash-delimited comments that were allowed in <xref section="G.6" sectionFormat="of" target="RFC8610"/> in two ways:</t>
          <ul spacing="normal">
            <li>
              <t>Inline comments now 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; its first slash actually ends the current comment and
the second slash starts a new one.)</t>
            </li>
            <li>
              <t>CDN now enables the use of C-style inline 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, 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 conventional, but often less familiar</t>
          <sourcecode type="cbor-diag"><![CDATA[
4 / HMAC 256//64 /
]]></sourcecode>
        </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 representations were actually used; for example, a
data item written »1.5« by a diagnostic decoder might have been
encoded 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).
(Ignoring them could be compared to a generic CBOR decoder ignoring
the presence of the serialization variants it encounters.)
It is <bcp14>RECOMMENDED</bcp14> to by default 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 encoding indicators used with various
kinds of data items.</t>
          <table anchor="tab-ei">
            <name>Examples of Encoding Indicators for Different Data Items (mt = major type)</name>
            <thead>
              <tr>
                <th align="left">mt</th>
                <th align="left">examples</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0</td>
                <td align="left">
                  <tt>1_1</tt>, <tt>0x4711_3</tt></td>
              </tr>
              <tr>
                <td align="left">1</td>
                <td align="left">
                  <tt>-1_1</tt></td>
              </tr>
              <tr>
                <td align="left">2</td>
                <td align="left">
                  <tt>'A'_1</tt></td>
              </tr>
              <tr>
                <td align="left">3</td>
                <td align="left">
                  <tt>"A"_1</tt></td>
              </tr>
              <tr>
                <td align="left">4</td>
                <td align="left">
                  <tt>[_1 "bar"]</tt></td>
              </tr>
              <tr>
                <td align="left">5</td>
                <td align="left">
                  <tt>{_1 "bar": 1}</tt></td>
              </tr>
              <tr>
                <td align="left">6</td>
                <td align="left">
                  <tt>1_1(4711)</tt></td>
              </tr>
              <tr>
                <td align="left">7</td>
                <td align="left">
                  <tt>1.5_2</tt>, <tt>0x4711p+03_3</tt></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
preceding item (or, for arrays and maps, the item starting with the
preceding bracket or brace) was or is to be encoded with an additional information
value of <tt>ai=</tt>24+<tt>n</tt>.  For example, <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 application 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 have a 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> can be used to 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>Surprisingly, 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-string"/> for indefinite length strings and in <xref target="ei-container"/> for
arrays and maps.</t>
        </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 (octal with <tt>0o</tt>
prefix present only).</t>
        <t>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 integer one, and
<tt>-1</tt> and <tt>-0001</tt> both designate the same 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 (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.
<xref target="tab-float-encoding"/> shows how the floating point numbers 1.1, 1.5 and
these three values are encoded in preferred serialization and when
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>
        <t>See <xref target="decnumber"/> 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 application-oriented literals.
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>CDN has three direct (unprefixed) notations for strings: double-quoted and raw
strings for (UTF-8) text strings, and single-quoted strings for byte strings.
The latter are useful for byte strings carrying bytes that can be meaningfully
notated as UTF-8 text (<xref target="sq-lit"/>).</t>
        <t>Many strings are best notated as extension literals, which may
provide detailed access to the bits within those bytes (see
<xref target="encoded-byte-strings"/>).
An extension literal can be constructed out of an application-extension
prefix and a single-quoted string, a raw string, or a sequence literal.</t>
        <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 extensions.
In JSON, no control characters are allowed to occur
directly in text string literals; if needed, they can be specified using
escapes such as <tt>\t</tt> or <tt>\r</tt>.
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="cr"/>).
No other control characters can occur directly in a string literal,
and the handling of escaped characters (<tt>\r</tt> etc.) is as in JSON.</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
"Domino'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>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 application-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 need
not be, 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 both for base-encoded byte string literals (see <xref target="encoded-byte-strings"/>) and for
application-oriented extension literals (see <xref target="app-lit"/>, called app-string).
(Additional kinds of base-encoded string literals can be defined as
application-oriented extension literals by registering their prefixes;
there is no fundamental difference between the two predefined
base-encoded string literal prefixes (<tt>h</tt>, <tt>b64</tt>) and any such potential
future extension literal prefixes; for simplicity of expression, both
cases are referred to as "extension 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 backslash processing.
Instead, data transparency is provided by enclosing them 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 I-Regexp »<tt>[^ \t\n\r"'`]</tt>«, a 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 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 duplicate 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:</t>
          <ul spacing="normal">
            <li>
              <t>Raw strings cannot 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>Without additional rules, 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 the latter cases, two additional rules are added:</t>
          <ul spacing="normal">
            <li>
              <t>After processing the backquotes used as delimiters, any single
newline at the start of a raw string is removed.
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>An ending delimiter with more backquotes than were used in the
starting delimiter contributes the superfluous ones to the string.  </t>
              <t>
This allows notating »<tt>a = ``foo``</tt>« as:  </t>
              <artwork><![CDATA[
```a = ``foo`````
]]></artwork>
            </li>
          </ul>
          <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 case to handle.)</t>
          <t>See <xref target="grammar"/> for a more formal approach to defining these rules.</t>
        </section>
        <section anchor="ei-string">
          <name>Encoding Indicators of Strings</name>
          <t>For indefinite length encoding, strings (byte and text strings) have a
special syntax <tt>streamstring</tt>.
This is used (except for the special cases <tt>''_</tt> and <tt>""_</tt> below) to
notate their detailed composition into individual "chunks" (Section <xref target="RFC8949" section="3.2.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>), by representing 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>For 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>
        </section>
        <section anchor="encoded-byte-strings">
          <name>Base-Encoded Byte String Literals</name>
          <t>Besides the unprefixed byte string literals that are analogous to JSON text
string literals, CDN provides extension literals that can represent
byte strings by base-encoding them, typically notated as prefixed
string literals.
The application-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
application-oriented extension literals.)</t>
          </aside>
          <t>Examples often benefit from some blank space (spaces, line breaks) in
byte strings literals.
In certain CDN prefixed byte string literals, blank space is ignored; 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> can 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 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="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>, optionally prefixed by an
application-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 application 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 may not (always) be, depending on
the definition of the application 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>
        </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 (see <xref target="concat"/>
for details).
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 prefixed string literals, other application-extensions, or
in certain cases concatenation (<xref target="concat"/>) 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>Note that neither CBOR about its text strings nor CDN about its source
language make any requirements except for conformance to <xref target="STD63"/>.
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="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="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: "fro"}
]]></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 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 as the following:</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-ext">
      <name>Application-Oriented Extension Literals</name>
      <t>This document extends the syntax used in diagnostic notation to also
enable application-oriented extensions.
This section defines a number of application-oriented extensions.</t>
      <section anchor="dt">
        <name>The "dt" Extension</name>
        <t>The application-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 an application-extension identifier.</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>The "ip" Extension</name>
        <t>The application-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 application-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 an application-extension identifier.</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>The "hash" Extension</name>
        <t>The application-extension identifier "hash" is used to notate the
input to a cryptographic hash function as well as identify such a hash
function.
The result 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 application-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="cri">
        <name>The "cri" Extension</name>
        <t>The
application-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>
    <section anchor="stand-in">
      <name>Stand-in Representations 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 stand-in representation for two such cases:</t>
      <ul spacing="normal">
        <li>
          <t>The CDN consumer does not know (or does not implement) an
application-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 stand-ins are expected at this stage in the
chain.</t>
      </aside>
      <section anchor="unknown">
        <name>Handling unknown application-extension identifiers</name>
        <t>When ingesting CDN, any
application-oriented extension literals are usually decoded and
transformed into the corresponding data item during ingestion.
If an application-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 application-oriented 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 Application-Extension Tag, tag
number CPA999 (<xref target="iana-standin"/>).
The content of this tag is an array of a text string for the
application-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>, or
<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
Application-Extension Tag, this is an error and processing has to
stop, as if this stage had been ingesting an unknown or unimplemented
application-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:
The Diagnostic Notation Ellipsis Tag, tag number CPA888 (<xref target="iana-standin"/>).
The content of this tag either is</t>
        <ol spacing="normal" type="1" start="1"><li>
            <t>null (indicating a data item entirely replaced by an ellipsis), or it is</t>
          </li>
          <li>
            <t>an array, the elements of which are alternating between fragments
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 stand-in 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 stand-in:</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": "Herewith I buy" + ... + "gned: Alice & Bob",
  "bytes_in_IRI": 'https://a.example/' + ... + '&q=Übergrößenträger',
  "signature": h'4711...0815',
}
]]></sourcecode>
        <t>The example "contract" combines string concatenation via the <tt>+</tt>
operator (<xref target="grammar"/>) 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 stand-in
that wraps an array of string fragments 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
application-oriented 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
application 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
string1e        = string1 / ellipsis
ellipsis        = 3*"." ; "..." or more dots
string          = string1e *(S "+" S string1e)

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
                  [newline] ; swallow up to one leading newline
                  rawcontent
                  matchrawdelim
rawdelim        = 1*"`"
startrawdelim   = rawdelim
                  ; width (number of backquotes) distinguishes
                  ; between following matchrawdelim and shortrawdelim
matchrawdelim   = rawdelim ; width >= previous startrawdelim
shortrawdelim   = rawdelim ; width < previous startrawdelim
rawchars        = 1*(%x0a/%x0d / %x20-5f / %x61-7e / NONASCII)
rawcontent      = 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>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>Unicode CARRIAGE RETURN characters (U+000D, often seen
  escaped as "\r" in many
  programming languages) that exist in the input (unescaped) are
  ignored as if they were not in the input wherever they appear.
  This is most important when they are found in (text or byte) string
  contexts (see the "unescaped" ABNF rule).
  On some platforms, a carriage return is always added in front of a
  LINE FEED (U+000A, also often seen escaped as "\n" in many
  programming languages), but on other platforms, carriage returns are
  not used at line breaks.
  The intent behind ignoring unescaped carriage returns is to ensure
  that input generated or processed on either of these kinds of
  platforms will generate the same bytes in the CBOR data items
  created from that input.
  (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.)
  If a carriage return is needed in the CBOR data item, it can be
  added explicitly using the escaped form <tt>\r</tt>.</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 now 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>
            <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>matchrawdelim</tt> and <tt>shortrawdelim</tt> as
  well.
  <tt>shortrawdelim</tt> only matches sequences of backquotes that are
  shorter than <tt>startrawdelim</tt>.
  <tt>matchrawdelim</tt> only matches sequences of backquotes that are as
  long or longer than <tt>startrawdelim</tt>.
  Any excess number of backquotes in <tt>matchrawdelim</tt> are added to the
  string content.</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}
 matchrawdelim = rawdelim&{|(rd)|rd.text_value.length >= @rdlen}
]]></artwork>
        </aside>
        <ol spacing="normal" type="1" start="8"><li anchor="concat">
            <t>Concise diagnostic notation allows a (text or byte) string to be
  built up from multiple (text or byte) string literals, separated by
  a <tt>+</tt> operator; these are then concatenated into a single string.  </t>
            <t><tt>string</tt>, <tt>string1e</tt>, <tt>string1</tt>, and <tt>ellipsis</tt> realize: (1) the
representation of strings in this form split up into multiple
chunks, and (2) the use of ellipses to represent elisions
(<xref target="elision"/>).  </t>
            <t>
Text strings and byte strings do not mix within such a
concatenation, except that 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.
The following four text string values (adapted from <xref section="G.4" sectionFormat="of" target="RFC8610"/> by updating to explicit <tt>+</tt> operators) are equivalent:  </t>
            <artwork><![CDATA[
"Hello world"
"Hello " + "world"
"Hello" + h'20' + "world"
"" + h'48656c6c6f20776f726c64' + ""
]]></artwork>
            <t>
Similarly, the following byte string values are equivalent:  </t>
            <artwork><![CDATA[
'Hello world'
'Hello ' + 'world'
'Hello ' + h'776f726c64'
'Hello' + h'20' + 'world'
'' + h'48656c6c6f20776f726c64' + '' + b64''
h'4 86 56c 6c6f' + h' 20776 f726c64'
]]></artwork>
            <t>
The semantic processing of these constructs 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.
Multiple adjacent concatenated ellipses are equivalent to a single
ellipsis.</t>
              </li>
              <li>
                <t>An ellipsis can be concatenated (on one or both sides) with string
chunks (<tt>string1</tt>); the result is a CBOR tag number CPA888 that contains an
array with joined together spans of such chunks plus the ellipses
represented by <tt>888(null)</tt>.</t>
              </li>
              <li>
                <t>If there is no ellipsis in the concatenated list, the result of
processing the list will always be a single item.</t>
              </li>
              <li>
                <t>The bytes in the concatenated sequence of string chunks are simply
joined together, proceeding from left to right.
If the left hand side of a concatenation is a text string, the
joining operation results in a text string, and that
result needs to be valid UTF-8 except for implementations that
support and are enabled for generation/ingestion of CDN for CBOR
data items that are well-formed but not valid.
If the left hand side is a byte string, the right hand side also
needs to be a byte string.</t>
              </li>
              <li>
                <t>Some of the strings may be app-strings.
If the result type of the app-string is an actual (text or byte)
string, joining of those string chunks occurs as with chunks
directly notated as string literals; otherwise the occurrence of more than
one app-string or an app-string together with a directly notated
string cannot be processed.
(This determination must be made at the time the app-string is
interpreted; see <xref target="unknown"/> for how this may not be immediately
during parsing.)</t>
              </li>
            </ul>
          </li>
        </ol>
        <section anchor="discussion-1">
          <name>Discussion</name>
          <t>Note that the syntax defined here for concatenation of components
uses an explicit <tt>+</tt> operator between the components to be
concatenated.</t>
          <aside>
            <t>This is not entirely backward compatible to <xref section="G.4" sectionFormat="of" target="RFC8610"/>,
which used simple juxtaposition to indicate concatenation of strings.
This was not widely implemented and got in the way of making the use
of commas optional in other places via the rule <tt>SOC</tt>.</t>
          </aside>
        </section>
      </section>
      <section anchor="app-grammars">
        <name>ABNF Definitions for Application Extension Content</name>
        <t>This subsection provides ABNF definitions for the content of
application-oriented extension 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 the application-extension identifiers used as prefixes to form
application-oriented extension 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">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>
          </tbody>
        </table>
        <t>Note that implementation platforms may already provide implementations
of grammars used in application-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 application-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 application-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 extension literals built from raw strings, the ABNF
definitions in <xref target="abnf-grammar-rs"/> can be useful.
<tt>fitrawdelim</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[
fitrawdelim  = rawdelim ; width == previous startrawdelim
r-non-lf = %x0D / %x20-5f / %x61-7f / NONASCII / shortrawdelim
]]></sourcecode>
        </figure>
        <aside>
          <t>In a PEG parser that implements predicates, the matching rule for fitrawdelim
can for instance be implemented as follows:</t>
          <artwork><![CDATA[
 fitrawdelim = rawdelim&{|(rd)|rd.text_value.length == @rdlen}
]]></artwork>
        </aside>
        <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 requirement for a new application-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
application-extension specification, ABNF for an integrated parser can
be written as a separate activity or also automatically derived.
At the time of writing, one example for a tool performing such a
derivation is available as open-source software <xref target="ABNFROB"/>.</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 matchrawdelim / fitrawdelim)
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 matchrawdelim / fitrawdelim)
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 Application-extension Identifiers Registry</name>
        <t>IANA is requested to create an "Application-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
application-extension identifiers that are suggestive of generally applicable semantics,
keeping them in reserve for application-extensions that are likely to enjoy wide
use and can make good use of their conciseness.
The expert is 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 expert becomes aware of application-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>Application-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
application-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
application-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 Application-extension Identifier Registry</name>
          <thead>
            <tr>
              <th align="left">Application-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">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">cri</td>
              <td align="left">Constrained Resource Identifier</td>
              <td align="left">RFC-XXXX, <xref target="I-D.ietf-core-href"/></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 expert becomes 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
application-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-standin">
        <name>Stand-in 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 Application-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"/> and <xref target="RFC8610"/> apply.</t>
      <t>The CDN specification provides two explicit extension points,
application-extension identifiers (<xref target="appext-iana"/>) and encoding
indicators (<xref target="reg-ei"/>).
Extensions introduced this way can have their own security
considerations (see, e.g., <xref section="5" sectionFormat="of" target="I-D.ietf-cbor-edn-e-ref"/>).
When implementing tools that support the use of CDN extensions, the
implementer needs to be careful not to inadvertently introduce a
vector for an attacker 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"/>).
For instance, 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 controlling such an extension.</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/RFC0020"/>
          </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="ABNFROB" target="https://github.com/cabo/abnftt">
          <front>
            <title>PEG-parsing using ABNF grammars (via treetop)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </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 2843?>

<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-ei"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-ei"/></t>
        </dd>
        <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-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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
3AEA

-->

</rfc>
