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

<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 -17 is intended to fully address the WGLC
comments.
It is intended for use as a reference document for the
CBOR WG interim meeting on 2025-05-14.</cref></t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cbor-wg.github.io/edn-literal/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        cbor Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/edn-literal"/>.</t>
    </note>
  </front>
  <middle>
    <?line 139?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Concise Binary Object Representation (CBOR) (RFC8949) <xref target="STD94"/>
    is a data format whose design goals include the possibility of
    extremely small code size, fairly small message size, and
    extensibility without the need for version negotiation.
In addition to the binary interchange format, the original CBOR specification
    described a text-based "diagnostic notation" (<xref section="6" sectionFormat="of" target="RFC7049"/>, now Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>), in
    order to be able to converse about CBOR data items without having
    to resort to binary data.
<xref section="G" sectionFormat="of" target="RFC8610"/> extended this into what is also known as
Extended Diagnostic Notation (EDN).</t>
      <t>Diagnostic notation syntax is based on JSON, with extensions
for representing CBOR constructs such as binary data and tags.</t>
      <t>Standardizing EDN in addition to the actual binary interchange format CBOR does
not serve to create a competing interchange format, but enables the use of
a shared diagnostic notation in tools for and in documents about CBOR.
Still, between tools for CBOR development and diagnosis, document
generation systems, continuous integration (CI)
environments, configuration files, and user interfaces for viewing and
editing for all these, EDN is often "interchanged" and therefore
merits a specification that facilitates interoperability within this
domain as well as reliable translation to and from CBOR.
EDN is not designed or intended for general-purpose use in protocol
elements exchanged between systems engaged in processes outside those
listed here.</t>
      <t>​This document consolidates and formalizes the definition of EDN,
providing a formal grammar (see <xref target="grammar"/> and <xref target="app-grammars"/>), and
incorporating small changes based on implementation experience.
It updates <xref target="RFC8949"/>, obsoleting Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
<xref target="RFC8610"/>, obsoleting <xref section="G" sectionFormat="of" target="RFC8610"/>.
It is intended to serve as a single reference target that can be used
in specifications that use EDN.</t>
      <t>It also specifies two registry-based extension points for the
diagnostic notation:
one for additional encoding indicators, and
one for adding application-oriented literal forms.
It uses these registries to add encoding indicators for a more
complete coverage of encoding variation,
and to add application-oriented literal forms that enhance EDN with text
representations of epoch-based date/times and of IP addresses
and prefixes <xref target="RFC9164"/> as well as an application-oriented literal that
represents cryptographic hash values computed from byte strings.</t>
      <t>In addition, this document registers a media type identifier
and a content-format for CBOR diagnostic notation.  This does not
elevate its status as an interchange format, but recognizes that
interaction between tools is often smoother if media types can be used.</t>
      <aside>
        <t>Examples in RFCs often do not use media type identifiers, but
special sourcecode type names that are allocated
in <eref target="https://www.rfc-editor.org/materials/sourcecode-types.txt">https://www.rfc-editor.org/materials/sourcecode-types.txt</eref>.
At the time of writing, this resource lists four sourcecode type
names that can be used in RFCs for including CBOR data items and
CBOR-related languages:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cbor</tt> (which is actually not useful, as CBOR is a binary format
and cannot be used in textual examples in an RFC),</t>
          </li>
          <li>
            <t><tt>cbor-diag</tt> (which is another name for EDN, as defined in the
present document),</t>
          </li>
          <li>
            <t><tt>cbor-pretty</tt> (which is a possibly annotated and pretty-printed
hexdump of an encoded CBOR data item, along the lines of the
grammar of <xref target="h-grammar"/>, as used for instance for some of the examples
in <xref section="A.3" sectionFormat="of" target="RFC9290"/>), and</t>
          </li>
          <li>
            <t><tt>cddl</tt> (which is used for the Concise Data Definition Language,
CDDL, see <xref target="terminology"/> below).</t>
          </li>
        </ul>
      </aside>
      <t>Note that EDN is not meant to be the only text-based representation of
CBOR data items.
For instance, <xref target="YAML"/> <xref target="RFC9512"/> is able to represent most CBOR
data items, possibly requiring use of YAML's extension points.
YAML does not provide certain features that can be useful with tools
and documents needing text-based representations of CBOR data items
(such as embedded CBOR or encoding indicators),
but it does provide a host of other features that EDN does not provide
such as anchor/alias data sharing, at a cost of higher implementation
and learning complexity.</t>
      <section anchor="structure-of-this-document">
        <name>Structure of This Document</name>
        <t><xref target="diagnostic-notation"/> of this document has been built from Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> and <xref section="G" sectionFormat="of" target="RFC8610"/>.
The latter provided a number of useful extensions to the
diagnostic notation originally defined in <xref section="6" sectionFormat="of" target="RFC7049"/>.
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> and <xref section="G" sectionFormat="of" target="RFC8610"/> have
collectively been called "Extended Diagnostic Notation" (EDN), giving
the present document its name.
<!--
Similarly, this notation could be extended in a separate document to
provide documentation for NaN payloads, which are not covered in this document.
-->
        </t>
        <t>After introductory material, <xref target="app-ext"/>
illustrates the concept of application-oriented extension literals by
defining the "dt", "ip", 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>
    <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, carrying the zero
or more content items of the sequence literal given (possibly just the value of the single-quoted string given).
For example, <tt>cri'https://example.com'</tt> can be provisionally represented as
<tt>/CPA/ 999(["cri", ["https://example.com"]])</tt>.</t>
        <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>
      <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>
          </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="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="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="8" month="January" 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-01"/>
        </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="29" month="December" year="2024"/>
            <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-01"/>
        </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="3" month="March" 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.


   // The present revision -04 includes a few clarifications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-deref-id-05"/>
        </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 2261?>

<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>
      <ol spacing="compact" type="1"><li>
          <t><xref target="abnf-grammar">Overall ABNF Definition of CBOR EDN</xref></t>
        </li>
        <li>
          <t><xref target="abnf-grammar-h">ABNF Definition of Hexadecimal Representation of a Byte String</xref></t>
        </li>
        <li>
          <t><xref target="abnf-grammar-b64">ABNF definition of Base64 Representation of a Byte String</xref></t>
        </li>
        <li>
          <t><xref target="abnf-grammar-dt">ABNF Definition of RFC3339 Representation of a Date/Time</xref></t>
        </li>
        <li>
          <t><xref target="abnf-grammar-ip">ABNF Definition of Textual Representation of an IP Address</xref></t>
        </li>
        <li>
          <t><xref target="abnf-grammar-sq-glue">Glue Code for Integrated DT Parser</xref></t>
        </li>
        <li>
          <t><xref target="abnf-grammar-sq">ABNF Definitions Useful for Integrated Extension Parsers</xref></t>
        </li>
        <li>
          <t><xref target="abnf-grammar-sq-h">ABNF Definition for Integrated Hex Parser</xref></t>
        </li>
        <li>
          <t><xref target="abnf-grammar-sq-b64">ABNF Definition for Integrated Base64 Parser</xref></t>
        </li>
      </ol>
    </section>
    <section numbered="false" anchor="list-of-tables">
      <name>List of Tables</name>
      <ol spacing="compact" type="1"><li>
          <t><xref target="tab-ei">Examples of Encoding Indicators for Different Data Items</xref></t>
        </li>
        <li>
          <t><xref target="tab-numbers">Example Sets of Equivalent Notations for Some Numbers</xref></t>
        </li>
        <li>
          <t><xref target="tab-equiv-dt">dt and DT literals vs. plain EDN</xref></t>
        </li>
        <li>
          <t><xref target="tab-equiv-ip">ip and IP literals vs. plain EDN</xref></t>
        </li>
        <li>
          <t><xref target="tab-equiv-hash">hash literals vs. plain EDN</xref></t>
        </li>
        <li>
          <t><xref target="tab-prefixes">App-prefix Values Defined in this Document</xref></t>
        </li>
        <li>
          <t><xref target="tab-iana">Initial Content of Application-extension Identifier Registry</xref></t>
        </li>
        <li>
          <t><xref target="tab-iana-ei">Initial Content of Encoding Indicator Registry</xref></t>
        </li>
        <li>
          <t><xref target="new-media-type">New Media Type application/cbor-diagnostic</xref></t>
        </li>
        <li>
          <t><xref target="tab-content-format">New Content-Format</xref></t>
        </li>
        <li>
          <t><xref target="tab-tag-values">Values for Tags</xref></t>
        </li>
      </ol>
    </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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
Rl+Vtllz5kHe9HGJVGSwmJAy5OYgksXVLy/i6D9fLgSsMPryTMAbPlq80upv
RR8y2ZsF11L60bGmFeQkEVLcFHh7+GhykZO+uW7ln5U6HjBCxLGEZAylewy5
mJ0VBv6malYo9dluEvIKv2cUWY09yVf4fjPHN/gcE/EmOjksp5D4JT0PrT1E
Q/O+AU6q4VDZ2uhlRP26Pl3pBV07bZ+/q3FqxWO7lb7TQU8bU+ZOu44pp05s
ni4R/lZKjaj+h7fyetwr/EYDt//dvjZZCeE94FOFDP4IIUF+xNOFMDnLk4SI
1cRCwOLytJYEQpiz+FuFOGaYbxES5GasE+LDxNYJSScPCJAK/r7v+SebexQK
sRkJmIM2G+HUzMFjP4MrJ5gKJpi1BmviXOq2hTI59TBPyy1aBKIk3cBGrKhe
tAqNrUu7r0Up/FMtxKKtYMmdS6biWsPkW03FVVyYP8U4XH1NwU74o83ERyyl
Bz96A9sInAwM/VUy9CRb8n9rN8kkeIrptDoxeFMff4WJNOYVbJp3cQvnzSWY
SvHYmUuAD3Osbr4C2U3GkOKOFFsqMJ9ISv2yc9E5iv4pBhTbT0+xnla/dCN7
yWHahjYMlEKI1fnC+OoKrl4cmDcGvzNODy/HDGMjibNj9gsMWBeDRhY4PGnl
G/Z0J8RW9kS+HZv8D06IbEodqF/pK/SWqW1NHc4EKNlzzpqjXfQHk+eLZeT/
whbE7Pgmc3BVdSoNwMqN2/aH+63aMtwodbbSYKT2dSp36rG55k70e0lSdJ9R
J718udvwhlXT7+EsL62QR3U45oP+++Ll2u91pkDwvbqzUy3vxePGYHX7diuK
Qt6rCiGbyFu1bEVeOcBxU3mr/SPyvn+ivNV+CmzCOh/EkPTX5ezateOx2k9V
8vY3lrfaTxXyXu5sLG+1n0J5WJ46VZnE1f0XmqS0FDxglVbM84Idujxgmtx7
9Racwlg2am6C17BHz0ewgPpMZt4URrNKdMLcLkTDhVm8GONfyEoky7YAN2CX
4tet3YqFvOlZkN0ZFUded9IQZrQg0XPpmjXYIssFEAOwuz8AE0Ofg8uw2shG
0FQR8IqrRKhiD5FrXkpodi+XbDcz7EYEXALmIqbx/xgXs8nv9Dl2Wx/mv6Ia
5VXWqVLJKNd34VbzfPWp1Zsmtc43jLpJ9IhchMj/bFXpY/KvoKMeegPUaHnA
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

-->

</rfc>
