<?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.6.39 (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-03" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.0 -->
  <front>
    <title abbrev="CBOR EDN Literals">Application-Oriented Literals in CBOR Extended Diagnostic Notation</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-03"/>
    <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="September" day="04"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 51?>

<t>The Concise Binary Object Representation, CBOR (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 Constrained Resource Identifiers (draft-ietf-core-href).</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 72?>

<section anchor="intro">
      <name>Introduction</name>
      <t>For the Concise Binary Object Representation, CBOR,
<xref section="8" sectionFormat="of" target="RFC8949"/> 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 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 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 Constrained Resource Identifiers <xref target="I-D.ietf-core-href"/>.</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="RFC8949"/> and the application-extensions).</t>
      <t><cref anchor="cri-later">Note that <xref target="cri"/> and <xref target="cri-grammar"/> about CRIs may move to the <xref target="I-D.ietf-core-href"/>
specification, depending on the relative speed of approval; the
later document gets the section.</cref></t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t><xref section="8" sectionFormat="of" target="RFC8949"/> 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 for 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="RFC8949"/> 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="RFC5234"/> as extended in <xref target="RFC7405"/>, even if the
latter extensions are not currently used in this document.
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>
      </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="RFC8949"/>, 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 (&gt;h&lt; for
base16, &gt;b32&lt; for base32, &gt;h32&lt; for base32hex, &gt;b64&lt; 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., <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"/>).
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>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>
    <section anchor="cri">
      <name>The "cri" Extension</name>
      <t>The application-extension identifier "cri" is used to notate a
Constrained Resource Identifier literal as per <xref target="I-D.ietf-core-href"/>.</t>
      <t>The text of the literal is a URI Reference as per <xref target="RFC3986"/> or an IRI
Reference as per <xref target="RFC3987"/>.</t>
      <t>The value of the literal is a CRI that can be converted to the text of
the literal using the procedure of <xref section="6.1" sectionFormat="of" target="I-D.ietf-core-href"/>.
Note that there may be more than one CRI that can be converted to the
URI/IRI given; implementations are expected to favor the simplest
variant available and make non-surprising choices otherwise.</t>
      <t>As an example, the CBOR diagnostic notation</t>
      <sourcecode type="cbor-diag"><![CDATA[
cri'https://example.com/bottarga/shaved'
]]></sourcecode>
      <t>is equivalent to</t>
      <sourcecode type="cbor-diag"><![CDATA[
[-4, ["example", "com"], ["bottarga", "shaved"]]
]]></sourcecode>
      <t>See <xref target="cri-grammar"/> for an ABNF definition for the content of CRI literals.</t>
    </section>
    <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="RFC8949"/>.</t>
      <t>The text of the literal is a Standard Date/Time String as per
<xref section="3.4.1" sectionFormat="of" target="RFC8949"/>.</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.</t>
      <t>As an example, the CBOR diagnostic notation</t>
      <sourcecode type="cbor-diag"><![CDATA[
dt'1969-07-21T02:56:16Z'
]]></sourcecode>
      <t>is equivalent to</t>
      <sourcecode type="cbor-diag"><![CDATA[
-14159024
]]></sourcecode>
      <t>See <xref target="dt-grammar"/> for an ABNF definition for the content of DT literals.</t>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <section anchor="appext-iana">
        <name>CBOR Diagnostic Notation application extension identifiers registry</name>
        <t>IANA is requested to create a registry [[where?]] for
application-extension identifiers, with the initial content shown in
<xref target="tab-iana"/>.</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">cri</td>
              <td align="left">Constrained Resource Identifier</td>
              <td align="left">RFCthis</td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">Date/Time</td>
              <td align="left">RFCthis</td>
            </tr>
          </tbody>
        </table>
        <t><cref anchor="todo1">(Define policy: probably specification required?; detailed template)</cref></t>
      </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>
    <section anchor="seccons">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="RFC8949"/> and <xref target="RFC8610"/> apply.</t>
      <t><cref anchor="todo2">Anything else meaningful to say here?</cref></t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="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="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>
        <reference anchor="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>
        <reference anchor="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>
        <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="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) instead of a sequence
   of characters.  This simplifies parsing, comparison and reference
   resolution in environments with severe limitations on processing
   power, code size, and memory size.


   // (This "cref" paragraph will be removed by the RFC editor:) The
   // present revision -13 of this draft picks up some additional
   // discussion points and is intended as input to the CoRE WG meeting
   // at IETF 117.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-13"/>
        </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="RFC3987">
          <front>
            <title>Internationalized Resource Identifiers (IRIs)</title>
            <author fullname="M. Duerst" initials="M." surname="Duerst"/>
            <author fullname="M. Suignard" initials="M." surname="Suignard"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>This document defines a new protocol element, the Internationalized Resource Identifier (IRI), as a complement of the Uniform Resource Identifier (URI). An IRI is a sequence of characters from the Universal Character Set (Unicode/ISO 10646). A mapping from IRIs to URIs is defined, which means that IRIs can be used instead of URIs, where appropriate, to identify resources.</t>
              <t>The approach of defining a new protocol element was chosen instead of extending or changing the definition of URIs. This was done in order to allow a clear distinction and to avoid incompatibilities with existing software. Guidelines are provided for the use and deployment of IRIs in various protocols, formats, and software components that currently deal with URIs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3987"/>
          <seriesInfo name="DOI" value="10.17487/RFC3987"/>
        </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="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>
        <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 355?>

<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
                / basenumber / decnumber / infin / simple
                / tstr / bstr / embedded / streamstring

sign            = "+" / "-"
decnumber       = [sign] 1*DIGIT ["." 1*DIGIT] ["e" [sign] 1*DIGIT]
basenumber      = [sign] "0" ("x" 1*HEXDIG
                            / "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 "(" S item S ")"

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

array           = "[" spec [item S *("," S item S) OC] "]"
map             = "{" spec [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-10FFFF
S               = *blank *("/" *non-slash "/" *blank )

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

; note that there must be at least one string to distinguish
streamstring    = "(" spec1 tstr S *("," S tstr S) OC ")"
                / "(" spec1 sqstr S *("," S sqstr S) OC ")"
spec            = S ["_" S]
spec1           = S "_" S

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-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
ALPHA           = %x41-5A / lcalpha   ; A-Z / a-z
]]></sourcecode>
        </figure>
      </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="RFC8949"/> and in this specification.
These grammars describe the decoded 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)
]]></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
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]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
B               = *iblank
iblank          = %x0A / %x20  ; Not HT or CR (gone)
]]></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="cri-grammar">
          <name>cri: ABNF Definition of URI Representation of a CRI</name>
          <t>The syntax of the content of <tt>cri</tt> literals can be described by the
ABNF for <tt>URI-reference</tt> in <xref section="4.1" sectionFormat="of" target="RFC3986"/>:</t>
          <figure anchor="abnf-grammar-cri">
            <name>ABNF Definition of URI Representation of a CRI</name>
            <sourcecode type="abnf" name="cbor-edn-cri.abnf"><![CDATA[
app-string-cri = URI-reference
; ABNF from RFC 3986:

URI           = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part     = "//" authority path-abempty
                 / path-absolute
                 / path-rootless
                 / path-empty

URI-reference = URI / relative-ref

absolute-URI  = scheme ":" hier-part [ "?" query ]

relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

relative-part = "//" authority path-abempty
                 / path-absolute
                 / path-noscheme
                 / path-empty

scheme        = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )

authority     = [ userinfo "@" ] host [ ":" port ]
userinfo      = *( unreserved / pct-encoded / sub-delims / ":" )
host          = IP-literal / IPv4address / reg-name
port          = *DIGIT

IP-literal    = "[" ( IPv6address / IPvFuture  ) "]"

IPvFuture     = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )

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

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

reg-name      = *( unreserved / pct-encoded / sub-delims )

path          = path-abempty    ; begins with "/" or is empty
                 / path-absolute   ; begins with "/" but not "//"
                 / path-noscheme   ; begins with a non-colon segment
                 / path-rootless   ; begins with a segment
                 / path-empty      ; zero characters

path-abempty  = *( "/" segment )
path-absolute = "/" [ segment-nz *( "/" segment ) ]
path-noscheme = segment-nz-nc *( "/" segment )
path-rootless = segment-nz *( "/" segment )
path-empty    = 0<pchar>

segment       = *pchar
segment-nz    = 1*pchar
segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
                 ; non-zero-length segment without any colon ":"

pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

query         = *( pchar / "/" / "?" )

fragment      = *( pchar / "/" / "?" )

pct-encoded   = "%" HEXDIG HEXDIG

unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
reserved      = gen-delims / sub-delims
gen-delims    = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                 / "*" / "+" / "," / ";" / "="
]]></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 <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>EDN is an extension to JSON <xref target="RFC8259"/>.
(Any (interoperable) JSON text is also valid EDN.)</li>
        <li>CDDL is inspired by ABNF's syntax <xref target="RFC5234"/>.</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 reasons 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 cannot inherit anything from JSON 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).  </t>
          <dl spacing="compact">
            <dt>EDN:</dt>
            <dd>
              <t><tt>{ / alg / 1: -7 / ECDSA 256 / }</tt></t>
            </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>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).</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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
n/YldOPrCzf4F+aauu4r8T+YgRcw4V8AAA==

-->

</rfc>
