<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.39 (Ruby 3.2.2) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bormann-cbor-cddl-freezer-12" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.0 -->
  <front>
    <title abbrev="CDDL feature freezer">A feature freezer for the Concise Data Definition Language (CDDL)</title>
    <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-cddl-freezer-12"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2023" month="September" day="02"/>
    <keyword>CDDL evolution</keyword>
    <abstract>
      <?line 59?>

<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.</t>
      <t>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>
  <middle>
    <?line 73?>

<section anchor="intro">
      <name>Introduction</name>
      <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 <xref target="RFC8610"/>, or the specifications exercising its extension points, such
as <xref target="RFC9165"/>.</t>
      <t>Significant parts of this draft have now moved over to <xref target="I-D.bormann-cbor-cddl-2-draft"/>, which in turn references <xref target="I-D.ietf-cbor-update-8610-grammar"/>, <xref target="I-D.ietf-cbor-cddl-more-control"/>, <xref target="I-D.ietf-cbor-cddl-modules"/>.
The remaining items in Sections <xref format="counter" target="lit"/> to <xref format="counter" target="controls"/> of this draft are not directly related to the CDDL
2.0 effort.
<xref target="co-occ"/> might turn into a part of CDDL 2.5.</t>
      <t>The remaining sections are not proposing to change CDDL, but are
ancillary developments:
<xref target="altrep"/> is more interesting for the ecosystem of tools around CDDL.
<xref target="alttarget"/> examines extending the area of application of CDDL beyond
CBOR and JSON.</t>
      <t>There is always a danger for a document like this to become a shopping
list; the intention is to develop this document further based on the
rapidly growing real-world experience with the first CDDL standard.
Some sections are labeled WONTFIX, reflecting an assumption that the
specific extension objective will not be addressed or will be
addressed in a different way.</t>
    </section>
    <section anchor="base-language-features">
      <name>Base language features</name>
      <section anchor="cuts">
        <name>Cuts</name>
        <t><xref section="3.5.4" sectionFormat="of" target="RFC8610"/> alludes to a new language feature, <em>cuts</em>,
and defines it in a fashion that is rather focused on a single
application in the context of maps and generating better diagnostic
information about them.</t>
        <t>The present document is expected to grow a more complete definition of
cuts, with the expectation that it will be upwards-compatible to the
existing one in <xref target="RFC8610"/>, before this possibly becomes a mainline
language feature in a future version of CDDL.</t>
      </section>
    </section>
    <section anchor="lit">
      <name>Literal syntax</name>
      <t>Literal syntax is also discussed in <xref section="A.1" sectionFormat="of" target="I-D.bormann-cbor-cddl-2-draft"/>,
which might provide another approach to <xref target="relit"/>.
This appendix is in turn based on ideas in <xref target="I-D.ietf-cbor-edn-literals"/>.</t>
      <section anchor="relit">
        <name>Regular Expression Literals (WONTFIX)</name>
        <t>Regular expressions currently are notated as strings in CDDL, with all
the string escaping rules applied once.  It might be convenient to
have a more conventional literal format for regular expressions,
possibly also providing a place to add modifiers such as <tt>/i</tt>.
This might also imply <tt>text .regexp ...</tt>, which with the proposal in
<xref target="pcre"/> then raises the question of how to indicate the regular
expression flavor.</t>
        <t>(With the support for ABNF in <xref target="RFC9165"/>, the need for this is
reduced.
Also, the proliferation of regular expression flavors is hard to
address with a single syntax.)</t>
      </section>
    </section>
    <section anchor="controls">
      <name>Controls</name>
      <t>Controls are the main extension point of the CDDL language.
It is relatively painless to add controls to CDDL; this mechanism has
been exercised in <xref target="RFC9090"/> for SDNV <xref target="RFC6256"/> and ASN.1 OID related byte
strings, and in <xref target="RFC9165"/> for more generally applicable controls,
including an interface to ABNF <xref target="RFC5234"/> <xref target="RFC7405"/>.
A more recent collection of additions that is ready for
standardization is specified in <xref target="I-D.ietf-cbor-cddl-more-control"/>.</t>
      <t>Several further candidates have been identified that aren't quite ready for
adoption, of which a few shall be listed here.</t>
      <section anchor="pcre">
        <name>Control operator .pcre</name>
        <t>There are many variants of regular expression languages.
<xref section="3.8.3" sectionFormat="of" target="RFC8610"/> defines the .regexp control, which is
based on <xref target="XSD2">XSD</xref> regular expressions.
As discussed in that section, the most desirable form of regular
expressions in many cases is the family called "Perl-Compatible
Regular Expressions" (<xref target="PCRE"/>); however, no formally stable
definition of PCRE is available at this time for normatively
referencing it from an RFC.</t>
        <t>The present document defines the control operator .pcre, which is
similar to .regexp, but uses PCRE2 regular expressions.
More specifically, a <tt>.pcre</tt> control indicates that the text string
given as a target needs to match the PCRE regular expression given as
a value in the control type, where that regular expression is anchored
on both sides.
(If anchoring is not desired for a side, <tt>.*</tt> needs to be inserted
there.)</t>
        <t>Similarly, <tt>.es2018re</tt> could be defined for ECMAscript 2018 regular
expressions with anchors added.</t>
        <t>See also <xref target="I-D.draft-ietf-jsonpath-iregexp"/>, which could be specifically called out via
<tt>.iregexp</tt> (even though <tt>.regexp</tt> as per <xref section="3.8.3" sectionFormat="of" target="RFC8610"/>
would also have the same semantics, except for a wider range of regexps).</t>
      </section>
      <section anchor="endianness-in-bits">
        <name>Endianness in .bits</name>
        <t>How useful would it be to have another variant of .bits that counts
bits like in RFC box notation?  (Or at least per-byte?  32-bit words
don't always perfectly mesh with byte strings.)</t>
      </section>
      <section anchor="bitfield-control">
        <name>.bitfield control</name>
        <t>Provide a way to specify bitfields in byte strings and uints to a
higher level of detail than is possible with .bits.  Strawman:</t>
        <sourcecode type="CDDL"><![CDATA[
Field = uint .bitfield Fieldbits

Fieldbits = [
  flag1: [1, bool],
  val: [4, Vals],
  flag2: [1, bool],
]

Vals = &(A: 0, B: 1, C: 2, D: 3)
]]></sourcecode>
        <t>Note that the group within the controlling array can have choices,
enabling the whole power of a context-free grammar (but not much more).</t>
      </section>
    </section>
    <section anchor="co-occ">
      <name>Co-occurrence Constraints</name>
      <t>While there are no co-occurrence constraints in CDDL, many actual use
cases can be addressed by using the fact that a group is a grammar:</t>
      <sourcecode type="CDDL"><![CDATA[
postal = {
  ( street: text,
    housenumber: text) //
  ( pobox: text .regexp "[0-9]+" )
}
]]></sourcecode>
      <t>However, constraints that are not just structural/tree-based but are
predicates combining parts of the structure cannot be expressed:</t>
      <sourcecode type="CDDLx"><![CDATA[
session = {
  timeout: uint,
}

other-session = {
  timeout: uint  .lt [somehow refer to session.timeout],
}
]]></sourcecode>
      <t>As a minimum, this requires the ability to reach over to other parts
of the tree in a control.  Compare JSON Pointer <xref target="RFC6901"/> and JSON
Relative Pointer <xref target="I-D.handrews-relative-json-pointer"/>.
<contact fullname="Stefan Gössner"/>'s jsonpath is a JSON variant of XPath that is now
undergoing standardization <xref target="jsonpath"/>.</t>
      <t>More generally, something akin to what Schematron is to Relax-NG may
be needed.</t>
    </section>
    <section anchor="altrep">
      <name>Alternative Representations</name>
      <t>For CDDL, alternative representations e.g. in JSON (and thus in YAML)
could be defined, similar to the way YANG defines an XML-based
serialization called YIN in <xref section="11" sectionFormat="of" target="RFC6020"/>.
One proposal for such a syntax is provided by the <tt>cddlc</tt> tool
<xref target="cddlc"/>, which is reproduced below.
This could be written up in more detail and agreed upon.
(Since cddlc version 0.1.8, the "mem"-labeled array includes
information about the presence of a cut, see <xref section="3.5.4" sectionFormat="of" target="RFC8610"/>.)</t>
      <sourcecode type="cddl"><![CDATA[
cddlj = ["cddl", +rule]
rule = ["=" / "/=" / "//=", namep, type]
namep = ["name", id] / ["gen", id, +id]
id = text .regexp "[A-Za-z@_$](([-.])*[A-Za-z0-9@_$])*"
op = ".." / "..." /
  text .regexp "\\.[A-Za-z@_$](([-.])*[A-Za-z0-9@_$])*"
namea = ["name", id] / ["gen", id, +type]
type = value / namea / ["op", op, type, type] /
  ["map", group] / ["ary", group] / ["tcho", 2*type] /
  ["unwrap", namea] / ["enum", group / namea] /
  ["prim", ?((6, type/uint, ?type) // (0..7, ?uint))]
group = ["mem", bool, null/type, type] /
  ["rep", uint, uint/false, group] /
  ["seq", 2*group] / ["gcho", 2*group]
value = ["number"/"text"/"bytes", text]
]]></sourcecode>
      <t>The "prim"-labeled array includes support for non-literal tag numbers
(<xref section="3.2" sectionFormat="of" target="I-D.ietf-cbor-update-8610-grammar"/>).</t>
      <t>More recently, a variant of this format has been used for easier
processing.  It collects rules in a map (JSON object) and binds
generic parameters to argument positions.  This variant will be
described in a further revision of this document.</t>
    </section>
    <section anchor="alttarget">
      <name>Other target formats</name>
      <t>CDDL has originally been designed to describe CBOR and JSON data.
One format of interest is comma-separated values, CSV <xref target="RFC4180"/>.
<xref target="I-D.bormann-cbor-cddl-csv"/> is a draft for using CDDL models with CSV.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document makes no requests of IANA.</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"/>
            <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="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>
      </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"/>
            <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="RFC9090">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for Object Identifiers</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <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="RFC6256">
          <front>
            <title>Using Self-Delimiting Numeric Values in Protocols</title>
            <author fullname="W. Eddy" initials="W." surname="Eddy"/>
            <author fullname="E. Davies" initials="E." surname="Davies"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Self-Delimiting Numeric Values (SDNVs) have recently been introduced as a field type in proposed Delay-Tolerant Networking protocols. SDNVs encode an arbitrary-length non-negative integer or arbitrary- length bitstring with minimum overhead. They are intended to provide protocol flexibility without sacrificing economy and to assist in future-proofing protocols under development. This document describes formats and algorithms for SDNV encoding and decoding, along with notes on implementation and usage. This document is a product of the Delay-Tolerant Networking Research Group and has been reviewed by that group. No objections to its publication as an RFC were raised. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6256"/>
          <seriesInfo name="DOI" value="10.17487/RFC6256"/>
        </reference>
        <reference anchor="XSD2" target="https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/">
          <front>
            <title>XML Schema Part 2: Datatypes Second Edition</title>
            <author fullname="Ashok Malhotra" role="editor"/>
            <author fullname="Paul V. Biron" role="editor"/>
            <date day="28" month="October" year="2004"/>
          </front>
          <seriesInfo name="W3C REC" value="REC-xmlschema-2-20041028"/>
          <seriesInfo name="W3C" value="REC-xmlschema-2-20041028"/>
        </reference>
        <reference anchor="PCRE" target="http://pcre.org/current/doc/html/">
          <front>
            <title>Perl-compatible Regular Expressions (revised API: PCRE2)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="I-D.draft-ietf-jsonpath-iregexp">
          <front>
            <title>I-Regexp: An Interoperable Regexp Format</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Tim Bray" initials="T." surname="Bray">
              <organization>Textuality</organization>
            </author>
            <date day="29" month="June" year="2023"/>
            <abstract>
              <t>   This document specifies I-Regexp, a flavor of regular expressions
   that is limited in scope with the goal of interoperation across many
   different regular-expression libraries.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-jsonpath-iregexp-08"/>
        </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="jsonpath" target="https://jsonpath.com">
          <front>
            <title>jsonpath online evaluator</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="I-D.bormann-cbor-cddl-2-draft">
          <front>
            <title>CDDL 2.0 -- a draft plan</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="27" month="August" year="2023"/>
            <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.

   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.

   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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-cddl-2-draft-03"/>
        </reference>
        <reference anchor="I-D.ietf-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="23" month="July" year="2023"/>
            <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
   text representations of epoch-based date/times and of Constrained
   Resource Identifiers (draft-ietf-core-href).

   To facilitate tool interoperation, this document also specifies a
   formal ABNF definition for extended diagnostic notation (EDN) that
   accommodates application-oriented literals.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-02"/>
        </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="I-D.ietf-cbor-cddl-more-control">
          <front>
            <title>More Control Operators for CDDL</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="14" month="June" year="2023"/>
            <abstract>
              <t>   The Concise Data Definition Language (CDDL), standardized in RFC
   8610, provides "control operators" as its main language extension
   point.  RFCs have added to this extension point both in an
   application-specific and a more general way.

   The present document defines a number of additional generally
   application control operators for text conversion (Bytes, Integers,
   JSON), operations on text, and deterministic encoding.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-cddl-more-control-00"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-cddl-modules">
          <front>
            <title>CDDL Module Structure</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 defines a backward- and forward-compatible way
   to add a module structure to CDDL.


   // 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 the functionality that
   // is ready for further WG work.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-cddl-modules-00"/>
        </reference>
        <reference anchor="I-D.bormann-cbor-cddl-csv">
          <front>
            <title>Using CDDL for CSVs</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="23" month="June" year="2023"/>
            <abstract>
              <t>   The Concise Data Definition Language (CDDL), standardized in RFC
   8610, is defined to provide data models for data shaped like JSON or
   CBOR.

   Another representation format that is quote popular is the CSV
   (Comma-Separated Values) file as defined by RFC 4180.

   The present document shows a way how to use CDDL to provide a data
   model for CSV files.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-cddl-csv-03"/>
        </reference>
        <reference anchor="RFC6901">
          <front>
            <title>JavaScript Object Notation (JSON) Pointer</title>
            <author fullname="P. Bryan" initials="P." role="editor" surname="Bryan"/>
            <author fullname="K. Zyp" initials="K." surname="Zyp"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>JSON Pointer defines a string syntax for identifying a specific value within a JavaScript Object Notation (JSON) document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6901"/>
          <seriesInfo name="DOI" value="10.17487/RFC6901"/>
        </reference>
        <reference anchor="I-D.handrews-relative-json-pointer">
          <front>
            <title>Relative JSON Pointers</title>
            <author fullname="Geraint Luff" initials="G." surname="Luff">
         </author>
            <author fullname="Henry Andrews" initials="H." surname="Andrews">
         </author>
            <date day="18" month="September" year="2019"/>
            <abstract>
              <t>   JSON Pointer is a syntax for specifying locations in a JSON document,
   starting from the document root.  This document defines an extension
   to the JSON Pointer syntax, allowing relative locations from within
   the document.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-handrews-relative-json-pointer-02"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC4180">
          <front>
            <title>Common Format and MIME Type for Comma-Separated Values (CSV) Files</title>
            <author fullname="Y. Shafranovich" initials="Y." surname="Shafranovich"/>
            <date month="October" year="2005"/>
            <abstract>
              <t>This RFC documents the format used for Comma-Separated Values (CSV) files and registers the associated MIME type "text/csv". This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4180"/>
          <seriesInfo name="DOI" value="10.17487/RFC4180"/>
        </reference>
      </references>
    </references>
    <?line 310?>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Before <xref target="RFC8610"/> was finally published, many people have asked for CDDL to be completed, soon.
These are usually also the people who have brought up observations
that led to the proposals discussed here.
Sean Leonard has campaigned for a regexp literal syntax.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1a63LbSHb+30/RRaey5AwBUZTstTnrzMqSPVHKt7Imc1mv
atQEmmSPQTS2G5DEYSlPk2fIC+yL5TunGxCoS3Y3+RtV2cKlcfrcz3dOK0kS
cTmTB0LUpi70TP6LkPJILrSqG6flwmn9m3ZyYZ2sV1oe2zIzXssTVSt5ohem
NLWxpXyrymWjlloOj09O3o6Ems+dBl26u0tM5DYr1Rp75U4t6mRu3VqVZZLh
IsnyvEjiwmR/KnJVY+F0Mj1IJi+SyVR80Zsr6/JIWl/aoiEORKbqmTTlwgpf
O63WM3n6+vs3QlRmJj/XNhtLbx3eLDyuNutwkdl1pbKaL9a6rP25EKqpV9bN
oIYE/yRoemyWyleBTX4W2D9Wzte63Hlj3XIm/700l9p5U//1P2v5ymmQlt//
6ZQXEHcarH60vl6obCUPDiaHhxN+l5l6M4sfhAc2xz4nyfT5wdMX8UlT1g6r
vtO06YYfVitbYt3Xhy+Sw+l+Mt1/njw7eDHd55d6rUwxk5ma2z/Wv5kUHAoh
SuK5Bpsk6Kc3x8+f7U+wCNoP9y/2nz3FvcVmttgXgjS7+8XT6cHhTKp5uQj3
vz+cPA33Saa8jmQmL0DWmjzcPps+fTaTPi8vcf/T2cl0Jn88OE4/vT5OrteF
z1ZgNpkm08nkcH8yfY5FH48/vZ6xHD3/pJ+P2hUJ268280LLT3rZFMrJ19eV
097DJbwcwgfhrbk8+ng6Y1LTUaCl3JKMMFjVdTXb26syp0kxe1njHPxgDy66
t6rXxd4A60+TkzS4qtH1IvnV2xK7rhLj9FJfV3C7cIGlpMBsh192U+iRHQKR
Am8tEDPa7zBCfHgwsjT1qpmnkGuPDLbH9LCy3XP24FftW/quv3f7XNqyMKVG
tKiiUbV1Uaj7kTdNWNDgCe1dXM3C81KdlwmE0E4ViI3+3b2lTUURnJB7JUun
1mvlZjJe3FvMm66t00l0vJns392nHj/Im0J7WssX4skD0rlF1q3WRViM3w+u
DbYum/UcNpvJePGozjJ/GfWFK4RWkiQIA8Q5MosQp6XMOU+Wy38kg1K6Wus2
dXqxUpda4rKENzcVKKlaXtmmyOVcy9JkeGklLUrBZsk7mRI20b6WdiEoUApd
ByaMl77SmVkYJE3a25RSwWfWuthIEk67MVOgSEI0SERDQ+lRXCl8Cu+rwQX2
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

-->

</rfc>
