<?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.30 (Ruby 3.4.6) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-19" category="std" consensus="true" submissionType="IETF" updates="8610, 8949" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title>CBOR Extended Diagnostic Notation (EDN)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-19"/>
    <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="2025" month="October" day="16"/>
    <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>-19</tt> includes the definition of the cri''
application-extension.
cri'' was previously defined in draft-ietf-core-href; however the
latter document overtook the present document in the approval
process.
As the definition of cri'' is dependent on the present document
(and conversely has essentially no dependency on the technical
content of draft-ietf-core-href beyond its mere existence), the
text (including IANA considerations) has been moved here.
<tt>-19</tt> is intended for use at the CBOR WG meeting at IETF 124.</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 147?>

<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", and "hash" 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
<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 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.</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>
        <section anchor="text-string-literals">
          <name>Text String Literals</name>
          <t>EDN notates 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="byte-string-literals">
          <name>Byte String Literals</name>
          <t>EDN adds a number of ways to notate byte strings, some of which
provide detailed access to the bits within those bytes (see
<xref target="encoded-byte-strings"/>).
However, quite often, byte strings carry bytes that can be meaningfully
notated as UTF-8 text (<xref target="sq-lit"/>).</t>
        </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.)</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 base-encoded byte string literals.
These are notated as prefixed string literals that carry one of the base encodings <xref target="RFC4648"/>, without
padding, i.e., the base encoding is
enclosed in a single-quoted 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>.</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
ellipses; while 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 ">>"
sqstr           = SQUOTE *single-quoted SQUOTE
bstr            = app-string / sqstr / app-sequence / embedded
                  ; app-string/-sequence could 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

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

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="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="27" month="September" 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 to add a note on how the "URI Schemes"
   registry of RFC 7595 cooperates with the "CRI Scheme Numbers"
   registry created by the present RFC.


   // (This "cref" paragraph will be removed by the RFC editor:) The
   // present revision –25 contains a few more tweaks to address follow-
   // on AD review comments as well as comments from the ARTART review.
   // It is intended to be ready for IESG evaluation.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-25"/>
        </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="30" month="August" year="2025"/>
            <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-06"/>
        </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 2433?>

<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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
imwN0l2wykqVaBKpRIhFbaTF4TyXfCtM4RkZRRVs8LZaX0ANMZc2qYFk2QVv
UrKs8NzIHu6SOtt0WFQZnggCF5jHaeO+/cZUSqRdKIti87P7kmMXpf73Zw0Y
1T4Iph2qnU2tXzFWm819xORPiaP/QvtnZaIihFXm8oqBYiuM0gTWoJjXNZiR
MAFXwL2LdYg3SAUUoG7wCEGiz466esahEYAqaitf5AtW4dvz/fBABh+Ptinf
1XDE6fcKd88LKYRbi+ndAwYWFahKQto2mFlmIIGZrHzjfHIq3g8VXSn+VgHO
s9veCR5UtmvG4KFR3fi1oP0pbljRb5vpzje+95D7YUfvlPw22ykopvjJjqzB
f2XnljXAQ9L4lOjv8LVy9V0Qii3okKyNUwP6vHgP9k1w/DSCrUqilbLlFk5s
vcS648VJqYqqeM5Qg7Gv9mqQ6ZKoIuymGiWXvgWcCuzVFFfCxmS6Ltbvu2iZ
3Z27fCM4sPrd7fnDcbRnklG5Lt5OnDe82P0XZw/X1REr6cgWlc45nzh16Ukt
scslyFvDiV/5IHyvIFvFgKRMr4osak9x2QFW9lwJrmLJ5w6TaxEcKxQvsxqP
CtPmaG2pfBNJOAYlQZKJWkd/W0XJKzhgEUVYczSo+m4KTtZIrvZWJwNK2Vuj
NjLDcREL8ZTFw5F4fXEg5Ldh9hf5zZyKirAvVCFe2Yxi0neDsJNKFRCpcnOj
2BOKAj2s2h9hwwv5ZPBwiurMKxvEhk/aqzoVF4jIr1iO1IeDecqaQ85gQJkM
4jpztAxZZPFg7Q8quoj7r3DdFNyyCmCkm7nRSiQrBB92iMrWmId6A4vFJHLa
bD7iq7+hPPB0B284UUDvrf1Ux4+Ys4d/5E/mx7r90bSs25Z105IwD5/0Rjq0
zqGuLNCz4GMFPkWVz5s/1e1v2mv2gGzB3LeXwxjrsewIdDhYs0oUzzdaKiHD
3aAaLhgyI4nVAaMi9lqhvtdApUm255jlFdee5ZOxPgp5esl8tlEKoS5H+sC8
7lo7B9grv+gSucN5E5YLTU50FLJIPDdFOtWanIfQHjqvFnFJwsYzGIsYeYMK
/MKwdQ4q1FK9yNTEzvxwEyTat7oCFZAzuwS5aG1F9cIJ53t5RIQfMQbQTbcU
uhAWM2lxT/CfvmfjhkV7fnYMS9W8TARRpgqsyabbh61BEyadefOOkma8HSpZ
l8SqGi8bW1tho8NC7TOchEnlEcYYu4lSUsIu5x30olcNOamX5gyZ2vJBN1bB
g6FKwPMTcacdYvpGKf4l4rds9WUOI3UVVGakHArkXeQylYSbhnvW1pQKuU41
Vt4aRxS7fpmu05Z6ZnWe7/BN2AGaPQ72dburp3093R02N3WLAoFBeYO/QNlR
qlQQZYf6S4p4WGWH2qrs8H2YyqtjGA8mk6CJ3eIAV8UfIsnvIMyIjMfU7YqJ
EPr9kqbZS/JZRMc56n7xAzB6lc8miEK/jjB074hC9JPMxmdypJm4OqwXRoMg
MerGsuYyHdcDdzbzTDTmKnSFK3ryU5KR2CnECXJdyBj0B5ule73egaqeX7wA
lrjdcZ4XXkAE1QbWXBzwyc7uzmfVrla67U6v0e41up3X3fZhu3/Ybv+uAmyA
LMEjHfEyHc9EjsW0lKYEpSW8m/13qp3eoLd/MOj225IGyMv+bOMqPUe/Ute+
y+SDUXwUrw92h7c8vJMlM3lXmEuV8tKQW+BGbcfgAOWQaoX8WA6GuLSimlDk
c8dF5MDL1U4NBZVOpHc7/dFgb9SmSB0Gl2A+BG8ULuoXFGL2n8onFPl+xnt+
8aHXWN+p+ssfhohDhr/8a62unyFSUfgboRf+EW/wc6w1iL+jtQN/bqrvF5ab
zbwUn0ObwR2amYA0G5rcVJ5zCzJZrOENJybnzG5CWM+WH1drFZdYzVdRmWtk
WGJ3NYrkCqYnffW7NZifcqlqvJjUvbqo/fpdk5bevNb+2Onjiy7HjfI2yyW/
cG9029Qe+vZ6GXUwzh8foIU6SFl/d0UUzDN+3zJzkq3WlmvzRTcBDpMvalve
I0zQIDWm70iELlZPU/6mLL/6nT3wpa9M8oq3AZ8eTGDJmykVuPGdSfOpN+MV
7YLWKEVt3CLU5EyXBSrPpZzOCJUdEyo7xZdeCz5bxivl+9OWV2Z0KWn9WAsv
rMLK/hfoaQF8pjeKuF6WDralplNmjFShgk2mUWZsl5wxfE4bztkuvILUa6Kc
Nl3wPd0+c06e5W2hsk2a6nxqA/3RVSqG7icsggUl9DgoD678ZM3u5UM8tga0
x7eHLFBHo8W0IcWGGhNOxu+8C3CFqjRjw6NCq4XFKAZwEUldJyhGSrpRWwKh
4ddA8Ez0DT88xXZtPEIUeQ34hQ0waxSqmDBRCnFelDYViSmthBIfSqoq5iKh
EcG1K8W9mHghe+53docWyfmuu0J5UyY2mUNpqo3l3Ljy8Q93JUjZeEwJPib5
TudgcNBo7yEr0e4e7g4OO4Pf7Qw5nUej0+/sHrQx06iW3CLlbzTb+I7/BiUO
ue2N3cIbveaue+Px423vYOHz7W9Vyt+qbH/r9PWtO9Cp2hXVgly6AhQmmcmE
XeBPXztj8AcgfPaUMG+JpPrIG7YUlyk6jgUgfScTwyp4uIpKbHg+a4yhk2WI
oZPlX4KhsbcSDL3Q5y+VSRl4B44+f2mTCzKuLGTcVQ3gP6LLL8HG5y8/9E2f
sC/wdRAOocJYCsL9jfUquQML/8a4wnjFW1xUlnFKGibLoY8/SiYaxB5uoG1J
nOY2pulG9pBXycjnL2VkbzA2rwSOjLCdl/HE5SQTZLbbJzMlnYnbMTleUtW4
xmq36zXuFxqzNT7Mi4tzrt9rDcZzVuBEmSS7HqRIY5s4owsc+eFktH942Nod
sCDfOeg223C47RYgI68MlYdrqcQNx3tKLGHgim4AbyOLPmcW9SYSZyZ0x/kS
MP1brRfjIJ21edGHAC56C4z2iFg6tVEx2szkEWWkNqSEQr+aNRKYUb01j3Oq
l1ovwqghcwCZO8FOsWs+/e5vVxBxzfn0TWWe4ZvdQX1GvbShl523vNlvun34
dYwpobrw2yM9M2HZxlWeJsI2ZJcfmcoXiOV+oT0gQpgyV1ec28kvkZ2WMB+G
MdOIojPwb9goU+S7Y4or1CI1Bt3NxEDYb+Uc/cCnqLLj+VZUWDnX4o8OazLM
GdX9pXBVjdgmilbWDiAQLHoqKdJin/6E/sIO0VoPafZiBlmf43FT9qckC1NU
fEn0qQDU5346GnZ/8LRiZPA3il3f84r0u8pGGbmco2iJYEct4bn8fdIuxQFO
yCv7ZQb0dZYsaA53u9U3HhD2uzv1bv8txkQRuVOlg2wsuN/l/tRwt0/9TeP9
9uFhuwtEut2dTg+nU/wrbvcO2712b6c+6Nf7XRiGYim2sHFAILewcUj8/gZs
XLLcZOM2uLdb/mxj7L4kHx4xOuGBMEOHXtp8zbsR/3TbPLAPYsxsL8JWfVkn
QBJKJgIw43VT295PsQ9BcdJHiLq2dWM2xKFPngmtxWDDdukfM2U7j5I+AF7v
0Q3xk8U+WoM+s8UI84N+gJzLV1PkSQHghCeFT4hogNDexZMmyz+PJwXeaJMn
nUXZLORK8ZcyvvT+nCn3ucmbohKK3ZjIrWW8ulkC8gPqNkvGGB42wxh2Ru2e
1Vl6vjHcFDZUtqFzig9dp8Mqt6y9EQ8rSXmgghHvw+GKy82WAGp27FOeKFyM
yNUlNWUL6xar/8mLizN9NL9MV9DplamoubLVeEn//4LLRF8klwvGcRM0quGm
Ii2tYh819yaZIQF6zo+eHzXHKcdjijOi6Mu9M6wSU3aovKVIzDWSBWI/F6jo
khmypcCWhxSGLxHerq6kuCIV3jTKM9aS8OxIqUEKNtJmiAcEW8BJqcF8FQB4
hFoVNy53lulGZ6CqlYtvjrCkVYWSFKd6o+CiofxeHg1zUUqhWm1ANVEJOrJy
cf9LiMXf9M8dKoYvTtD6t/pDSBU3FGjVNE2JSPnLQN+lk+7guD84Huw/e3aC
fx0cHPd3eyed01673+n1H49WT+Gfbvd0rz3o7/eOnx21nx3sH+2e7e8PuoPB
2d7R2c5fZ0t5qjTR4cbjf4tTlV3FGmsDt7X/tqdqrzEzLP+Wp9ro98Ndfbb3
7Pj4aHDWHvQGz/YP2me7A/jhWa+73zvb7fZPcKqDZ0e9brt/dNY92O/td08H
3f5ev3PaPj0ZDHr7vS61Oevud0/6neOz3bN+d7d/ur+Pbnfdk93dzv5Rl/rZ
Pdo/aZ/sPds7Oz3qHOwe9I/2zo53ewewNWeds9O9nW17u9vp2r39tzbhkD0i
TCsMko91S3gjZmdAkA+5GfjhFmZmS+Cgj/aH0MOwhJtBQu+lA5MEaSevzn25
MCu6r6GeS1gN1nOV8BnfQx+v/D5YMcdKMhbK9Pmrc1XWJvEG2G60CGfpKwel
sgfrU/Its3RljcllfoK5f0hys4Vr2coiy9Ua/dMp12fSyFNeR5OKHwROo5Qx
nXx/fZ+CePtslT9b9ot/dd46D5oT9/Bow/OCXG4/oud0PFGUvu5DYPDNcssz
uLhkdgB9z5Ewma3mosazNKHoqL+5zePk5dHBgdXwBZklJPXxhkGy6IkBh7Az
y/NldthqSQfADl61RmmeR6vLqJVhXNRkR8G2368h2dVx1p52L91w/2v0sSSq
dIROeNBX5S3+ZjrEH7nPytu3ipZa/dLXxMp/Ibllkz9PUsIrH4hKZKlrwGm8
Kqgj4Scp/kH7/+lBJi2/wNyMDneoV6NoLNLrIF7B+DyssGdKurt4QclTYuu8
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
rVqHXEz7gjXPUPaiLyzNrqxtK44rEYOjw8TA6mmltvIRiSGvNQwB+oDGUcFU
yjTJ2OWeyqLGAyyv4EH2x5V7/dm3zffDjY02DYrgghj4CtoK54KCCOoObpr8
rOiUZlMvJmvTdTodpOOYZJJtw2di3n9orRn1/Tcnh2cntCuekeIPYNrd6MGT
DrXTvmjxcB/q2HEeqg5/GpydjGeFwy/wN9MwKJAqDDgM7GJpOqFkMjJrERN6
ylBSEYJFqFUeQ8ftK5fYl0d5TnM23LXWj8jz59FqkwTdzjE7YTZvohcvMFq7
u9FwI9ne2n70ZCPs89t+vmA8DD162j8bJ0AmFhZLdlTSY44X5+xiFb3KJARd
cM4KOu4tJiKbad+/tYjEmo4ZvNvY3qbzXZnhTGz4z5+HT5Wq0kbUpcTzSlqO
s6pNzW8q6fvzNcnxopIaiM61qfGikpp93WqT85tKehtbVpvHvq3JtzZLfS3r
OlRe1eVY363mZSAaXShXnycZMBikXn+Zvw3BnZRThAnsQ5OKKXODQQ2fhun8
4QyfhungYFmXUp5XKfj8lO6pSSfHfz+NPPHfV7rCPkSq8HLRJSw/NyWG9smw
4PI7k8e3u/np/ecMvtMDBSYdGTSka8U+A3OQEYLdxiRvaGh3uOSBELYUTlIl
VSwk2KZy78G47IazCat+P4ygYzthf95wJdFKnYoLpNX0oLnt5+/2XoEe+wpP
/j6iM0v0klSIK1j6mt3vD1rqP90oPGFRkgEA

-->

</rfc>
