<?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 4.0.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-schc-compress-payload-00" 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-ietf-schc-compress-payload-00"/>
    <author initials="L." surname="Corneo" fullname="Lorenzo Corneo">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <country>Finland</country>
        </postal>
        <email>lorenzo.corneo@ericsson.com</email>
      </address>
    </author>
    <author initials="E." surname="Ramos" fullname="Edgar Ramos">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <country>Finland</country>
        </postal>
        <email>edgar.ramos@ericsson.com</email>
      </address>
    </author>
    <author initials="J." surname="Jimenez" fullname="Jaime Jimenez">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <country>Finland</country>
        </postal>
        <email>jaime.jimenez@ericsson.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="24"/>
    <area>Applications</area>
    <workgroup>SCHC Working Group</workgroup>
    <abstract>
      <?line 42?>

<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-ietf-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 46?>

<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 303?>

<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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
Gr/oCUfGr5mMD5mMcIvyW/8PTr1+wlNQAAA=

-->

</rfc>
