<?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.19 (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-12" 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-12"/>
    <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="September" day="01"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 101?>

<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">The present revision <tt>-12</tt> reflects the branch "roll-up" 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.
While the WG hasn't taken a decision to follow
this updated editorial approach, the feedback has been
sufficiently positive that the author believes it is not
misleading to make this revision available as the current WG
Internet-Draft as well.<br/>
That said, this is still a snapshot.
The editorial work on the branch "roll-up" is not complete.
Content will continue to move between sections.
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 163?>

<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="application-oriented-extension-literals"/>
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 BCP 14 <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 in 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 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 below 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>TODO: align this with <xref target="spec"/></t>
        <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 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>An underscore followed by a decimal digit n 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 24+n.  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}}.
 -->
(Note that the encoding
indicator "_" is thus an abbreviation of the full form "_7", which is
not used.)</t>
        <t>Encoding Indicators are discussed further below for indefinite length
strings, and 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 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, 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
text are not copied into the resulting string (see <xref target="cr"/>).
No other control characters can occur 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="encoding-indicators-of-strings">
          <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 in one of the base encodings <xref target="RFC4648"/>, without
padding, 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 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="validity-of-text-strings">
          <name>Validity of Text Strings</name>
          <t>TODO: Add general text about validity of text strings, also addressing
the semantics of concatenation (<tt>+</tt>).
This could move up some text from <xref target="concat"/> and following.</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="encoding-indicators-of-arrays-and-maps">
          <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="validity-of-maps">
          <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="application-oriented-extension-literals">
      <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 of the application-extension identifier where each
lower-case character is replaced 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 <tt>ip</tt>, the value of the literal is a
byte string representing the binary IP address.
With the upper-case app-string <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 <tt>IP''</tt> can be used
with a 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>
        <t>To complete the parsing of an <tt>app-string</tt> with prefix, say, <tt>p</tt>, the
processed <tt>sqstr</tt> inside it is further parsed using the ABNF definition specified
for the production <tt>app-string-p</tt> in <xref target="app-grammars"/>.</t>
        <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.  </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>
As per Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>:  </t>
            <ul spacing="normal">
              <li>
                <t>an underscore <tt>_</tt> on its own stands
for indefinite length encoding (<tt>ai=31</tt>, only available behind the
opening brace/bracket for <tt>map</tt> and <tt>array</tt>: strings have a special
syntax <tt>streamstring</tt> for indefinite length encoding except for the
special cases ''_ and ""_), and</t>
              </li>
              <li>
                <t><tt>_0</tt> to <tt>_3</tt> stand for <tt>ai=24</tt> to <tt>ai=27</tt>, respectively.</t>
              </li>
            </ul>
            <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 be 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 to make this explicit:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>_i</tt> ("immediate") stands for encoding with <tt>ai=0</tt> to <tt>ai=23</tt>.</t>
              </li>
            </ul>
            <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>
          </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 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 to form
application-oriented extension literals.
Each of these may make use of ABNF rules defined in <xref target="abnf-grammar"/>.</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">dt</td>
              <td align="left">Date/Time</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP Address/Prefix</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="reg-ei">
        <name>Encoding Indicators</name>
        <t>IANA is requested to create an "Encoding Indicators"
registry in the newly created "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "specification required"
(Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions-ei">The experts are instructed to be frugal in the allocation of
encoding indicators that are suggestive of generally applicable semantics,
keeping them in reserve for encoding indicator registrations that are likely to enjoy wide
use and can make good use of their conciseness.
If the expert becomes aware of encoding indicators that are deployed and
in use, they may also solicit a specification and initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Encoding Indicator:</dt>
          <dd>
            <t>an ASCII <xref target="STD80"/> string that starts with an underscore letter and
can contain zero or more underscores, letters and digits after that
(<tt>_[_A-Za-z0-9]*</tt>). No other entry in the registry can have the same
Encoding Indicator.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description.
This description may employ an abbreviation of the form <tt>ai=</tt>nn,
where nn is the numeric value of the field <em>additional information</em>, the
low-order 5 bits of the initial byte (see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana-ei"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana-ei">
          <name>Initial Content of Encoding Indicator Registry</name>
          <thead>
            <tr>
              <th align="left">Encoding Indicator</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">_</td>
              <td align="left">Indefinite Length Encoding (ai=31)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_i</td>
              <td align="left">ai=0 to ai=23</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_0</td>
              <td align="left">ai=24</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_1</td>
              <td align="left">ai=25</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_2</td>
              <td align="left">ai=26</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_3</td>
              <td align="left">ai=27</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <aside>
          <t>As the "Reference" column reflects, all the encoding indicators
initially registered are already defined in Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
with the exception of <tt>_i</tt>, which is defined in <xref target="grammar"/> of the
present document.</t>
        </aside>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types"
registry <xref target="IANA.media-types"/>.</t>
        <table align="left" anchor="new-media-type">
          <name>New Media Type application/cbor-diagnostic</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">cbor-diagnostic</td>
              <td align="left">application/cbor-diagnostic</td>
              <td align="left">RFC-XXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>cbor-diagnostic</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (UTF-8)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC XXXX</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Tools interchanging a human-readable form of CBOR</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>The syntax and semantics of fragment identifiers is as specified for
"application/cbor".  (At publication of RFC XXXX, there is no
fragment identification syntax defined for "application/cbor".)</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t><br/>
            </t>
            <dl>
              <dt>Deprecated alias names for this type:</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>Magic number(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.diag</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>CBOR WG mailing list (cbor@ietf.org),
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>LIMITED USE</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>CBOR diagnostic notation represents CBOR data items, which are the
format intended for actual interchange.
The media type application/cbor-diagnostic is intended to be used
within documents about CBOR data items, in diagnostics for human
consumption, and in other representations of CBOR data items that
are necessarily text-based such as in configuration files or other
data edited by humans, often under source-code control.</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-format">
        <name>Content-Format</name>
        <t>IANA is requested to register a Content-Format number in the
<xref section="&quot;CoAP Content-Formats&quot;" relative="#content-formats" sectionFormat="bare" target="IANA.core-parameters"/>
sub-registry, within the "Constrained RESTful Environments (CoRE)
Parameters" Registry <xref target="IANA.core-parameters"/>, as follows:</t>
        <table align="left">
          <name>New Content-Format</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/cbor-diagnostic</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>TBD1 is to be assigned from the space 256..9999, according to the
procedure "IETF Review or IESG Approval", preferably a number less
than 1000.</t>
      </section>
      <section anchor="iana-standin">
        <name>Stand-in Tags</name>
        <t><cref anchor="cpa_1">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
        <t>In the "CBOR Tags" registry <xref target="IANA.cbor-tags"/>, IANA is requested to assign the
tags in <xref target="tab-tag-values"/> from the "specification required" space
(suggested assignments: 888 and 999), with the present document as the
specification reference.</t>
        <table anchor="tab-tag-values">
          <name>Values for Tags</name>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">CPA888</td>
              <td align="left">null or array</td>
              <td align="left">Diagnostic Notation Ellipsis</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="right">CPA999</td>
              <td align="left">array</td>
              <td align="left">Diagnostic Notation<br/>Unresolved Application-Extension</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="STD94"/> and <xref target="RFC8610"/> apply.</t>
      <t>The EDN specification provides two explicit extension points,
application-extension identifiers (<xref target="appext-iana"/>) and encoding
indicators (<xref target="reg-ei"/>).
Extensions introduced this way can have their own security
considerations (see, e.g., <xref section="5" sectionFormat="of" target="I-D.ietf-cbor-edn-e-ref"/>).
When implementing tools that support the use of EDN extensions, the
implementer needs to be careful not to inadvertently introduce a
vector for an attacker to invoke extensions not planned for by the
tool operator, who might not have considered security considerations
of specific extensions such as those posed by their use of
dereferenceable identifiers (<xref section="6" sectionFormat="of" target="I-D.bormann-t2trg-deref-id"/>).
For instance, tools might require explicitly enabling the use of each
extension that is not on an allowlist.
This task can possibly be
made less onerous by combining it with a mechanism for supplying any
parameters controlling such an extension.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
          <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
            <front>
              <title>Concise Binary Object Representation (CBOR)</title>
              <author fullname="C. Bormann" initials="C." surname="Bormann"/>
              <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
              <date month="December" year="2020"/>
              <abstract>
                <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
                <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="94"/>
            <seriesInfo name="RFC" value="8949"/>
            <seriesInfo name="DOI" value="10.17487/RFC8949"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8742"/>
          <seriesInfo name="DOI" value="10.17487/RFC8742"/>
        </reference>
        <referencegroup anchor="STD68" target="https://www.rfc-editor.org/info/std68">
          <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234">
            <front>
              <title>Augmented BNF for Syntax Specifications: ABNF</title>
              <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
              <author fullname="P. Overell" initials="P." surname="Overell"/>
              <date month="January" year="2008"/>
              <abstract>
                <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="68"/>
            <seriesInfo name="RFC" value="5234"/>
            <seriesInfo name="DOI" value="10.17487/RFC5234"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC7405">
          <front>
            <title>Case-Sensitive String Support in ABNF</title>
            <author fullname="P. Kyzivat" initials="P." surname="Kyzivat"/>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7405"/>
          <seriesInfo name="DOI" value="10.17487/RFC7405"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC9164">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes</title>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This specification defines two Concise Binary Object Representation (CBOR) tags for use with IPv6 and IPv4 addresses and prefixes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9164"/>
          <seriesInfo name="DOI" value="10.17487/RFC9164"/>
        </reference>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <referencegroup anchor="BCP26" target="https://www.rfc-editor.org/info/bcp26">
          <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
            <front>
              <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
              <author fullname="M. Cotton" initials="M." surname="Cotton"/>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <author fullname="T. Narten" initials="T." surname="Narten"/>
              <date month="June" year="2017"/>
              <abstract>
                <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
                <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
                <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="26"/>
            <seriesInfo name="RFC" value="8126"/>
            <seriesInfo name="DOI" value="10.17487/RFC8126"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="STD80" target="https://www.rfc-editor.org/info/std80">
          <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc20">
            <front>
              <title>ASCII format for network interchange</title>
              <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
              <date month="October" year="1969"/>
            </front>
            <seriesInfo name="STD" value="80"/>
            <seriesInfo name="RFC" value="20"/>
            <seriesInfo name="DOI" value="10.17487/RFC0020"/>
          </reference>
        </referencegroup>
        <reference anchor="IEEE754" target="https://ieeexplore.ieee.org/document/8766229">
          <front>
            <title>IEEE Standard for Floating-Point Arithmetic</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="IEEE Std" value="754-2019"/>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2019.8766229"/>
        </reference>
        <reference anchor="C" target="https://www.iso.org/standard/74528.html">
          <front>
            <title>Information technology — Programming languages — C</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2018" month="June"/>
          </front>
          <seriesInfo name="ISO/IEC" value="9899:2018"/>
          <annotation>The text of the standard is also available via https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf</annotation>
          <refcontent>Fourth Edition</refcontent>
        </reference>
        <reference anchor="Cplusplus" target="https://www.iso.org/standard/79358.html">
          <front>
            <title>Programming languages — C++</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2020" month="December"/>
          </front>
          <seriesInfo name="ISO/IEC" value="14882:2020"/>
          <annotation>The text of the standard is also available via https://isocpp.org/files/papers/N4860.pdf</annotation>
          <refcontent>Sixth Edition</refcontent>
        </reference>
        <reference anchor="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">
          <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>
      </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:,, and for the construction of constants; / for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and 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 1844?>

<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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
K+S3q9mJZI0Sdo2o1TWV+tZbCOGmD1G4EK8UCS7oe29sFvAbtBvBPy2CQNMo
co1Mt64j95Ydto22nzY6Df1MN4CKNcrKA5mNXhsxgv260I1vGrAp5ifgl2V9
/jRn0Wdyd4M5wEfUhnQxBTx/oCIkRR3L0NU2MTLuG1bKTMwyMWl4afdxHl3d
CNBrYVyawwv9AZt/1M3+09Pzb88v9QdcLH/+iJ3gmzxqbWRdoBPwhTKStP6o
7Mqq72r0Pjfwhd+d/UdoKm/kL+6V/P2BdzaW1Vcq2UBd/0YzppLtrWuWYrO3
PBpvfm2zETZ7xc147/1m/yZvmKTajRoQhsfBI8/fhG8aSiKfygNTsNWGXhib
teERMokbHtkwrA3PJTSqYa+3brQaalXaGgKyHgIZ7UlfAMh4i3mtqB+CqW5U
h1TOIdO0no+pqol+ih8AcOEWulroM5MEqmbeK9NxZTvKXMTHiXxhZOHKcyWT
F3tTIcqn6O/yercAassmE/hJjcrtZCyHtv7EaMlkQKqB72d+D5vOjQpE3S0j
Vay94PQ//Pj28kw/laI0Mhn+VdlUS27iz583MKOSbrx8ibtOSLm0sg8NPqLN
2F83PjYoO0IFBu5dz09L0w8/Sa8vDfWp3Al6GRg4MgCh1DP9kyTi0v/mc+9Q
f3cpdnR0BDTBqRj9JeE+nO7LH5S6dfGfY/7nlP4Z9PDCBhykY9pyb3rcDwYR
fdruBaf7r1/T57Nerxf0e6/hD/WeT+vfZF5R3/Oics4v9FN+8dOmKenGP7SU
+e7tbBegzc0cvtZAfeOJNIIJ4sJxH60XGUeTNyWnXEvBwVSm86HRhhP4iL3G
s2j8ySZOIp0xyxVezlfRbiLTatQj+JnEexgiqbjZLdANBAG5QMsB1jhMrGMj
Cioukbzyabssv3nlSKmBK/MNYYswCIFeZUnQ7+ltmk0w+gSWVr4jhJFsuuOa
Dd2q3eafG+Z21T+kAVE9DoxJCUE89r4HR908Ge999qPdAkDhI2RfXl1weBpl
laLs5Qf1CH+KrV+L0DlFd1VqfbKBsmDr71+LV4ltfVzfOsPWJ+91NbM6Z1Pf
QNawDyCAGUinv2IMP8BbOOIuh3U70sXc1s8Q2dJdaeYpSPqrvEVdBq91EyMF
/2GdteDNxK4/e5F8zQzZd3SC8YfZrduOJpLTBvJxCG0tGEiv/iP84ec/foOf
lZLHth+jTeCHkIJ+wN6SxPwj84T8rUXIc/2dhBNWWZZeY8hzzZxm8fXMtaAl
8jQBubrfW6o0EE2r2WSWEPblGDb1Ffx3QozkGXx63Wjp7U1MGry2cdrQzEjp
gTB6LVWZCy4dmjUbBzDgIfzHr2mZHqo0Re3an0C7U/jPTMS0d3tnt7YPm7oj
E+hq/tA3vzy2n/C9/1RWiWjRqdQSk5v/pLchf2TbY1WEhil79+38iD49w7oD
dIPqbgDSlWdrNyYIbHpQkgeXq3U5QajRoF/PRQNxWIAk3/s8GOha5u/zYDsY
7D3WeV9v1Xc+CHZfPdJ590T/XNt595SJ6DOdf4qX2p2Ic3bIazv6FFcJZ2T/
4H7DYmkGjVLKdsWgWm4KPMD2ITTtBYdKGNvy8z4/78Pzt5UBTP996r+vXm14
3qfnfSUg6j33Lh/+/Yr+5gt4KtcQ/37dUAaqK337X9WZofpIlymjlxYQkxXB
KJxwK4/QDRA9WKg0kigolWHU/dXt9YN9hO0w+FUZ/t09Nz1EZFCrmhF2+sEu
jnAc/FGt1kZYVUYwVN61QOLf1ebdTip4pj9ccRAzjMyJjO6P9BM/Mk0XcTGP
XjQ2KQxNleOz0zd0dTi3IQInlSV90SA1eTRJOjhqwyZ8NB7g5jXGmk3aKM6K
4+JkbTJD40bhFXZlfSopsUnPRU6BcU6js64J2PNlbLNJ55FaH9g6LpLDMdbD
RDPKAlYxtyuMjTWRqzaObuJ0la+Xj/PqIZJPeD4jyWUWzZfOHO8rcslp+zg3
+aSdUo7TL6Xz9PoOdd7eVxsrSFsoaZrQS1myg6xpxUT7XVccJNdNh7eRgmUh
4XNyvS0owRMnvDQZKaqZhdjXjAd+9/3xyZl++xoTOL25PHt/dnGpL86/fYNl
YrA2R0vbtPueVzGtAi4Y4tn+ATl/IxiOsy924JPj9+/Pj7890+/PLn98/8aU
nWlLrEtOBg1bkgSIe0a+Swv0cCXHcoIzyggiduZcLATRZ2C43ckA+dBNS55M
vixDYYwDXHTHeRdE+nJdKeL7hvNA3aH8GoUZprO6FDe7RZqTD2uaFeh1bpO0
EVaxocS1ZlYq02xyeqHunwJy7FQbvI2YGYISaL2VaAZT4odyolaJJxUsoxom
nP0bDelZmkjwrNZYpYhqOcuGH0ti2U27njy+65K2IxG2wZteZXK57L0pllDN
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

-->

</rfc>
