rfc9165.original.xml | rfc9165.xml | |||
---|---|---|---|---|
<?xml version='1.0' encoding='utf-8'?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc [ | <!DOCTYPE rfc [ | |||
<!ENTITY nbsp " "> | <!ENTITY nbsp " "> | |||
<!ENTITY zwsp "​"> | <!ENTITY zwsp "​"> | |||
<!ENTITY nbhy "‑"> | <!ENTITY nbhy "‑"> | |||
<!ENTITY wj "⁠"> | <!ENTITY wj "⁠"> | |||
]> | ]> | |||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | |||
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.12 --> | -ietf-cbor-cddl-control-07" number="9165" obsoletes="" updates="" submissionType | |||
<?rfc toc="yes"?> | ="IETF" category="std" consensus="true" xml:lang="en" tocInclude="true" sortRefs | |||
<?rfc sortrefs="yes"?> | ="true" symRefs="true" version="3"> | |||
<?rfc symrefs="yes"?> | ||||
<?rfc compact="yes"?> | <!-- xml2rfc v2v3 conversion 3.9.1 --> | |||
<?rfc comments="yes"?> | ||||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | ||||
-ietf-cbor-cddl-control-07" category="std" consensus="true" obsoletes="" updates | ||||
="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRef | ||||
s="true" version="3"> | ||||
<!-- xml2rfc v2v3 conversion 3.9.1 --> | ||||
<front> | <front> | |||
<title abbrev="CDDL control operators">Additional Control Operators for CDDL | <title abbrev="CDDL Control Operators">Additional Control Operators for the | |||
</title> | Concise Data Definition Language (CDDL)</title> | |||
<seriesInfo name="Internet-Draft" value="draft-ietf-cbor-cddl-control-07"/> | <seriesInfo name="RFC" value="9165"/> | |||
<author initials="C." surname="Bormann" fullname="Carsten Bormann"> | <author initials="C." surname="Bormann" fullname="Carsten Bormann"> | |||
<organization>Universität Bremen TZI</organization> | <organization>Universität Bremen TZI</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Postfach 330440</street> | <street>Postfach 330440</street> | |||
<city>Bremen</city> | <city>Bremen</city> | |||
<code>D-28359</code> | <code>D-28359</code> | |||
<country>Germany</country> | <country>Germany</country> | |||
</postal> | </postal> | |||
<phone>+49-421-218-63921</phone> | <phone>+49-421-218-63921</phone> | |||
<email>cabo@tzi.org</email> | <email>cabo@tzi.org</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date year="2021" month="October" day="22"/> | <date year="2021" month="December"/> | |||
<keyword>Internet-Draft</keyword> | ||||
<keyword>binary format</keyword> | ||||
<keyword>data interchange format</keyword> | ||||
<keyword>description language</keyword> | ||||
<keyword>schema language</keyword> | ||||
<keyword>tree grammar</keyword> | ||||
<keyword>ABNF</keyword> | ||||
<keyword>Augmented BNF</keyword> | ||||
<keyword>feature indication</keyword> | ||||
<abstract> | <abstract> | |||
<t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, | <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, | |||
provides "control operators" as its main language extension point.</t> | provides "control operators" as its main language extension point.</t> | |||
<t>The present document defines a number of control operators that were | <t>The present document defines a number of control operators that were | |||
not yet ready at the time RFC 8610 was completed: | not yet ready at the time RFC 8610 was completed: | |||
<tt>.plus</tt>, <tt>.cat</tt> and <tt>.det</tt> for the construction of constant | <tt>.plus</tt>, <tt>.cat</tt>, and <tt>.det</tt> for the construction of constan | |||
s, | ts; | |||
<tt>.abnf</tt>/<tt>.abnfb</tt> for including ABNF (RFC 5234/RFC 7405) in CDDL sp | <tt>.abnf</tt>/<tt>.abnfb</tt> for including ABNF (RFC 5234 and RFC 7405) in CDD | |||
ecifications, and | L specifications; and | |||
<tt>.feature</tt> for indicating the use of a non-basic feature in an instance.< /t> | <tt>.feature</tt> for indicating the use of a non-basic feature in an instance.< /t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="intro" numbered="true" toc="default"> | <section anchor="intro" numbered="true" toc="default"> | |||
<name>Introduction</name> | <name>Introduction</name> | |||
<t>The Concise Data Definition Language (CDDL), standardized in <xref targ et="RFC8610" format="default"/>, | <t>The Concise Data Definition Language (CDDL), standardized in <xref targ et="RFC8610" format="default"/>, | |||
provides "control operators" as its main language extension point | provides "control operators" as its main language extension point | |||
(<xref section="3.8" sectionFormat="of" target="RFC8610" format="default"/>).</t > | (<xref section="3.8" sectionFormat="of" target="RFC8610" format="default"/>).</t > | |||
<t>The present document defines a number of control operators that were | <t>The present document defines a number of control operators that were | |||
not yet ready at the time RFC 8610 was completed:</t> | not yet ready at the time <xref target="RFC8610"/> was completed:</t> | |||
<table anchor="tbl-new" align="center"> | <table anchor="tbl-new" align="center"> | |||
<name>New control operators in this document</name> | <name>New Control Operators in this Document</name> | |||
<thead> | <thead> | |||
<tr> | <tr> | |||
<th align="left">Name</th> | <th align="left">Name</th> | |||
<th align="left">Purpose</th> | <th align="left">Purpose</th> | |||
</tr> | </tr> | |||
</thead> | </thead> | |||
<tbody> | <tbody> | |||
<tr> | <tr> | |||
<td align="left">.plus</td> | <td align="left">.plus</td> | |||
<td align="left">Numeric addition</td> | <td align="left">Numeric addition</td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align="left">.cat</td> | <td align="left">.cat</td> | |||
<td align="left">String Concatenation</td> | <td align="left">String concatenation</td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align="left">.det</td> | <td align="left">.det</td> | |||
<td align="left">String Concatenation, pre-dedenting</td> | <td align="left">String concatenation, pre-dedenting</td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align="left">.abnf</td> | <td align="left">.abnf</td> | |||
<td align="left">ABNF in CDDL (text strings)</td> | <td align="left">ABNF in CDDL (text strings)</td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align="left">.abnfb</td> | <td align="left">.abnfb</td> | |||
<td align="left">ABNF in CDDL (byte strings)</td> | <td align="left">ABNF in CDDL (byte strings)</td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align="left">.feature</td> | <td align="left">.feature</td> | |||
<td align="left">Indicate name of feature used (extension point)</td > | <td align="left">Indicates name of feature used (extension point)</t d> | |||
</tr> | </tr> | |||
</tbody> | </tbody> | |||
</table> | </table> | |||
<section anchor="terminology" numbered="true" toc="default"> | <section anchor="terminology" numbered="true" toc="default"> | |||
<name>Terminology</name> | <name>Terminology</name> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | <t> | |||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
"MAY", and "OPTIONAL" in this document are to be interpreted as | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
described in BCP 14 <xref target="RFC2119" format="default"/> <xref target= | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
"RFC8174" format="default"/> when, and only when, they | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
appear in all capitals, as shown here.</t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
be interpreted as | ||||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
<t>This specification uses terminology from <xref target="RFC8610" forma t="default"/>. | <t>This specification uses terminology from <xref target="RFC8610" forma t="default"/>. | |||
In particular, with respect to control operators, "target" refers to | In particular, with respect to control operators, "target" refers to | |||
the left-hand side operand, and "controller" to the right-hand side operand. | the left-hand side operand and "controller" to the right-hand side operand. | |||
"Tool" refers to tools along the lines of that described in <xref section="F" se ctionFormat="of" target="RFC8610" format="default"/>. | "Tool" refers to tools along the lines of that described in <xref section="F" se ctionFormat="of" target="RFC8610" format="default"/>. | |||
Note also that the data model underlying CDDL provides for text | Note also that the data model underlying CDDL provides for text | |||
strings as well as byte strings as two separate types, which are | strings as well as byte strings as two separate types, which are | |||
then collectively referred to as "strings".</t> | then collectively referred to as "strings".</t> | |||
<t>The term ABNF in this specification stands for the combination of | <t>The term "ABNF" in this specification stands for the combination of | |||
<xref target="RFC5234" format="default"/> and <xref target="RFC7405" format="def | <xref target="RFC5234" format="default"/> and <xref target="RFC7405" format="def | |||
ault"/>, i.e., the ABNF control operators defined by | ault"/>; i.e., the ABNF control operators defined by | |||
this document allow use of the case-sensitive extensions defined in | this document allow use of the case-sensitive extensions defined in | |||
<xref target="RFC7405" format="default"/>.</t> | <xref target="RFC7405" format="default"/>.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="computed-literals" numbered="true" toc="default"> | <section anchor="computed-literals" numbered="true" toc="default"> | |||
<name>Computed Literals</name> | <name>Computed Literals</name> | |||
<t>CDDL as defined in <xref target="RFC8610" format="default"/> does not h ave any mechanisms to compute | <t>CDDL as defined in <xref target="RFC8610" format="default"/> does not h ave any mechanisms to compute | |||
literals. To cover a large part of the use cases, this specification adds three control | literals. To cover a large part of the use cases, this specification adds three control | |||
operators: <tt>.plus</tt> for numeric addition, <tt>.cat</tt> for string | operators: <tt>.plus</tt> for numeric addition, <tt>.cat</tt> for string | |||
concatenation, and <tt>.det</tt> for string concatenation with dedenting of | concatenation, and <tt>.det</tt> for string concatenation with dedenting of | |||
both sides (target and controller).</t> | both sides (target and controller).</t> | |||
<t>For these operators, as with all control operators, targets and | <t>For these operators, as with all control operators, targets and | |||
controllers are types. The resulting type is therefore formally a | controllers are types. The resulting type is therefore formally a | |||
function of the elements of the cross-product of the two types. | function of the elements of the cross-product of the two types. | |||
Not all tools may be able to work with non-unique targets or | Not all tools may be able to work with non-unique targets or | |||
controllers.</t> | controllers.</t> | |||
<section anchor="numeric-addition" numbered="true" toc="default"> | <section anchor="numeric-addition" numbered="true" toc="default"> | |||
<name>Numeric Addition</name> | <name>Numeric Addition</name> | |||
<t>In many cases in a specification, numbers are needed relative to a | <t>In many cases, numbers are needed relative to a | |||
base number. The <tt>.plus</tt> control identifies a number that is | base number in a specification. The <tt>.plus</tt> control identifies a number | |||
constructed by adding the numeric values of the target and of the | that is | |||
constructed by adding the numeric values of the target and the | ||||
controller.</t> | controller.</t> | |||
<t>Target and controller MUST be numeric. | <t>The target and controller both <bcp14>MUST</bcp14> be numeric. | |||
If the target is a floating point number and the controller an integer | If the target is a floating point number and the controller an integer | |||
number, or vice versa, the sum is converted into the type of the | number, or vice versa, the sum is converted into the type of the | |||
target; converting from a floating point number to an integer selects | target; converting from a floating point number to an integer selects | |||
its floor (the largest integer less than or equal to the floating | its floor (the largest integer less than or equal to the floating | |||
point number, i.e., rounding towards negative infinity).</t> | point number, i.e., rounding towards negative infinity).</t> | |||
<figure anchor="exa-plus"> | <figure anchor="exa-plus"> | |||
<name>Example: addition to a base value</name> | <name>An Example of Addition to a Base Value</name> | |||
<sourcecode type="cddl"><![CDATA[ | <sourcecode type="cddl"><![CDATA[ | |||
interval<BASE> = ( | interval<BASE> = ( | |||
BASE => int ; lower bound | BASE => int ; lower bound | |||
(BASE .plus 1) => int ; upper bound | (BASE .plus 1) => int ; upper bound | |||
? (BASE .plus 2) => int ; tolerance | ? (BASE .plus 2) => int ; tolerance | |||
) | ) | |||
X = 0 | X = 0 | |||
Y = 3 | Y = 3 | |||
rect = { | rect = { | |||
interval<X> | interval<X> | |||
interval<Y> | interval<Y> | |||
} | } | |||
]]></sourcecode> | ]]></sourcecode> | |||
</figure> | </figure> | |||
<t>The example in <xref target="exa-plus" format="default"/> contains th e generic definition of a CDDL | <t>The example in <xref target="exa-plus" format="default"/> contains th e generic definition of a CDDL | |||
group <tt>interval</tt> that gives a lower and an upper bound and optionally | group <tt>interval</tt> that gives a lower and upper bound and, optionally, | |||
a tolerance. | a tolerance. | |||
The parameter BASE allows the non-conflicting use of multiple of these | The parameter BASE allows the non-conflicting use of a multiple of these | |||
interval groups in one map, by assigning different labels to the | interval groups in one map by assigning different labels to the | |||
entries of the interval. | entries of the interval. | |||
<tt>rect</tt> combines two of these interval groups into a map, one group for | The rule <tt>rect</tt> combines two of these interval groups into a map, one gro | |||
the X dimension (using 0, 1, and 2 as labels) and one for Y dimension | up for | |||
the X dimension (using 0, 1, and 2 as labels) and one for the Y dimension | ||||
(using 3, 4, and 5 as labels).</t> | (using 3, 4, and 5 as labels).</t> | |||
</section> | </section> | |||
<section anchor="string-concatenation" numbered="true" toc="default"> | <section anchor="string-concatenation" numbered="true" toc="default"> | |||
<name>String Concatenation</name> | <name>String Concatenation</name> | |||
<t>It is often useful to be able to compose string literals out of | <t>It is often useful to be able to compose string literals out of | |||
component literals defined in different places in the specification.</t> | component literals defined in different places in the specification.</t> | |||
<t>The <tt>.cat</tt> control identifies a string that is built from a | <t>The <tt>.cat</tt> control identifies a string that is built from a | |||
concatenation of the target and the controller. | concatenation of the target and the controller. | |||
Target and controller MUST be strings. | The target and controller both <bcp14>MUST</bcp14> be strings. | |||
The result of the operation has the type of the target. | The result of the operation has the same type as the target. | |||
The concatenation is performed on the bytes in both strings. | The concatenation is performed on the bytes in both strings. | |||
If the target is a text string, the result of that concatenation MUST | If the target is a text string, the result of that concatenation <bcp14>MUST</bc p14> | |||
be valid UTF-8.</t> | be valid UTF-8.</t> | |||
<figure anchor="exa-cat"> | <figure anchor="exa-cat"> | |||
<name>Example: concatenation of text and byte string</name> | <name>An Example of Concatenation of Text and Byte Strings</name> | |||
<sourcecode type="cddl"><![CDATA[ | <sourcecode type="cddl"><![CDATA[ | |||
a = "foo" .cat ' | c = "foo" .cat ' | |||
bar | bar | |||
baz | baz | |||
' | ' | |||
; on a system where the newline is \n, is the same string as: | ; on a system where the newline is \n, is the same string as: | |||
b = "foo\n bar\n baz\n" | b = "foo\n bar\n baz\n" | |||
]]></sourcecode> | ]]></sourcecode> | |||
</figure> | </figure> | |||
<t>The example in <xref target="exa-cat" format="default"/> | <t>The example in <xref target="exa-cat" format="default"/> | |||
builds a text string named <tt>a</tt> out of concatenating the target text strin g <tt>"foo"</tt> | builds a text string named <tt>c</tt> from concatenating the target text string <tt>"foo"</tt> | |||
and the controller byte string entered in a text form byte string literal. | and the controller byte string entered in a text form byte string literal. | |||
(This particular idiom is useful when the text string contains | (This particular idiom is useful when the text string contains | |||
newlines, which, as shown in the example for <tt>b</tt>, may be harder to | newlines, which, as shown in the example for <tt>b</tt>, may be harder to | |||
read when entered in the format that the pure CDDL text string | read when entered in the format that the pure CDDL text string | |||
notation inherits from JSON.)</t> | notation inherits from JSON.)</t> | |||
</section> | </section> | |||
<section anchor="string-concatenation-with-dedenting" numbered="true" toc= "default"> | <section anchor="string-concatenation-with-dedenting" numbered="true" toc= "default"> | |||
<name>String Concatenation with Dedenting</name> | <name>String Concatenation with Dedenting</name> | |||
<t>Multi-line string literals for various applications, including | <t>Multi-line string literals for various applications, including | |||
embedded ABNF (<xref target="embedded-abnf" format="default"/>), need to be set flush left, at least | embedded ABNF (<xref target="embedded-abnf" format="default"/>), need to be set flush left, at least | |||
partially. | partially. | |||
Often, having some indentation in the source code for the literal can | Often, having some indentation in the source code for the literal can | |||
promote readability, as in <xref target="exa-det" format="default"/>.</t> | promote readability, as in <xref target="exa-det" format="default"/>.</t> | |||
<figure anchor="exa-det"> | <figure anchor="exa-det"> | |||
<name>Example: dedenting concatenation</name> | <name>An Example of Dedenting Concatenation</name> | |||
<sourcecode type="cddl"><![CDATA[ | <sourcecode type="cddl"><![CDATA[ | |||
oid = bytes .abnfb ("oid" .det cbor-tags-oid) | oid = bytes .abnfb ("oid" .det cbor-tags-oid) | |||
roid = bytes .abnfb ("roid" .det cbor-tags-oid) | roid = bytes .abnfb ("roid" .det cbor-tags-oid) | |||
cbor-tags-oid = ' | cbor-tags-oid = ' | |||
oid = 1*arc | oid = 1*arc | |||
roid = *arc | roid = *arc | |||
arc = [nlsb] %x00-7f | arc = [nlsb] %x00-7f | |||
nlsb = %x81-ff *%x80-ff | nlsb = %x81-ff *%x80-ff | |||
' | ' | |||
]]></sourcecode> | ]]></sourcecode> | |||
</figure> | </figure> | |||
<t>The control operator <tt>.det</tt> works like <tt>.cat</tt>, except t hat both | <t>The control operator <tt>.det</tt> works like <tt>.cat</tt>, except t hat both | |||
arguments (target and controller) are independently <em>dedented</em> before | arguments (target and controller) are independently <em>dedented</em> before | |||
the concatenation takes place.</t> | the concatenation takes place.</t> | |||
<t>For the first rule in <xref target="exa-det" format="default"/>, the result is | <t>For the first rule in <xref target="exa-det" format="default"/>, the result is | |||
equivalent to <xref target="exa-det-result" format="default"/>.</t> | equivalent to <xref target="exa-det-result" format="default"/>.</t> | |||
<figure anchor="exa-det-result"> | <figure anchor="exa-det-result"> | |||
<name>Dedenting example: result of first .det</name> | <name>Dedenting Example: Result of First .det</name> | |||
<sourcecode type="cddl"><![CDATA[ | <sourcecode type="cddl"><![CDATA[ | |||
oid = bytes .abnfb 'oid | oid = bytes .abnfb 'oid | |||
oid = 1*arc | oid = 1*arc | |||
roid = *arc | roid = *arc | |||
arc = [nlsb] %x00-7f | arc = [nlsb] %x00-7f | |||
nlsb = %x81-ff *%x80-ff | nlsb = %x81-ff *%x80-ff | |||
' | ' | |||
]]></sourcecode> | ]]></sourcecode> | |||
</figure> | </figure> | |||
<t>For the purposes of this specification, we define dedenting as:</t> | <t>For the purposes of this specification, we define "dedenting" as:</t> | |||
<ol spacing="normal" type="1"><li>determining the smallest amount of lef | <ol spacing="normal" type="1"><li>determining the smallest amount of lef | |||
t-most blank space (number of | tmost blank space (number of | |||
leading space characters) present in all the non-blank lines, and</li> | leading space characters) present in all the non-blank lines, and</li> | |||
<li>removing exactly that number of leading space characters from each | <li>removing exactly that number of leading space characters from each | |||
line. For blank (blank space only or empty) lines, there may be | line. For blank (blank space only or empty) lines, there may be | |||
less (or no) leading space characters than this amount, in which | fewer (or no) leading space characters than this amount, in which | |||
case all leading space is removed.</li> | case all leading space is removed.</li> | |||
</ol> | </ol> | |||
<t>(The name <tt>.det</tt> is a shortcut for "dedenting cat". | <t>(The name <tt>.det</tt> is a shortcut for "dedenting cat". | |||
The maybe more obvious name <tt>.dedcat</tt> has not been chosen | The maybe more obvious name <tt>.dedcat</tt> has not been chosen | |||
as it is longer and may invoke unpleasant images.)</t> | as it is longer and may invoke unpleasant images.)</t> | |||
<t>Occasionally, dedenting of only a single item is needed. | <t>Occasionally, dedenting of only a single item is needed. | |||
This can be achieved by using this operator with an empty string, | This can be achieved by using this operator with an empty string, | |||
e.g., <tt>"" .det rhs</tt> or <tt>lhs .det ""</tt>, which can in turn be combine d | e.g., <tt>"" .det rhs</tt> or <tt>lhs .det ""</tt>, which can in turn be combine d | |||
with a <tt>.cat</tt>: in the construct <tt>lhs .cat ("" .det rhs)</tt>, only <tt >rhs</tt> | with a <tt>.cat</tt>: in the construct <tt>lhs .cat ("" .det rhs)</tt>, only <tt >rhs</tt> | |||
is dedented.</t> | is dedented.</t> | |||
skipping to change at line 254 ¶ | skipping to change at line 261 ¶ | |||
<section anchor="embedded-abnf" numbered="true" toc="default"> | <section anchor="embedded-abnf" numbered="true" toc="default"> | |||
<name>Embedded ABNF</name> | <name>Embedded ABNF</name> | |||
<t>Many IETF protocols define allowable values for their text strings in | <t>Many IETF protocols define allowable values for their text strings in | |||
ABNF <xref target="RFC5234" format="default"/> <xref target="RFC7405" format="de fault"/>. | ABNF <xref target="RFC5234" format="default"/> <xref target="RFC7405" format="de fault"/>. | |||
It is often desirable to define a text string type in CDDL by | It is often desirable to define a text string type in CDDL by | |||
employing existing ABNF embedded into the CDDL specification. | employing existing ABNF embedded into the CDDL specification. | |||
Without specific ABNF support in CDDL, that ABNF would usually need to | Without specific ABNF support in CDDL, that ABNF would usually need to | |||
be translated into a regular expression (if that is even possible).</t> | be translated into a regular expression (if that is even possible).</t> | |||
<t>ABNF is added to CDDL in the same way that regular | <t>ABNF is added to CDDL in the same way that regular | |||
expressions were added: by defining a <tt>.abnf</tt> control operator. | expressions were added: by defining a <tt>.abnf</tt> control operator. | |||
The target is usually <tt>text</tt> or some restriction on it, the controller | The target is usually <tt>text</tt> or some restriction on it, and the controlle r | |||
is the text of an ABNF specification.</t> | is the text of an ABNF specification.</t> | |||
<t>There are several small issues, with solutions given here:</t> | <t>There are several small issues; the solutions are given here:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>ABNF can be used to define byte sequences as well as UTF-8 text | <li>ABNF can be used to define byte sequences as well as UTF-8 text | |||
strings interpreted as Unicode scalar sequences. This means this | strings interpreted as Unicode scalar sequences. This means this | |||
specification defines two control operators: <tt>.abnfb</tt> for ABNF | specification defines two control operators: <tt>.abnfb</tt> for ABNF | |||
denoting byte sequences and <tt>.abnf</tt> for denoting sequences of | denoting byte sequences and <tt>.abnf</tt> for denoting sequences of | |||
Unicode scalar values (codepoint) represented as UTF-8 text strings. | Unicode scalar values (code points) represented as UTF-8 text strings. | |||
Both control operators can be applied to targets of either string | Both control operators can be applied to targets of either string | |||
type; the ABNF is applied to sequence of bytes in the string | type; the ABNF is applied to the sequence of bytes in the string | |||
interpreting that as a sequence of bytes (<tt>.abnfb</tt>) or as a sequence | and interprets it as a sequence of bytes (<tt>.abnfb</tt>) or as a sequence | |||
of code points represented as an UTF-8 text string (<tt>.abnf</tt>). | of code points represented as an UTF-8 text string (<tt>.abnf</tt>). | |||
The controller string MUST be a text string.</li> | The controller string <bcp14>MUST</bcp14> be a string. When a byte string , it <bcp14>MUST</bcp14> be valid UTF-8 and is interpreted as the text string th at has the same sequence of bytes.</li> | |||
<li>ABNF defines a list of rules, not a single expression (called | <li>ABNF defines a list of rules, not a single expression (called | |||
"elements" in <xref target="RFC5234" format="default"/>). This is resolved by r equiring the | "elements" in <xref target="RFC5234" format="default"/>). This is resolved by r equiring the | |||
controller string to be one valid "element", followed by zero or | controller string to be one valid "element", followed by zero or | |||
more valid "rule" separated from the element by a newline; so the | more valid "rules" separated from the element by a newline; thus, the | |||
controller string can be built by preceding a piece | controller string can be built by preceding a piece | |||
of valid ABNF by an "element" that selects from that ABNF and a newline.</li> | of valid ABNF by an "element" that selects from that ABNF and a newline.</li> | |||
<li>For the same reason, ABNF requires newlines; specifying newlines in | <li>For the same reason, ABNF requires newlines; specifying newlines in | |||
CDDL text strings is tedious (and leads to essentially unreadable | CDDL text strings is tedious (and leads to essentially unreadable | |||
ABNF). The workaround employs the <tt>.cat</tt> operator introduced in | ABNF). The workaround employs the <tt>.cat</tt> operator introduced in | |||
<xref target="string-concatenation" format="default"/> and the syntax for text i n byte strings. | <xref target="string-concatenation" format="default"/> and the syntax for text i n byte strings. | |||
As is customary for ABNF, the syntax of ABNF itself (NOT the syntax | As is customary for ABNF, the syntax of ABNF itself (<em>not</em> the syntax | |||
expressed in ABNF!) is relaxed to allow a single linefeed as a | expressed in ABNF!) is relaxed to allow a single line feed as a | |||
newline:</li> | newline:</li> | |||
</ul> | </ul> | |||
<sourcecode type="abnf"><![CDATA[ | <sourcecode type="abnf"><![CDATA[ | |||
CRLF = %x0A / %x0D.0A | CRLF = %x0A / %x0D.0A | |||
]]></sourcecode> | ]]></sourcecode> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>One set of rules provided in an ABNF specification is often used in | <li>One set of rules provided in an ABNF specification is often used in | |||
multiple positions, in particular staples such as DIGIT and ALPHA. | multiple positions, particularly staples such as DIGIT and ALPHA. | |||
(Note that all rules referenced need to be defined in each ABNF | (Note that all rules referenced need to be defined in each ABNF | |||
operator controller string -- | operator controller string -- | |||
there is no implicit import of <xref target="RFC5234" format="default"/> Core AB NF or other rules.) | there is no implicit import of core ABNF rules from <xref target="RFC5234" forma t="default"/> or other rules.) | |||
The composition this calls for can be provided by the <tt>.cat</tt> | The composition this calls for can be provided by the <tt>.cat</tt> | |||
operator, and/or by <tt>.det</tt> if there is indentation to be disposed of.</li > | operator and/or by <tt>.det</tt> if there is indentation to be disposed of.</li> | |||
</ul> | </ul> | |||
<t>These points are combined into an example in <xref target="exa-abnf" fo rmat="default"/>, which uses | <t>These points are combined into an example in <xref target="exa-abnf" fo rmat="default"/>, which uses | |||
ABNF from <xref target="RFC3339" format="default"/> to specify one each of the C | ABNF from <xref target="RFC3339" format="default"/> to specify one of each of th | |||
BOR tags defined in | e Concise Binary Object Representation (CBOR) tags defined in | |||
<xref target="RFC8943" format="default"/> and <xref target="RFC8949" format="def | <xref target="RFC8943" format="default"/> and <xref target="RFC8949" forma | |||
ault"/>.</t> | t="default"/>.</t> | |||
<figure anchor="exa-abnf"> | <figure anchor="exa-abnf"> | |||
<name>Example: employing RFC 3339 ABNF for defining CBOR Tags</name> | <name>An Example of Employing ABNF from RFC 3339 for Defining CBOR Tags< | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | /name> | |||
<sourcecode type="cddl"><![CDATA[ | ||||
; for RFC 8943 | ; for RFC 8943 | |||
Tag1004 = #6.1004(text .abnf full-date) | Tag1004 = #6.1004(text .abnf full-date) | |||
; for RFC 8949 | ; for RFC 8949 | |||
Tag0 = #6.0(text .abnf date-time) | Tag0 = #6.0(text .abnf date-time) | |||
full-date = "full-date" .cat rfc3339 | full-date = "full-date" .cat rfc3339 | |||
date-time = "date-time" .cat rfc3339 | date-time = "date-time" .cat rfc3339 | |||
; Note the trick of idiomatically starting with a newline, separating | ; Note the trick of idiomatically starting with a newline, separating | |||
; off the element in the concatenations above from the rule-list | ; off the element in the concatenations above from the rule-list | |||
skipping to change at line 335 ¶ | skipping to change at line 343 ¶ | |||
full-date = date-fullyear "-" date-month "-" date-mday | full-date = date-fullyear "-" date-month "-" date-mday | |||
full-time = partial-time time-offset | full-time = partial-time time-offset | |||
date-time = full-date "T" full-time | date-time = full-date "T" full-time | |||
' .det rfc5234-core | ' .det rfc5234-core | |||
rfc5234-core = ' | rfc5234-core = ' | |||
DIGIT = %x30-39 ; 0-9 | DIGIT = %x30-39 ; 0-9 | |||
; abbreviated here | ; abbreviated here | |||
' | ' | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </figure> | |||
</section> | </section> | |||
<section anchor="features" numbered="true" toc="default"> | <section anchor="features" numbered="true" toc="default"> | |||
<name>Features</name> | <name>Features</name> | |||
<t>Commonly, the kind of validation enabled by languages such as | <t>Commonly, the kind of validation enabled by languages such as | |||
CDDL provides a Boolean result: valid, or invalid.</t> | CDDL provides a Boolean result: valid or invalid.</t> | |||
<t>In rapidly evolving environments, this is too simplistic. The data | <t>In rapidly evolving environments, this is too simplistic. The data | |||
models described by a CDDL specification may continually be enhanced | models described by a CDDL specification may continually be enhanced | |||
by additional features, and it would be useful even for a | by additional features, and it would be useful even for a | |||
specification that does not yet describe a specific future feature to | specification that does not yet describe a specific future feature to | |||
identify the extension point the feature can use, accepting such | identify the extension point the feature can use and accept such | |||
extensions while marking them as such.</t> | extensions while marking them as extensions.</t> | |||
<t>The <tt>.feature</tt> control annotates the target as making use of the | <t>The <tt>.feature</tt> control annotates the target as making use of the | |||
feature named by the controller. The latter will usually be a string. | feature named by the controller. The latter will usually be a string. | |||
A tool that validates an instance against that specification may mark | A tool that validates an instance against that specification may mark | |||
the instance as using a feature that is annotated by the | the instance as using a feature that is annotated by the | |||
specification.</t> | specification.</t> | |||
<t>More specifically, the tool's diagnostic output might contain | <t>More specifically, the tool's diagnostic output might contain | |||
the controller (right-hand side) as a feature name, and the target | the controller (right-hand side) as a feature name and the target | |||
(left-hand side) as a feature detail. However, in some cases, the target has | (left-hand side) as a feature detail. However, in some cases, the target has | |||
too much detail, and the specification might want to hint the tool | too much detail, and the specification might want to hint to the tool | |||
that more limited detail is appropriate. In this case, the controller | that more limited detail is appropriate. In this case, the controller | |||
should be an array, with the first element being the feature name | should be an array, with the first element being the feature name | |||
(that would otherwise be the entire controller), and the second | (that would otherwise be the entire controller) and the second | |||
element being the detail (usually another string), as illustrated in | element being the detail (usually another string), as illustrated in | |||
<xref target="exa-feat-array" format="default"/>.</t> | <xref target="exa-feat-array" format="default"/>.</t> | |||
<figure anchor="exa-feat-array"> | <figure anchor="exa-feat-array"> | |||
<name>Providing explicit detail with .feature</name> | <name>Providing Explicit Detail with .feature</name> | |||
<sourcecode type="cddl"><![CDATA[ | <sourcecode type="cddl"><![CDATA[ | |||
foo = { | foo = { | |||
kind: bar / baz .feature (["foo-extensions", "bazify"]) | kind: bar / baz .feature (["foo-extensions", "bazify"]) | |||
} | } | |||
bar = ... | bar = ... | |||
baz = ... ; complex stuff that doesn't all need to be in the detail | baz = ... ; complex stuff that doesn't all need to be in the detail | |||
]]></sourcecode> | ]]></sourcecode> | |||
</figure> | </figure> | |||
<t><xref target="exa-feat-map" format="default"/> shows what could be the definition of a person, with | <t><xref target="exa-feat-map" format="default"/> shows what could be the definition of a person, with | |||
potential extensions beyond <tt>name</tt> and <tt>organization</tt> being marked | potential extensions beyond <tt>name</tt> and <tt>organization</tt> being marked | |||
<tt>further-person-extension</tt>. | <tt>further-person-extension</tt>. | |||
Extensions that are known at the time this definition is written can be | Extensions that are known at the time this definition is written can be | |||
collected into <tt>$$person-extensions</tt>. However, future extensions | collected into <tt>$$person-extensions</tt>. However, future extensions | |||
would be deemed invalid unless the wildcard at the end of the map is | would be deemed invalid unless the wildcard at the end of the map is | |||
added. | added. | |||
These extensions could then be specifically examined by a user or a | These extensions could then be specifically examined by a user or a | |||
tool that makes use of the validation result; the label (map key) | tool that makes use of the validation result; the label (map key) | |||
actually used makes a fine feature detail for the tool's diagnostic | actually used makes a fine feature detail for the tool's diagnostic | |||
output.</t> | output.</t> | |||
<t>Leaving out the entire extension point would mean that instances that | <t>Leaving out the entire extension point would mean that instances that | |||
make use of an extension would be marked as whole-sale invalid, making | make use of an extension would be marked as wholesale invalid, making | |||
the entire validation approach much less useful. | the entire validation approach much less useful. | |||
Leaving the extension point in, but not marking its use as special, | Leaving the extension point in but not marking its use as special | |||
would render mistakes such as using the label "<tt>organisation</tt>" instead of | would render mistakes (such as using the label "<tt>organisation</tt>" instead o | |||
"<tt>organization</tt>" invisible.</t> | f | |||
"<tt>organization</tt>") invisible.</t> | ||||
<figure anchor="exa-feat-map"> | <figure anchor="exa-feat-map"> | |||
<name>Map extensibility with .feature</name> | <name>Map Extensibility with .feature</name> | |||
<sourcecode type="cddl"><![CDATA[ | <sourcecode type="cddl"><![CDATA[ | |||
person = { | person = { | |||
? name: text | ? name: text | |||
? organization: text | ? organization: text | |||
$$person-extensions | $$person-extensions | |||
* (text .feature "further-person-extension") => any | * (text .feature "further-person-extension") => any | |||
} | } | |||
$$person-extensions //= (? bloodgroup: text) | $$person-extensions //= (? bloodgroup: text) | |||
]]></sourcecode> | ]]></sourcecode> | |||
</figure> | </figure> | |||
<t><xref target="exa-feat-type" format="default"/> shows another example w here <tt>.feature</tt> provides for | <t><xref target="exa-feat-type" format="default"/> shows another example w here <tt>.feature</tt> provides for | |||
type extensibility.</t> | type extensibility.</t> | |||
<figure anchor="exa-feat-type"> | <figure anchor="exa-feat-type"> | |||
<name>Type extensibility with .feature</name> | <name>Type Extensibility with .feature</name> | |||
<sourcecode type="cddl"><![CDATA[ | <sourcecode type="cddl"><![CDATA[ | |||
allowed-types = number / text / bool / null | allowed-types = number / text / bool / null | |||
/ [* number] / [* text] / [* bool] | / [* number] / [* text] / [* bool] | |||
/ (any .feature "allowed-type-extension") | / (any .feature "allowed-type-extension") | |||
]]></sourcecode> | ]]></sourcecode> | |||
</figure> | </figure> | |||
<t>A CDDL tool may simply report the set of features being used; the | <t>A CDDL tool may simply report the set of features being used; the | |||
control then only provides information to the process requesting the | control then only provides information to the process requesting the | |||
validation. | validation. | |||
One could also imagine a tool that takes arguments allowing the tool to accept | One could also imagine a tool that takes arguments, allowing the tool to accept | |||
certain features and reject others (enable/disable). The latter approach | certain features and reject others (enable/disable). The latter approach | |||
could for instance be used for a JSON/CBOR switch, as illustrated in | could, for instance, be used for a JSON/CBOR switch, as illustrated in | |||
<xref target="exa-feat-variants" format="default"/>, using SenML <xref target="R | <xref target="exa-feat-variants" format="default"/>, using Sensor Measurement Li | |||
FC8428" format="default"/> as the example data model | sts (SenML) <xref target="RFC8428" format="default"/> as the example data model | |||
used with both JSON and CBOR.</t> | used with both JSON and CBOR.</t> | |||
<figure anchor="exa-feat-variants"> | <figure anchor="exa-feat-variants"> | |||
<name>Describing variants with .feature</name> | <name>Describing Variants with .feature</name> | |||
<sourcecode type="cddl"><![CDATA[ | <sourcecode type="cddl"><![CDATA[ | |||
SenML-Record = { | SenML-Record = { | |||
; ... | ; ... | |||
? v => number | ? v => number | |||
; ... | ; ... | |||
} | } | |||
v = JC<"v", 2> | v = JC<"v", 2> | |||
JC<J,C> = J .feature "json" / C .feature "cbor" | JC<J,C> = J .feature "json" / C .feature "cbor" | |||
]]></sourcecode> | ]]></sourcecode> | |||
</figure> | </figure> | |||
<t>It remains to be seen if the enable/disable approach can lead to new | <t>It remains to be seen if the enable/disable approach can lead to new | |||
idioms of using CDDL. The language currently has no way to enforce | idioms of using CDDL. The language currently has no way to enforce | |||
mutually exclusive use of features, as would be needed in this example.</t> | mutually exclusive use of features, as would be needed in this example.</t> | |||
</section> | </section> | |||
<section anchor="iana-considerations" numbered="true" toc="default"> | <section anchor="iana-considerations" numbered="true" toc="default"> | |||
<name>IANA Considerations</name> | <name>IANA Considerations</name> | |||
<t>This document requests IANA to register the contents of | <t>IANA has registered the contents of | |||
<xref target="tbl-iana-reqs" format="default"/> into the registry | <xref target="tbl-iana-reqs" format="default"/> into the "CDDL Control Operators | |||
"<xref section="CDDL Control Operators" relative="#cddl-control-operators" secti | " registry of <xref target="IANA.cddl" format="default"/>:</t> | |||
onFormat="bare" target="IANA.cddl" format="default"/>" of <xref target="IANA.cdd | ||||
l" format="default"/>:</t> | ||||
<table anchor="tbl-iana-reqs" align="center"> | <table anchor="tbl-iana-reqs" align="center"> | |||
<name>New control operators to be registered</name> | <name>New Control Operators</name> | |||
<thead> | <thead> | |||
<tr> | <tr> | |||
<th align="left">Name</th> | <th align="left">Name</th> | |||
<th align="left">Reference</th> | <th align="left">Reference</th> | |||
</tr> | </tr> | |||
</thead> | </thead> | |||
<tbody> | <tbody> | |||
<tr> | <tr> | |||
<td align="left">.plus</td> | <td align="left">.plus</td> | |||
<td align="left">[RFCthis]</td> | <td align="left">RFC 9165</td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align="left">.cat</td> | <td align="left">.cat</td> | |||
<td align="left">[RFCthis]</td> | <td align="left">RFC 9165</td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align="left">.det</td> | <td align="left">.det</td> | |||
<td align="left">[RFCthis]</td> | <td align="left">RFC 9165</td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align="left">.abnf</td> | <td align="left">.abnf</td> | |||
<td align="left">[RFCthis]</td> | <td align="left">RFC 9165</td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align="left">.abnfb</td> | <td align="left">.abnfb</td> | |||
<td align="left">[RFCthis]</td> | <td align="left">RFC 9165</td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align="left">.feature</td> | <td align="left">.feature</td> | |||
<td align="left">[RFCthis]</td> | <td align="left">RFC 9165</td> | |||
</tr> | </tr> | |||
</tbody> | </tbody> | |||
</table> | </table> | |||
</section> | </section> | |||
<section removeInRFC="true" anchor="implementation-status" numbered="true" t | ||||
oc="default"> | ||||
<name>Implementation Status</name> | ||||
<!-- RFC7942 --> | ||||
<t>An early implementation of the control operator <tt>.feature</tt> has been | ||||
available in the CDDL tool described in <xref section="F" sectionFormat="of" tar | ||||
get="RFC8610" format="default"/> since version 0.8.11. | ||||
The validator warns about each feature being used and provides the set | ||||
of target values used with the feature. | ||||
The other control operators defined in this specification are also | ||||
implemented as of version 0.8.21 and 0.8.26 (double-handed <tt>.det</tt>).</t> | ||||
<t>Andrew Weiss' <xref target="CDDL-RS" format="default"/> has an ongoing | ||||
implementation of this draft | ||||
which is feature-complete except for the ABNF and dedenting support (<eref targe | ||||
t="https://github.com/anweiss/cddl/pull/79">https://github.com/anweiss/cddl/pull | ||||
/79</eref>).</t> | ||||
</section> | ||||
<section anchor="security-considerations" numbered="true" toc="default"> | <section anchor="security-considerations" numbered="true" toc="default"> | |||
<name>Security considerations</name> | <name>Security Considerations</name> | |||
<t>The security considerations of <xref target="RFC8610" format="default"/ > apply.</t> | <t>The security considerations of <xref target="RFC8610" format="default"/ > apply.</t> | |||
<t>While both <xref target="RFC5234" format="default"/> and <xref target=" RFC7405" format="default"/> state that security is truly | <t>While both <xref target="RFC5234" format="default"/> and <xref target=" RFC7405" format="default"/> state that security is truly | |||
believed to be irrelevant to the respective document, the use of | believed to be irrelevant to the respective document, the use of | |||
formal description techniques cannot only simplify, but sometimes also | formal description techniques cannot only simplify but sometimes also | |||
complicate a specification. | complicate a specification. | |||
This can lead to security problems in implementations and in the | This can lead to security problems in implementations and in the | |||
specification itself. | specification itself. | |||
As with CDDL itself, ABNF should be judiciously applied, and overly | As with CDDL itself, ABNF should be judiciously applied, and overly | |||
complex (or "cute") constructions should be avoided.</t> | complex (or "cute") constructions should be avoided.</t> | |||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<references> | <references> | |||
<name>References</name> | <name>References</name> | |||
<references> | <references> | |||
<name>Normative References</name> | <name>Normative References</name> | |||
<reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8 | ||||
610"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8610. | |||
<front> | xml"/> | |||
<title>Concise Data Definition Language (CDDL): A Notational Convent | ||||
ion to Express Concise Binary Object Representation (CBOR) and JSON Data Structu | ||||
res</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 Conci | ||||
se Binary Object Representation (CBOR) data structures (RFC 7049). Its main goa | ||||
l is to provide an easy and unambiguous way to express structures for protocol m | ||||
essages 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="IANA.cddl" target="https://www.iana.org/assignments/c ddl"> | <reference anchor="IANA.cddl" target="https://www.iana.org/assignments/c ddl"> | |||
<front> | <front> | |||
<title>Concise Data Definition Language (CDDL)</title> | <title>Concise Data Definition Language (CDDL)</title> | |||
<author> | <author> | |||
<organization>IANA</organization> | <organization>IANA</organization> | |||
</author> | </author> | |||
<date/> | <date/> | |||
</front> | </front> | |||
</reference> | </reference> | |||
<reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5 | ||||
234"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5234. | |||
<front> | xml"/> | |||
<title>Augmented BNF for Syntax Specifications: ABNF</title> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7405. | |||
<author fullname="D. Crocker" initials="D." role="editor" surname="C | xml"/> | |||
rocker"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119. | |||
<organization/> | xml"/> | |||
</author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174. | |||
<author fullname="P. Overell" initials="P." surname="Overell"> | xml"/> | |||
<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 A | ||||
ugmented BNF (ABNF), has been popular among many Internet specifications. The c | ||||
urrent specification documents ABNF. It balances compactness and simplicity with | ||||
reasonable representational power. The differences between standard BNF and AB | ||||
NF involve naming rules, repetition, alternatives, order-independence, and value | ||||
ranges. This specification also supplies additional rule definitions and encod | ||||
ing for a core lexical analyzer of the type common to several Internet specifica | ||||
tions. [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" target="https://www.rfc-editor.org/info/rfc7 | ||||
405"> | ||||
<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 Ba | ||||
ckus-Naur Form) to include a way to specify US-ASCII string literals that are ma | ||||
tched in a case-sensitive manner.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7405"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7405"/> | ||||
</reference> | ||||
<reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | ||||
119"> | ||||
<front> | ||||
<title>Key words for use in RFCs to Indicate Requirement Levels</tit | ||||
le> | ||||
<author fullname="S. Bradner" initials="S." surname="Bradner"> | ||||
<organization/> | ||||
</author> | ||||
<date month="March" year="1997"/> | ||||
<abstract> | ||||
<t>In many standards track documents several words are used to sig | ||||
nify the requirements in the specification. These words are often capitalized. | ||||
This document defines these words as they should be interpreted in IETF document | ||||
s. This document specifies an Internet Best Current Practices for the Internet | ||||
Community, and requests discussion and suggestions for improvements.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="2119"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC2119"/> | ||||
</reference> | ||||
<reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8 | ||||
174"> | ||||
<front> | ||||
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | ||||
tle> | ||||
<author fullname="B. Leiba" initials="B." surname="Leiba"> | ||||
<organization/> | ||||
</author> | ||||
<date month="May" year="2017"/> | ||||
<abstract> | ||||
<t>RFC 2119 specifies common key words that may be used in protoco | ||||
l specifications. This document aims to reduce the ambiguity by clarifying tha | ||||
t only UPPERCASE usage of the key words have the defined special meanings.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="8174"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
</reference> | ||||
</references> | </references> | |||
<references> | <references> | |||
<name>Informative References</name> | <name>Informative References</name> | |||
<reference anchor="RFC8428" target="https://www.rfc-editor.org/info/rfc8 | ||||
428"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8428. | |||
<front> | xml"/> | |||
<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 sen | ||||
sor measurements and device parameters in Sensor Measurement Lists (SenML). Rep | ||||
resentations are defined in JavaScript Object Notation (JSON), Concise Binary Ob | ||||
ject Representation (CBOR), Extensible Markup Language (XML), and Efficient XML | ||||
Interchange (EXI), which share the common SenML data model. A simple sensor, su | ||||
ch 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 measure | ||||
ments 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="CDDL-RS" target="https://github.com/anweiss/cddl"> | <reference anchor="CDDL-RS" target="https://github.com/anweiss/cddl"> | |||
<front> | <front> | |||
<title>cddl-rs</title> | <title>cddl-rs</title> | |||
<author initials="A." surname="Weiss" fullname="Andrew Weiss"> | <author initials="A." surname="Weiss" fullname="Andrew Weiss"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<date>n.d.</date> | <date/> | |||
</front> | ||||
</reference> | ||||
<reference anchor="RFC3339" target="https://www.rfc-editor.org/info/rfc3 | ||||
339"> | ||||
<front> | ||||
<title>Date and Time on the Internet: Timestamps</title> | ||||
<author fullname="G. Klyne" initials="G." surname="Klyne"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="C. Newman" initials="C." surname="Newman"> | ||||
<organization/> | ||||
</author> | ||||
<date month="July" year="2002"/> | ||||
<abstract> | ||||
<t>This document defines a date and time format for use in Interne | ||||
t protocols that is a profile of the ISO 8601 standard for representation of dat | ||||
es and times using the Gregorian calendar.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3339"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3339"/> | ||||
</reference> | ||||
<reference anchor="RFC8943" target="https://www.rfc-editor.org/info/rfc8 | ||||
943"> | ||||
<front> | ||||
<title>Concise Binary Object Representation (CBOR) Tags for Date</ti | ||||
tle> | ||||
<author fullname="M. Jones" initials="M." surname="Jones"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="A. Nadalin" initials="A." surname="Nadalin"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="J. Richter" initials="J." surname="Richter"> | ||||
<organization/> | ||||
</author> | ||||
<date month="November" year="2020"/> | ||||
<abstract> | ||||
<t>The Concise Binary Object Representation (CBOR), as specified i | ||||
n RFC 7049, is a data format whose design goals include the possibility of extre | ||||
mely small code size, fairly small message size, and extensibility without the n | ||||
eed for version negotiation. </t> | ||||
<t>In CBOR, one point of extensibility is the definition of CBOR t | ||||
ags. RFC 7049 defines two tags for time: CBOR tag 0 (date/time string as per RFC | ||||
3339) and tag 1 (POSIX "seconds since the epoch"). Since then, additional requi | ||||
rements have become known. This specification defines a CBOR tag for a date text | ||||
string (as per RFC 3339) for applications needing a textual date representation | ||||
within the Gregorian calendar without a time. It also defines a CBOR tag for da | ||||
ys since the date 1970-01-01 in the Gregorian calendar for applications needing | ||||
a numeric date representation without a time. This specification is the referenc | ||||
e document for IANA registration of the CBOR tags defined.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8943"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8943"/> | ||||
</reference> | ||||
<reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8 | ||||
949"> | ||||
<front> | ||||
<title>Concise Binary Object Representation (CBOR)</title> | ||||
<author fullname="C. Bormann" initials="C." surname="Bormann"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="P. Hoffman" initials="P." surname="Hoffman"> | ||||
<organization/> | ||||
</author> | ||||
<date month="December" year="2020"/> | ||||
<abstract> | ||||
<t>The Concise Binary Object Representation (CBOR) is a data forma | ||||
t whose design goals include the possibility of extremely small code size, fairl | ||||
y small message size, and extensibility without the need for version negotiation | ||||
. These design goals make it different from earlier binary serializations such a | ||||
s ASN.1 and MessagePack.</t> | ||||
<t>This document obsoletes RFC 7049, providing editorial improveme | ||||
nts, new details, and errata fixes while keeping full compatibility with the int | ||||
erchange format of RFC 7049. It does not create a new version of the format.</t | ||||
> | ||||
</abstract> | ||||
</front> | </front> | |||
<seriesInfo name="STD" value="94"/> | ||||
<seriesInfo name="RFC" value="8949"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8949"/> | ||||
</reference> | </reference> | |||
--> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3339. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8943. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8949. | ||||
xml"/> | ||||
</references> | </references> | |||
</references> | </references> | |||
<section numbered="false" anchor="acknowledgements" toc="default"> | <section numbered="false" anchor="acknowledgements" toc="default"> | |||
<name>Acknowledgements</name> | <name>Acknowledgements</name> | |||
<t>Jim Schaad suggested several improvements. | <t><contact fullname="Jim Schaad"/> suggested several improvements. | |||
The <tt>.feature</tt> feature was developed out of a discussion with Henk Birkho | The <tt>.feature</tt> feature was developed out of a discussion with <contact fu | |||
lz. | llname="Henk Birkholz"/>. | |||
Paul Kyzivat helped isolate the need for <tt>.det</tt>.</t> | <contact fullname="Paul Kyzivat"/> helped isolate the need for <tt>.det</tt>.</t | |||
> | ||||
<t>.det is an abbreviation for "dedenting cat", but Det is also the name | <t>.det is an abbreviation for "dedenting cat", but Det is also the name | |||
of a German TV Cartoon character created in the 1960s.</t> | of a German TV cartoon character created in the 1960s.</t> | |||
<!-- LocalWords: dedenting dedented | ||||
--> | ||||
</section> | </section> | |||
</back> | </back> | |||
<!-- ##markdown-source: | ||||
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 | ||||
hNp31ynW+/8N6g7e9e1GAAA= | ||||
</rfc> | </rfc> | |||
End of changes. 74 change blocks. | ||||
525 lines changed or deleted | 156 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |