<?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.13 (Ruby 3.3.1) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-09" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="CBOR EDN: Literals and ABNF ">CBOR Extended Diagnostic Notation (EDN): Application-Oriented Literals, ABNF, and Media Type</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-09"/>
    <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="May" day="18"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 88?>

<t>The Concise Binary Object Representation, CBOR (STD 94, RFC 8949), defines a "diagnostic notation" in order to
be able to converse about CBOR data items without having to resort to
binary data.</t>
      <t>​This document specifies how to add application-oriented extensions to
the diagnostic notation.  It then defines two such extensions for
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.
 To facilitate tool interoperation, this document
 specifies a formal ABNF definition for extended diagnostic notation (EDN)
 that accommodates application-oriented literals.</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 111?>

<section anchor="intro">
      <name>Introduction</name>
      <t>For the Concise Binary Object Representation, CBOR,
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> in conjunction with <xref section="G" sectionFormat="of" target="RFC8610"/>
defines a "diagnostic notation" in order to
be able to converse about CBOR data items without having to resort to
binary data.
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 specifies how to add application-oriented extensions to
the diagnostic notation.  It then defines two such extensions for
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.
 To facilitate tool interoperation, this document
 specifies a formal ABNF definition for extended diagnostic notation (EDN)
 that accommodates application-oriented literals. (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).</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 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>
      <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 the informative <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
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="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 an address combined
with a prefix length; this can be represented as
<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>
      <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><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" uses string concatenation as per <xref section="G.4" sectionFormat="of" target="RFC8610"/>, extending that by allowing 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[
{ "contract": "Herewith I buy" /.../ "gned: Alice & Bob",
  "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="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>
      </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>
    </section>
  </middle>
  <back>
    <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="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="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="http://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="http://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="http://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="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="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="17" month="May" 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-05"/>
        </reference>
      </references>
    </references>
    <?line 795?>

<section anchor="grammars">
      <name>ABNF Definitions</name>
      <t>This appendix is normative.</t>
      <t>It 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 appendix 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 appendix 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">
          <sourcecode type="abnf" name="cbor-edn.abnf"><![CDATA[
seq             = S [item S *("," S item S) OC] S
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 string1e)

number          = (basenumber / decnumber / infin) spec
sign            = "+" / "-"
decnumber       = [sign] (1*DIGIT ["." *DIGIT] / "." 1*DIGIT)
                         ["e" [sign] 1*DIGIT]
basenumber      = [sign] "0" ("x" 1*HEXDIG
                              [["." *HEXDIG] "p" [sign] 1*DIGIT]
                            / "x" "." 1*HEXDIG "p" [sign] 1*DIGIT
                            / "o" 1*ODIGIT
                            / "b" 1*BDIGIT)
infin           = %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 *("," S item S) OC] "]"
map             = "{" spec S [kp S *("," S 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 trailing 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 *("," S 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><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>basenumber</tt> stands for an integer in the usual base 16/hexadecimal
("0x"), base 8/octal ("0o"), or base 2/binary ("0b") notation, unless the
optional part containing a "p" is present, in which case it 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><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>
            <t><tt>string</tt> and the rules preceding it in the same block realize both
the representation of strings that are split up into multiple chunks
(<xref section="G.4" sectionFormat="of" target="RFC8610"/>) and the use of ellipses to represent elisions
(<xref target="elision"/>).  The semantic processing of these rules is relatively
complex:
            </t>
            <ul spacing="normal">
              <li>
                <t>A single <tt>...</tt> is a general ellipsis, which can stand for any data
item.</t>
              </li>
              <li>
                <t>An ellipsis can be surrounded (on one or both sides) by string
chunks, 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>A simple sequence of string chunks is simply joined together.
In both cases of joining strings, the rules of <xref section="G.4" sectionFormat="of" target="RFC8610"/> need to be followed; in particular, if a text string
results from the joining operation, that result needs to be valid
UTF-8.</t>
              </li>
              <li>
                <t>Some of the strings may be app-strings.
If the type of the app-string is an actual string, joining of
chunked strings occurs as with directly notated strings; otherwise
the occurrence of more than one app-string or an app-string
together with a directly notated string cannot be processed.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="app-grammars">
        <name>ABNF Definitions for app-string Content</name>
        <t>This appendix 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 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="edn-and-cddl">
      <name>EDN and CDDL</name>
      <t>This appendix is informative.</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 ends 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>Separator character.  Like JSON, EDN requires commas as separators
between array elements and map members (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).
CDDL's comma separators in these 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).</t>
        </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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

-->

</rfc>
