<?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.27 (Ruby 3.2.1) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bormann-cbor-cddl-2-draft-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="CDDL 2.0">CDDL 2.0 — a draft plan</title>
    <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-cddl-2-draft-01"/>
    <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="March" day="06"/>
    <workgroup>CBOR Working group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>The Concise Data Definition Language (CDDL) today is defined by
RFC 8610 and RFC 9165.
The latter (as well as some more application specific specifications
such as RFC 9090) have used the extension point provided in RFC 8610,
the control operator.</t>
      <t>As CDDL is used in larger projects, feature requirements 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.</t>
      <t>The present document provides a roadmap towards a "CDDL 2.0".
It is based on draft-bormann-cbor-cddl-freezer, but is more selective
in what potential features it takes up and more detailed in their
discussion.
It is intended to serve as a basis for prototypical implementations of
CDDL 2.0.
What specific documents spawn from the present one or whether this
document is evolved into a single CDDL 2.0 specification.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-bormann-cbor-cddl-2-draft/"/>.
      </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/cddl-2"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>(Please see abstract.)</t>
      <t>Note that the existing extension point can be exercised for new
features in parallel to the work described here.</t>
    </section>
    <section anchor="mending-syntax-deficits">
      <name>Mending syntax deficits</name>
      <section anchor="empty">
        <name>Empty data models</name>
        <dl spacing="compact">
          <dt><em>Proposal Status</em>:</dt>
          <dd>
            <t>complete</t>
          </dd>
          <dt><em>Compatibility</em>:</dt>
          <dd>
            <t>backward (not forward)</t>
          </dd>
        </dl>
        <t><xref target="RFC8610"/> requires a CDDL file to have at least one rule.</t>
        <sourcecode type="abnf"><![CDATA[
     cddl = S 1*(rule S)
]]></sourcecode>
        <t>This makes sense when the file has to stand alone, as it needs to have
at least one rule to provide an entry point (start rule).</t>
        <t>With CDDL 2.0, CDDL files can also include directives (see <xref target="directives"/>), and these might
be the source of all the rules that ultimately make up the module created
by the file.  The rule content has to be available for directive
processing, making the requirement for at least one rule cumbersome.</t>
        <t>Therefore, we extend the grammar as follows:</t>
        <sourcecode type="abnf"><![CDATA[
     cddl = S *(rule S)
]]></sourcecode>
        <t>and make the existence of at least one rule a semantic constraint, to
be fulfilled after processing of all directives.</t>
      </section>
      <section anchor="tagnum">
        <name>Non-literal Tag Numbers</name>
        <dl spacing="compact">
          <dt><em>Proposal Status</em>:</dt>
          <dd>
            <t>complete</t>
          </dd>
          <dt><em>Compatibility</em>:</dt>
          <dd>
            <t>backward (not forward)</t>
          </dd>
        </dl>
        <t>The CDDL 1.0 syntax for expressing tags in CDDL is (ABNF as in <xref target="RFC5234"/>):</t>
        <sourcecode type="abnf"><![CDATA[
type2 /= "#" "6" ["." uint] "(" S type S ")"
]]></sourcecode>
        <t>This means tag numbers can only be given as literal numbers (uints).
Some specifications operate on ranges of tag numbers, e.g., <xref target="RFC9277"/>
has a range of tag numbers 1668546817 (0x63740101) to 1668612095
(0x6374FFFF) to tag specific content formats.
This can currently not be expressed in CDDL.</t>
        <t>CDDL 2.0 extends this to</t>
        <sourcecode type="abnf"><![CDATA[
type2 /= "#" "6" ["." tag-number] "(" S type S ")"
tag-number = uint / ("<" type ">")
]]></sourcecode>
        <t>So the above range can be expressed in a CDDL fragment such as:</t>
        <sourcecode type="cddl"><![CDATA[
ct-tag<content> = #6.<ct-tag-number>(content)
ct-tag-number = 1668546817..1668612095
; or use 0x63740101..0x6374FFFF
]]></sourcecode>
        <t>Note that reuses the angle bracket syntax for generics; this reuse is
innocuous as a generic parameter/argument only ever occurs after a
rule name (<tt>id</tt>), while it occurs after <tt>.</tt> here.
(Whether there is potential for human confusion can be debated; the
above example deliberately uses generics as well.)</t>
      </section>
      <section anchor="tagolit-ref">
        <name>Tag-oriented Literals</name>
        <t>Incomplete, see <xref target="tagolit"/>.</t>
      </section>
      <section anchor="clarifications">
        <name>Clarifications</name>
        <dl spacing="compact">
          <dt><em>Proposal Status</em>:</dt>
          <dd>
            <t>complete</t>
          </dd>
          <dt><em>Compatibility</em>:</dt>
          <dd>
            <t>errata fix (targets 1.0 and 2.0)</t>
          </dd>
        </dl>
        <t>A number of errata reports have been made around some details of text
string and byte string literal syntax: <xref target="Err6527"/> and <xref target="Err6543"/>.
These need to be addressed by re-examining the details of these
literal syntaxes.
Also, <xref target="Err6526"/> needs to be applied (missing backslashes in text
explaining backslash escaping).</t>
        <section anchor="err6527">
          <name>Err6527</name>
          <t>The ABNF used in <xref target="RFC8610"/> for the content of text string literals
is rather permissive:</t>
          <sourcecode type="abnf"><![CDATA[
text = %x22 *SCHAR %x22
SCHAR = %x20-21 / %x23-5B / %x5D-7E / %x80-10FFFD / SESC
SESC = "\" (%x20-7E / %x80-10FFFD)
]]></sourcecode>
          <t>This allows almost any non-C0 character to be escaped by a backslash,
but critically misses out on the <tt>\uXXXX</tt> and <tt>\uHHHH\uLLLL</tt> forms
that JSON allows to specify characters in hex.  Both can be solved by
updating the SESC production to:</t>
          <sourcecode type="abnf"><![CDATA[
SESC = "\" ( %x22 / "/" / "\" /                 ; \" \/ \\
             %x62 / %x66 / %x6E / %x72 / %x74 / ; \b \f \n \r \t
             (%x75 hexchar) )                   ; \u
hexchar = non-surrogate / (high-surrogate "\" %x75 low-surrogate)
non-surrogate = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG) /
               ("D" %x30-37 2HEXDIG )
high-surrogate = "D" ("8"/"9"/"A"/"B") 2HEXDIG
low-surrogate = "D" ("C"/"D"/"E"/"F") 2HEXDIG
]]></sourcecode>
          <t>Now that SESC is more restrictively formulated, this also requires an
update to the BCHAR production used in the ABNF syntax for byte string
literals:</t>
          <sourcecode type="abnf"><![CDATA[
bytes = [bsqual] %x27 *BCHAR %x27
BCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / CRLF
bsqual = "h" / "b64"
]]></sourcecode>
          <t>The updated version explicit allows <tt>\'</tt>, which is no longer allowed
in the updated SESC:</t>
          <sourcecode type="abnf"><![CDATA[
BCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / "\'" / CRLF
]]></sourcecode>
        </section>
        <section anchor="err6543">
          <name>Err6543</name>
          <t>The ABNF used in <xref target="RFC8610"/> for the content of byte string literals
lumps together byte strings notated as text with byte strings notated
in base16 (hex) or base64 (but see also updated BCHAR production above):</t>
          <sourcecode type="abnf"><![CDATA[
bytes = [bsqual] %x27 *BCHAR %x27
BCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / CRLF
]]></sourcecode>
          <t>Errata report 6543 proposes to handle the two cases in separate
productions (where, with an updated SESC, BCHAR obviously needs to be
updated as above):</t>
          <sourcecode type="abnf"><![CDATA[
bytes = %x27 *BCHAR %x27
      / bsqual %x27 *QCHAR %x27
BCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / CRLF
QCHAR = DIGIT / ALPHA / "+" / "/" / "-" / "_" / "=" / WS
]]></sourcecode>
          <t>This potentially causes a subtle change, which is hidden in the WS production:</t>
          <sourcecode type="abnf"><![CDATA[
WS = SP / NL
SP = %x20
NL = COMMENT / CRLF
COMMENT = ";" *PCHAR CRLF
PCHAR = %x20-7E / %x80-10FFFD
CRLF = %x0A / %x0D.0A
]]></sourcecode>
          <t>This allows any non-C0 character in a comment, so this fragment
becomes possible:</t>
          <sourcecode type="cddl"><![CDATA[
foo = h'
   43424F52 ; 'CBOR'
   0A       ; LF, but don't use CR!
'
]]></sourcecode>
          <t>The current text is not unambiguously saying whether the three apostrophes
need to be escaped with a <tt>\</tt> or not, as in:</t>
          <sourcecode type="cddl"><![CDATA[
foo = h'
   43424F52 ; \'CBOR\'
   0A       ; LF, but don\'t use CR!
'
]]></sourcecode>
          <t>... which would be supported by the existing ABNF in <xref target="RFC8610"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="processing-model-beyond-validation">
      <name>Processing model: Beyond Validation</name>
      <dl spacing="compact">
        <dt><em>Proposal Status</em>:</dt>
        <dd>
          <t>experiments with implementations ongoing</t>
        </dd>
        <dt><em>Compatibility</em>:</dt>
        <dd>
          <t>backwards compatible</t>
        </dd>
      </dl>
      <t>The basic (implicit) processing model for CDDL 1.0 applies a CDDL data
model to a data item and returns a Boolean that indicates whether the
data item matches that model ("<em>validation</em>").</t>
      <t><xref section="4" sectionFormat="of" target="RFC9165"/> extends this model with named "<em>features</em>".
A validation can indicate which features were used.
Validation could also be parameterized with information about what
features are allowed to be used, enabling variants (see <xref section="4" sectionFormat="of" target="RFC9165"/> and <xref target="useful"/> for examples).</t>
      <t>The <tt>cddl</tt> tool (<xref section="F" sectionFormat="of" target="RFC8610"/>) also supports experimental
forms of "annotating" a validated data item with information about
which rules were used to support validation, currently entirely based on the
information that is in a standard CDDL 1.0 data model.
This leads to a more general concept of "<em>annotation</em>", where the data
model specification supports "annotating" the validated instance by
optionally supplying information in the model.
(The annotated result is a special case of a "post-schema validation
instance" <xref target="PSVI"/>, here one where the data item itself is only
augmented, not changed, by the process.)</t>
      <t>Annotations could in turn provide input to further validation steps,
as is often done with Schematron validation in Relax-NG; with an
appropriate evaluation language this can be used for checking co-occurrence
constraints (<xref section="5" sectionFormat="of" target="I-D.draft-bormann-cbor-cddl-freezer"/>).</t>
      <t>Finally, annotations are a first step to <em>transformation</em>, i.e.,
describing how a validated data item should be interpreted as a
transformed data item by performing certain computations.
This generally requires even more support from an evaluation language,
simple transformations such as adding in default values may not need
much support though.</t>
      <t>At this time, existing experimental implementations do not lead to a
clear choice for what processing model enhancements should be in
CDDL 2.0.
This document proposes to continue the experimentation and document
good approaches.</t>
    </section>
    <section anchor="module-superstructure">
      <name>Module superstructure</name>
      <dl spacing="compact">
        <dt><em>Proposal Status</em>:</dt>
        <dd>
          <t>collection of rough ideas with examples; initial subset implemented</t>
        </dd>
        <dt><em>Compatibility</em>:</dt>
        <dd>
          <t>bidirectional (both backward and forward)</t>
        </dd>
      </dl>
      <t>Originally, CDDL was used for small data models that could be
expressed in a few lines.  As the size of data models that need to be
expressed in CDDL has increased, the need to modularize and re-use
components is increasing.</t>
      <t>CDDL 1.0 has been designed with a crude form of composition:
Concatenating a number of CDDL snippets creates a valid CDDL data
model unless there is a name collision (identical redefinition is
allowed to facilitate this approach).
With larger models, managing the name space to avoid collisions
becomes more pressing.</t>
      <t>The knowledge which CDDL snippets need to be concatenated in order to
obtain the desired data model lives entirely outside the CDDL snippets
in CDDL 1.0.
In CDDL 2.0, rules will be packaged as modules and referenced from other
modules.</t>
      <t>There needs to be some control of namespace pollution, as well as
unambiguous referencing into evolving specifications ("versioning")
and selection of alternatives (as was emulated with snippets in
<xref section="11" sectionFormat="of" target="RFC8428"/>, although an alternative approach for expressing
variants is demonstrated in <xref target="useful"/> based on <xref section="4" sectionFormat="of" target="RFC9165"/>).</t>
      <section anchor="compatibility">
        <name>Compatibility</name>
        <t>One approach to achieve the module structure that is friendly to
existing environments that operate with CDDL 1.0 snippets and CDDL 1.0
implementations is to add a super-syntax (similar to the way pragmas
are often added to a language), e.g., by carrying them in what is
parsed as comments in CDDL 1.0.</t>
        <t>This enables each module source file to be valid CDDL 1.0 (if
missing some rule definitions to be imported).</t>
      </section>
      <section anchor="namespacing">
        <name>Namespacing</name>
        <t>A convention for mapping CDDL-internal names to external ones could be
developed, possibly steered by some pragma-like constructs.  External
names would likely be URI-based, with some conventions as they are
used in RDF or Curies.  Internal names might look similar to XML
QNames.  Note that the identifier character set for CDDL deliberately
includes $ and @, which could be used in such a convention.</t>
        <t>Note that this convention should not pollute the actual contents of
the model, where adding a simple prefix to rule names defined
elsewhere may be all that is needed.</t>
      </section>
      <section anchor="cross-universe-references">
        <name>Cross-universe references</name>
        <t>See <xref target="cross"/>.</t>
      </section>
      <section anchor="the-module-directives">
        <name>The "module", "directives"</name>
        <t>A single CDDL file becomes a <em>module</em> by processing the (zero or more)
<em>directives</em> in it.</t>
        <t>The semantics of the module are independent of the module(s) using it,
however, using a module may involve transforming its rule names into a
new namespace.</t>
        <t>Directives look like comments in CDDL 1.0, so they do not interfere
with forward compatibility.</t>
        <t>Lines starting with the prefix <tt>;#</tt> are parsed as directives in CDDL
2.0.</t>
      </section>
      <section anchor="finding-modules">
        <name>Finding modules</name>
        <t>For now, we assume that module names are filenames taken from one of
several sources available to the CDDL 2.0 processor via the environment.
This avoids the need to nail down pathnames or partial URIs into the
CDDL files.</t>
        <t>In the CDDL 2.0 Tool described in <xref target="cddlc-tool"/>, the set of sourced is
determined from an environment value, <tt>CDDL_INCLUDE_PATH</tt>, which is
modeled after usual command-line search paths.
It is a colon-separated list of pathnames to directories, with one
special feature: an empty element points to he tool's own collection.
In the current version, this collection contains 20 fragments of
extracted CDDL from published RFCs, using names such as <tt>rfc9052</tt>.</t>
        <t>(Future versions might augment this with Web extractors and/or ways to
extract CDDL modules from github and from Internet-Drafts.)</t>
        <t>The default <tt>CDDL_INCLUDE_PATH</tt> is  <tt>.:</tt> — i.e., files are found in the current directory and, if not found there, cddlc’s collection.</t>
      </section>
      <section anchor="directives">
        <name>Initial Set of Directives</name>
        <t>Two groups of directives are defined at this point:</t>
        <ul spacing="normal">
          <li>
            <tt>include</tt>, which includes all the rules from a module (which
includes the ones imported/included there, transitively), or
specific explicitly selected rules</li>
          <li>
            <tt>import</tt>, which includes only those rules from the module that are
 referenced, implicitly or explicitly (see below), including the
 rules that are referenced from these rules, transitively.</li>
        </ul>
        <t>The <tt>include</tt> function is more useful for composing a single model
from parts controlled by one author, while the <tt>import</tt> function is
more about treating a module as a library:</t>
        <t>The way an <tt>import</tt> works is shown by this simple example:</t>
        <artwork><![CDATA[
$ cddlc -2tcddl -
start = COSE_Key
;# import rfc9052

]]></artwork>
        <t>This results in the following CDDL 1.0 specification:</t>
        <sourcecode type="cddl"><![CDATA[
start = COSE_Key
COSE_Key = {
  1 => tstr / int,
  ? 2 => bstr,
  ? 3 => tstr / int,
  ? 4 => [+ tstr / int],
  ? 5 => bstr,
  * label => values,
}
label = int / tstr
values = any

]]></sourcecode>
        <t>This is appropriate for using libraries that are well known to the
imported.
However, if it is not acceptable that the library can pollute the
namespace of the importing module, the import directive can specify a
namespace prefix:</t>
        <artwork><![CDATA[
$ cddlc -2tcddl -
start = cose.COSE_Key
;# import rfc9052 as cose

]]></artwork>
        <t>This results in the following CDDL 1.0 specification:</t>
        <sourcecode type="cddl"><![CDATA[
start = cose.COSE_Key
cose.COSE_Key = {
  1 => tstr / int,
  ? 2 => bstr,
  ? 3 => tstr / int,
  ? 4 => [+ tstr / int],
  ? 5 => bstr,
  * cose.label => cose.values,
}
cose.label = int / tstr
cose.values = any

]]></sourcecode>
        <t>Note how the imported names are prefixed with <tt>cose.</tt> as specified in
the import directive, but CDDL prelude (<xref section="D" sectionFormat="of" target="RFC8610"/>) names such as <tt>tstr</tt> and <tt>any</tt> are not.</t>
      </section>
      <section anchor="explicit-selection-of-names">
        <name>Explicit selection of names</name>
        <t>Both <tt>import</tt> and <tt>include</tt> directives can be augmented by an explicit
mentioning of rule names.</t>
        <t>Starting with <tt>include</tt>:</t>
        <artwork><![CDATA[
$ cddlc -2tcddl -
mydata = {* label => values}
;# include label, values from rfc9052

]]></artwork>
        <t>Only exactly the rules mentioned are included:</t>
        <sourcecode type="cddl"><![CDATA[
mydata = {* label => values}
label = int / tstr
values = any

]]></sourcecode>
        <t>The module from which rules are explicitly imported can be namespaced:</t>
        <artwork><![CDATA[
$ cddlc -2tcddl -
mydata = {* label => values}
;# include cose.label, cose.values from rfc9052 as cose

]]></artwork>
        <t>Again, only exactly the rules mentioned are included:</t>
        <sourcecode type="cddl"><![CDATA[
mydata = {* label => values}
cose.label = int / tstr
cose.values = any

]]></sourcecode>
        <t>Both examples would work exactly the same with <tt>import</tt>, as the
included rules do not reference anything else from the included
module.</t>
        <t>An import however also draws in the transitive closure of the rules
referenced:</t>
        <artwork><![CDATA[
$ cddlc -2tcddl -
mydata = {Fritz: cose.empty_or_serialized_map}
;# import cose.empty_or_serialized_map from rfc9052 as cose

]]></artwork>
        <t>The transitive closure of the rules mentioned is included:</t>
        <sourcecode type="cddl"><![CDATA[
mydata = {"Fritz" => cose.empty_or_serialized_map}
cose.empty_or_serialized_map = bstr .cbor cose.header_map / bstr .size 0
cose.header_map = {
  cose.Generic_Headers,
  * cose.label => cose.values,
}
cose.Generic_Headers = (
  ? 1 => int / tstr,
  ? 2 => [+ cose.label],
  ? 3 => tstr / int,
  ? 4 => bstr,
  ? (5 => bstr // 6 => bstr),
  )
cose.label = int / tstr
cose.values = any

]]></sourcecode>
        <t>The <tt>import</tt> statement can also request an alias for an imported name:</t>
        <artwork><![CDATA[
$ cddlc -2tcddl -
mydata = {Fritz: cose.empty_or_serialized_map}
;# import empty_or_serialized_map from rfc9052 as cose

]]></artwork>
        <t>Note how an additional rule provides an alias for
<tt>empty_or_serialized_map</tt> that does not have the namespace prefix:</t>
        <sourcecode type="cddl"><![CDATA[
mydata = {"Fritz" => cose.empty_or_serialized_map}
empty_or_serialized_map = cose.empty_or_serialized_map
cose.empty_or_serialized_map = bstr .cbor cose.header_map / bstr .size 0
cose.header_map = {
  cose.Generic_Headers,
  * cose.label => cose.values,
}
cose.Generic_Headers = (
  ? 1 => int / tstr,
  ? 2 => [+ cose.label],
  ? 3 => tstr / int,
  ? 4 => bstr,
  ? (5 => bstr // 6 => bstr),
  )
cose.label = int / tstr
cose.values = any

]]></sourcecode>
      </section>
      <section anchor="tool-support-for-command-line-control">
        <name>Tool Support for Command-Line Control</name>
        <t>A tool may provide a way to root the module tree from the command line:</t>
        <artwork><![CDATA[
$ cddlc -2tcddl -icose=rfc9052 -scose.COSE_Key

]]></artwork>
        <t>The command line argument <tt>-icose=rfc9052</tt> is a shortcut for</t>
        <artwork><![CDATA[
;# import rfc9052 as cose
]]></artwork>
        <t>Together with the start rule name, <tt>cose.COSE_Key</tt>, this results in the following CDDL 1.0 specification:</t>
        <sourcecode type="cddl"><![CDATA[
$.start.$ = cose.COSE_Key
cose.COSE_Key = {
  1 => tstr / int,
  ? 2 => bstr,
  ? 3 => tstr / int,
  ? 4 => [+ tstr / int],
  ? 5 => bstr,
  * cose.label => cose.values,
}
cose.label = int / tstr
cose.values = any

]]></sourcecode>
        <t>In other words, the module had an empty CDDL file, which therefore was
not provided (no <tt>-</tt> on the command line).</t>
      </section>
      <section anchor="abnf-is-a-lot-like-cddl">
        <name>ABNF is a lot like CDDL</name>
        <t>Many of the constructs defined here for CDDL also could be used with
ABNF specifications.  ABNF would definitely benefit from a standard
way to import snippets from existing RFCs.
Since CDDL contains ABNF support (<xref section="3" sectionFormat="of" target="RFC9165"/>), it would be
natural to make some of the functionality discussed in this section
available for ABNF as well.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>(Insert new registry for application specific literals here, if adopted.)</t>
    </section>
    <section anchor="security-considerations">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="RFC8610"/> apply.</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">
              <organization/>
            </author>
            <author fullname="C. Vigano" initials="C." surname="Vigano">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <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="RFC9165">
          <front>
            <title>Additional Control Operators for the Concise Data Definition Language (CDDL)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker">
              <organization/>
            </author>
            <author fullname="P. Overell" initials="P." surname="Overell">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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="RFC9090">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for Object Identifiers</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="July" year="2021"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR), defined in RFC 8949, is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation.</t>
              <t>This document defines CBOR tags for object identifiers (OIDs) and is the reference document for the IANA registration of the CBOR tags so defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9090"/>
          <seriesInfo name="DOI" value="10.17487/RFC9090"/>
        </reference>
        <reference anchor="useful" target="https://github.com/cbor-wg/cddl/wiki/Useful-CDDL">
          <front>
            <title>Useful CDDL</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="I-D.draft-bormann-cbor-cddl-freezer">
          <front>
            <title>A feature freezer for the Concise Data Definition Language (CDDL)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="24" month="October" year="2022"/>
            <abstract>
              <t>   In defining the Concise Data Definition Language (CDDL), some
   features have turned up that would be nice to have.  In the interest
   of completing this specification in a timely manner, the present
   document was started to collect nice-to-have features that did not
   make it into the first RFC for CDDL, RFC 8610, or the specifications
   exercising its extension points, such as RFC 9165.

   Significant parts of this draft have now moved over to the CDDL 2.0
   project, described in draft-bormann-cbor-cddl-2-draft.  The remaining
   items in this draft are not directly related to the CDDL 2.0 effort.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-cddl-freezer-10"/>
        </reference>
        <reference anchor="cddlc" target="https://github.com/cabo/cddlc">
          <front>
            <title>CDDL conversion utilities</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Err6526" target="https://www.rfc-editor.org/errata/eid6526">
          <front>
            <title>Errata Report 6526</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
          <seriesInfo name="RFC" value="8610"/>
        </reference>
        <reference anchor="Err6527" target="https://www.rfc-editor.org/errata/eid6527">
          <front>
            <title>Errata Report 6527</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
          <seriesInfo name="RFC" value="8610"/>
        </reference>
        <reference anchor="Err6543" target="https://www.rfc-editor.org/errata/eid6543">
          <front>
            <title>Errata Report 6543</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
          <seriesInfo name="RFC" value="8610"/>
        </reference>
        <reference anchor="PSVI" target="https://www.w3.org/XML/2002/05/psvi-use-cases">
          <front>
            <title>Use Cases for XML Schema PSVI API</title>
            <author>
              <organization/>
            </author>
            <date year="2002" month="June" day="24"/>
          </front>
        </reference>
        <reference anchor="RFC9277">
          <front>
            <title>On Stable Storage for Items in Concise Binary Object Representation (CBOR)</title>
            <author fullname="M. Richardson" initials="M." surname="Richardson">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document defines a stored ("file") format for Concise Binary Object Representation (CBOR) data items that is friendly to common systems that recognize file types, such as the Unix file(1) command.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9277"/>
          <seriesInfo name="DOI" value="10.17487/RFC9277"/>
        </reference>
        <reference anchor="RFC8428">
          <front>
            <title>Sensor Measurement Lists (SenML)</title>
            <author fullname="C. Jennings" initials="C." surname="Jennings">
              <organization/>
            </author>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="J. Arkko" initials="J." surname="Arkko">
              <organization/>
            </author>
            <author fullname="A. Keranen" initials="A." surname="Keranen">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This specification defines a format for representing simple sensor measurements and device parameters in Sensor Measurement Lists (SenML).  Representations are defined in JavaScript Object Notation (JSON), Concise Binary Object Representation (CBOR), Extensible Markup Language (XML), and Efficient XML Interchange (EXI), which share the common SenML data model.  A simple sensor, such as a temperature sensor, could use one of these media types in protocols such as HTTP or the Constrained Application Protocol (CoAP) to transport the measurements of the sensor or to be configured.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8428"/>
          <seriesInfo name="DOI" value="10.17487/RFC8428"/>
        </reference>
        <reference anchor="I-D.bormann-cbor-edn-literals">
          <front>
            <title>Application-Oriented Literals in CBOR Extended Diagnostic Notation</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="24" month="October" year="2022"/>
            <abstract>
              <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.

   This document specifies how to add application-oriented extensions to
   the diagnostic notation.  It then defines two such extensions for the
   use of CBOR diagnostic notation with CoRAL and Constrained Resource
   Identifiers (draft-ietf-core-coral, draft-ietf-core-href).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-edn-literals-01"/>
        </reference>
      </references>
    </references>
    <section anchor="fridge">
      <name>Fridge</name>
      <t>This appendix contains sections that may not make it to a 2.0, but
might be part of a followup.</t>
      <section anchor="tagolit">
        <name>Tag-oriented Literals</name>
        <dl spacing="compact">
          <dt><em>Proposal Status</em>:</dt>
          <dd>
            <t>rough idea, porting from EDN</t>
          </dd>
          <dt><em>Compatibility</em>:</dt>
          <dd>
            <t>backward (not forward)</t>
          </dd>
        </dl>
        <t>Some CBOR tags often would be most natural to use in a CDDL spec with a literal
syntax that is tailored to their semantics instead of their
serialization in CBOR.  There is currently no way to add such syntaxes, no
defined extension point either.</t>
        <t>The proposal
"Application-Oriented Literals in CBOR Extended Diagnostic Notation"
<xref target="I-D.bormann-cbor-edn-literals"/> defines application-oriented
literals, e.g., of the form</t>
        <ul empty="true">
          <li>
            <t>dt'2019-07-21T19:53Z'</t>
          </li>
        </ul>
        <t>for datetime items.  With additional considerations for unambiguous
syntax, a similar literal form could be included in CDDL.</t>
        <t>This proposal opens a name space for the prefix that indicates an
application specific literal.
A registry could be provided to make this name space a genuine
extension point.
(This is currently the production <tt>bsqual</tt> in <xref section="B" sectionFormat="of" target="RFC8610"/>.)</t>
        <t>The syntax provided in <xref target="I-D.bormann-cbor-edn-literals"/> does not
enable the use of CDDL types — it has the same flaw that is being
fixed for tag numbers in <xref target="tagnum"/>.</t>
      </section>
      <section anchor="cross">
        <name>Cross-universe references</name>
        <t>Often, a CDDL specification needs to import from specifications in a
different language or platform.</t>
        <section anchor="iana-references">
          <name>IANA references</name>
          <t>In many cases, CDDL specifications make use of values that are
specified in IANA registries.  The <tt>.iana</tt> control operator can be
used to reference such a set of values.</t>
          <t>The reference needs to be able to point to a draft, the registry of
which has not been established yet, as well as to an established IANA registry.</t>
          <t>An example of such a usage might be:</t>
          <sourcecode type="CDDL"><![CDATA[
cose-algorithm = int .iana ["cose", "algorithms", "value"]
]]></sourcecode>
          <t>Unfortunately, the vocabulary employed in IANA registries has not been
designed for machine references.  In this case, the potential values
would come from applying the XPath expression</t>
          <sourcecode type="xpath"><![CDATA[
//iana:registry[@id='algorithms']/iana:record/iana:value
]]></sourcecode>
          <t>to <tt>https://www.iana.org/assignments/cose/cose.xml</tt>, plus some
filtering on the records returned that only leaves actual allocations.
Additional functionality may be needed for filtering with respect to other
columns of the registry record, e.g., <tt>&lt;capabilities&gt;</tt> in the case of
this example.</t>
        </section>
      </section>
    </section>
    <section anchor="cddlc-tool">
      <name>A CDDL 2.0 Tool</name>
      <t>This appendix is for information only.</t>
      <t>A rough CDDL 2.0 tool is available <xref target="cddlc"/>.  It can process CDDL 2.0
models into CDDL 1.0 models that can then be processed by the CDDL
tool described in <xref section="F" sectionFormat="of" target="RFC8610"/>.</t>
      <t>A typical command line involving both tools might be:</t>
      <artwork><![CDATA[
cddlc -2 -tcddl mytestfile.cddl | cddl - gp 10
]]></artwork>
      <t>Install on a system with a modern Ruby (Ruby version ≥ 3.0) via:</t>
      <artwork><![CDATA[
gem install cddlc
]]></artwork>
      <t>The present document assumes the use of <tt>cddlc</tt> version 0.1.5.</t>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>TBD</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
ChqziNvzSQ4JSaYHt7OJRH/W/LXZpb1s69vfi3F40Yp7+FvNQs2bTT5qDGsx
E0c7c+5hqoPWhh8o1PC5kjFPM+bja4IpdqrUTQSWwjRjlibhkxbNWt0RFxqk
0rxx1REAyK43j0AV95f4krTkU99H1Erz8OO32z5YP+7Pq7QUT10p24YtdNWT
qjLErYV1+5JaSCzoTh/U0QOBdtzy4KvZb+XkxZpTecQ115TBJTO0O5/C93q+
psA6/ooufM3Nz+fk6CTrhkV2sMKqcxQl1rbJ1R8F4adqo8qWMmjNqiiWbZjO
ir0ckiuZj/5iHNVs32tKRAtbV1XC4Yy8157rHP9rI+/nyiGzp69cuCQMnzlr
QmaRinbc5R0eSb+oypcS6F0EWvkfWInsMHJ8iTW1F+Qfc5lcFKRSL8kunpYq
epQHq0px1p6LDpPMlnml+8Ujq92en0DYZ3lcfH8gVONg5X2Wv8dh4iBB88H7
RbC8bOj3j437KLlPPg14g+hSDvkIzTsMd6dSwbeC/lGAH7Fe1wOcKJV55iaI
TM43t9xNLgYN1dXbYm746pdynOD9c75rf6qduPIYOnDZ4LAJq5m2YcLIPNXT
vvuUMasNXreyYXprS+/7Lxu4u/GzheWk6bxalHU4KKxO9qHOa7hznL7HgRyL
DdK2ffvrs+Yv4crK/gac745d8ZENS31aubEPNb5lmbG4alFmxIfjkxW+gHXd
tfrF/Hw7K3/suf8Xg7+BGCC5dewbGJAJd9klZBTxLgNEgDd4Rcjmcu/Ugssu
7jwtR3JISGdZ0YqQ0dhYGQyXwOJ69W0SFAPgR57h+7btMzfUcXMyXR3lGrcn
GLueIApei7Dkjcoct/v8DjuuD7tKqNZHhFkmes6d9ZCNe/702S+OEj4b8BqD
z/4PRgovUin6wi2JbK/JIvMgqlONVT7WJ2MKf7oYxVfF1RP/bopumunxj3/8
97E/l9PkCJTOpCmVsw7oeEHqndPdt/v5X6G32Bn1us5V5be4rFJVjdhatKtC
4BZZtl1qRm8Gropr5gp+UiNL6YvvIKr69ZQTJ8eiVcWUh1UVVyRDB+o4hovm
34UjSVUBwQl3o0Frp10c7iFq9929FEUXJTLzaPjA2Wsu1jlk+CRPgLKDdu+V
8MdKkKGRBVT7qLk/iMyHFIkJDl8dQrOgzyB3pwlvauHpvkhJxaNdZUXyNKPd
5muxwje968SfoNCSB4ynZAqzJfITOBZJOy9zwBx+al23uNSTbnwIyKjfgABg
1u49FGj0UYqMYDTzjUm+Z92HrBVtHKp8W6/r8mKMx4UUrLm1ggJgJXlraakt
pJlRNEq5HHz6zOet5z0/1SNVd0WhJixxKbPe06NXP+v4Op/45heB8SF1qcxX
7eR8QK/BdXxutzqaDAL7ZiFHY+U6AHw5E+crs1zKPgXeeNKoBKK5Ez1uwsBx
rrzXULVIAi55cYK0BzVPd3t7hvYDTiz4M5to9lReH1x9OYiJoa6q98cIYlXn
sGbb/utr5HKQcCmdX81yFAezlFBDvP3KtUx21MXFb/C+rNZLZExUvazAEkMK
VLYpJRV3VIe7fAuEl2uaT6nPdVTcHQ23H/SH9/qj7ZPtBwd7O7+/qxS/L4I8
ZDQYcuMkNBk3PTXczStCwtnEuh3H0awn5Wsu1/tzsNz8FdadhC4IrY/Sy2EW
z6AZSVLVxCU+qT9c5Svi7a56aXq9VWOg671SLxUYlXnxapD1W2NNPkleEqbV
tXcQdX12tWYl1wrsj1eN5bDQWIqJVT7rcav33JePHLc3X8b0U9jA+fBKWlTk
IJy0QrNc4X0BVqpO7iUhPjkwTYJVJVsTg4YTSd8xmhsvWWBA3Asx0AhwezsB
KSPpF/hYbek11EKvKfd1H3nVFOZMIauhK31c0Bkqiqe8aFF3NKPqmwQF2Myd
g2YL1Gh2gF+Cd/LJybLeDQBY9wYWQaDzbKq6TzOP6SdnhpLOFQ41B3GQBuNr
781yeSzl+/7rbIvrK3F1ZVnS6ZR6UOucuKueixKS8yeoQ4qbVbF4NnWnDkB0
eYEFaWMKdQNfXV2botlVx1O1RzT3uJaEj39PAWrgAnlpgX1vu8TF/UFcL/iH
/SCZkV4q5gvnOzKG9Hcd3EQjSXXf4hsjoPPOnW/7GkcCijLlXh3Z4FkWBhP0
p67hRCbZ+kZytHatqm5U6ZsK5wgiasbgriPfEW9dEaJ+kYPQRIkh41eYif/m
zy1g9LdvAk7KSUsfuUaChXNU4tXWFrZ84BH53Rdx9Ohuve277/z9kNxl+cxr
OiQQXcbNN95hAL/zLrDYFtfSt4BN/jM4XyQUniyTUt4bR0KNDkTOQqeORbCO
deeUuKYauLdiJCbgKq+0KaEr1ru06rA2AW330DUeSbMRY7hekQ06oYQEh1lV
WkHDLCkXadW+U7GsAOZt1vjXYbAMJu4lj5+PqwK5nPRQTC/HjuDNK50cpIrq
5o2rDuBVd829Dq15AgX44GnFPaom52g4bnayuDYR0o3ER5Jacs0s1VPK9WVz
J0oVG7YavvmYmEmdUQqrF034HhVV3NCf0j7OVB/GO9T+pW6tuFlam/jlEcgh
Y0Z7RXKVD9B1X0L0BQ7EFvzaKf7+r/Iap76eLfX20Md7pDQStBpCk61tdRJK
uo/zVL8taStd/uuPef/4b/+tdwbDDfT70No4pDjj5kyZS17YefO7+aQdyTaN
HZ/zCsfV7MPB9mAPmAirzmoWlOtnEC8OnKUz0aNOmnUuadHHR+p/ASTbiZiK
VwAA

-->

</rfc>
