<?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.38 (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-24" 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>CBOR Extended Diagnostic Notation (EDN)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-24"/>
    <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="11"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 123?>

<t>This document formalizes and consolidates the definition of the Extended
Diagnostic Notation (EDN) of the Concise Binary Object Representation
(CBOR), addressing implementer experience.</t>
      <t>Replacing EDN'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>-23</tt> is intended as reference material during the
2026-04-29 CBOR interim,
a complete specification that reacts to discussion on previous
draft revisions and that can be used to confirm the results in a WGLC.
Among other concerns, the discussion revealed that some additional
editorial content was required; the attempt was to address this need
without making technical changes.</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 149?>

<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 is also known as
Extended Diagnostic Notation (EDN).</t>
      <t>Diagnostic notation syntax is based on JSON, with extensions
for representing CBOR constructs such as binary data and tags.</t>
      <t>Standardizing EDN 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, EDN is often "interchanged" and therefore
merits a specification that facilitates interoperability within this
domain as well as reliable translation to and from CBOR.
EDN 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 EDN,
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"/>, obsoleting Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
<xref target="RFC8610"/>, obsoleting <xref section="G" sectionFormat="of" target="RFC8610"/>.
It is intended to serve as a single reference target that can be used
in specifications that use EDN.</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 EDN 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 CBOR diagnostic notation.  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 EDN, 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 EDN 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 EDN 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), 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 EDN 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 EDN with CDDL follows in
<xref target="edn-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 result in the Extended Diagnostic Notation
(EDN).
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 "EDN" have become
synonyms in the context of CBOR.</t>
        <t>Therefore, references to "<em>diagnostic notation</em>" generally mean to
include the original notation from Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> as well as the
extensions from <xref section="G" sectionFormat="of" target="RFC8610"/>, <xref section="4.2" sectionFormat="of" target="RFC8742"/>, and the
present document.
However, this document sticks to the abbreviation "<em>EDN</em>" as it has become quite
popular and is more sharply distinguishable from other meanings than
"DN" would be.</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.
Brief snippets of grammar may 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"/> and <xref target="RFC9682"/>).
Additional information about the relationship between the two
languages EDN and CDDL is captured in <xref target="edn-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 EDN 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 EDN 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 EDN.
Programs also often output EDN 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 EDN 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>; an EDN 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
EDN, and there is no expectation for "roundtripping" from EDN to
CBOR and back, i.e., for an ability
to convert EDN to binary CBOR and back to EDN while achieving exactly
the same result as the original input EDN — the original EDN possibly
was created by humans or by a different EDN generator.</t>
        </section>
        <section anchor="basic">
          <name>Basic Output Format</name>
          <t>However, there is a certain expectation that EDN 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 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>EDN 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 EDN 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, EDN is designed to allow a simple tool to convert any
EDN (including EDN 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 CBOR Extended Diagnostic Notation (EDN)</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 EDN, <xref target="grammars"/> now provides ABNF
definitions.</t>
      <t>EDN 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 an EDN text), extending it both to cover the greater
expressiveness of CBOR and to increase its usability.</t>
      <t>EDN 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 EDN is used for truly diagnostic purposes, its implementations <bcp14>MAY</bcp14>
support generation and possibly ingestion of EDN 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 EDN, 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 EDN is
continuously being collected by the community in <xref target="EDN-WIKI"/>.</t>
      <section anchor="app-lit">
        <name>Application-Oriented Extension Literals</name>
        <t>EDN 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
lower-case ASCII letter (<tt>[a-z]</tt>) and zero or more additional ASCII
characters that are either lower-case 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 lower-case character by its upper-case 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 EDN.)</t>
      </section>
      <section anchor="comments">
        <name>Comments</name>
        <t>For presentation to humans, EDN 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>EDN 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 EDN.
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>EDN 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:
EDN 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 EDN generally do not need to provide this
functionality in full; if they do, they can be called "diagnostic
implementations".
To be able to process EDN that contains encoding indicators,
an EDN-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 EDN 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 EDN.
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 EDN 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 EDN 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 EDN 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 EDN; <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, EDN 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">EDN</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 EDN 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
0xF97E00 in CBOR Preferred Serialization.
<xref target="tab-non-finite-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-non-finite-encoding">
          <name>Encoding indicators on floating point values</name>
          <thead>
            <tr>
              <th align="left">EDN</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 EDN 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>EDN 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"/>).
Extension literals can be constructed out of single-quoted strings and
raw strings, as well as sequence literals.</t>
        <section anchor="dq-lit">
          <name>Double-Quoted String Literals</name>
          <t>EDN 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 EDN, 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 EDN
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"/>).
EDN 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, EDN
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>
          <artwork><![CDATA[
'hello world'
h'68656c6c6f20776f726c64'
]]></artwork>
          <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 EDN 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 EDN text strings as
well to ensure all JSON texts are EDN literals.
Since EDN'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 to 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>EDN 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 0x5fff) or a text string
(encoded 0x7fff) 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, EDN 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 EDN 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>.
EDN 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.
EDN 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 EDN 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"/>, EDN
implementations <bcp14>MAY</bcp14> support generation and possibly ingestion of EDN
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 EDN 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
EDN, 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 EDN (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>EDN borrows the JSON syntax for arrays and maps.
(Maps are called objects in JSON.)</t>
        <section anchor="mandatory-separators-optional-terminators">
          <name>Mandatory Separators, Optional Terminators</name>
          <t>For maps, EDN extends the JSON syntax by allowing any data item in the
map key position (before the colon).</t>
          <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 EDN 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, EDN 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
EDN, 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 EDN 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"/>, EDN implementations <bcp14>MAY</bcp14> support
generation and possibly ingestion of EDN 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:</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 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:</t>
        <t indent="5">1_1(1363896240)</t>
        <t>(assuming Preferred Serialization for the tag content) is encoded 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>EDN 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 unsigned integer 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-upper-case 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 EDN</name>
          <thead>
            <tr>
              <th align="left">dt literal</th>
              <th align="left">plain EDN</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 lower-case app-string prefix <tt>ip</tt>, the value of the literal is a
byte string representing the binary IP address.
With the upper-case 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 upper-case 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 lower-case 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 EDN</name>
          <thead>
            <tr>
              <th align="left">ip literal</th>
              <th align="left">plain EDN</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 to obtain 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 EDN</name>
          <thead>
            <tr>
              <th align="left">hash literal</th>
              <th align="left">plain EDN</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
an EDN 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-upper-case variant of the app-prefix, the value is enclosed
in a tag number 99.</t>
        <t>As an example, the CBOR diagnostic notation</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, an EDN consumer cannot construct actual CBOR items that
represent the CBOR data intended for eventual interchange.
This document defines stand-in representation for two such cases:</t>
      <ul spacing="normal">
        <li>
          <t>The EDN consumer does not know (or does not implement) an
application-extension identifier used in the EDN document
(<xref target="unknown"/>) but wants to preserve the information for a later
processor.</t>
        </li>
        <li>
          <t>The generator of some EDN 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 EDN, 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 CBOR diagnostic notation, 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 identifier, 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 an EDN document</name>
        <t>When using EDN for exposition in a document or on a whiteboard, it is
often useful to be able to leave out parts of an EDN 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 an EDN document that have
been elided (and therefore cannot be reconstructed).</t>
        <t>Upon ingesting EDN 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 EDN 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" EDN
text, e.g.:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "signature": h'4711/.../0815',
  # ...: ...
}
]]></sourcecode>
        <t>The consumer of this EDN 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 EDN 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 Extended Diagnostic Notation</name>
        <t>This subsection provides an overall ABNF definition for the syntax of
CBOR extended 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 EDN 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"/>.
However, the prefixes <tt>b32''</tt> and <tt>h32''</tt> are not in wide use and an
ABNF definition in this document would therefore not have been based on
implementation experience.</t>
        <figure anchor="abnf-grammar">
          <name>Overall ABNF Definition of CBOR EDN</name>
          <sourcecode type="abnf" name="cbor-edn.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 EDN 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 in Preferred Serialization (unless 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>Extended 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 EDN 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>OC</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 <tt>sqstr</tt> 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 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">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>.
EDN-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="cbor-edn-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 lower case and upper case 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="cbor-edn-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 EDN (<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="cbor-edn-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="cbor-edn-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="cbor-edn-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="cbor-edn-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 EDN, it is an optimization to integrate
parsers for the content of some prefixed single-quoted 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="cbor-edn-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="cbor-edn-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="cbor-edn-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="cbor-edn-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="cbor-edn-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="cbor-edn-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="cbor-edn-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.cbor-diagnostic-notation] with a
reference to the new registry group, and remove this note.</cref></t>
      <section anchor="appext-iana">
        <name>CBOR Diagnostic Notation Application-extension Identifiers Registry</name>
        <t>IANA is requested to create an "Application-Extension Identifiers"
registry in a new "CBOR Diagnostic Notation" registry group
[IANA.cbor-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 lower case 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 "CBOR Diagnostic Notation" registry group
[IANA.cbor-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/cbor-diagnostic</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">cbor-diagnostic</td>
              <td align="left">application/cbor-diagnostic</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>cbor-diagnostic</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>.diag</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>CBOR diagnostic notation represents CBOR data items, which are the
format intended for actual interchange.
The media type application/cbor-diagnostic 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/cbor-diagnostic</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/cbor-diagnostic</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 EDN 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 EDN 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="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="EDN-WIKI" target="https://github.com/cbor-wg/edn/wiki">
          <front>
            <title>EDN Wiki</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 2835?>

<section anchor="edn-and-cddl">
      <name>EDN and CDDL</name>
      <t>This appendix is for information.</t>
      <t>EDN 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>EDN syntax is an extension to JSON syntax <xref target="STD90"/>.
(Any (interoperable) JSON text is also valid EDN.)</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 EDN and CDDL, it is easy to write
"CDDLisms" or "EDNisms" 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 EDN finds nothing in JSON that could be inherited here.
Inspired by JavaScript, EDN 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>EDN:</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 EDN's tag syntax is a simple decimal number and a
pair of parentheses.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <artwork><![CDATA[
98([h'', # empty encoded protected header
    {},  # empty unprotected header
    ...  # rest elided here
   ])
]]></artwork>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>COSE_Sign_Tagged = #6.98(COSE_Sign)</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Embedded CBOR.  EDN 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>EDN:</dt>
            <dd>
              <artwork><![CDATA[
98([<< {/alg/ 1: -7 /ECDSA 256/} >>, # == h'a10126'
    ...                              # rest elided here
   ])
]]></artwork>
            </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-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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
RrBHvLYw2NdvE1bQfePlHV3bsozl98hYSsHP/vIZECRwn9JuKlsmNJdjoJlh
vpPfUXIb0lZTdhqrgsI8YJjOyGu6nf/Fi4ZQxj5mEwShQ19uq7Zw8LWpfI7F
VnjO6CeE9cWYeWl5tdg4C0tFUhnjt2iczFGrQ665O7YXeSYXsJsHBZHLccu5
8c3nQ/5b7omvh58WaPo7LyuQ8U62iVOCy0H2R3Il8Jz5aVcimnTQyk+3Qkyw
iaan7IUB5IXBhw1JShJ5wdIuM6BvW7tMJSNsmtkU3Z6jUeSFCGCqgMlks1aB
gtYLNneZcpOZ5H8KnUtN6PyUPeCUychqM0/8XLCX0s/rEU1N8l+FxfgcuVhw
z6IVdSljKQYPA/CUxN8Z0KSUeNmKXQqMIxJlzyaLqBnovUSDlBICe6hMJkOu
sFhf0Xn9mE1mn7qCjrpUJla7NMuYVZecHFCfCXzyZp0GqWZp/ucNBg/jPCk6
OVOU7vxlKfRUypIVDy+1zo4lE053/zITelcBCLjPdPqBej4q7YfUS8ewJviw
EEesipy8dTxiDpAlwdCCONw4USVzK51PQNKTYOIKBzhcJmyqpOKFZpzKdonr
xPFRZYzFJkEKff79DzTYhMkdCsX10LHm0JiG+vvHv5G8k4h14Fa/j+MVevOy
hooF2akEdkhg1OjnzaeXL19+HonmFz6L7VdV1dcS33cv9bdRx5Inj/FX8aN2
SbBzUn6dnYww5mSUsQ+F7DQq92A2B7PPI0ni5Gd9xQyXWdrYCiisnXMbrNQI
Owlfei+6h4PP+iv83B/0jj7XgGV8hN8+t+R8BnQsOTTObLvzo8EZ/H12OKCm
2LIm/OYjc654yi28al7L/+c//8//N7T48//2f9SqeFVqblM8mzgK4FcY0e9E
z7lBz6eAM7IbDlfHK1GBu8J4X3FEMXmp8KqJqcwLwAmSV+k6YgKkQCZxVYNS
R3HWUT+JlhuScIcjxU9KkTtbMODF6klsrdqbAwnLsILRYrqHoZVHB/sHE/jf
rN89PDyYHfbh83DPxrHGfAzY4Xoj7nSc0tQj+ZGEurnhyB91rbyCzx4H4ke+
E889+vlnP4eNTX6hMKBNoqRQmfTzXuVrvKN+FY4gWzEm4iVezuYPK5N6osYf
KfQxV7bugFm3q5LruR7MXOxJ2BmFvY1+7oyMzw5DsSHMNmdN0JNNomB3FWPe
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
vuCFzBXfyK0khORLyAkEi3IqIasY96y+5XWylc5c3Op6Mlumd8ed2lmLdZhE
ntVqwQ+9Oj5YRyZXXiUXguum50jnsZ9+HgTiHhysiOde5Em++Ai3v86ZSxtk
/Z56pnSSubyC0rI9lYttS7qi1a4dE1+e3EuHSOw/12vya85yAhW7UqpXx7an
AAZYCvAPzlZcpCICScn5wOmCjRwrQ9iAKsUVTRd3JROsehxUcH/cFlWS4RFI
DbKKkjXX51hslq5O+K/iHZ4+7T17FrqboaZjT35r6n7wM/7W7cuvNaKXNbhR
m8UCXwP6CsTV0l89O5A3y0NgAnjBy4i7/HrAb1D8d9q0sDitkiys9ECCaR+u
7gt7C5uwtikYfCdj8vKmEzN4ALex7KmPbGk7LH9qsgpTBl5KgmQSfpOtPuAX
Le+CKYk+f1Ycck1BHw3DEXueWZw3mNMGUXYfShtvpic5mUx8sxi5VTnOwPij
ofS7SRYE+WRBWntLZadxxROLU5d51B+RfQk+eGcUKmkcXiCeuigvh5URJusA
CBTZmms72aRh4i+TiG9+W537/gPNUN5qmoCDCi8CkxjFOFzQUTjFtLHHlw7c
aiRo9BPeABApsaCqSbtga++a3SX0uVhUutbROLTgIlMs3VtywKDlW6NfpT6B
3JYmi3KKfr8+NEkOrj4yKXm94+R0rgbwGsRs2wSwGOTE02EPTbMhnKjcZfMo
G4k+fXJcRMtwEUg30VW0oqa5/rU1zemCbFURfrCm+ROWqA1q5ZgEBB+Egqp5
reMFCC/ssUUYYsmJM0IUUXgoR+DTS/KUSuFNmq6Uby5ViYAZsluk+7kMXpRI
Ci103kRyPyIX2U2UjVNOuWZREzmwe4YR43Ttp3WVyyuclKngRGYPk2CHvBnj
yXtR2oiyNvDcRuJmEqSjFEN1NhLSecKFR8n6TlHognO6lgxcuK7AVmnc7ZDu
y45HluGzfuOAX5nMUxY110ETIy0y8reCw6XM2S9fvQHgstEB6NQX+vQEBL+c
iQSPRoJMEhtw4Be/RJYozzexkvTUuYU7NFliUCxjUmLO7PWSHMdhDr1lVIAg
zKp8/FXuFl9DSjTXkPrcLsvN99EqZx8fIGdr44jNnsssf1dkWGyrOrbj6A92
quNKQS7qQDy6vrc1365iODvOWK5fCfMOBBnz49FTtg9w/kb2My5soQd/Osjk
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
f5AfOzVdWv9jt43waxVx7jyuaX/yu5jXx/VS136jxo7e/QU8lg3Aswews0kS
KCG1uiq1hf3jfX9ctx3Qgwa0demOufH3V+XG9SBFMtyOoFWQTNl0cVbuotas
4VXqaLhlwPDjt3cNf+YV3eAtDLuxTfGuUaUBQBQwFZM5V2quu5osYsymGrpi
DcPPZFVQjNyCyBbJSx6mH7cpxzyap3zxUyCmfl3T3xtxT/CJqc+LayFuGXFK
sKa3NWj2+DZbT5FcvFOClXa+AUPA8kNcSnxZSjVEKsVqISTbP9R+rnHpEfSL
aE2BNAUE6KF+z7+s31wp+6VnVgWSxRil6udXxFdwEvgfv+p2u0fVcsgM334h
SvoZ5paht892CDz49ncvxIXbvn1a/fYa3wZ8id4BCRq213GxWafc5nyHtIVt
ANMCcU9+jz6SAGPRmJtUChWwJ4igf+b1Eh6pr1E/hG7j2SKZboCvwub7Z96G
taayYW4Lf9VJdHhUIGc8YjBS/4WuY6bOv9qWs+GqonBYQ60Ewl0DOtGb/wR/
+Pcfv8LP/kTzL5noTlAMR2vlu8aTF2xLIeZAF0B8eYvtpd7IO9ao8Dem4tuj
SpDYOrtBTev278Vt5v0evE1j1+ssYsFGn8JWP4f/zoiqXMCnF7WGHuzSY8CK
a+c1zboG3RddSEMFI9IY8+Rm7j1COOK9AkbDm1zpNdwY6L9eO4KZHMN/PL+G
GUoFrbV7/wzeO4f/zArM+25n7cb3YMuHMvOO5g898+Sh3YbvvceyPYjPg4qf
FgxO9DRL94xjCEBst93udg9jZd94AA7ghQASELK+ABZa20LNvdAAw6AE3T18
USu3A0Beb8iKud0jtMA978Je9+A/OSvelNOG3rmTuEiz3/0v2+9WrzTjnoPf
3r8iAPs7/68BJ62e12b3Wuu/cgPhoCoeyzgIj15xpkzyBJ91y9VZI84t0vT0
GsL6K0s4pXPh1J+gjK8rhXxhX59skaFWy1T51WQAWFXCEjG9/W2kS3+A1Vom
he5+7Pd1paLvY3/Q6h881PhQ71U3PmrtP3+g8f6Z/rmy8f458OoVv1jeXYla
xP4GTBFu1TtmgEXA9H79a1wmjV3TzCppwivqauvV2l5NprlnfPD41bLu7GvR
0x2LAk0uTvh7j3/vwe+vSh2Y9ofU/lA93/F7j37vKYFhf6qndDOf0998S8/l
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
2em0Y5qmunA7h9iNM+q0sVHEvZ3608vExR5wJDMi7yMuHK0uXsIM5H6rdO/I
tQDH39SHW9lWkxtx9O4ImAv9YV7o4M/E36i9RnylfWo4kdy1WUiYiefnt2BH
xv3lrgq6LLqj0nb5k7ty5LVYdAfURSICaaq1mDPuVNX+WlO/zrP8hoTqKRuK
hiNM0TbvUuoF3SYVIJ3PAH84u6GZMxu00svsejq7qeqkbfO8mIzmEaA9kyCf
TGajquLgEkj5SdBs6QZKkWcjPuvCoyQxL2tx89dpdZL4JTCEtPm8VheFqf+k
LhpPpCGrukg31w66nC5s1qvHDMaSUUK90KCus3WWvKeQPTkouVTt6xq1fQBY
lVPuS3bRPU9sAp2FXjQHqTUIsoCgPe3OWia+ow0HthYHNgEem/WUhIv0JunR
jy0TrxLs0DzOV7wxJPxuL4/eVxIvr7KI0b7yKUXq0EolKNGJ943k+uA4I7Q5
WGpUpBm0Bn8i0eK9qwk9o8naUFM3RL52akJa+GovFWEU331f8YWAeju8QgV3
IEZOscQBinn+T5VY/VMl/qdK7JL/g1RiI5hMv64tBBs4A5p5roy7wW4hr7jM
roaGugv294QVtfW2k2gBJvKB7zkXlWD2m0oJKd9rdicjnMxnV9dRZorSvh4p
ZFVW2wHICvQH7wJAes31Evc4WqYLpX4Ne0HuY0/N89b490oO2svCdu96qVvj
7oJX2BbuLis8CZu0qx6+mqI5r2m/1mns3OEHiVeYkkVc/h512q3uTcs23K+x
U1U6/CUPKLq4pf0ETZ0wVEAaQRibDHgNAmZaAmK+z4bPtUgSUaZcEdQKKVWQ
q9uscdHqsGrWinT+W1nO/JvByTVQsIlXS7Xk2mXLu3z5f7XEz4NcV9nYNci1
LvG+lwq8qAV1bBvfglP+99z0hNdBku9f+Mm/8r9/4X83+N86/9uILtjapndX
1OR/X/K/u7W4sQ0jYrm1TSlWmttLzGQ5a41HSBw5PkEXIPGjZha8fRBjDLw/
E6gmFkSYlWdyFzpWrCns9MwGOp0Nrz3kGMe/aMgOI2SSBg1LeDWXk3niAp65
HK9TsIJwoU0OGxtxFK+50y0Fa+sT5XrGMD4CzFawzY5j3s6ZIRI8O+vYy97S
MbRzFbMmrASAXk20Y2Lc+1IOMNjCxdnDlOo14+MAMX09OVxnk5MR5R+i8/DX
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

-->

</rfc>
