<?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.1) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-02" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <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-02"/>
    <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="July" day="23"/>
    <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)] 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)] "]"
map             = "{" spec [kp S *("," S kp S)] "}"
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 / %x2f-10FFFF
S               = *blank *("/" *non-slash "/" *blank )

; note that there must be at least one string to distinguish
streamstring    = "(" spec1 tstr S *("," S tstr S) ")"
                / "(" spec1 sqstr S *("," S sqstr S) ")"
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 ["==" / 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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

-->

</rfc>
