<?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.5 (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-08" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.2 -->
  <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-08"/>
    <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="February" day="01"/>
    <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.</t>
      <t>​This document specifies how to add application-oriented extensions to
the diagnostic notation.  It then defines two such extensions for
text representations of epoch-based date/times and of IP addresses
and prefixes (RFC 9164).</t>
      <t>A few further additions close some gaps in usability.
 To facilitate tool interoperation, this document
 specifies a formal ABNF definition for extended diagnostic notation (EDN)
 that accommodates application-oriented literals.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cbor-wg.github.io/edn-literal/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        cbor Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/edn-literal"/>.</t>
    </note>
  </front>
  <middle>
    <?line 110?>

<section anchor="intro">
      <name>Introduction</name>
      <t>For the Concise Binary Object Representation, CBOR,
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> in conjunction with <xref section="G" sectionFormat="of" target="RFC8610"/>
defines a "diagnostic notation" in order to
be able to converse about CBOR data items without having to resort to
binary data.
Diagnostic notation syntax is based on JSON, with extensions
for representing CBOR constructs such as binary data and tags.
(Standardizing this together with the actual interchange format does
not serve to create another interchange format, but enables the use of
a shared diagnostic notation in tools for and in documents about CBOR.)</t>
      <t>This document specifies how to add application-oriented extensions to
the diagnostic notation.  It then defines two such extensions for
text representations of epoch-based date/times and of IP addresses
and prefixes <xref target="RFC9164"/>.</t>
      <t>A few further additions close some gaps in usability.
 To facilitate tool interoperation, this document
 specifies a formal ABNF definition for extended diagnostic notation (EDN)
 that accommodates application-oriented literals. (See <xref target="grammar"/> for an overall ABNF grammar as well as the
ABNF definitions in <xref target="app-grammars"/> for grammars for both the
byte string presentations predefined in <xref target="STD94"/> and the application-extensions).</t>
      <t>In addition, this document finally registers a media type identifier
and a content-format for CBOR diagnostic notation.  This does not
elevate its status as an interchange format, but recognizes that
interaction between tools is often smoother if media types can be used.</t>
      <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.
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>Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> states the objective of defining a
human-readable diagnostic notation with CBOR.
In particular, it states:</t>
        <blockquote>
          <t>All actual interchange always happens in the binary format.</t>
        </blockquote>
        <t>One important application of EDN is the notation of CBOR data for
humans: in specifications, on whiteboards, and for entering test data.
A number of features, such as comments in string literals, are mainly
useful for people-to-people communication via EDN.
Programs also often output EDN for diagnostic purposes, such as in
error messages or to enable comparison (including generation of diffs
via tools) with test data.</t>
        <t>For comparison with test data, it is often useful if different
implementations generate the same (or similar) output for the same
CBOR data items.
This is comparable to the objectives of deterministic serialization
for CBOR data items themselves (Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).
However, there are even more representation variants in EDN than in
binary CBOR, and there is little point in specifically endorsing a
single variant as "deterministic" when other variants may be more
useful for human understanding, e.g., the <tt>&lt;&lt; &gt;&gt;</tt> notation as
opposed to <tt>h''</tt>; an EDN generator may have quite a few options
that control what presentation variant is most desirable for the
application that it is being used for.</t>
        <t>Because of this, a deterministic representation is not defined for
EDN, and there is no expectation for "roundtripping" from EDN to
CBOR and back, i.e., for an ability
to convert EDN to binary CBOR and back to EDN while achieving exactly
the same result as the original input EDN — the original EDN possibly
was created by humans or by a different EDN generator.</t>
        <t>However, there is a certain expectation that EDN generators can be
configured to some basic output format, which:</t>
        <ul spacing="normal">
          <li>
            <t>looks like JSON where that is possible;</t>
          </li>
          <li>
            <t>inserts encoding indicators only where the binary form differs from
preferred encoding;</t>
          </li>
          <li>
            <t>uses hexadecimal representation (<tt>h''</tt>) for byte strings, not
<tt>b64''</tt> or embedded CBOR (<tt>&lt;&lt;&gt;&gt;</tt>);</t>
          </li>
          <li>
            <t>does not generate elaborate blank space (newlines, indentation) for
pretty-printing, but does use common blank spaces such as after <tt>,</tt>
and <tt>:</tt>.</t>
          </li>
        </ul>
        <t>Additional features such as ensuring deterministic map ordering
(Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) on output, or even deviating from the basic
configuration in some systematic way, can further assist in comparing
test data.
Information obtained from a CDDL model can help in choosing
application-oriented literals or specific string representations such
as embedded CBOR or <tt>b64''</tt> in the appropriate places.</t>
      </section>
    </section>
    <section anchor="application-oriented-extension-literals">
      <name>Application-Oriented Extension Literals</name>
      <t>This document extends the syntax used in diagnostic notation for byte
string literals to also be available for application-oriented extensions.</t>
      <t>As per Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, the diagnostic notation can notate byte
strings in a number of <xref target="RFC4648"/> base encodings, where the encoded text
is enclosed in single quotes, prefixed by an identifier (»h« for
base16, »b32« for base32, »h32« for base32hex, »b64« for base64 or
base64url).</t>
      <t>This syntax can be thought to establish a name space, with the names
"h", "b32", "h32", and "b64" taken, but other names being unallocated.
The present specification defines additional names for this namespace,
which we call <em>application-extension identifiers</em>.
For the quoted string, the same rules apply as for byte strings.
In particular, the escaping rules that were adapted from JSON strings
are applied
equivalently for application-oriented extensions, e.g., within the
quoted string <tt>\\</tt> stands
for a single backslash and <tt>\'</tt> stands for a single quote.</t>
      <t>An application-extension identifier is a name consisting of a
lower-case ASCII letter (a-z) and zero or more additional ASCII
characters that are either lower-case letters or digits (a-z0-9).</t>
      <t>Application-extension identifiers are registered in a registry
(<xref target="appext-iana"/>).</t>
      <t>Prefixing a single-quoted string, an application-extension identifier
is used to build an application-oriented extension literal, which
stands for a CBOR data item the value of which is derived from the
text given in the single-quoted string using a procedure defined in
the specification for an application-extension identifier.</t>
      <t>An application-extension (such as <tt>dt</tt>) <bcp14>MAY</bcp14> also define the meaning of
a variant of the application-extension identifier where each
lower-case character is replaced by its upper-case counterpart (such
as <tt>DT</tt>), for building an application-oriented extension literal using
that all-uppercase variant as the prefix of a single-quoted string.</t>
      <t>As a convention for such definitions, using the all-uppercase variant
implies making use of a tag appropriate for this application-oriented
extension (such as tag number 1 for <tt>DT</tt>).</t>
      <t>Examples for application-oriented extensions to CBOR diagnostic
notation can be found in the following sections.</t>
      <section anchor="dt">
        <name>The "dt" Extension</name>
        <t>The application-extension identifier "dt" is used to notate a
date/time literal that can be used as an Epoch-Based Date/Time as per
Section <xref target="RFC8949" section="3.4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</t>
        <t>The text of the literal is a Standard Date/Time String as per
Section <xref target="RFC8949" section="3.4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</t>
        <t>The value of the literal is a number representing the result of a
conversion of the given Standard Date/Time String to an Epoch-Based
Date/Time.
If fractional seconds are given in the text (production
<tt>time-secfrac</tt> in <xref target="abnf-grammar-dt"/>), the value is a
floating-point number; the value is an integer number otherwise.
In the all-upper-case variant of the app-prefix, the value is enclosed
in a tag number 1.</t>
        <t>As an example, the CBOR diagnostic notation</t>
        <sourcecode type="cbor-diag"><![CDATA[
dt'1969-07-21T02:56:16Z',
dt'1969-07-21T02:56:16.5Z',
DT'1969-07-21T02:56:16Z'
]]></sourcecode>
        <t>is equivalent to</t>
        <sourcecode type="cbor-diag"><![CDATA[
-14159024,
-14159023.5,
1(-14159024)
]]></sourcecode>
        <t>See <xref target="dt-grammar"/> for an ABNF definition for the content of <tt>dt</tt> literals.</t>
      </section>
      <section anchor="ip">
        <name>The "ip" Extension</name>
        <t>The application-extension identifier "ip" is used to notate an IP
address literal that can be used as an IP address as per <xref section="3" sectionFormat="of" target="RFC9164"/>.</t>
        <t>The text of the literal is an IPv4address or IPv6address as per
<xref section="3.2.2" sectionFormat="of" target="RFC3986"/>.</t>
        <t>With the lower-case app-string <tt>ip</tt>, the value of the literal is a
byte string representing the binary IP address.
With the upper-case app-string <tt>IP</tt>, the literal is such a byte string
tagged with tag number 54, if an IPv6address is used, or tag number
52, if an IPv4address is used.</t>
        <t>As an additional case, the upper-case app-string <tt>IP''</tt> can be used
with a prefix such as <tt>2001:db8::/56</tt> or <tt>192.0.2.0/24</tt>, with the equivalent tag as its value.
(Note that <xref target="RFC9164"/> representations of address prefixes need to
implement the truncation of the address byte string as described in
<xref section="4.2" sectionFormat="of" target="RFC9164"/>; see example below.)
For completeness, the lower-case variant <tt>ip'2001:db8::/56'</tt> or  <tt>ip'192.0.2.0/24'</tt> stands for
an unwrapped <tt>[56,h'20010db8']</tt> or <tt>[24,h'c00002']</tt>; however, in this case the information
on whether an address is IPv4 or IPv6 often needs to come from the context.</t>
        <t>Note that there is no direct representation of an address combined
with a prefix length; this can be represented as
<tt>52([ip'192.0.2.42',24])</tt>, if needed.</t>
        <t>Examples: the CBOR diagnostic notation</t>
        <sourcecode type="cbor-diag"><![CDATA[
ip'192.0.2.42',
IP'192.0.2.42',
IP'192.0.2.0/24',
ip'2001:db8::42',
IP'2001:db8::42',
IP'2001:db8::/64'
]]></sourcecode>
        <t>is equivalent to</t>
        <sourcecode type="cbor-diag"><![CDATA[
h'c000022a',
52(h'c000022a'),
52([24,h'c00002']),
h'20010db8000000000000000000000042',
54(h'20010db8000000000000000000000042'),
54([64,h'20010db8'])
]]></sourcecode>
        <t>See <xref target="ip-grammar"/> for an ABNF definition for the content of <tt>ip</tt> literals.</t>
      </section>
    </section>
    <section anchor="stand-in">
      <name>Stand-in Representations in Binary CBOR</name>
      <t>In some cases, an EDN consumer cannot construct actual CBOR items that
represent the CBOR data intended for eventual interchange.
This document defines stand-in representation for two such cases:</t>
      <ul spacing="normal">
        <li>
          <t>The EDN consumer does not know (or does not implement) an
application-extension identifier used in the EDN document
(<xref target="unknown"/>) but wants to preserve the information for a later
processor.</t>
        </li>
        <li>
          <t>The generator of some EDN intended for human consumption (such as in
a specification document) may not want to include parts of the final
data item, destructively replacing complete subtrees or possibly
just parts of a lengthy string by <em>elisions</em> (<xref target="elision"/>).</t>
        </li>
      </ul>
      <section anchor="unknown">
        <name>Handling unknown application-extension identifiers</name>
        <t>When ingesting CBOR diagnostic notation, any
application-oriented extension literals are usually decoded and
transformed into the corresponding data item during ingestion.
If an application-extension is not known or not implemented by the
ingesting process, this is usually an error and processing has to
stop.</t>
        <t>However, in certain cases, it can be desirable to exceptionally carry an
uninterpreted application-oriented extension literal in an ingested
data item, allowing to postpone its decoding to a specific later
stage of ingestion.</t>
        <t>This specification defines a CBOR Tag for this purpose:
The Diagnostic Notation Unresolved Application-Extension Tag, tag
number CPA999 (<xref target="iana-standin"/>).
The content of this tag is an array of two text strings: The
application-extension identifier, and the (escape-processed) content
of the single-quoted string.
For example, <tt>dt'1969-07-21T02:56:16Z'</tt> can be provisionally represented as
<tt>/CPA/ 999(["dt", "1969-07-21T02:56:16Z"])</tt>.</t>
        <t><cref anchor="cpa">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
      </section>
      <section anchor="elision">
        <name>Handling information deliberately elided from an EDN document</name>
        <t>When using EDN for exposition in a document or on a whiteboard, it is
often useful to be able to leave out parts of an EDN document that are
not of interest at that point of the exposition.</t>
        <t>To facilitate this, this specification
supports the use of an <em>ellipsis</em> (notated as three or more dots
in a row, as in <tt>...</tt>) to indicate parts of an EDN document that have
been elided (and therefore cannot be reconstructed).</t>
        <t>Upon ingesting EDN as a representation of a CBOR data item for further
processing, the occurrence of an ellipsis usually is an error and
processing has to stop.</t>
        <t>However, it is useful to be able to process EDN documents with
ellipses in the automation scripts for the documents using them.
This specification defines a CBOR Tag that can be used in the ingestion
for this purpose:
The Diagnostic Notation Ellipsis Tag, tag number CPA888 (<xref target="iana-standin"/>).
The content of this tag either is</t>
        <ol spacing="normal" type="1"><li>
            <t>null (indicating a data item entirely replaced by an ellipsis), or it is</t>
          </li>
          <li>
            <t>an array, the elements of which are alternating between fragments
of a string and the actual elisions, represented as ellipses
carrying a null as content.</t>
          </li>
        </ol>
        <t>Elisions can stand in for entire subtrees, e.g. in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, ..., 3]
,
{ "a": 1,
  "b": ...,
  ...: ...
}
]]></sourcecode>
        <t>A single ellipsis (or key/value pair of ellipses) can imply eliding
multiple elements in an array (members in a map); if more detailed
control is required, a data definition language such as CDDL can be
employed.
(Note that the stand-in form defined here does not allow multiple
key/value pairs with an ellipsis as a key: the CBOR data item would
not be valid.)</t>
        <t>Subtree elisions can be represented in a CBOR data item by using
<tt>/CPA/888(null)</tt> as the stand-in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 888(null), 3]
,
{ "a": 1,
  "b": 888(null),
  888(null): 888(null)
}
]]></sourcecode>
        <t>Elisions also can be used as part of a (text or byte) string:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": "Herewith I buy" ... "gned: Alice & Bob",
  "signature": h'4711...0815',
}
]]></sourcecode>
        <t>The example "contract" uses string concatenation as per <xref section="G.4" sectionFormat="of" target="RFC8610"/>, extending that by allowing ellipses; while the example
"signature" uses special syntax that allows the use of ellipses
between the bytes notated <em>inside</em> <tt>h''</tt> literals.</t>
        <t>String elisions can be represented in a CBOR data item by a stand-in
that wraps an array of string fragments alternating with ellipsis
indicators:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": /CPA/888(["Herewith I buy", 888(null),
                        "gned: Alice & Bob"]),
  "signature": 888([h'4711', 888(null), h'0815']),
}
]]></sourcecode>
        <t>Note that the use of elisions is different from "commenting out" EDN
text, e.g.</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": "Herewith I buy" /.../ "gned: Alice & Bob",
  "signature": h'4711/.../0815',
  # ...: ...
}
]]></sourcecode>
        <t>The consumer of this EDN will ignore the comments and therefore will
have no idea after ingestion that some information has been elided;
validation steps may then simply fail instead of being informed about
the elisions.</t>
      </section>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t><cref anchor="to-be-removed">RFC Editor: please replace RFC-XXXX with the RFC
number of this RFC, [IANA.cbor-diagnostic-notation] with a
reference to the new registry group, and remove this note.</cref></t>
      <section anchor="appext-iana">
        <name>CBOR Diagnostic Notation Application-extension Identifiers Registry</name>
        <t>IANA is requested to create an "Application-Extension Identifiers"
registry in a new "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "expert review"
(Section <xref target="RFC8126" section="4.5" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions">The experts are instructed to be frugal in the allocation of
application-extension identifiers that are suggestive of generally applicable semantics,
keeping them in reserve for application-extensions that are likely to enjoy wide
use and can make good use of their conciseness.
The expert is also instructed to direct the registrant to provide a
specification (Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>), but can make exceptions,
for instance when a specification is not available at the time of
registration but is likely forthcoming.
If the expert becomes aware of application-extension identifiers that are deployed and
in use, they may also initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Application-Extension Identifier:</dt>
          <dd>
            <t>a lower case ASCII <xref target="STD80"/> string that starts with a letter and can
contain letters and digits after that (<tt>[a-z][a-z0-9]*</tt>). No other
entry in the registry can have the same application-extension identifier.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana">
          <name>Initial Content of Application-extension Identifier Registry</name>
          <thead>
            <tr>
              <th align="left">Application-extension Identifier</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">h32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">Date/Time</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP Address/Prefix</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="reg-ei">
        <name>Encoding Indicators</name>
        <t>IANA is requested to create an "Encoding Indicators"
registry in the newly created "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "specification required"
(Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions-ei">The experts are instructed to be frugal in the allocation of
encoding indicators that are suggestive of generally applicable semantics,
keeping them in reserve for encoding indicator registrations that are likely to enjoy wide
use and can make good use of their conciseness.
If the expert becomes aware of encoding indicators that are deployed and
in use, they may also solicit a specification and initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Encoding Indicator:</dt>
          <dd>
            <t>an ASCII <xref target="STD80"/> string that starts with an underscore letter and
can contain zero or more underscores, letters and digits after that
(<tt>_[_A-Za-z0-9]*</tt>). No other entry in the registry can have the same
Encoding Indicator.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana-ei"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana-ei">
          <name>Initial Content of Encoding Indicator Registry</name>
          <thead>
            <tr>
              <th align="left">Encoding Indicator</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">_</td>
              <td align="left">Indefinite Length Encoding (ai=31)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_i</td>
              <td align="left">ai=0 to ai=23</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_0</td>
              <td align="left">ai=24</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_1</td>
              <td align="left">ai=25</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_2</td>
              <td align="left">ai=26</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_3</td>
              <td align="left">ai=27</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types"
registry <xref target="IANA.media-types"/>.</t>
        <table align="left" anchor="new-media-type">
          <name>New Media Type application/cbor-diagnostic</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">cbor-diagnostic</td>
              <td align="left">application/cbor-diagnostic</td>
              <td align="left">RFC-XXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>cbor-diagnostic</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (UTF-8)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC XXXX</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Tools interchanging a human-readable form of CBOR</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>The syntax and semantics of fragment identifiers is as specified for
"application/cbor".  (At publication of RFC XXXX, there is no
fragment identification syntax defined for "application/cbor".)</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t><br/>
            </t>
            <dl>
              <dt>Deprecated alias names for this type:</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>Magic number(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.diag</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>CBOR WG mailing list (cbor@ietf.org),
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>LIMITED USE</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>CBOR diagnostic notation represents CBOR data items, which are the
format intended for actual interchange.
The media type application/cbor-diagnostic is intended to be used
within documents about CBOR data items, in diagnostics for human
consumption, and in other representations of CBOR data items that
are necessarily text-based such as in configuration files or other
data edited by humans, often under source-code control.</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-format">
        <name>Content-Format</name>
        <t>IANA is requested to register a Content-Format number in the
<xref section="&quot;CoAP Content-Formats&quot;" relative="#content-formats" sectionFormat="bare" target="IANA.core-parameters"/>
sub-registry, within the "Constrained RESTful Environments (CoRE)
Parameters" Registry <xref target="IANA.core-parameters"/>, as follows:</t>
        <table align="left">
          <name>New Content-Format</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/cbor-diagnostic</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>TBD1 is to be assigned from the space 256..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>
        <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="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <referencegroup anchor="BCP26" target="https://www.rfc-editor.org/info/bcp26">
          <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
            <front>
              <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
              <author fullname="M. Cotton" initials="M." surname="Cotton"/>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <author fullname="T. Narten" initials="T." surname="Narten"/>
              <date month="June" year="2017"/>
              <abstract>
                <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
                <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
                <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="26"/>
            <seriesInfo name="RFC" value="8126"/>
            <seriesInfo name="DOI" value="10.17487/RFC8126"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="STD80" target="https://www.rfc-editor.org/info/std80">
          <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc20">
            <front>
              <title>ASCII format for network interchange</title>
              <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
              <date month="October" year="1969"/>
            </front>
            <seriesInfo name="STD" value="80"/>
            <seriesInfo name="RFC" value="20"/>
            <seriesInfo name="DOI" value="10.17487/RFC0020"/>
          </reference>
        </referencegroup>
        <reference anchor="IEEE754" target="https://ieeexplore.ieee.org/document/8766229">
          <front>
            <title>IEEE Standard for Floating-Point Arithmetic</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="IEEE Std" value="754-2019"/>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2019.8766229"/>
        </reference>
        <reference anchor="C" target="https://www.iso.org/standard/74528.html">
          <front>
            <title>Information technology — Programming languages — C</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2018" month="June"/>
          </front>
          <seriesInfo name="ISO/IEC" value="9899:2018"/>
          <annotation>The text of the standard is also available via https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf</annotation>
          <refcontent>Fourth Edition</refcontent>
        </reference>
        <reference anchor="Cplusplus" target="https://www.iso.org/standard/79358.html">
          <front>
            <title>Programming languages — C++</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2020" month="December"/>
          </front>
          <seriesInfo name="ISO/IEC" value="14882:2020"/>
          <annotation>The text of the standard is also available via https://isocpp.org/files/papers/N4860.pdf</annotation>
          <refcontent>Sixth Edition</refcontent>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="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>
        <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="29" month="January" 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-03"/>
        </reference>
      </references>
    </references>
    <?line 765?>

<section anchor="grammars">
      <name>ABNF Definitions</name>
      <t>This appendix collects grammars in ABNF form (<xref target="STD68"/> as extended in
<xref target="RFC7405"/>) that serve to define the syntax of EDN and some
application-oriented literals.</t>
      <t>Implementation note: The ABNF definitions in this appendix are
intended to be useful in a PEG parser interpretation (see <xref section="A" sectionFormat="of" target="RFC8610"/> for an introduction into PEG).</t>
      <section anchor="grammar">
        <name>Overall ABNF Definition for Extended Diagnostic Notation</name>
        <t>This appendix provides an overall ABNF definition for the syntax of
CBOR extended diagnostic notation.</t>
        <t>To complete the parsing of an <tt>app-string</tt> with prefix, say, <tt>p</tt>, the
processed <tt>sqstr</tt> inside it is further parsed using the ABNF definition specified
for the production <tt>app-string-p</tt> in <xref target="app-grammars"/>.</t>
        <t>For simplicity, the internal parsing for the built-in EDN prefixes is
specified in the same way.
ABNF definitions for <tt>h''</tt> and <tt>b64''</tt> are provided in <xref target="h-grammar"/> and
<xref target="b64-grammar"/>.
However, the prefixes <tt>b32''</tt> and <tt>h32''</tt> are not in wide use and an
ABNF definition in this document could therefore not be based on
implementation experience.</t>
        <figure anchor="abnf-grammar">
          <sourcecode type="abnf" name="cbor-edn.abnf"><![CDATA[
seq             = S [item S *("," S item S) OC] S
one-item        = S item S
item            = map / array / tagged
                / number / simple
                / string / streamstring

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

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

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

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

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

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

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

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

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

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

hexchar         = "{" (1*"0" [ hexscalar ] / hexscalar) "}"
                / non-surrogate
                / (high-surrogate "\" %s"u" low-surrogate)
non-surrogate   = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
high-surrogate  = "D" ("8"/"9"/"A"/"B") 2HEXDIG
low-surrogate   = "D" ("C"/"D"/"E"/"F") 2HEXDIG
hexscalar       = "10" 4HEXDIG / HEXDIG1 4HEXDIG
                / non-surrogate / 1*3HEXDIG

; Note that no other C0 characters are allowed, including %x09 HT
unescaped       = %x0A ; new line
                / %x0D ; carriage return -- ignored on input
                / %x20-21
                     ; omit 0x22 "
                / %x23-26
                     ; omit 0x27 '
                / %x28-5B
                     ; omit 0x5C \
                / %x5D-D7FF ; skip surrogate code points
                / %xE000-10FFFF

DQUOTE          = %x22    ; " double quote
DIGIT           = %x30-39 ; 0-9
DIGIT1          = %x31-39 ; 1-9
ODIGIT          = %x30-37 ; 0-7
BDIGIT          = %x30-31 ; 0-1
HEXDIG          = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
HEXDIG1         = DIGIT1 / "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
lcalpha         = %x61-7A ; a-z
lcalnum         = lcalpha / DIGIT
ucalpha         = %x41-5A ; A-Z
ucalnum         = ucalpha / DIGIT
wordchar        = "_" / lcalnum / ucalpha ; [_a-z0-9A-Z]
]]></sourcecode>
        </figure>
        <t>While an ABNF grammar defines the set of character strings that are
considered to be valid EDN by this ABNF, the mapping of these
character strings into the generic data model of CBOR is not always
obvious.</t>
        <t>The following additional items should help in the interpretation:</t>
        <ul spacing="normal">
          <li>
            <t><tt>decnumber</tt> stands for an integer in the usual decimal notation, unless at
least one of the optional parts starting with "." and "e" are
present, in which case it stands for a floating point value in the
usual decimal notation.  Note that the grammar now allows <tt>3.</tt> for
<tt>3.0</tt> and <tt>.3</tt> for <tt>0.3</tt> (also for hexadecimal floating point
below); implementers are advised that some platform numeric parsers
accept only a subset of the floating point syntax in this document
and may require some preprocessing to use here.</t>
          </li>
          <li>
            <t><tt>basenumber</tt> stands for an integer in the usual base 16/hexadecimal
("0x"), base 8/octal ("0o"), or base 2/binary ("0b") notation, unless the
optional part containing a "p" is present, in which case it stands
for a floating point number in the usual hexadecimal notation (which
uses a mantissa in hexadecimal and an exponent in decimal notation,
see Section 5.12.3 of <xref target="IEEE754"/>, Section 6.4.4.2 of <xref target="C"/>, or Section
5.13.4 of <xref target="Cplusplus"/>; floating-suffix/floating-point-suffix from
the latter two is not used here).</t>
          </li>
          <li>
            <t><tt>spec</tt> stands for an encoding indicator.
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
(Section <xref target="RFC8949" section="G.4" sectionFormat="bare"/> of RFC 8949 <xref 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 Section <xref target="RFC8949" section="G.4" sectionFormat="bare"/> of RFC 8949 <xref 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 (EDN also allows, but does
not require, a trailing comma before the closing bracket/brace,
enabling an easier to maintain "terminator" style of their use).
CDDL's comma separators in these contexts (CDDL groups) are entirely
optional
(and actually are terminators, which together with their optionality
allows them to be used like separators as well, or even not at all).</t>
        </li>
        <li>
          <t>Embedded CBOR.  EDN has a special syntax to describe the content of
byte strings that are encoded CBOR data items.  CDDL can specify
these with a control operator, which looks very different.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <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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
PA0Xhq/U/wH1rfreS68AAA==

-->

</rfc>
