<?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.18 (Ruby 3.3.3) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-10" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title>CBOR Extended Diagnostic Notation (EDN)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-10"/>
    <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="July" day="04"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 87?>

<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.
RFC 8610 extends this into what is known as Extended Diagnostic Notation (EDN).</t>
      <t>​This document sets forth a further step of evolution of EDN,
and it is intended to serve as a single reference target in
specifications that use EDN.</t>
      <t>It 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.
 It modifies one extension specified in Appendix G.4 of RFC 8610
 to enable further increasing usability.
 To facilitate tool interoperation, this document
 specifies a formal ABNF definition for EDN as defined today, and it adds media types.</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 116?>

<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 sets forth a further step of evolution of EDN,
and it is intended to serve as a single reference target in
specifications that use EDN.</t>
      <t>It 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.
 It modifies one extension specified in Appendix G.4 of RFC 8610
 to enable further increasing usability.
 To facilitate tool interoperation, this document
 specifies a formal ABNF definition for EDN as defined today.
    (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>
      <section anchor="structure-of-this-document">
        <name>Structure of This Document</name>
        <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
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>
      <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" uses string concatenation as per <xref section="G.4" sectionFormat="of" target="RFC8610"/> as updated by <xref target="grammar"/>, 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="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          = (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 *(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><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>When <tt>decnumber</tt> or <tt>basenumber</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>
Otherwise, and for <tt>infin</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 a 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>
            <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"/>).  </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 got in the way of making the use of commas optional in other
places (<tt>OC</tt>).
The example equivalent text strings from <xref section="G.4" sectionFormat="of" target="RFC8610"/> now read:  </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 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 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>A concatenated 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 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.bormann-cbor-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="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="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.bormann-cbor-e-ref">
          <front>
            <title>External References to Values in CBOR Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="29" month="February" 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-bormann-cbor-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="2" month="March" 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 -03 revision discusses the continuum between entirely
   // relying on the result of dereferencing an identifier and building
   // in knowledge of all expected identifiers, and it mentions further
   // pitfalls of using dereferenceable identifiers.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-deref-id-03"/>
        </reference>
      </references>
    </references>
    <?line 1271?>

<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 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>Previously, the use of comma as separator character. <cref anchor="move">Move this after embedded CBOR as it actually no longer is a
difference.  But first check the diff...</cref>
JSON requires commas as separators between array elements and map
members; these commas also were required in the original diagnostic
notation defined in <xref target="STD94"/> and the EDN defined in <xref target="RFC8610"/>.
They are now optional in the places where EDN syntax allows commas.
(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 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>
        </li>
      </ul>
      <ul spacing="normal">
        <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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
fLXU4yLQiy8EtVpabpbgoZEzPD4aut4zhSOX2hlbnJRLXb4QAbHMxsliU2Xg
QeEwAAQidM2vniucWYUIii1NJJHWa16/NfzWiguILCqUL2ZWCe7uVMRvCTqk
SCKXHL0r1Uprja9F90JHyVbOIr58CdJlv2V5ddMuM7PzY74pKmSa8v70/AIZ
7U9n1/EimQkK1I+T96eN4J1rruZZ++6q+2PXU5EicEXFr26gzBdXeL4V246F
gZG8flKSBcD+72f2rXKjF69OOgUpnLn+Oi5fhCS4OdePbXiRuw/OxSaJG393
d6/dPqBPk31/F15GBck4P4TCgk9PNB2YFIUOnX8DOkR4FE5wsR2fFIlz3fIV
R7z2fNsqB/10tra2OHTDuOuZL8IrdmvyL4jK7/U7s2ur91alnpLu7q6FS2mx
RtUyIE+Ux49y+dmRfrUkyhFXE1gorNPdCXiCuurP+J4bNMw4xXeGMHEgwDV8
hWBJcNVbeoJyJ4oWLGAiQYVRfW9ozmy29l/NuWPgf8anjHQa4ferXDwF4sth
fb/ef6XXPa176PirvazzV1NMY1zZ+tf9xcsHbwNdwfcnxaXDwSZ9sUHYZSYb
Fv//ax45zsiC49EaEVG8I1g+XHfvt/rXranPsYN+fBZ+6RVBkhyIqyMnXHHR
nc4EGZZcoHQpcj1tPsKSXucrGZyPgnr+u6xFnkK0nse/N9rBaW4it1dycC4y
Wm+ES/taNtVxWiAEJSBApSQ32PipHti5oIU7D7g7uWTYpkATsgLJV1SOchuh
H5kNkOVWfFGPeRnUCsGSA+KwIPQwcvMFhOEQmlYqiDv77ORMGFzT2GyqBVwU
nSEPx0LqXCefPNFPr0qdhDMrnaqrJEbtgtkh4CSaCQnlGWBeXsA1aINbUVzO
Iq9LKw0Qw05hTkidh2a8ULgEaFh3NB8NSqjgEoUx9IcO/K89J4Gmgl7GbQM5
LBLiNrcZNV2KlEcQV5BjoM0pwRdUyhVvYI8QVjXOLAvTT4xF9kpzxPdPw2HE
rAChnwtcOdoHcBBvqFkU1NQ9jSAKxqnc2Aj8kKxAuII6Z81OnOHQXoael/6B
Nl+r1eLswXSe1Ht1cE1cUN7gOPrYO2viVPOpOKm8LbVvQsnjxXyTk3C5O+h8
947S2S2oCDSaeUsRt6M2kkppFHkpFxoiNnDms4HQ7YCvubt/KC76kzqqi4A4
CRdXuICNcwZKiKIdQqrp7PQ+XUZVvgM28tttNK0e3p5Fw+CydCffJYZ7qeqb
S07ThASD8DKB6zEJnUNzmQ7GxMgurZkL5M/2Af1uaLMSppKmgBqGGYF3NpIG
cVbJPp335Dgd3cp9U9Nlpjd0ztI5qxs46DCRiPBXknflVvYnkYZb72auRZJk
Kee/ZCqtuRNLiUQIqshTbV8Tlf8pRdIMnFTqR7NbxD86hcKEIM2lOSDcugm5
7KB0qH0qtxXmnblh03aAE+BG6nUlF0vpTTsRVARRwZlG8t5xbJiP5fbyUQIZ
W9+QpS0KanhF+yrl61JqVEF+2OyjRGn4QmOv/WmkLkx9l1pTjkB24dpB/ULT
ryCim61Aqr2fIsvBNMnia6sLSTR7qdFLvgSjwkngUDjHTJGkQKygCTibgklg
LHb1BpHzOOcVPNaQJoFd2wiY4xkNFrYUC9loGpPgQBwV1wtP+UhFe1/i3iX0
zCWRbupVfXwVcIwUN4jOFY2pLrJkS9A0YNqXJkuR1IP50v5jeB2es2GhKdjG
6XtGMFbkrzZA1ua3uf0kWcRXuEXZHNuYOHcpYCLu/HYW1IXSEQ7ZlL0dcT5V
nleECdhUZ0l+rzCyk2aCpuGQilC5VjIqhuFxhjw/Z2vvieTy8fSEBrMSRUjx
IjuIgXe4ZWiCezc6h6b1jP6eHp+cH+HMQd+/cJmmlqQSuKCOijvfYKrxJK/B
j6UOX10nSy1d935nOubFS8wOETF0TmjyRR6TK4JkNp56PLMHrDkXYGrawFTR
ZkPuos33qL3WUhLjpHqbcKCOqvbqBJDrDdy/NRuGfKcTMdq67ASXwXKv6eL4
4QKGYERs2jqDVSXI5XwokZkc+CnSwq3lyaoyyVN3YHFwqztflO3h7MokQps0
xyUileMZpypF1hu95BU3xM84OD/lRfbXlaF+wLckbjRpUaLpPLt1+a+IEWbR
QHYAcfuFW8A7OqO50svZ2nK47ZPK8X3XejW04jB/PjbWrPrx2/PTy3PiiZcX
crvMC/Nkr03jdC8avNzvYM8l0cNmwPFTAbEGVACJNEeWDLTNh3+FjzEiPnnT
q9CU2gRCfrXUpTiSY5C7Cley786pDb0H97mmP7CNYP/dQHlqz52W5zoK4GnW
Ta6BW5stItOzR6kAH1BUyXar9OCmkASJT6+SAEmM2x5vVJSUQTMDZK7DxINf
5ZHCMkg7HYg50M1MbJaA0CZ/lJDmJLUp8j5FGSfJi5rsn6jSKDhymMYisE/D
WHwParQ+UwIOQZ6O6dntxHMhoaXl1E26n6VPb6F0pl42J9ZMfWY9EVgH+wBx
JgPJ2qaXTVtQYfK8cwYqfrCm043HKUCLOUz0RKVt4EBlvJtdp54Ok31n/AEj
+Uo0mXAuieg6molfL18M29A8txIKSrgtswV2s5x+I8oicAlFz5KwMGMCwMF7
LDPfhIth6mKgJnoZX6A74dB875zuxaPDXW7EMmzI4d0OMDMS85IZp4tO1b8/
Z+K03yGijeIFbXm57QbLggK4nRSimd92m8kR3xoarlyTmxSTn+TOBNRnIUrf
iTfVifssG5CkTUJ+A6MbVg8pLt2vdxzEck+S5FNakjPXU9GvvzZ3m8ScHF90
TG7zi3n5EhT2xQsz3gg7W53u3kaRTt73+Q001OYYjIaXuFDqhV4lzO5vSqfx
guhoEBwNPhFWkVB/JfRt9QrVu0NlL9HwRW2W1L64K2Yll/nogXw4qTjUr5gc
ONLQZiFhTFm9k7M2zGp5S02hq76YDdnqOHl/9B3ymH3Ck/8yoVOF+ZbY/Cfo
4uoXr04awf8Bq/Cg0oHMAAA=

-->

</rfc>
