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

<t>The Concise Binary Object Representation, CBOR (STD 94, RFC 8949), defines a "diagnostic notation" in order to
be able to converse about CBOR data items without having to resort to
binary data.</t>
      <t>​This document specifies how to add application-oriented extensions to
the diagnostic notation.  It then defines two such extensions for
text representations of epoch-based date/times and of IP addresses
and prefixes (RFC 9164).</t>
      <t>To facilitate tool interoperation, this document also
 specifies a formal ABNF definition for extended diagnostic notation (EDN)
 that accommodates application-oriented literals.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cbor-wg.github.io/edn-literal/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        cbor Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/edn-literal"/>.</t>
    </note>
  </front>
  <middle>
    <?line 87?>

<section anchor="intro">
      <name>Introduction</name>
      <t>For the Concise Binary Object Representation, CBOR,
<xref section="8" sectionFormat="of" target="STD94"/> in conjunction with <xref section="G" sectionFormat="of" target="RFC8610"/>
defines a "diagnostic notation" in order to
be able to converse about CBOR data items without having to resort to
binary data.
Diagnostic notation syntax is based on JSON, with extensions
for representing CBOR constructs such as binary data and tags.
(Standardizing this together with the actual interchange format does
not serve to create another interchange format, but enables the use of
a shared diagnostic notation in tools for and in documents about CBOR.)</t>
      <t>This document specifies how to add application-oriented extensions to
the diagnostic notation.  It then defines two such extensions for
text representations of epoch-based date/times and of IP addresses
and prefixes <xref target="RFC9164"/>.</t>
      <t>To facilitate tool interoperation, this document also
 specifies a formal ABNF definition for extended diagnostic notation (EDN)
 that accommodates application-oriented literals. (See <xref target="grammar"/> for an overall ABNF grammar as well as the
ABNF definitions in <xref target="app-grammars"/> for grammars for both the
byte string presentations predefined in <xref target="STD94"/> and the application-extensions).</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t><xref section="8" sectionFormat="of" 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 <xref section="8" sectionFormat="of" 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 <xref section="2.3" sectionFormat="of" target="STD68"/> are Unicode scalar values.
The term "CDDL" 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"/>.</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><xref section="8" sectionFormat="of" 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 (<xref section="4.2" sectionFormat="of" 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 little expectation of "roundtripping": the ability
to convert EDN to binary CBOR and back to EDN while achieving exactly
the same result as the original input EDN, which 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
(<xref section="4.2" sectionFormat="of" 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 <xref section="8" sectionFormat="of" 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 of 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>
      <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>
      <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
<xref section="3.4.2" sectionFormat="of" target="STD94"/>.</t>
        <t>The text of the literal is a Standard Date/Time String as per
<xref section="3.4.1" sectionFormat="of" 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>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'192.0.2.0/24'</tt> stands for
an unwrapped <tt>[24,h'c00002']</tt>; however, in this case the information
on whether an address is IPv4 or IPv6 often needs to come from the context.</t>
        <t>Note that there is no direct representation of an address combined
with a prefix length; this can be represented as
<tt>52([ip'192.0.2.42',24])</tt>, if needed.</t>
        <t>Examples: the CBOR diagnostic notation</t>
        <sourcecode type="cbor-diag"><![CDATA[
ip'192.0.2.42',
IP'192.0.2.42',
IP'192.0.2.0/24',
ip'2001:db8::42',
IP'2001:db8::42',
IP'2001:db8::/64'
]]></sourcecode>
        <t>is equivalent to</t>
        <sourcecode type="cbor-diag"><![CDATA[
h'c000022a',
52(h'c000022a'),
52([24,h'c00002']),
h'20010db8000000000000000000000042',
54(h'20010db8000000000000000000000042'),
54([64,h'20010db8'])
]]></sourcecode>
        <t>See <xref target="ip-grammar"/> for an ABNF definition for the content of <tt>ip</tt> literals.</t>
      </section>
    </section>
    <section anchor="stand-in">
      <name>Stand-in Representations in Binary CBOR</name>
      <t>In some cases, an EDN consumer cannot construct actual CBOR items that
represent the CBOR data intended for eventual interchange.
This document defines stand-in representation for two such cases:</t>
      <ul spacing="normal">
        <li>
          <t>The EDN consumer does not know (or does not implement) an
application-extension identifier used in the EDN document
(<xref target="unknown"/>) but wants to preserve the information for a later
processor.</t>
        </li>
        <li>
          <t>The generator of some EDN intended for human consumption (such as in
a specification document) may not want to include parts of the final
data item, destructively replacing complete subtrees or possibly
just parts of a lengthy string by <em>elisions</em> (<xref target="elision"/>).</t>
        </li>
      </ul>
      <section anchor="unknown">
        <name>Handling unknown application-extension identifiers</name>
        <t>When ingesting CBOR diagnostic notation, any
application-oriented extension literals are usually decoded and
transformed into the corresponding data item during ingestion.
If an application-extension is not known or not implemented by the
ingesting process, this is usually an error and processing has to
stop.</t>
        <t>However, in certain cases, it can be desirable to exceptionally carry an
uninterpreted application-oriented extension literal in an ingested
data item, allowing to postpone its decoding to a specific later
stage of ingestion.</t>
        <t>This specification defines a CBOR Tag for this purpose:
The Diagnostic Notation Unresolved Application-Extension Tag, tag
number CPA999 (<xref target="iana-standin"/>).
The content of this tag is an array of two text strings: The
application-extension identifier, and the (escape-processed) content
of the single-quoted string.
For example, <tt>dt'1969-07-21T02:56:16Z'</tt> can be provisionally represented as
<tt>/CPA/ 999(["dt", "1969-07-21T02:56:16Z"])</tt>.</t>
        <t><cref anchor="cpa">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
      </section>
      <section anchor="elision">
        <name>Handling information deliberately elided from an EDN document</name>
        <t>EDN 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>This specification defines a CBOR Tag for this purpose:
The Diagnostic Notation Ellipsis Tag, tag number CPA888 (<xref target="iana-standin"/>).
The content of this tag either is</t>
        <ol spacing="normal" type="1"><li>
            <t>null (indicating a data item entirely replaced by an ellipsis), or it is</t>
          </li>
          <li>
            <t>an array, the elements of which are alternating between fragments
of a string and the actual elisions, represented as ellipses
carrying a null as content.</t>
          </li>
        </ol>
        <t>Elisions can stand in for entire subtrees, e.g. in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, ..., 3]
,
{ "a": 1,
  "b": ...,
  ...: ...
}
]]></sourcecode>
        <t>A single ellipsis (or key/value pair of ellipses) can imply eliding
multiple elements in an array (members in a map); if more detailed
control is required, a data definition language such as CDDL can be
employed.
(Note that the stand-in form defined here does not allow multiple
key/value pairs with an ellipsis as a key: the CBOR data item would
not be valid.)</t>
        <t>Subtree elisions can be represented in a CBOR data item by using
<tt>/CPA/888(null)</tt> as the stand-in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 888(null), 3]
,
{ "a": 1,
  "b": 888(null),
  888(null): 888(null)
}
]]></sourcecode>
        <t>Elisions also can be used as part of a (text or byte) string:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": "Herewith I buy" ... "gned: Alice & Bob",
  "signature": h'4711...0815',
}
]]></sourcecode>
        <t>The example "contract" uses string concatenation as per <xref section="G.4" sectionFormat="of" target="RFC8610"/>, extending that by allowing ellipses; while the example
"signature" uses special syntax that allows the use of ellipses
between the bytes notated <em>inside</em> <tt>h''</tt> literals.</t>
        <t>String elisions can be represented in a CBOR data item by a stand-in
that wraps an array of string fragments alternating with ellipsis
indicators:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": /CPA/888(["Herewith I buy", 888(null),
                        "gned: Alice & Bob"]),
  "signature": 888([h'4711', 888(null), h'0815']),
}
]]></sourcecode>
        <t>Note that the use of elisions is different from "commenting out" EDN
text, e.g.</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": "Herewith I buy" /.../ "gned: Alice & Bob",
  "signature": h'4711/.../0815',
  # ...: ...
}
]]></sourcecode>
        <t>The consumer of this EDN will ignore the comments and therefore will
have no idea after ingestion that some information has been elided;
validation steps may then simply fail instead of being informed about
the elisions.</t>
      </section>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t><cref anchor="to-be-removed">RFC Editor: please replace RFC-XXXX with the RFC
number of this RFC, [IANA.cbor-diagnostic-notation] with a
reference to the new registry group, and remove this note.</cref></t>
      <section anchor="appext-iana">
        <name>CBOR Diagnostic Notation Application-extension Identifiers Registry</name>
        <t>IANA is requested to create an "Application-Extension Identifiers"
registry in a new "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "expert review"
(<xref section="4.5" sectionFormat="of" 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 (<xref section="4.6" sectionFormat="of" 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 <xref section="2.3" sectionFormat="of" 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"
(<xref section="4.6" sectionFormat="of" 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</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see <xref section="2.3" sectionFormat="of" target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana-ei"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana-ei">
          <name>Initial Content of Encoding Indicator Registry</name>
          <thead>
            <tr>
              <th align="left">Encoding Indicator</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">_</td>
              <td align="left">Indefinite Length Encoding (ai=31)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_i</td>
              <td align="left">ai=0 to ai=23</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_0</td>
              <td align="left">ai=24</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_1</td>
              <td align="left">ai=25</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_2</td>
              <td align="left">ai=26</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_3</td>
              <td align="left">ai=27</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types"
registry <xref target="IANA.media-types"/>.</t>
        <table align="left" anchor="new-media-type">
          <name>New Media Type application/cbor-diagnostic</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">cbor-diagnostic</td>
              <td align="left">application/cbor-diagnostic</td>
              <td align="left">RFC-XXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>cbor-diagnostic</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (UTF-8)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC XXXX</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Tools interchanging a human-readable form of CBOR</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>The syntax and semantics of fragment identifiers is as specified for
"application/cbor".  (At publication of RFC XXXX, there is no
fragment identification syntax defined for "application/cbor".)</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t><br/>
            </t>
            <dl>
              <dt>Deprecated alias names for this type:</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>Magic number(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.diag</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>CBOR WG mailing list (cbor@ietf.org),
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>none</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..999.</t>
      </section>
      <section anchor="iana-standin">
        <name>Stand-in Tags</name>
        <t><cref anchor="cpa_1">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
        <t>In the "CBOR Tags" registry <xref target="IANA.cbor-tags"/>, IANA is requested to assign the
tags in <xref target="tab-tag-values"/> from the "specification required" space
(suggested assignments: 888 and 999), with the present document as the
specification reference.</t>
        <table anchor="tab-tag-values">
          <name>Values for Tags</name>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">CPA888</td>
              <td align="left">null or array</td>
              <td align="left">Diagnostic Notation Ellipsis</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="right">CPA999</td>
              <td align="left">array</td>
              <td align="left">Diagnostic Notation<br/>Unresolved Application-Extension</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="STD94"/> and <xref target="RFC8610"/> apply.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="STD94">
          <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>
        <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="I-D.ietf-cbor-update-8610-grammar">
          <front>
            <title>Updates to the CDDL grammar of RFC 8610</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="17" month="June" year="2023"/>
            <abstract>
              <t>   At the time of writing, the Concise Data Definition Language (CDDL)
   is defined by RFC 8610 and RFC 9165.  The latter has used the
   extension point provided in RFC 8610, the _control operator_.

   As CDDL is being used in larger projects, the need for corrections
   and additional features has become known that cannot be easily mapped
   into this single extension point.  Hence, there is a need for
   evolution of the base CDDL specification itself.

   The present document updates errata and makes other small fixes for
   the ABNF grammar defined for CDDL in RFC 8610.


   // Previous versions of the changes in this document were part of
   // draft-bormann-cbor-cddl-2-draft and previously draft-bormann-cbor-
   // cddl-freezer.  This submission extracts out those grammar changes
   // that are ready for publication.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-update-8610-grammar-00"/>
        </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>
        <reference anchor="STD90">
          <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>
        <reference anchor="STD68">
          <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>
        <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="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="RFC9164">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes</title>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This specification defines two Concise Binary Object Representation (CBOR) tags for use with IPv6 and IPv4 addresses and prefixes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9164"/>
          <seriesInfo name="DOI" value="10.17487/RFC9164"/>
        </reference>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="BCP26">
          <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>
        <reference anchor="STD80">
          <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>
        <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>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </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="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
    </references>
    <?line 722?>

<section anchor="grammars">
      <name>ABNF Definitions</name>
      <section anchor="grammar">
        <name>Overall ABNF Definition for Extended Diagnostic Notation</name>
        <t>This appendix provides an overall ABNF definition for the syntax of
CBOR extended diagnostic notation.</t>
        <t>To complete the parsing of an <tt>app-string</tt> with prefix, say, <tt>p</tt>, the
processed <tt>sqstr</tt> inside it is further parsed using the ABNF definition specified
for the production <tt>app-string-p</tt> in <xref target="app-grammars"/>.</t>
        <t>For simplicity, the internal parsing for the built-in EDN prefixes is
specified in the same way.
ABNF definitions for <tt>h''</tt> and <tt>b64''</tt> are provided in <xref target="h-grammar"/> and
<xref target="b64-grammar"/>.
However, the prefixes <tt>b32''</tt> and <tt>h32''</tt> are not in wide use and an
ABNF definition in this document could therefore not be based on
implementation experience.</t>
        <figure anchor="abnf-grammar">
          <sourcecode type="abnf" name="cbor-edn.abnf"><![CDATA[
seq             = S [item S *("," S item S) OC] S
item            = map / array / tagged
                / number / simple
                / string / streamstring

string1         = (tstr / bstr) spec
string1e        = string1 / ellipsis
ellipsis        = 3*"." ; "..." or more dots
string          = string1e *(S string1e)

number          = (basenumber / decnumber / infin) spec
sign            = "+" / "-"
decnumber       = [sign] 1*DIGIT ["." 1*DIGIT] ["e" [sign] 1*DIGIT]
basenumber      = [sign] "0" ("x" 1*HEXDIG
                              [["." 1*HEXDIG] "p" [sign] *DIGIT]
                            / "o" 1*ODIGIT
                            / "b" 1*BDIGIT)
infin           = %s"Infinity"
                / %s"-Infinity"
                / %s"NaN"
simple          = %s"false"
                / %s"true"
                / %s"null"
                / %s"undefined"
                / %s"simple(" S item S ")"
uint            = "0" / DIGIT1 *DIGIT
tagged          = uint spec "(" S item S ")"

app-prefix      = lcalpha *lcalnum ; including h and b64
                / ucalpha *ucalnum ; tagged variant, if defined
app-string      = app-prefix sqstr
sqstr           = "'" *single-quoted "'"
bstr            = app-string / sqstr / embedded
                  ; app-string could be any type
tstr            = DQUOTE *double-quoted DQUOTE
embedded        = "<<" seq ">>"

array           = "[" spec S [item S *("," S item S) OC] "]"
map             = "{" spec S [kp S *("," S kp S) OC] "}"
kp              = item S ":" S item

; We allow %x09 HT in prose, but not in strings
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-D7FF / %xE000-10FFFF
non-lf          = %x09 / %x0D / %x20-D7FF / %xE000-10FFFF
S               = *blank *(comment *blank)
comment         = "/" *non-slash "/"
                / "#" *non-lf %x0A

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

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

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

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

escapable       = %s"b" ; BS backspace U+0008
                / %s"f" ; FF form feed U+000C
                / %s"n" ; LF line feed U+000A
                / %s"r" ; CR carriage return U+000D
                / %s"t" ; HT horizontal tab U+0009
                / "/"   ; / slash (solidus) U+002F (JSON!)
                / "\"   ; \ backslash (reverse solidus) U+005C
                / (%s"u" hexchar) ;  uXXXX      U+XXXX

hexchar         = 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

; 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"
; 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.</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).</t>
          </li>
          <li>
            <t><tt>spec</tt> stands for an encoding indicator.
As per <xref section="8.1" sectionFormat="of" 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, <xref section="8.1" sectionFormat="of" target="STD94"/> does not address <tt>ai=0</tt> to
<tt>ai=23</tt> — the assumption seems to be that preferred serialization
(Section 4.1 of <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="STD94"/>) and the use of ellipses to represent elisions
(<xref target="elision"/>).  The semantic processing of these rules is relatively
complex:
            </t>
            <ul spacing="normal">
              <li>
                <t>A single <tt>...</tt> is a general ellipsis, which can stand for any data
item.</t>
              </li>
              <li>
                <t>An ellipsis can be surrounded (on one or both sides) by string
chunks, the result is a CBOR tag number CPA888 that contains an
array with joined together spans of such chunks plus the ellipses
represented by <tt>888(null)</tt>.</t>
              </li>
              <li>
                <t>A simple sequence of string chunks is simply joined together.
In both cases of joining strings, the rules of <xref section="G.4" sectionFormat="of" target="STD94"/> need to be followed; in particular, if a text string
results from the joining operation, that result needs to be valid
UTF-8.</t>
              </li>
              <li>
                <t>Some of the strings may be app-strings.
If the type of the app-string is an actual string, joining of
chunked strings occurs as with directly notated strings; otherwise
the occurrence of more than one app-string or an app-string
together with a directly notated string cannot be processed.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="app-grammars">
        <name>ABNF Definitions for app-string Content</name>
        <t>This appendix provides ABNF definitions for application-oriented extension
literals defined in <xref target="STD94"/> and in this specification.
These grammars describe the <em>decoded</em> content of the <tt>sqstr</tt> components that
combine with the application-extension identifiers to form
application-oriented extension literals.
Each of these may make use of rules defined in <xref target="abnf-grammar"/>.</t>
        <section anchor="h-grammar">
          <name>h: ABNF Definition of Hexadecimal representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in hex,
such as <tt>h''</tt>, <tt>h'0815</tt>, or <tt>h'/head/ 63 /contents/ 66 6f 6f'</tt>
(another representation of <tt>&lt;&lt; "foo" &gt;&gt;</tt>), is described by the ABNF in <xref target="abnf-grammar-h"/>.
This syntax accommodates both lower case and upper case hex digits, as
well as blank space (including comments) around each hex digit.</t>
          <figure anchor="abnf-grammar-h">
            <name>ABNF Definition of Hexadecimal Representation of a Byte String</name>
            <sourcecode type="abnf" name="cbor-edn-h.abnf"><![CDATA[
app-string-h    = S *(HEXDIG S HEXDIG S / ellipsis S)
                  ["#" *non-lf]
ellipsis        = 3*"."
HEXDIG          = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT           = %x30-39 ; 0-9
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-10FFFF
non-lf          = %x09 / %x0D / %x20-D7FF / %xE000-10FFFF
S               = *blank *(comment *blank )
comment         = "/" *non-slash "/"
                / "#" *non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="b64-grammar">
          <name>b64: ABNF Definition of Base64 representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in base64 is
described by the ABNF in <xref target="abnf-grammar-h"/>.</t>
          <t>This syntax allows both the classic (<xref section="4" sectionFormat="of" target="RFC4648"/>) and the
URL-safe (<xref section="5" sectionFormat="of" target="RFC4648"/>) alphabet to be used.
It accommodates, but does not require base64 padding.
Note that inclusion of classic base64 makes it impossible to have
in-line comments in b64, as "/" is valid base64-classic.</t>
          <figure anchor="abnf-grammar-b64">
            <name>ABNF definition of Base64 Representation of a Byte String</name>
            <sourcecode type="abnf" name="cbor-edn-b64.abnf"><![CDATA[
app-string-b64  = B *(4(b64dig B))
                  [b64dig B b64dig B ["=" B "=" / b64dig B ["="]] B]
                  ["#" *inon-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
B               = *iblank *(icomment *iblank)
iblank          = %x0A / %x20  ; Not HT or CR (gone)
icomment        = "#" *inon-lf %x0A
inon-lf         = %x20-D7FF / %xE000-10FFFF
ALPHA           = %x41-5a / %x61-7a
DIGIT           = %x30-39
]]></sourcecode>
          </figure>
        </section>
        <section anchor="dt-grammar">
          <name>dt: ABNF Definition of RFC 3339 Representation of a Date/Time</name>
          <t>The syntax of the content of <tt>dt</tt> literals can be described by the
ABNF for <tt>date-time</tt> from <xref target="RFC3339"/> as summarized in <xref section="3" sectionFormat="of" target="RFC9165"/>:</t>
          <figure anchor="abnf-grammar-dt">
            <name>ABNF Definition of RFC3339 Representation of a Date/Time</name>
            <sourcecode type="abnf" name="cbor-edn-dt.abnf"><![CDATA[
app-string-dt   = date-time

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

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

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

IPaddress     = IPv4address
              / IPv6address

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

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

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

HEXDIG        = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT         = %x30-39 ; 0-9
DIGIT1        = %x31-39 ; 1-9
uint          = "0" / DIGIT1 *DIGIT
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="edn-and-cddl">
      <name>EDN and CDDL</name>
      <t>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>
              <t><tt>98(['', {}, /rest elided here: …/])</tt></t>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>COSE_Sign_Tagged = #6.98(COSE_Sign)</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Separator character.  Like JSON, EDN requires commas as separators
between array elements and map members and doesn't allow a trailing
comma before the closing bracket/brace.
CDDL's comma separators in these contexts (CDDL groups) are optional
(and actually are terminators, which together with their optionality
allows them to be used like separators as well or even not at all).</t>
        </li>
        <li>
          <t>Embedded CBOR.  EDN has a special syntax to describe the content of
byte strings that are encoded CBOR data items.  CDDL can specify
these with a control operator, which looks very different.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <t><tt>98([/h'a10126'/ &lt;&lt; {/alg/ 1: -7 /ECDSA 256/ } &gt;&gt;, /…/])</tt></t>
            </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>
      <!--  LocalWords:  dedenting dedented
 -->

</section>
  </back>
  <!-- ##markdown-source:
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
AAA=

-->

</rfc>
