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

<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 revision (–16) addresses the first half of the WGLC
comments, except for the issues around the specific way how to best
achieve pluggable ABNF grammars for application-extensions.
It is intended for use as a reference document for the mid-WGLC
CBOR WG interim meeting on 2025-01-08.</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 138?>

<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 two application-oriented literal forms that enhance EDN with text
representations of epoch-based date/times and of IP addresses
and prefixes <xref target="RFC9164"/>.</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-lit"/>
introduces the concept of application-oriented extension literals and
defines the "dt" and "ip" 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"/>, and some implementation considerations for integrating
specific ABNF grammars into the overall ABNF grammar in <xref target="squash"/>.</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.</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>Additional features such as consistently selecting the unescaped or an
escaped (ASCII equivalent) forms of characters in strings, 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="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>
        <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>
        <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.
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.
(See <xref target="concat"/> for details.)</t>
        <section anchor="prefixed-lit">
          <name>Prefixed String Literals</name>
          <t>Single-quoted string literals can be prefixed by a sequence of ASCII
letters and digits, starting with a letter, and using either lower
case or upper case throughout.
»false«, »true«, »null«, and »undefined« cannot be used as such
prefixes.
This means that the text string value (the "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 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>
          <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>
          <t>Examples often benefit from some blank space (spaces, line breaks) in
byte strings.
In certain EDN prefixed byte strings, 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>Note that the internal syntax of prefixed single-quote literals such
as <tt>h''</tt> and <tt>b64''</tt> can 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 strings are the same; the 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-cbor-and-cbor-sequences-in-byte-strings">
          <name>Embedded CBOR and CBOR Sequences in Byte Strings</name>
          <t>Where a byte string is to carry an embedded CBOR-encoded item, or more
generally a sequence of zero or more such items, the diagnostic
notation for these zero or more CBOR data items, separated by commas,
can be enclosed in <tt>&lt;&lt;</tt> and <tt>&gt;&gt;</tt> to notate the byte string
resulting from encoding the data items and concatenating the result.
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 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 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.</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-lit">
      <name>Application-Oriented Extension Literals</name>
      <t>This document extends the syntax used in diagnostic notation for byte
string literals to also be available for application-oriented extensions.</t>
      <t>As per Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, the diagnostic notation can notate byte
strings in a number of <xref target="RFC4648"/> base encodings, where the encoded text
is enclosed in single quotes, prefixed by an identifier (»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 defines additional names for this namespace,
which we call <em>application-extension identifiers</em>.
For the quoted string, the same rules apply as for byte strings.
In particular, the escaping rules that were adapted from JSON strings
are applied
equivalently for application-oriented extensions, e.g., within the
quoted string <tt>\\</tt> stands
for a single backslash and <tt>\'</tt> stands for a single quote.</t>
      <t>An application-extension identifier is a name consisting of a
lower-case ASCII letter (a-z) and zero or more additional ASCII
characters that are either lower-case letters or digits (a-z0-9).</t>
      <t>Application-extension identifiers are registered in a registry
(<xref target="appext-iana"/>).</t>
      <t>Prefixing a single-quoted string, an application-extension identifier
is used to build an application-oriented extension literal, which
stands for a CBOR data item the value of which is derived from the
text given in the single-quoted string using a procedure defined in
the specification for an application-extension identifier.</t>
      <t>An application-extension (such as <tt>dt</tt>) <bcp14>MAY</bcp14> also define the meaning of
a variant prefix built out of the application-extension identifier by
replacing each lower-case character by its upper-case counterpart (such
as <tt>DT</tt>), for building an application-oriented extension literal using
that all-uppercase variant as the prefix of a single-quoted string.</t>
      <t>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>).</t>
      <t>Examples for application-oriented extensions to CBOR diagnostic
notation can be found in the following sections.</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 text of the literal is a Standard Date/Time String as per
Section <xref target="RFC8949" section="3.4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</t>
        <t>The value of the literal is a number representing the result of a
conversion of the given Standard Date/Time String to an Epoch-Based
Date/Time.
If fractional seconds are given in the text (production
<tt>time-secfrac</tt> in <xref target="abnf-grammar-dt"/>), the value is a
floating-point number; the value is an integer number otherwise.
In the all-upper-case variant of the app-prefix, the value is enclosed
in a tag number 1.</t>
        <t>Each row of <xref target="tab-equiv-dt"/> shows an example of "dt" notation and
equivalent notation not using an application-extension identifier.</t>
        <table anchor="tab-equiv-dt">
          <name>dt and DT literals vs. plain EDN</name>
          <thead>
            <tr>
              <th align="left">dt literal</th>
              <th align="left">plain EDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16Z'</tt></td>
              <td align="left">
                <tt>-14159024</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.0Z'</tt></td>
              <td align="left">
                <tt>-14159024.0</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.5Z'</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>DT'1969-07-21T02:56: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 text of the literal is an IPv4address or IPv6address as per
<xref section="3.2.2" sectionFormat="of" target="RFC3986"/>.</t>
        <t>With the lower-case app-string prefix <tt>ip</tt>, the value of the literal is a
byte string representing the binary IP address.
With the upper-case app-string prefix <tt>IP</tt>, the literal is such a byte string
tagged with tag number 54, if an IPv6address is used, or tag number
52, if an IPv4address is used.</t>
        <t>As an additional case, the upper-case app-string prefix <tt>IP''</tt> can be used
with an IP address prefix such as <tt>2001:db8::/56</tt> or <tt>192.0.2.0/24</tt>, with the equivalent tag as its value.
(Note that <xref target="RFC9164"/> representations of address prefixes need to
implement the truncation of the address byte string as described in
<xref section="4.2" sectionFormat="of" target="RFC9164"/>; see example below.)
For completeness, the lower-case variant <tt>ip'2001:db8::/56'</tt> or  <tt>ip'192.0.2.0/24'</tt> stands for
an unwrapped <tt>[56,h'20010db8']</tt> or <tt>[24,h'c00002']</tt>; however, in this case the information
on whether an address is IPv4 or IPv6 often needs to come from the context.</t>
        <t>Note that there is 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.
This can be represented as in <tt>52([ip'192.0.2.42',24])</tt>, if needed.</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'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>
    <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 two text strings: The
application-extension identifier, and the (escape-processed) content
of the single-quoted string.
<!--
For example, `dt'1969-07-21T02:56:16Z'` can be provisionally represented as
`/CPA/ 999(["dt", "1969-07-21T02:56:16Z"])`.
 -->
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).
<xref target="squash"/> briefly discusses implementation considerations for when it is
desired to integrate some specific ABNF grammars into overall ABNF grammar.</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 strings 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<tt> with  prefix, say, </tt>p<tt>, is described by an ABNF definition
with the rule name </tt>app-string-p`.</t>
          <t>As an implementation note, some implementations may want to integrate
the parsing and processing of app-string content with the overall
grammar.
Such an integrated syntax is not provided with this specification, but
it can be derived from the overall ABNF definition and the
prefix-specific app-string ABNF definitions by performing an automated
transformation; see <xref target="squash"/>.</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 *lcalnum ; including h and b64
                / ucalpha *ucalnum ; tagged variant, if defined
app-string      = app-prefix sqstr
sqstr           = SQUOTE *single-quoted SQUOTE
bstr            = app-string / sqstr / embedded
                  ; app-string 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-D7FF / %xE000-10FFFF
non-lf          = %x09 / %x0D / %x20-D7FF / %xE000-10FFFF
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
                / "\" DQUOTE
                / "\" escapable

single-quoted   = unescaped
                / DQUOTE
                / "\" SQUOTE
                / "\" escapable

escapable       = %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
                / "/"   ; / slash (solidus) U+002F (JSON!)
                / "\"   ; \ backslash (reverse solidus) U+005C
                / (%s"u" hexchar) ;  uXXXX      U+XXXX

hexchar         = "{" (1*"0" [ hexscalar ] / hexscalar) "}"
                / non-surrogate
                / (high-surrogate "\" %s"u" low-surrogate)
non-surrogate   = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
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

; 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-D7FF ; skip surrogate code points
                / %xE000-10FFFF

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
HEXDIG          = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
HEXDIG1         = DIGIT1 / "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
lcalpha         = %x61-7A ; a-z
lcalnum         = lcalpha / DIGIT
ucalpha         = %x41-5A ; A-Z
ucalnum         = ucalpha / DIGIT
wordchar        = "_" / lcalnum / ucalpha ; [_a-z0-9A-Z]
]]></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 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 app-string 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.
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>
        <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>
    <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 and digits 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 align="left" 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 align="left">
          <name>New Content-Format</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="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="July" year="2024"/>
            <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-00"/>
        </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="1" month="September" year="2024"/>
            <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-04"/>
        </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 2036?>

<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 anchor="squash">
      <name>Integrating Specific ABNF Grammars into the Overall Grammar</name>
      <t>This appendix is for information.</t>
      <t>It discusses an implementation strategy that integrates the parsing
and processing of certain app-string content into the overall ABNF
grammar.
Such an integrated grammar is not provided with this specification,
but it can be automatically derived from the overall ABNF definition
and the prefix-specific app-string ABNF definitions (such as those
provided in <xref target="app-grammars"/> or as later extensions).</t>
      <t>At the time of writing, one example a tool performing such a
derivation is available as open-source software <xref target="ABNFROB"/>.
As an extension to the existing tool <tt>abnftt</tt> for converting ABNF
grammars into PEG parsers, an ABNF processing tool, <tt>abnfrob</tt>, was
added that can mechanically replace each character in the supplied
grammar for an app-string definition by the ways that this character
can be represented in the overall ABNF.</t>
      <t>Such an ABNF processing tool can be used while building an EDN tool,
by converting some of the app-string grammars for integration into the
overall grammar, combining the processing into a single pass.
Other app-string grammars (including future ones still to be defined
and possibly added as a runtime extension) might be kept separate from
the overall grammar.
The latter approach can be particularly useful if the platform already
has parsers for the app-specific grammar, which is quite likely for
instance for IP addresses (<tt>ip''</tt>) and <xref target="RFC3339"/> date/time strings (<tt>dt''</tt>).</t>
    </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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
ZxsbwyeoYcc1ylEjxKKPFXLDxLihtTi61in70SnWujIHwA4kdTvHHF7OVnQ+
c2Pk9DELdcYwOYpENUyIAWD7RTQORVOMOLmNjkslCKmcmTXbM5ODCImNF/4x
JSnZoseerqtBXmaAPBYLmEGDeU869JRhmdQdIAPB7elEsLPsvKHF70BZ951C
WmkPSmxj/J5UBbN4HonHGi44+gQIHDCUvV8i7oYV2TtODOZBj+7SI/zSaNkV
SojswUKaFkbJiHrgj9Bd9PKJCyZ5Eeawra/5Tr9kC1P12pAhx6ji/a206mzb
q7EpKuNMInZ3FAlGNJRDH2TRJD0jULjHep6mH/FOfYzIg8iy2uyuJIuNnsCb
QAVgMnmtmdqwQ8yl+wRQNoJFJUWmLPiTeF/pB/smu/gMTmgCdxmVdRWIa9IF
ahFA+FqANhlztR6OdrbgBbIXlNUJcDHhXrZwEKv9t6gW2OJRSp9GwAV/BFQS
jgHvJtE1mbnQkWxi5kCD8wKsDY2QAJoiqGu8QsKCeN05F6uQ9LXD9lCxKXF4
MARw8Jj3qmqE1VUYn1Wgr19EGm+xwy1hfsBmstMMiGvmr+bh2dHpqUYLEMg5
aCsUGz9cbic7Ed40W4jxZ/hRlS/9ZbhgDzoc8n60j4wHQ1lb4TEgwp+wxIpO
SnjVCTQQHFXZ6Qkng6DKPjthwc6nbQLq6TIj/BzmuBP4qtBcVN87+uzH3KQj
vDKReBuFLM5cggA4px5n0XxB/czSFEmEulvzjETYqAWF8anas/C4VJ3tyoCl
8IUwUJYu0E8DPWgRNuD8X8OVR7cuUi4+NExR3z6qsxyVXFkf/KPUitF71QsC
PShSzy2sYspg/fxoeXHBRjP2uHOMNaIjr3GZExSJVKEmrkD95TgldzPxCNRe
x2XhzuhOQ1H+qftZf1jHnby8uoeXdzbhWjVqtkRESFZ88Wkjtyf3ruKeniAt
9uxm2KRqXcZQA3QR8RRgQFStx73VOjSJByaldIs6QtNHYhZgBlHWRNtRb8WZ
hZFJaMIRnMYb70kYTzzXPxuKQD4ueNzLPLTuyp79lzWscBrpDbs0lKwyqD8U
Y1hOM/bUJ3gbRPoJKRoWFdroq0vaQKJOrPCK84qdEWN30FaeIGL5cZmMnZCH
TkcUw4OivZA1hM8b361xHpXew6EUaSFJIiFnDeY44LtWW/RUHKGgRykZwtlY
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
PGIvuHN7+aUb/QP5VLMhEFMBAA==

-->

</rfc>
