<?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-14" 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-14"/>
    <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="2024" month="December" day="09"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 106?>

<t>The Concise Binary Object Representation (CBOR) (STD 94, 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.</t>
      <t>In addition to the binary interchange format, CBOR from the outset (RFC 7049) defined a text-based "diagnostic notation" in
order to be able to converse about CBOR data items without having
to resort to binary data. RFC 8610 extended this into what is known as Extended Diagnostic
Notation (EDN).</t>
      <t>​This document consolidates the definition of EDN, sets forth
a further step of its evolution,
and is intended to serve as a single reference target in
specifications that use EDN.
It updates
RFC 8949, obsoleting its Section 8, and
RFC 8610, obsoleting its Appendix G.</t>
      <t>It specifies an extension point for adding application-oriented extensions to
the diagnostic notation.
It then defines two such extensions that enhance EDN with text
representations of epoch-based date/times and of IP addresses
and prefixes (RFC 9164).</t>
      <t>A few further additions close some gaps in usability.
 The document modifies one extension originally specified in Appendix G.4 of RFC 8610 to enable further increasing usability.
 To facilitate tool interoperation, this document
 specifies a formal ABNF grammar, and it adds media types.</t>
      <t><cref anchor="status">(This "cref" paragraph will be removed by the RFC editor:)<br/>
The present revision <tt>-14</tt> is intended to reflect the feedback on <tt>-13</tt> as
discussed during IETF 121.</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 162?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Concise Binary Object Representation (CBOR) (STD 94, 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.</t>
      <t>In addition to the binary interchange format, CBOR from the outset (<xref section="6" sectionFormat="of" target="RFC7049"/>, now Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) defined a text-based "diagnostic notation" 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 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.
Between components of the limited domain of development and diagnostic
tools for CBOR, 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 above.</t>
      <t>​This document consolidates the definition of EDN, sets forth
a further step of its evolution,
and is intended to serve as a single reference target in
specifications that use EDN.
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"/>.</t>
      <t>It specifies an extension point for adding application-oriented extensions to
the diagnostic notation.
It then defines two such extensions that enhance EDN with text
representations of epoch-based date/times and of IP addresses
and prefixes <xref target="RFC9164"/>.</t>
      <t>A few further additions close some gaps in usability.
 The document modifies one extension originally specified in <xref section="G.4" sectionFormat="of" target="RFC8610"/> to enable further increasing usability.
 To facilitate tool interoperation, this document
 specifies a formal ABNF grammar.
    (See <xref target="grammar"/> for an overall ABNF grammar as well as the
    ABNF definitions in <xref target="app-grammars"/> for grammars for both the
    byte string presentations predefined in <xref target="STD94"/> and the
    application-extensions defined here.)</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.</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>
        <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>
        <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>
        <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 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 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 an API 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>or, 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>
      </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 &gt;1.5&lt; 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>.
Encoding indicators are always
optional.</t>
        <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"/>.)</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, while <tt>1.5_3</tt> is encoded as double precision.
<!--
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 ''_ and ""_ (<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.</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>.</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>The following are equivalent:</t>
        <sourcecode type="cbor-diag"><![CDATA[
   4711
   0x1267
   0o11147
   0b1001001100111
]]></sourcecode>
        <t>As are:</t>
        <sourcecode type="cbor-diag"><![CDATA[
   1.5
   0x1.8p0
   0x18p-4
]]></sourcecode>
        <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>;
<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>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.
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.
&gt;false&lt;, &gt;true&lt;, &gt;null&lt;, and &gt;undefined&lt; 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>The detailed chunk structure of byte and text strings encoded with
indefinite length can be
notated in the form (_ h'0123', h'4567') and (_ "foo", "bar").
However, for an indefinite-length string with no chunks inside, (_ )
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 (_ ''), (_ ""), etc.,
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 &gt;h&lt; for base16 or
&gt;b64&lt; 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 &gt;b32&lt; for
base32 and &gt;h32&lt; 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 EDN, blank space is ignored in prefixed byte strings; 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 h'' and b64'' can allow comments as blank space (see <xref target="comments"/>).
Since slash characters are allowed in b64'', only inline comments are
available in b64 string literals.</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>
        </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>
          <!--
## 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 (&gt;<tt>true</tt>&lt;), False
(&gt;<tt>false</tt>&lt;), and Null (&gt;<tt>null</tt>&lt;).
Undefined is written &gt;<tt>undefined</tt>&lt; 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, &gt;<tt>simple(42)</tt>&lt;
indicates major type 7, value 42, and &gt;<tt>simple(0x14)</tt>&lt; indicates
&gt;<tt>false</tt>&lt;, as does &gt;<tt>simple(20)</tt>&lt; or &gt;<tt>simple(0b10100)</tt>&lt;.</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>As an example, the CBOR diagnostic notation</t>
        <sourcecode type="cbor-diag"><![CDATA[
dt'1969-07-21T02:56:16Z',
dt'1969-07-21T02:56:16.5Z',
DT'1969-07-21T02:56:16Z'
]]></sourcecode>
        <t>is equivalent to</t>
        <sourcecode type="cbor-diag"><![CDATA[
-14159024,
-14159023.5,
1(-14159024)
]]></sourcecode>
        <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>Examples: the CBOR diagnostic notation</t>
        <sourcecode type="cbor-diag"><![CDATA[
ip'192.0.2.42',
IP'192.0.2.42',
IP'192.0.2.0/24',
ip'2001:db8::42',
IP'2001:db8::42',
IP'2001:db8::/64'
]]></sourcecode>
        <t>is equivalent to</t>
        <sourcecode type="cbor-diag"><![CDATA[
h'c000022a',
52(h'c000022a'),
52([24,h'c00002']),
h'20010db8000000000000000000000042',
54(h'20010db8000000000000000000000042'),
54([64,h'20010db8'])
]]></sourcecode>
        <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",
  "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"]),
  "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 S *(OC item S) OC]
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           = "'" *single-quoted "'"
bstr            = app-string / sqstr / embedded
                  ; app-string could be any type
tstr            = DQUOTE *double-quoted DQUOTE
embedded        = "<<" seq ">>"

array           = "[" spec S [item S *(OC item S) OC] "]"
map             = "{" spec S [kp S *(OC kp S) OC] "}"
kp              = 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
S               = *blank *(comment *blank)
comment         = "/" *non-slash "/"
                / "#" *non-lf %x0A

; optional comma (ignored)
OC              = ["," S]

; check semantically that strings are either all text or all bytes
; note that there must be at least one string to distinguish
streamstring    = "(_" S string S *(OC string S) OC ")"
spec            = ["_" *wordchar]

double-quoted   = unescaped
                / "'"
                / "\" DQUOTE
                / "\" escapable

single-quoted   = unescaped
                / DQUOTE
                / "\" "'"
                / "\" 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
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.2 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.</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 make integrate ABNF rules defined in <xref target="abnf-grammar"/>,
which are not always repeated here.</t>
        <section anchor="h-grammar">
          <name>h: ABNF Definition of Hexadecimal representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in hex,
such as <tt>h''</tt>, <tt>h'0815'</tt>, or <tt>h'/head/ 63 /contents/ 66 6f 6f'</tt>
(another representation of <tt>&lt;&lt; "foo" &gt;&gt;</tt>), is described by the ABNF in <xref target="abnf-grammar-h"/>.
This syntax accommodates both lower case and upper case hex digits, as
well as blank space (including comments) around each hex digit.</t>
          <figure anchor="abnf-grammar-h">
            <name>ABNF Definition of Hexadecimal Representation of a Byte String</name>
            <sourcecode type="abnf" name="cbor-edn-h.abnf"><![CDATA[
app-string-h    = S *(HEXDIG S HEXDIG S / ellipsis S)
                  ["#" *non-lf]
ellipsis        = 3*"."
HEXDIG          = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT           = %x30-39 ; 0-9
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-10FFFF
non-lf          = %x09 / %x0D / %x20-D7FF / %xE000-10FFFF
S               = *blank *(comment *blank )
comment         = "/" *non-slash "/"
                / "#" *non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="b64-grammar">
          <name>b64: ABNF Definition of Base64 representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in base64 is
described by the ABNF in <xref target="abnf-grammar-h"/>.</t>
          <t>This syntax allows both the classic (<xref section="4" sectionFormat="of" target="RFC4648"/>) and the
URL-safe (<xref section="5" sectionFormat="of" target="RFC4648"/>) alphabet to be used.
It accommodates, but does not require base64 padding.
Note that inclusion of classic base64 makes it impossible to have
in-line comments in b64, as "/" is valid base64-classic.</t>
          <figure anchor="abnf-grammar-b64">
            <name>ABNF definition of Base64 Representation of a Byte String</name>
            <sourcecode type="abnf" name="cbor-edn-b64.abnf"><![CDATA[
app-string-b64  = B *(4(b64dig B))
                  [b64dig B b64dig B ["=" B "=" / b64dig B ["="]] B]
                  ["#" *inon-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
B               = *iblank *(icomment *iblank)
iblank          = %x0A / %x20  ; Not HT or CR (gone)
icomment        = "#" *inon-lf %x0A
inon-lf         = %x20-D7FF / %xE000-10FFFF
ALPHA           = %x41-5a / %x61-7a
DIGIT           = %x30-39
]]></sourcecode>
          </figure>
        </section>
        <section anchor="dt-grammar">
          <name>dt: ABNF Definition of RFC 3339 Representation of a Date/Time</name>
          <t>The syntax of the content of <tt>dt</tt> literals can be described by the
ABNF for <tt>date-time</tt> from <xref target="RFC3339"/> as summarized in <xref section="3" sectionFormat="of" target="RFC9165"/>:</t>
          <figure anchor="abnf-grammar-dt">
            <name>ABNF Definition of RFC3339 Representation of a Date/Time</name>
            <sourcecode type="abnf" name="cbor-edn-dt.abnf"><![CDATA[
app-string-dt   = date-time

date-fullyear   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                          ; month/year
time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap sec
                          ; rules
time-secfrac    = "." 1*DIGIT
time-numoffset  = ("+" / "-") time-hour ":" time-minute
time-offset     = "Z" / time-numoffset

partial-time    = time-hour ":" time-minute ":" time-second
                  [time-secfrac]
full-date       = date-fullyear "-" date-month "-" date-mday
full-time       = partial-time time-offset

date-time       = full-date "T" full-time
DIGIT           =  %x30-39 ; 0-9
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ip-grammar">
          <name>ip: ABNF Definition of Textual Representation of an IP Address</name>
          <t>The syntax of the content of <tt>ip</tt> literals can be described by the
ABNF for <tt>IPv4address</tt> and <tt>IPv6address</tt> in <xref section="3.2.2" sectionFormat="of" target="RFC3986"/>,
as included in slightly updated form in <xref target="abnf-grammar-ip"/>.</t>
          <figure anchor="abnf-grammar-ip">
            <name>ABNF Definition of Textual Representation of an IP Address</name>
            <sourcecode type="abnf" name="cbor-edn-ip.abnf"><![CDATA[
app-string-ip = IPaddress ["/" uint]

IPaddress     = IPv4address
              / IPv6address

; ABNF from RFC 3986, re-arranged for PEG compatibility:

IPv6address   =                            6( h16 ":" ) ls32
              /                       "::" 5( h16 ":" ) ls32
              / [ h16               ] "::" 4( h16 ":" ) ls32
              / [ h16 *1( ":" h16 ) ] "::" 3( h16 ":" ) ls32
              / [ h16 *2( ":" h16 ) ] "::" 2( h16 ":" ) ls32
              / [ h16 *3( ":" h16 ) ] "::"    h16 ":"   ls32
              / [ h16 *4( ":" h16 ) ] "::"              ls32
              / [ h16 *5( ":" h16 ) ] "::"              h16
              / [ h16 *6( ":" h16 ) ] "::"

h16           = 1*4HEXDIG
ls32          = ( h16 ":" h16 ) / IPv4address
IPv4address   = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet     = "25" %x30-35         ; 250-255
              / "2" %x30-34 DIGIT    ; 200-249
              / "1" 2DIGIT           ; 100-199
              / %x31-39 DIGIT        ; 10-99
              / DIGIT                ; 0-9

HEXDIG        = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT         = %x30-39 ; 0-9
DIGIT1        = %x31-39 ; 1-9
uint          = "0" / DIGIT1 *DIGIT
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <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>
          </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/74528.html">
          <front>
            <title>Information technology — Programming languages — C</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2018" month="June"/>
          </front>
          <seriesInfo name="ISO/IEC" value="9899:2018"/>
          <annotation>The text of the standard is also available via https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf</annotation>
          <refcontent>Fourth Edition</refcontent>
        </reference>
        <reference anchor="Cplusplus" target="https://www.iso.org/standard/79358.html">
          <front>
            <title>Programming languages — C++</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2020" month="December"/>
          </front>
          <seriesInfo name="ISO/IEC" value="14882:2020"/>
          <annotation>The text of the standard is also available via https://isocpp.org/files/papers/N4860.pdf</annotation>
          <refcontent>Sixth Edition</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="27" month="June" 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-00"/>
        </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 1950?>

<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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
eA/2jev+JIKtSqKlslk9TmxmwaZjb0jyRBUFx8WgP7S9GsTKot8u7qYaJle+
xtdUtyAHT8CSx8699IdokT8cIr/mj1r/4f4wdRzttcT1smLKhKeXu//NQeq6
PmQtAmnoshmHrVOXHiNobYyRbA2Xb+OD8K32NlkGtrEFYLjuAC07wMqe6nwe
S9oAmFyH4Fghy543eFSYNmwTM38sZ7COhSKvZKJW22wzElWJNhtrm9hEk7Db
iAW81cmApNozGagoGIWNPZQrRbwG8HAk+kAstNwazYfF7Yxy16CE1iz7sJtR
TBA58I+ZJJthsh/fKnbOIK81qxtZq7NCJnVycKDxvdw8rPelvWpSDouI3Cfk
SH04mFHqGROeQ3EZcZNZDoYsUgtxDlnU35FrTo3T8+CW1QAj3c6MWhMkLwAf
zoGarzAaeg2LxcTF2+oaolNY08V44thHFLeaevuT/dTEjyDja/6RP5kfm/ZH
82bTvtk0bxLm4ZNeC43sHelaiiaKLzX4FNW+rv/UtL9p77UnpA7nvl0dGEr7
syXQ4WDNCqaenwgZQr8g/0GpgtD/T8L7AaMi9lpi+J2BShMza8MRiRWwJ2Nj
r4vsiq0gJiwL5WPpA7MLaO08DObCfBCBJtcpb8JyoV1aJbJEkNtmo83hxPbQ
ebVUKIo1jDAWpaExqMBPoUo+shjzTL4UNm9y7nvVIdG+1/RVQs5sAnMBAopy
ShPO96KihB8ximFrQjXhShysZjGTFuuM//Qzp4WxaM+P97FUzYtOiXJVYk3W
bV421VEY4vbxEkOT+58GStYlrsgmEsam8FjrsJRgDCdhgpNCv3E30cFHHgul
KM852ZCTZmUU1MRmqbq1MjP6XQLPT8SddojpGyWaENeKqtVX2cuaKshySHE1
FELnYq/CTcM963Lp9ial8vlk7HB2/TJdvotmSWJu4PkOPoYdoG/j4YHu9vVk
R092B+11dY1AYJBk4w9Io5VSn0ij6o/kirHSqLonV4zHkRh37yVV3JJ4IeE0
pDMmXXOmMOhnSKo5LxC/jGsL1JXhB+DiahICjln3I3QyPqaYCpCC7RXNvZCB
VSrJrUx8gTGEYiMT5lkuoIDPxOVEcW4w+IT8Rl72g6Koslh7pu2o8NxeoT+s
tLm9vX2o6ucXb4Hf7facucnzCaMUuZrT673Y2t36qrr1Wr/b2251t1v93od+
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
A/GxpZSXNgEA

-->

</rfc>
