<?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.7.39 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-corneo-schc-compress-payload-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="SCHC-payload">SCHC Payload Compression for Structured Formats</title>
    <seriesInfo name="Internet-Draft" value="draft-corneo-schc-compress-payload-02"/>
    <author initials="L." surname="Corneo" fullname="Lorenzo Corneo">
      <organization>Ericsson</organization>
      <address>
        <email>lorenzo.corneo@ericsson.com</email>
      </address>
    </author>
    <author initials="E." surname="Ramos" fullname="Edgar Ramos">
      <organization>Ericsson</organization>
      <address>
        <email>edgar.ramos@ericsson.com</email>
      </address>
    </author>
    <author initials="J." surname="Jimenez" fullname="Jaime Jimenez">
      <organization>Ericsson</organization>
      <address>
        <email>jaime.jimenez@ericsson.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="03"/>
    <area>Applications</area>
    <workgroup>SCHC Working Group</workgroup>
    <abstract>
      <?line 39?>

<t>This document describes techniques to adapt the SCHC framework (RFC8724), used for header compression, to also compress and decompress payload of specific protocols. To this end, this document defines a new matching operator, <tt>equal-template</tt>, to check equality of field values with respect to a user-defined template, and a <tt>payload</tt> keyword to be used as Field IDentifier (FID) to signal the presence of payload to be compressed or decompressed. Additionally, this document defines a set of template functions and variables to optimize user-defined templates, which can be extended through the IANA registry defined herein.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-corneo-schc-compress-payload/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        schc Working Group mailing list (<eref target="mailto:schc@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/schc/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/schc/"/>.
      </t>
    </note>
  </front>
  <middle>
    <?line 43?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The main purpose of this document is to extend the SCHC framework <xref target="RFC8724"/> to compress and decompress structured data payloads, e.g., JSON <xref target="RFC8259"/>, reusing the same compression and decompression machinery originally designed for protocol headers.</t>
      <t>This document defines the <tt>equal-template</tt> Matching Operator (MO), which enables a SCHC compressor to match a field value against a user-defined template and extract only the variable parts as compression residue. Templates may include positional variables and functions to address common patterns in structured data.</t>
      <t>Additionally, this document defines the <tt>payload</tt> keyword for use in the Field IDentifier (FID) to signal that payload compression is being performed. The keyword can be used with a template, where the entire payload structure is captured in the Target Value (TV), or without a template, where individual structured data fields are specified in separate rule entries.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in <xref target="BCP14"/> (<xref target="RFC2119"/>) (<xref target="RFC8174"/>) when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<section anchor="glossary">
          <name>Glossary</name>
          <ul spacing="normal">
            <li>
              <t>Template-based compression: Payload compression utilizing a pre-shared model that only requires the values that are changing in the payload.</t>
            </li>
            <li>
              <t>Template variable: A template variable can be used as a placeholder for variable fields in a template definition. Template variables can carry semantics and other information, e.g., the position and size of a field value in the compression residue (see <xref target="positional"/>).</t>
            </li>
            <li>
              <t>Template function: A template function can be used to perform actions on a template definition, e.g., compress repeated structures in the payload (see <xref target="repeat"/>).</t>
            </li>
            <li>
              <t>Payload keyword: The keyword <tt>payload</tt> used in the FID to signal that payload compression is being performed.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="equal-template">
      <name>A Matching Operator Providing Equality over Templates</name>
      <t>This section introduces the <tt>equal-template</tt> Matching Operator (MO), which evaluates equality between a field value and a provided template specified in the Target Value (TV).</t>
      <section anchor="matching-procedure">
        <name>Matching Procedure</name>
        <t>The <tt>equal-template</tt> MO <bcp14>MUST</bcp14> perform the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>Parse the template specified in the TV to identify the fixed portions and the positions of template variables (see <xref target="positional"/>) and functions (see <xref target="repeat"/>).</t>
          </li>
          <li>
            <t>Compare the fixed portions of the template against the corresponding portions of the field value. The comparison <bcp14>MUST</bcp14> be performed as a byte-wise exact match on the textual representation of the field value.</t>
          </li>
          <li>
            <t>Extract the substrings of the field value that correspond to each template variable. Each extracted substring represents a value to be included in the compression residue.</t>
          </li>
          <li>
            <t>If all fixed portions match, the MO evaluates to true and the extracted values are passed to the Compression/Decompression Action (CDA). If any fixed portion does not match, the MO evaluates to false and the rule <bcp14>MUST NOT</bcp14> be applied.</t>
          </li>
        </ol>
      </section>
      <section anchor="residue-encoding">
        <name>Residue Encoding</name>
        <!-- LC: This section assumes prior knowledge on positional template variables, which are not yet defined. Consider if the matching operator should be defined after template variables and functions. -->

<t>When the <tt>equal-template</tt> MO evaluates to true, the extracted values <bcp14>MUST</bcp14> be encoded in the compression residue in the order determined by their positional identifiers (i.e., <tt>$1</tt> before <tt>$2</tt>, and so on).</t>
        <t>Each positional template variable <bcp14>MUST</bcp14> specify the length of the value it captures, expressed in bytes, using the notation <tt>$n:length</tt>. For example, <tt>$1:10</tt> indicates that the first positional variable captures a value occupying exactly 10 bytes in the residue. If the actual extracted value is shorter than the declared length, it <bcp14>MUST</bcp14> be right-padded with zeros to fill the declared length.</t>
        <t>Upon decompression, the decompressor <bcp14>MUST</bcp14> strip trailing zero bytes from each extracted value before reconstructing the payload. This is safe because the <tt>equal-template</tt> MO operates on textual representations where the null byte (0x00) is not a valid character.</t>
        <t>The decompressor uses this fixed length to unambiguously parse the residue. This approach keeps the length information co-located with the template variable it describes and does not require changes to the SCHC rule structure defined in <xref target="RFC8724"/>.</t>
        <t>Alternatively, the Field Length (FL) field of the rule could be extended to carry a list of lengths, one per positional variable. Such an approach would require additional standardization effort and is left for future discussion within the Working Group.</t>
      </section>
      <section anchor="type-handling">
        <name>Type Handling</name>
        <t>The <tt>equal-template</tt> MO operates on the textual (serialized) representation of the field value. Template variables capture substrings as-is, preserving the original serialization. For example, given the template <tt>{"value": $1:4}</tt> and the field value <tt>{"value": -11}</tt>, the extracted value for <tt>$1</tt> is the string <tt>-11</tt> right-padded with one zero byte to fill 4 bytes. Type interpretation is left to the application layer after decompression.</t>
      </section>
      <section anchor="match-failure">
        <name>Match Failure</name>
        <t>If the <tt>equal-template</tt> MO evaluates to false for a given rule, the SCHC compressor <bcp14>MUST</bcp14> proceed to evaluate the next rule in the rule set, as specified in Section 7.2 of <xref target="RFC8724"/>. If no rule matches, the packet <bcp14>MUST</bcp14> be sent uncompressed.</t>
      </section>
    </section>
    <section anchor="template-variables-and-functions">
      <name>Template Variables and Functions</name>
      <t>This section specifies one variable and one function, to be used in templates, that address common patterns in structured data.</t>
      <!-- LC: Using $ as special sign to identify template variables may not be the best idea, it can be confused with JSON pointers or just regular payload. Should we consider a better alternative? -->

<t>Template variables and functions are identified through a special character, hereby defined as the dollar sign <tt>$</tt>.</t>
      <t>It is possible to define additional template variables and functions in the IANA registry defined in <xref target="iana-reg"/>.</t>
      <section anchor="positional">
        <name>Positional Template Variable</name>
        <t>The positional template variable, <tt>$n:length</tt>, uses a numerical identifier, <tt>n</tt>, to represent the position of the field value in the compression residue, and a <tt>length</tt> to specify the fixed size in bytes of the captured value (see <xref target="residue-encoding"/>). That is, <tt>$1:10</tt> represents the first field value in the residue with a fixed length of 10 bytes, while <tt>$2:4</tt> represents the second one with 4 bytes.</t>
        <t>For example, a target value (TV) using two positional template variables may look as follows:</t>
        <artwork><![CDATA[
{"id": $1:10, "value": $2:4}
]]></artwork>
        <t>Considering the above example, the MO <tt>equal-template</tt> will match the following payload:</t>
        <artwork><![CDATA[
{"id": "abc123", "value": -11}
]]></artwork>
        <t>As a result, the values <tt>"abc123"</tt> and <tt>-11</tt> will be encoded in the residue during compression phase, while the rest of the template will be elided. Note that since the matching is byte-wise (see <xref target="equal-template"/>), the positional variable captures exactly the substring between the surrounding fixed portions. In this example, <tt>$1</tt> captures <tt>"abc123"</tt> including the JSON quotes (8 bytes), while <tt>$2</tt> captures <tt>-11</tt> without quotes (3 bytes).</t>
      </section>
      <section anchor="repeat">
        <name>Repeat Template Function</name>
        <t>The repeat template function, <tt>$repeat(template, separator)</tt>, is used to repeat multiple times the template passed as argument. The function requires two arguments as input, namely, the <tt>template</tt> to repeat, and the <tt>separator</tt> between template repetitions. The example below is indicative of a common pattern found in structured data payloads.</t>
        <artwork><![CDATA[
[{"id": "abc123", "value": -11}, {"id": "abc123", "value": -13}]
]]></artwork>
        <t>Using the repeat template function, <tt>$repeat()</tt>, the above example may look as follows:</t>
        <artwork><![CDATA[
[$repeat('{"id": $1:10, "value": $2:4}', ", ")]
]]></artwork>
        <t>As noted above, it is possible to use the repeat template function, <tt>$repeat()</tt>, in conjunction with the positional template variable, <tt>$n</tt>.</t>
        <section anchor="repetition-count">
          <name>Repetition Count</name>
          <t>The number of repetitions is not known a-priori from the template and varies per payload. The compressor <bcp14>MUST</bcp14> infer the number of repetitions by matching the template against the field value, and <bcp14>MUST</bcp14> encode this count as the first byte of the residue for the <tt>$repeat()</tt> block, as an unsigned 8-bit integer. The decompressor <bcp14>MUST</bcp14> read this count first, then extract the positional variable values for each repetition in sequence.</t>
          <t>For the example above with two repetitions, the residue is structured as follows:</t>
          <!-- LC: Should we include a template function (or variable?) identifier to simplify matching operations in decompression phase?? Currently, the decompressor has to guess what residue is. With an ID it would be able to understand immediately what the residue is about, and may immediately fail the MO. -->

<artwork><![CDATA[
| Count (1 byte) | $1 rep.1 | $2 rep.1 | $1 rep.2 | $2 rep.2 |
| 0x02           | 10 bytes | 4 bytes  | 10 bytes | 4 bytes  |
]]></artwork>
          <t>Since each positional variable has a fixed length declared via the <tt>$n:length</tt> notation (see <xref target="residue-encoding"/>), the decompressor knows that each repetition contributes a fixed number of bytes to the residue. In the example above, each repetition contributes 14 bytes (10 + 4).</t>
          <t>A repetition count of zero is valid. In this case, the residue for the <tt>$repeat()</tt> block contains only the count byte (0x00), and the decompressor <bcp14>MUST</bcp14> reconstruct an empty sequence, retaining only the surrounding fixed portions of the template. However, a repetition count of zero is discouraged as it likely indicates a misconfigured rule or an unexpected payload structure.</t>
          <t>Since the repetition count is encoded as an unsigned 8-bit integer, the maximum number of repetitions is 255. This is expected to be sufficient for constrained IoT use cases. Whether a larger count field is needed is left for discussion within the Working Group.</t>
        </section>
        <section anchor="positional-variable-scope">
          <name>Positional Variable Scope</name>
          <t>Positional variable identifiers (<tt>$n</tt>) are scoped to a single repetition. That is, <tt>$1</tt> and <tt>$2</tt> refer to the first and second extracted values within each repetition, not across the entire payload. The residue contains the values for all positional variables of the first repetition, followed by those of the second repetition, and so on.</t>
        </section>
        <section anchor="optimization-example">
          <name>Optimization Example</name>
          <t>The level of payload compression that can be achieved greatly varies depending on the use case. For example, if it is known a-priori that the value of the field <tt>id</tt> never changes, the above payload example could be further optimized as follows:</t>
          <artwork><![CDATA[
[$repeat('{"id": "abc123", "value": $1:4}', ", ")]
]]></artwork>
          <t>The above template allows the compressor to avoid adding the value of the field <tt>id</tt> to the residue, unlike in the previous example.</t>
        </section>
      </section>
    </section>
    <section anchor="a-keyword-for-structured-data-payload-compression">
      <name>A Keyword for Structured Data Payload Compression</name>
      <t>This section defines the keyword <tt>payload</tt> that <bcp14>MUST</bcp14> be used whenever payload compression is needed. In such cases, the keyword <tt>payload</tt> <bcp14>MUST</bcp14> be specified in the Field IDentifier (FID).</t>
      <t>When payload compression is performed by individually specifying one structured field at a time, the FID <bcp14>MUST</bcp14> include the keyword <tt>payload</tt> as prefix, followed by a colon <tt>:</tt> and the name of the structured data field, e.g., <tt>payload:name</tt> for the structured data field called <tt>name</tt>. An extended FID notation that includes additional context such as media type and field index is illustrated in <xref target="no-template-example"/>. Whether such extended notation should be normative is left for discussion within the Working Group.</t>
      <t>When payload compression is provided through a template, thus all the structured data fields are included in the TV, the FID <bcp14>MUST</bcp14> include only the keyword <tt>payload</tt>.</t>
    </section>
    <section anchor="an-example-of-structured-data-payload-with-template">
      <name>An Example of Structured Data Payload with Template</name>
      <t>This section demonstrates the use of the <tt>equal-template</tt> matching operator (MO) in conjunction with payload compression templates and the <tt>payload</tt> keyword.</t>
      <t>Considering the example below</t>
      <artwork><![CDATA[
[{"id": "abc123", "value": -11}, {"id": "abc123", "value": -13}]
]]></artwork>
      <t>a SCHC rule (with only relevant fields) <bcp14>MAY</bcp14> be defined using the new <tt>payload</tt> keyword, the <tt>equal-template</tt> MO, and the payload compression templates (functions and variables). Such a rule may look as follows:</t>
      <!-- LC: Assuming CDA `send` because there MUST be some residual to be sent from the template -->

<artwork><![CDATA[
FID      TV          MO              CDA
payload  <template>  equal-template  send
]]></artwork>
      <t>where the <tt>&lt;template&gt;</tt> is omitted from the above for brevity, but is defined as follows:</t>
      <artwork><![CDATA[
[$repeat('{"id": "abc123", "value": $1:4}', ", ")]
]]></artwork>
      <t>When a SCHC node computes the rule above, the <tt>payload</tt> keyword in the FID signals the node that application data needs to be compressed. Specifically, the <tt>equal-template</tt> MO triggers the SCHC node to check for equality between the current field value and the template provided in the TV. Upon matching, the residue is sent (or retrieved) over the network. For the payload above, the residue contains the repetition count (0x02, 1 byte) followed by the values <tt>-11</tt> and <tt>-13</tt>, each padded to 4 bytes.</t>
      <t>Please notice that the algorithm used to perform template matching is implementation-specific, provided that the result is equivalent to the matching procedure defined in <xref target="equal-template"/>.</t>
    </section>
    <section anchor="no-template-example">
      <name>An Example of Structured Data Payload without Template</name>
      <!-- LC: Mention that how the payload keyword is interpreted by a SCHC node is not normative and left to implementation -->

<t>This section demonstrates how to make use of payload compression without a template as defined in this document. The example below will be the target of the payload compression.</t>
      <artwork><![CDATA[
[{"id": "abc123", "value": -11}, {"id": "abc123", "value": -13}]
]]></artwork>
      <t>The snippet below shows how a SCHC rule (only relevant fields are used) <bcp14>MAY</bcp14> be defined using the new <tt>payload</tt> keyword.</t>
      <!-- LC: We need a function that tells the TV to read the value? Probably not as decompressor reads the residual anyway -->

<artwork><![CDATA[
FID                               TV      MO      CDA
payload:application/json:1:id     abc123  equal   elide
payload:application/json:1:value          ignore  send
payload:application/json:2:id     abc123  equal   elide
payload:application/json:2:value          ignore  send
]]></artwork>
      <t>The FIDs in the rule above carry semantics that can be used by the SCHC node to perform successful compression and decompression. Considering the first field of the above rule, <tt>application/json</tt> signals the decompressor which media type is being reconstructed. The subsequent numerical identifier, <tt>1</tt>, represents the object the compressed field belongs to. Finally, the last value encoded in the FID is the name of the JSON object, <tt>id</tt>. Moreover, the target value (TV) corresponds to the value of the structured data field, and not to the name.</t>
      <t>In the second field of the above rule, the TV is omitted as the <tt>send</tt> CDA implies that the decompressor reads the received residue. However, in this case, the decompressor knows that the residue must be assigned to the JSON field specified in the FID, <tt>value</tt> in this case.</t>
      <t>Please notice that the semantics of the FID described above are not normative. Semantic-specific details of the FID are left to implementations as this document only mandates the <tt>payload</tt> keyword.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of the SCHC framework <xref target="RFC8724"/> apply to this document.</t>
      <!-- Template definitions and rules are assumed to be pre-shared between the compressor and decompressor through a secure provisioning mechanism. If an attacker can modify the rules or templates, it could cause the decompressor to reconstruct payloads that differ from the original, leading to data integrity issues. Implementations MUST ensure that rule provisioning is performed over authenticated and integrity-protected channels. -->

<!-- Compressed payloads are smaller than their original form, but decompression expands them back to full size. An attacker that can craft compressed data with a high repetition count in a `$repeat()` block could cause the decompressor to allocate disproportionate resources. Implementations SHOULD enforce limits on the maximum number of repetitions and on the maximum size of decompressed output. -->

<t>This document does not define any encryption mechanism. If payload confidentiality is required, it <bcp14>MUST</bcp14> be provided by a lower layer or by encrypting the payload before compression.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This section provides guidance to the Internet Assigned Numbers Authority (IANA) regarding registration of values related to this document, in accordance with <xref target="RFC8126"/>.</t>
      <section anchor="iana-reg">
        <name>SCHC Payload Compression Template Functions and Variables</name>
        <t>IANA is requested to create a new registry called "SCHC Payload Compression Template Functions and Variables".</t>
        <t>The registration policy for this registry is "Specification Required" as defined in Section 4.6 of <xref target="RFC8126"/>.</t>
        <t>The registry <bcp14>MUST</bcp14> include the following fields:
- Name of function or variable
- Type (<tt>function</tt> or <tt>variable</tt>)
- Description
- Reference of the specification describing the function or variable</t>
        <t>The designated expert(s) <bcp14>SHOULD</bcp14> verify that the template function, or variable, name is appropriate and not likely to cause confusion with existing entries.</t>
        <t>The registrant of an existing entry may request updates to that entry, subject to the same expert review. They should verify that updates preserve backward compatibility with deployed implementations, or if breaking changes are necessary, consider whether a new registry entry is more appropriate.</t>
        <t>The following template functions and variables are described in this document:</t>
        <table anchor="protmap-reg">
          <name>SCHC Payload Compression Template Functions and Variables Registry</name>
          <thead>
            <tr>
              <th align="left">Function/Variable Name</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>n</tt></td>
              <td align="left">variable</td>
              <td align="left">Positional Template Variable</td>
              <td align="left">This document, <xref target="positional"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>repeat</tt></td>
              <td align="left">function</td>
              <td align="left">Repeat Template Function</td>
              <td align="left">This document, <xref target="repeat"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8724">
          <front>
            <title>SCHC: Generic Framework for Static Context Header Compression and Fragmentation</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="C. Gomez" initials="C." surname="Gomez"/>
            <author fullname="D. Barthel" initials="D." surname="Barthel"/>
            <author fullname="JC. Zuniga" initials="JC." surname="Zuniga"/>
            <date month="April" year="2020"/>
            <abstract>
              <t>This document defines the Static Context Header Compression and fragmentation (SCHC) framework, which provides both a header compression mechanism and an optional fragmentation mechanism. SCHC has been designed with Low-Power Wide Area Networks (LPWANs) in mind.</t>
              <t>SCHC compression is based on a common static context stored both in the LPWAN device and in the network infrastructure side. This document defines a generic header compression mechanism and its application to compress IPv6/UDP headers.</t>
              <t>This document also specifies an optional fragmentation and reassembly mechanism. It can be used to support the IPv6 MTU requirement over the LPWAN technologies. Fragmentation is needed for IPv6 datagrams that, after SCHC compression or when such compression was not possible, still exceed the Layer 2 maximum payload size.</t>
              <t>The SCHC header compression and fragmentation mechanisms are independent of the specific LPWAN technology over which they are used. This document defines generic functionalities and offers flexibility with regard to parameter settings and mechanism choices. This document standardizes the exchange over the LPWAN between two SCHC entities. Settings and choices specific to a technology or a product are expected to be grouped into profiles, which are specified in other documents. Data models for the context and profiles are out of scope.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8724"/>
          <seriesInfo name="DOI" value="10.17487/RFC8724"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
            <front>
              <title>Key words for use in RFCs to Indicate Requirement Levels</title>
              <author fullname="S. Bradner" initials="S." surname="Bradner"/>
              <date month="March" year="1997"/>
              <abstract>
                <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. 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/rfc8174">
            <front>
              <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <date month="May" year="2017"/>
              <abstract>
                <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that 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>
        </referencegroup>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
      </references>
    </references>
    <?line 300?>

<section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>A great token of appreciation to Rajat Kandoi and Ari Keränen for their support in the inception and review of this draft. Their ideas and thinking are also reflected in the text of the draft.</t>
    </section>
    <section anchor="abnf">
      <name>Preliminary ABNF for Template Syntax</name>
      <t>This appendix provides a preliminary ABNF (RFC 5234) grammar for the template syntax defined in this document. This grammar is work in progress and is subject to discussion and agreement within the SCHC Working Group.</t>
      <sourcecode type="abnf"><![CDATA[
template       = *( fixed-text / variable / function )

fixed-text     = 1*( %x00-23 / %x25-FF )  ; any character except "$"

variable       = "$" pos-id ":" length
pos-id         = 1*DIGIT
length         = 1*DIGIT

function       = "$" func-name "(" func-args ")"
func-name      = 1*ALPHA
func-args      = func-arg *( "," SP func-arg )
func-arg       = quoted-string / template

quoted-string  = "'" *( %x00-26 / %x28-FF ) "'"
]]></sourcecode>
    </section>
  </back>
  <!-- ##markdown-source:
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
MLSQuE/Xkn3lqsCRnvCBgboLNEIBiQ2pvMx98ndhJOVKgp8/iAzFYZLcOF27
52rFJL83ggWVWkQCgdwMQm8CCe36u0luhlv+/tH58RMjO/+ws2UMutS1vi91
3+xu/74RF7Edjd8jpvaZMbvk9ZVuvOLdbO/t5JEbi9g3kQ25Ph6KO4hoFnKJ
RlbQL4T988+bTdgPS1bvln/EB4WbcmSpe3GUmjmTI649gwa9V+RpUPiww5+T
HqV4Ld/B7R9h+lLTIkeVFj+q6v/+U6jCVtU0lqiWiD1sTILNGSw9hJZJGf0v
AiE6ItWEB/HtB1sj0QVpEcFq/A2qSk1zRnnav7lkjSLPgqd6BX4RIEwBuiaO
/v3ilLblaHS+AnW9Bh8mJ8XUum38TY8i09feb9PvT8TT4E9mia8OHjzsA5Xk
YiErV0b0L7bz7Lsya/DVPg4fKQLRBBhm7ueNEEh4WxbU7ajtH8YRu8Iq3uav
sXEODg+Z+GoD/f1TfLnHPT1DIuA9rx/3vBT3kyQYw8/tw4N/v75/f3jwAIb+
/frgq+HpqegL8d+E2txLIGB1kd+id7eXJG5yuzpcxcaMoQYocNgzLWKJuSLc
sP0vT86+P7tITAvZ5o1kGqqVnRkvDsk99fbMN1nNAAr0e4m/56Y6evbq6VHi
h5kb9gKSqjfoifNX/lLfDXcLU4t3NjSd6PecPCRJfAf3+EVPODJ+zWR8xGSE
W5Tf+n8lYVxXHFAAAA==

-->

</rfc>
