<?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.21 (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-13" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.0 -->
  <front>
    <title>CBOR Extended Diagnostic Notation (EDN)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-13"/>
    <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="November" day="03"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 102?>

<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.</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>-13</tt> reflects the branches "roll-up"
and "roll-up-2" in
the repository, an attempt to contain the entire specification of
EDN in this document, instead of describing updates to the
existing documents RFC 8949 and RFC 8610.
Editorial work on the branch "roll-up-2" might continue.
The exact reflection of this document being a replacement for both
Section 8 of RFC 8949 and Appendix G of RFC 8610 needs to be
recorded in the metadata and in abstract and introduction.</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 159?>

<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.
(Standardizing this together with the actual interchange format does
not serve to create another interchange format, but enables the use of
a shared diagnostic notation in tools for and in documents about CBOR.)</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.</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 finally 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"/>.</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>
          <!--
## 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>
        </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>
      </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>Other simple values are given as "simple()" with the appropriate
integer in the parentheses. For example, &gt;<tt>simple(42)</tt>&lt; indicates major
type 7, value 42.</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, <tt>dt'1969-07-21T02:56:16Z'</tt> can be provisionally represented as
<tt>/CPA/ 999(["dt", "1969-07-21T02:56:16Z"])</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).</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 defined in this specification, but it can
be derived from the overall ABNF definition and the prefix-specific
app-string ABNF definitions by mechanically replacing each character in the
app-string definition in <xref target="app-grammars"/> by the ways that character can be
represented in the overall ABNF.</t>
          <t>E.g., the rules</t>
          <ul empty="true">
            <li>
              <sourcecode type="abnf"><![CDATA[
HEXDIG          = DIGIT /
                  "A" / "B" / "C" / "D" / "E" / "F"
DIGIT           = %x30-39
]]></sourcecode>
            </li>
          </ul>
          <t>can be expanded to</t>
          <ul empty="true">
            <li>
              <sourcecode type="abnf"><![CDATA[
qHEXDIG         = qDIGIT /
                  "A" / "B" / "C" / "D" / "E" / "F" /
                  (ULZ ("4"/"6") %x31-36 "}")
qDIGIT          = %x30-39 /
                  (ULZ ("3") %x30-39 "}")
ULZ             = %s"\u{" *"0"
]]></sourcecode>
            </li>
          </ul>
          <t>A tool that performs this mechanical substitution is in preparation.</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>
        <ul spacing="normal">
          <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>
          </li>
        </ul>
        <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.
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>
      </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" xml:base="https://bib.ietf.org/public/rfc/bibxml9/reference.STD.0068.xml" 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" xml:base="https://bib.ietf.org/public/rfc/bibxml9/reference.STD.0080.xml" 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>
      </references>
    </references>
    <?line 1920?>

<section anchor="edn-and-cddl">
      <name>EDN and CDDL</name>
      <t>This appendix is for information.</t>
      <t>EDN was designed as a language to provide a human-readable
representation of an instance, i.e., a single CBOR data item or CBOR
sequence.
CDDL was designed as a language to describe an (often large) set of
such instances (which itself constitutes a language), in the form of a
<em>data definition</em> or <em>grammar</em> (or sometimes called <em>schema</em>).</t>
      <t>The two languages share some similarities, not the least because they
have mutually inspired each other.
But they have very different roots:</t>
      <ul spacing="normal">
        <li>
          <t>EDN syntax is an extension to JSON syntax <xref target="STD90"/>.
(Any (interoperable) JSON text is also valid EDN.)</t>
        </li>
        <li>
          <t>CDDL syntax is inspired by ABNF's syntax <xref target="STD68"/>.</t>
        </li>
      </ul>
      <t>For engineers that are using both EDN and CDDL, it is easy to write
"CDDLisms" or "EDNisms" into their drafts that are meant to be in the
other language.
(This is one more of the many motivations to always validate formal
language instances with tools.)</t>
      <t>Important differences include:</t>
      <ul spacing="normal">
        <li>
          <t>Comment syntax.  CDDL inherits ABNF's semicolon-delimited end of
line characters, while EDN finds nothing in JSON that could be inherited here.
Inspired by JavaScript, EDN simplifies JavaScript's copy of the
original C comment syntax to be delimited by single slashes (where
line breaks are not of interest); it also adds end-of-line comments
starting with <tt>#</tt>.  </t>
          <dl spacing="compact">
            <dt>EDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
{ / alg / 1: -7 / ECDSA 256 / }
,
{ 1:   # alg
    -7 # ECDSA 256
}
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>? 1 =&gt; int / tstr,  ; algorithm identifier</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Syntax for tags.  CDDL's tag syntax is part of the system for
referring to CBOR's fundamentals (the major type 6, in this case)
and (with <xref target="I-D.ietf-cbor-update-8610-grammar"/>) allows specifying the actual tag number
separately, while EDN's tag syntax is a simple decimal number and a
pair of parentheses.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <artwork><![CDATA[
98([h'', # empty encoded protected header
    {},  # empty unprotected header
    ...  # rest elided here
   ])
]]></artwork>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>COSE_Sign_Tagged = #6.98(COSE_Sign)</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Embedded CBOR.  EDN has a special syntax to describe the content of
byte strings that are encoded CBOR data items.  CDDL can specify
these with a control operator, which looks very different.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <artwork><![CDATA[
98([<< {/alg/ 1: -7 /ECDSA 256/} >>, # == h'a10126'
    ...                              # rest elided here
   ])
]]></artwork>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>serialized_map = bytes .cbor header_map</tt></t>
            </dd>
          </dl>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="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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
JfvGh1cnTfX/AK8EEaNSKgEA

-->

</rfc>
