<?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.31 (Ruby 3.4.8) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-20" category="std" consensus="true" submissionType="IETF" updates="8610, 8949" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>CBOR Extended Diagnostic Notation (EDN)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-20"/>
    <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="February" day="28"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 118?>

<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 and uses registry-based extension points, using one
to support text representations 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>-20</tt> includes the definition of raw strings.
<tt>-20</tt> is intended for use at IETF 125.</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 139?>

<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 and of IP addresses
and prefixes <xref target="RFC9164"/> 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
diagnostic notation 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.
<!--
Similarly, this notation could be extended in a separate document to
provide documentation for NaN payloads, which are not covered in this document.
-->
        </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</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, when we refer to "<em>diagnostic notation</em>", we 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, we stick 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 in <xref target="RFC9165"/>), as
well as <xref target="I-D.ietf-cbor-update-8610-grammar"/>.
Additional information about the relationship between the two
languages EDN and CDDL is captured in <xref target="edn-and-cddl"/>.</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-output-format">
          <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 encoding;</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>
      <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 single-quoted string literal as a shorthand
form for a sequence literal representing a sequence with exactly that
one 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 we call <em>application-extension identifiers</em>.</t>
        </aside>
        <t>More precisely, an <em>application-extension identifier</em> is a 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 a registry
(<xref target="appext-iana"/>).</t>
        <t>An application-extension (such as <tt>dt</tt>) <bcp14>MAY</bcp14> also define the meaning of
a variant 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 for such definitions, using the all-uppercase variant
implies making use of a tag appropriate for this application-oriented
extension (such as tag number 1 for <tt>DT</tt>, where <tt>dt</tt> stands for the
unwrapped number).</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>
      </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>"):  </t>
            <t>
In a position that allows blank space, any text within and including
a pair of slashes is considered blank space (and thus effectively a
comment).</t>
          </li>
          <li>
            <t>end-of-line comments, delimited by "<tt>#</tt>" and an end of line (LINE
FEED, U+000A):  </t>
            <t>
In a position that allows blank space, any text within and including
a pair of a "<tt>#</tt>" and 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>
      </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>The convention for encoding indicators is that anything starting with
an underscore and all immediately following characters that are alphanumeric or
underscore is an encoding indicator, and can be ignored by anyone not
interested in this information.  For example, <tt>_</tt> or <tt>_3</tt>.</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, but may want to be able to process EDN that contains
encoding indicators, ignoring them just as a generic CBOR decoder
ignores the presence of the serialization variants they express.</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 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 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).
<!--
This encoding
indicator is not shown in {{examples}}.
 -->
        </t>
        <t>The encoding indicator <tt>_</tt> is an abbreviation of what would in full
form be <tt>_7</tt>, which is not used.
Therefore, an underscore <tt>_</tt> on its own stands for indefinite length
encoding (<tt>ai=31</tt>).
(Note that this encoding indicator 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.
(The abbreviation of <tt>_7</tt> into <tt>_</tt> was discussed above.
<tt>_4</tt> to <tt>_6</tt> are not currently used in CBOR, but will be available if
and when CBOR is extended to make use of <tt>ai=28</tt> to <tt>ai=30</tt>.)</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>While no pressing use for further values for encoding indicators
comes to mind, this is an extension point for EDN; <xref target="reg-ei"/> defines
a registry for additional values.</t>
        <t>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 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 0o
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>
          </tbody>
        </table>
        <t>The non-finite floating-point numbers <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).</t>
        <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 NaNs with non-zero payloads, 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 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,
raw strings, and 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 to 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 (which are always single-quoted after the
prefix) 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 these "escaping" 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 duplicated 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 string 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 do
not 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 be in the
<tt>b64''</tt> set of characters that contribute to the byte string.
Therefore, only end-of-line comments are available in 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; we speak 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; we also speak of
<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.
Both double-quoted and single-quoted 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>
          <!--
## Concatenated Strings {#concatenated-strings}

While the ability to include whitespace enables line-breaking of
encoded byte strings, a mechanism is needed to be able to include
text strings as well as byte strings in direct UTF-8 representation
into line-based documents (such as RFCs and source code).

We extend the diagnostic notation by allowing multiple text strings or
multiple byte strings to be notated separated by whitespace; these
are then concatenated into a single text or byte string, respectively.
Text strings and byte strings do not mix within such a
concatenation, except that byte string notation can be used inside a
sequence of concatenated text string notation to encode characters
that may be better represented in an encoded way.  The following four
values are equivalent:


~~~~
   "Hello world"
   "Hello " "world"
   "Hello" h'20' "world"
   "" h'48656c6c6f20776f726c64' ""
~~~~

Similarly, the following byte string values are equivalent:


~~~~
   'Hello world'
   'Hello ' 'world'
   'Hello ' h'776f726c64'
   'Hello' h'20' 'world'
   '' h'48656c6c6f20776f726c64' '' b64''
   h'4 86 56c 6c6f' h' 20776 f726c64'
~~~~

(Note that the approach of separating by whitespace, while familiar
from the C language, requires some attention — a single comma makes a
big difference here.)

-->

</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>
        <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.
(Stylistically, leaving out the commas is more idiomatic when they
occur at line breaks.)</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>
        <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 backwards compatible way.</t>
        </aside>
        <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 encoding 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 integer in the parentheses.  For example, »<tt>simple(42)</tt>«
indicates major type 7, value 42, and »<tt>simple(0x14)</tt>« indicates
»<tt>false</tt>«, as does »<tt>simple(20)</tt>« or »<tt>simple(0b10100)</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&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 content 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 content of the literal is a single IPv4address or IPv6address as per
<xref section="3.2.2" sectionFormat="of" target="RFC3986"/>, as a text or byte string.</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 content of the literal is a 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 text 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 CPA99.</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"]]
CPA99([-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>
      <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>
      <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"><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>
      <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>
      <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> and <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 could therefore not be 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 item S ")"
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*(%x09/%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 strings
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-7F / NONASCII
non-lf          = %x09 / %x0D / %x20-7F / NONASCII
comment         = "/" *non-slash "/"
                / "#" *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
                / newline  ; swallow escaped newline

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"><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 (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 rawstrings is lenient; a parser needs to
  implement the 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 access 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"><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>
Note that the syntax defined here for concatenation of components
uses an explicit <tt>+</tt> operator between the components to be
concatenated (<xref section="G.4" sectionFormat="of" target="RFC8610"/> used simple juxtaposition,
which 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>
            <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>
      <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>
          </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>
        <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-h.abnf"><![CDATA[
app-string-h    = S *(HEXDIG S HEXDIG S / ellipsis S)
                  ["#" *non-lf]
ellipsis        = 3*"."
HEXDIG          = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT           = %x30-39 ; 0-9
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-10FFFF
non-lf          = %x09 / %x0D / %x20-D7FF / %xE000-10FFFF
S               = *blank *(comment *blank )
comment         = "/" *non-slash "/"
                / "#" *non-lf %x0A
]]></sourcecode>
          </figure>
        </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-h"/>.</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
in-line comments in b64, as "/" 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-b64.abnf"><![CDATA[
app-string-b64  = B *(4(b64dig B))
                  [b64dig B b64dig B ["=" B "=" / b64dig B ["="]] B]
                  ["#" *inon-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
B               = *iblank *(icomment *iblank)
iblank          = %x0A / %x20  ; Not HT or CR (gone)
icomment        = "#" *inon-lf %x0A
inon-lf         = %x20-D7FF / %xE000-10FFFF
ALPHA           = %x41-5a / %x61-7a
DIGIT           = %x30-39
]]></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> 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-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
DIGIT           =  %x30-39 ; 0-9
]]></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-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

HEXDIG        = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT         = %x30-39 ; 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-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 5 of [I-D.ietf-cbor-edn-literals]:

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
ALPHA         = %x41-5a / %x61-7a
DIGIT         = %x30-39
HEXDIG        = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
; case insensitive matching, i.e., including lower case

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 Code 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-bricklets.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>Two subsections with ABNF for integrated parsers follow, one for <tt>h''</tt>,
and one for <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 code similar to that in <xref target="abnf-grammar-sq-glue"/>, 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-h.abnf"><![CDATA[
sq-app-string-h = %s"h'" app-string-h "'"
app-string-h = h-S *(HEXDIG h-S HEXDIG h-S / ellipsis h-S)
    ["#" *(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-comment = "/" *(h-non-slash) "/"
          / "#" *(i-non-lf) i-LF
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-b64-grammar">
          <name>b64: ABNF Definition of Integrated Parser</name>
          <t>With glue code similar to that in <xref target="abnf-grammar-sq-glue"/>, ABNF such as
that shown in <xref target="abnf-grammar-sq-b64"/> can be used as an integrated parser
for <tt>h''</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-b64.abnf"><![CDATA[
sq-app-string-b64 = %s"b64'" app-string-b64 "'"
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>
    </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="7" month="July" year="2025"/>
            <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 and
   implementers of CBOR libraries and 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 a rather drafty initial revision, 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-02"/>
        </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="I-D.ietf-cbor-update-8610-grammar">
          <front>
            <title>Updates to the CDDL grammar of RFC 8610</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="24" month="June" year="2024"/>
            <abstract>
              <t>   The Concise Data Definition Language (CDDL), as defined in RFC 8610
   and RFC 9165, provides an easy and unambiguous way to express
   structures for protocol messages and data formats that are
   represented in CBOR or JSON.

   The present document updates RFC 8610 by addressing errata and making
   other small fixes for the ABNF grammar defined for CDDL there.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-update-8610-grammar-06"/>
        </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="2" month="July" year="2025"/>
            <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-02"/>
        </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>
      </references>
    </references>
    <?line 2562?>

<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 end-of-line comments
starting with <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="I-D.ietf-cbor-update-8610-grammar"/>) 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-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-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>
      </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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
n9EZkFqgVM3crESFG5AbBzG3S4R64K3jsiqNQj+p+IYgMoqto1T/fIYWXKoY
U9qjUm8TqaYjLCvcqzpCUGNsQr/M+nbBhG1RDRnuMfxiv3i/G1ixUEqx6CVf
4bUt1FH33XMbcme2w/24ah9GKWBY9TdwGrTJl3qyuavprxBI4e8aMjDH+gRY
wlj/nT5NJzWeOOZcfpes3l2+uoT2louO2sJHd/ZsH3t/97uv//h/AgxeZ3/8
73/8L7DT2R//63Wc7VFPyCNRWSDoZrE3POj1oFX3sLcPjz+bMjjOrdPN2rgP
5l56aC9L1ockotMZfzVWnHgNtqTu1XpoWLdDA1VtfyTlzYx52FK1BeYXtkqb
WqTj52LgFNWGuL/jjCzvJCeup8aW4JI/A0QjC4acowVdUkPp2IjFBqsGOJe2
wuyDcoHGD8CNvRFvyhDUDOG6+k8FdL1tVMEXDVEFZF8yzE74k7F8CKSBGAyD
vjFNIsIkNhGoDJGcPX05OZSAJMGJpJyuSV5byVBRo7xoeFeZqEhSmXCrty9H
B25HR64HxleWCYqQd9bvG/qO3A4peznxtCjiTGbfgAPE1xTl3VulqCSJJFbf
SbRcBgk17r7QsKDsI5axfKL8DGUFFoK+oVqZ8Yrtd3eieLYFzaC1E0QQp2Fq
NUl6ktg4OrINnVuKhApRudD5tj1HhaF703TJafhNC7xL1CERJsANJOlj8hKp
JzAzHuf0YEqVK3n5bLOQijC8oS4jtkm5gJtUrUX1rnyV+p4sHCUzWL6lZUdZ
xRo8bDoJ5HkJR3zPxX71ha3mqH/NC9f17y9+3aBqwHGmrEJSsgtyZsuTNeVs
/ahPFNmJKY+LsdAlyC1I0BqrdrFDWMxLKW9SOiau7Gt2tIqTtcf454uS5rQx
zyXPzLqzo5nan1mFcdGenuJcsmayFdpx1CVR0hEA6ez9LL1dfV3r1Z7J+OUB
sCQPIdvlA8kuaRbRTUylOogXJ5MMadfDir1eYtDqdPNppoIG5Kvu0lVv2C0R
TSphCuNE0oFXFPqtKqnrEqnhnbhOSXYiPX9UqO2upfSIqHWkoIIkXauCdklz
bO/35yfM9jktEUsU8kKVnZgTT5sgGiJPxpyfo0AyxmCkYFosyZRmo6x+hwqD
kZPk2HXcWo+txT/Zvs5NwZYlBwfEh87AWMTXuA+E8KRMd1nNx5HGLU+tHEvW
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
uK7+D/or8+qJpQEA

-->

</rfc>
