<?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-rfc2629 version 1.6.4 (Ruby 3.1.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-href-10" category="std" consensus="true" submissionType="IETF" xml:lang="en" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.1 -->
  <front>
    <title>Constrained Resource Identifiers</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-10"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann" role="editor">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization abbrev="Fraunhofer SIT">Fraunhofer SIT</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>henk.birkholz@sit.fraunhofer.de</email>
      </address>
    </author>
    <date year="2022" month="March" day="07"/>
    <workgroup>CoRE Working Group</workgroup>
    <abstract>
      <t>The Constrained Resource Identifier (CRI) is a complement to the Uniform
Resource Identifier (URI) that serializes the URI components in Concise
Binary Object Representation (CBOR) instead of a sequence of characters.
This simplifies parsing, comparison and reference resolution in
environments with severe limitations on processing power, code size, and
memory size.</t>
      <t>The present revision -10 of this draft contains an experimental
addition that allows representing user information
(<tt>https://alice@chains.example</tt>) in the URI authority component.
This feature lacks test vectors and implementation experience at the
time of writing and requires discussion.</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-core-href/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Constrained RESTful Environments Working Group mailing list (<eref target="mailto:core@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/core-wg/href"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The <xref target="RFC3986">Uniform Resource Identifier (URI)</xref> and its most common
usage, the URI reference, are the Internet standard for linking to
resources in hypertext formats such as <xref target="W3C.REC-html52-20171214">HTML</xref>
or the <xref target="RFC8288">HTTP "Link" header field</xref>.</t>
      <t>A URI reference is a sequence of characters chosen from the repertoire
of US-ASCII characters.
The individual components of a URI reference are delimited by a number
of reserved characters, which necessitates the use of a character escape
mechanism called "percent-encoding" when these reserved characters are
used in a non-delimiting function.
The resolution of URI references involves parsing a character sequence
into its components, combining those components with the components of a
base URI, merging path components, removing dot-segments, and
recomposing the result back into a character sequence.</t>
      <t>Overall, the proper handling of URI references is quite intricate.
This can be a problem especially in <xref target="RFC7228">constrained environments</xref>,
where nodes often have severe code size and memory size limitations.
As a result, many implementations in such environments support only an
ad-hoc, informally-specified, bug-ridden, non-interoperable subset of
half of RFC 3986.</t>
      <t>This document defines the <em>Constrained Resource Identifier (CRI)</em> by
constraining URIs to a simplified subset and serializing their
components in <xref target="RFC8949">Concise Binary Object Representation (CBOR)</xref>
instead of a sequence of characters.
This allows typical operations on URI references such as parsing,
comparison and reference resolution (including all corner cases) to be
implemented in a comparatively small amount of code.</t>
      <t>As a result of simplification, however, CRIs are not capable of
expressing all URIs permitted by the generic syntax of RFC 3986 (hence
the "constrained" in "Constrained Resource Identifier").
The supported subset includes all URIs of the
<xref target="RFC7252">Constrained Application Protocol (CoAP)</xref>, most URIs of the
<xref target="RFC7230">Hypertext Transfer Protocol (HTTP)</xref>,
<xref target="RFC8141">Uniform Resource Names (URNs)</xref>, and other similar URIs.
The exact constraints are defined in <xref target="constraints"/>.</t>
      <section anchor="notational-conventions">
        <name>Notational Conventions</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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>In this specification, the term "byte" is used in its now customary
sense as a synonym for "octet".</t>
        <t>Terms defined in this document appear in <em>cursive</em> where they
are introduced (rendered in plain text as the new term surrounded by
underscores).</t>
      </section>
    </section>
    <section anchor="constraints">
      <name>Constraints</name>
      <t>A Constrained Resource Identifier consists of the same five components
as a URI: scheme, authority, path, query, and fragment.
The components are subject to the following constraints:</t>
      <ol spacing="normal" type="C%d."><li anchor="c-scheme">The scheme name can be any Unicode string (see
Definition D80 in <xref target="Unicode"/>) that matches the syntax of a URI
scheme (see <xref section="3.1" sectionFormat="of" target="RFC3986"/>, which constrains schemes to
ASCII) and is lowercase (see Definition D139 in <xref target="Unicode"/>).
The scheme is always present.</li>
        <li anchor="c-authority">
          <t>An authority is always a host identified by an IP
address or registered name, along with optional port information,
and optionally preceded by user information.  </t>
          <t>
Alternatively, the authority can be absent; the two cases for this
defined in <xref section="3.3" sectionFormat="of" target="RFC3986"/> are modeled by two different
values used in place of an absent authority:  </t>
          <ul spacing="normal">
            <li>the path can begin with a root ("/", as when the authority is
present), or</li>
            <li>the path can be rootless.</li>
          </ul>
          <t>
(Note that in <xref target="cddl"/>, <tt>no-authority</tt> is marked as a feature, as
not all CRI implementations will support authority-less URIs.)</t>
        </li>
        <li anchor="c-userinfo">A userinfo is a text string built out of unreserved
  characters (<xref section="2.3" sectionFormat="of" target="RFC3986"/>) or "sub-delims" (<xref section="2.2" sectionFormat="of" target="RFC3986"/>); any other character needs to be percent-encoded (<xref target="pet"/>).
Note that this excludes the ":" character, which is commonly
deprecated as a way to delimit a cleartext password in a userinfo.</li>
        <li anchor="c-ip-address">An IP address can be either an IPv4 address or an
IPv6 address, optionally with a zone identifier <xref target="RFC6874"/>.
Future versions of IP are not supported (it is likely that a binary
mapping would be strongly desirable, and that cannot be designed
ahead of time, so these versions need to be added as a future
extension if needed).</li>
        <li anchor="c-reg-name">A registered name is a sequence of one or more
<em>labels</em>, which, when joined with dots (".") in between them,
result in a Unicode string that is lowercase and in Unicode
Normalization Form C (NFC) (see Definition D120 in <xref target="Unicode"/>).
(The syntax may be further restricted by the scheme.
As per <xref section="3.2.2" sectionFormat="of" target="RFC3986"/>, a registered name can be empty, for
which case a scheme can define a default for the host.)</li>
        <li anchor="c-port-range">A port is always an integer in the range from 0 to 65535.
Ports outside this range, empty ports (port subcomponents with no
digits, see <xref section="3.2.3" sectionFormat="of" target="RFC3986"/>), or ports with redundant
leading zeros, are not supported.</li>
        <li anchor="c-port-omitted">The port is omitted if and only if the port would be the same as the
scheme's default port (provided the scheme is defining such a default
port) or the scheme is not using ports.
<!-- Note that this is hard to do by a generic URI implementation
that may not know the scheme's default port -->
        </li>
        <li anchor="c-path">
          <t>A path consists of zero or more path segments.
Note that a path of just a single zero-length path segment is allowed --
this is considered equivalent to a path of zero path segments by
HTTP and CoAP, but this equivalence does not hold for CRIs in general as they only perform
normalization on the Syntax-Based Normalization level (<xref section="6.2.2" sectionFormat="of" target="RFC3986"/>, not on the scheme-specific Scheme-Based
Normalization level (<xref section="6.2.3" sectionFormat="of" target="RFC3986"/>).  </t>
          <t>
(A CRI implementation may want to offer scheme-cognizant
interfaces, performing this scheme-specific normalization for
schemes it knows.  The interface could assert which schemes the
implementation knows and provide pre-normalized CRIs.  This can
also relieve the application from removing a lone zero-length path
segment before putting path segments into CoAP Options, i.e., from
performing the check and jump in item 8 of <xref section="6.4" sectionFormat="of" target="RFC7252"/>.  See also <xref format="counter" target="sp-initial-empty"/> in <xref target="the-small-print"/>.)</t>
        </li>
        <li anchor="c-path-segment">
          <t>A path segment can be any Unicode string that is
in NFC, with the exception of the special "." and ".." complete path
segments.
Note that this includes the zero-length string.  </t>
          <t>
If no authority is present in a CRI, the leading path segment cannot be empty.
(See also <xref format="counter" target="sp-initial-empty"/> in <xref target="the-small-print"/>.)</t>
        </li>
        <li anchor="c-query">A query always consists of one or more query parameters.
   A query parameter can be any Unicode string that is in NFC.
   It is often in the form of a "key=value" pair.
   When converting a CRI to a URI, query parameters are separated by an
   ampersand ("&amp;") character.
   (This matches the structure and encoding of the target URI in CoAP
   requests.)
   Queries are optional; there is a difference between an absent query
   and a single query parameter that is the empty string.</li>
        <li anchor="c-fragment">A fragment identifier can be any Unicode string that
   is in NFC.
   Fragment identifiers are optional; there is a difference between an
   absent fragment identifier and a fragment identifier that is the
   empty string.</li>
        <li anchor="c-escaping">The syntax of registered names, path segments, query
   parameters, and fragment identifiers may be further restricted and
   sub-structured by the scheme.
   There is no support, however, for escaping sub-delimiters
   that are not intended to be used in a delimiting function.</li>
        <li anchor="c-mapping">When converting a CRI to a URI, any character that is
   outside the allowed character range or is a delimiter in the URI syntax
   is percent-encoded.
   For CRIs, percent-encoding always uses the UTF-8 encoding form (see
   Definition D92 in <xref target="Unicode"/>) to convert the character to a sequence
   of bytes (that is then converted to a sequence of %HH triplets).
   <!-- As per 3986 2.1, use uppercase hex. -->
        </li>
      </ol>
      <t>Examples for URIs at or beyond the boundaries of these constraints are in <xref format="counter" target="sp-constraints"/> in <xref target="the-small-print"/>.</t>
      <section anchor="constraints-not-expressed-by-the-data-model">
        <name>Constraints not expressed by the data model</name>
        <t>There are syntactically valid CRIs and CRI references that cannot be converted into a URI or URI reference, respectively.</t>
        <t>For CRI references, this is acceptable -- they can be resolved still and result in a valid CRI that can be converted back.
(An example of this is <tt>[0, ["p"]]</tt> which appends a slash and the path segment "p" to its base).</t>
        <t>(Full) CRIs that do not correspond to a valid URI are not valid on their own, and cannot be used.
Normatively they are characterized by the <xref target="cri-to-uri"/> process producing a valid and syntax-normalized URI.
For easier understanding, they are listed here:</t>
        <ul spacing="normal">
          <li>
            <t>CRIs (and CRI references) containing a path component "." or "..".  </t>
            <t>
These would be removed by the remove_dot_segments algorithm of <xref target="RFC3986"/>,
and thus never produce a normalized URI after resolution.  </t>
            <t>
(In CRI references, the <tt>discard</tt> value is used to afford segment removal,
and with "." being an unreserved character, expressing them as "%2e" and "%2e%2e" is not even viable,
let alone practical).</t>
          </li>
          <li>
            <t>CRIs without authority whose path starts with two or more empty segments.  </t>
            <t>
When converted to URIs, these would violate the requirement that in absence of an authority, a URI's path cannot begin with two slash characters,
and they would be indistinguishable from a URI with a shorter path and a present but empty authority component.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="creation-and-normalization">
      <name>Creation and Normalization</name>
      <t>In general, resource identifiers are created on the initial creation of a
resource with a certain resource identifier, or the initial exposition
of a resource under a particular resource identifier.</t>
      <t>A Constrained Resource Identifier <bcp14>SHOULD</bcp14> be created by
the naming authority that governs the namespace of the resource
identifier (see also <xref target="RFC8820"/>).
For example, for the resources of an HTTP origin server,
that server is responsible for creating the CRIs for those resources.</t>
      <t>The naming authority <bcp14>MUST</bcp14> ensure that any CRI created
satisfies the constraints defined in <xref target="constraints"/>. The creation of a
CRI fails if the CRI cannot be validated to satisfy all of the
constraints.</t>
      <t>If a naming authority creates a CRI from user input, it <bcp14>MAY</bcp14> apply
the following (and only the following) normalizations to get the CRI
more likely to validate:</t>
      <ul spacing="normal">
        <li>map the scheme name to lowercase (<xref format="counter" target="c-scheme"/>);</li>
        <li>map the registered name to NFC (<xref format="counter" target="c-reg-name"/>) and split it on
embedded dots;</li>
        <li>elide the port if it is the default port for the scheme
(<xref format="counter" target="c-port-omitted"/>);
<!-- * elide a single zero-length path segment ({{<c-path}}); -->
        </li>
        <li>map path segments, query parameters and the fragment identifier to
NFC form (<xref format="counter" target="c-path-segment"/>, <xref format="counter" target="c-query"/>, <xref format="counter" target="c-fragment"/>).</li>
      </ul>
      <t>Once a CRI has been created, it can be used and transferred without
further normalization.
All operations that operate on a CRI <bcp14>SHOULD</bcp14> rely on the
assumption that the CRI is appropriately pre-normalized.
(This does not contradict the requirement that when CRIs are
transferred, recipients must operate on as-good-as untrusted input and
fail gracefully in the face of malicious inputs.)</t>
    </section>
    <section anchor="comparison">
      <name>Comparison</name>
      <t>One of the most common operations on CRIs is comparison: determining
whether two CRIs are equivalent, without dereferencing the CRIs (using
them to access their respective resource(s)).</t>
      <t>Determination of equivalence or difference of CRIs is based on simple
component-wise comparison. If two CRIs are identical
component-by-component (using code-point-by-code-point comparison for
components that are Unicode strings) then it is safe to conclude that
they are equivalent.</t>
      <t>This comparison mechanism is designed to minimize false negatives while
strictly avoiding false positives.
The constraints defined in <xref target="constraints"/> imply the most
common forms of syntax- and scheme-based normalizations in URIs, but do
not comprise protocol-based normalizations that require accessing the
resources or detailed knowledge of the scheme's dereference algorithm.
False negatives can be caused, for example, by CRIs that are not
appropriately pre-normalized and by resource aliases.</t>
      <t>When CRIs are compared to select (or avoid) a network action, such as
retrieval of a representation, fragment components (if any) should be
excluded from the comparison.</t>
    </section>
    <section anchor="cri-references">
      <name>CRI References</name>
      <t>The most common usage of a Constrained Resource Identifier is to embed
it in resource representations, e.g., to express a hyperlink between the
represented resource and the resource identified by the CRI.</t>
      <t>This section defines the serialization of CRIs in
<xref target="RFC8949">Concise Binary Object Representation (CBOR)</xref>.
To reduce representation size, CRIs are not serialized directly.
Instead, CRIs are indirectly referenced through <em>CRI references</em>.
These take advantage of hierarchical locality and provide a very compact
encoding.
The CBOR serialization of CRI references is specified in
<xref target="cbor-serialization"/>.</t>
      <t>The only operation defined on a CRI reference is <em>reference resolution</em>:
the act of transforming a CRI reference into a CRI.
<!-- , relative to a base URI -->
An application <bcp14>MUST</bcp14> implement this operation by applying
the algorithm specified in <xref target="reference-resolution"/> (or any algorithm
that is functionally equivalent to it).</t>
      <t>The reverse operation of transforming a CRI into a CRI reference is
unspecified;
implementations are free to use any algorithm as long as reference
resolution of the resulting CRI reference yields the original CRI.
Notably, a CRI reference is not required to satisfy all of the
constraints of a CRI; the only requirement on a CRI reference is that
reference resolution <bcp14>MUST</bcp14> yield the original CRI.</t>
      <t>When testing for equivalence or difference, applications <bcp14>SHOULD NOT</bcp14>
directly compare CRI references; the references should be
resolved to their respective CRI before comparison.</t>
      <section anchor="cbor-serialization">
        <name>CBOR Serialization</name>
        <t>A CRI or CRI reference is encoded as a CBOR array <xref target="RFC8949"/>, with the
structure as described in the <xref target="RFC8610">Concise Data Definition Language
(CDDL)</xref> as follows: <cref anchor="replace-xxxx">RFC Ed.: throughout this section, please replace
RFC-XXXX with the RFC number of this specification and remove this
note.</cref></t>
        <figure anchor="cddl">
          <name>CDDL for CRI CBOR serialization</name>
          <sourcecode type="cddl"><![CDATA[
; not expressed in this CDDL spec: trailing nulls to be left off

RFC-XXXX-Definitions = [CRI, CRI-Reference]

CRI = [
  scheme,
  authority / no-authority,
  local-part
]


CRI-Reference = [
  ((scheme / null, authority / no-authority)
   // discard),                 ; relative reference
  local-part
]

local-part = (
  path / null,
  query / null,
  fragment / null
)

scheme      = scheme-name / scheme-id
scheme-name = text .regexp "[a-z][a-z0-9+.-]*"
scheme-id   = (COAP / COAPS / HTTP / HTTPS / URN / DID /
               other-scheme)
              .within nint
COAP = -1 COAPS = -2 HTTP = -3 HTTPS = -4 URN = -5 DID = -6
other-scheme = nint .feature "scheme-id-extension"

no-authority = NOAUTH-NOSLASH / NOAUTH-LEADINGSLASH
NOAUTH-LEADINGSLASH = null .feature "no-authority"
NOAUTH-NOSLASH = true .feature "no-authority"

authority   = [?userinfo, host, ?port]
userinfo    = (false, text .feature "userinfo")
host        = (host-ip // host-name)
host-name   = (*text) ; lowercase, NFC labels
host-ip     = (bytes .size 4 //
               (bytes .size 16, ?zone-id))
zone-id     = text
port        = 0..65535

discard     = DISCARD-ALL / 0..127
DISCARD-ALL = true
path        = [*text]
query       = [*text]
fragment    = text

]]></sourcecode>
        </figure>
        <t>This CDDL specification is simplified for exposition and needs to be augmented by the
following rule for interchange of CRIs and CRI references: Trailing null values <bcp14>MUST</bcp14> be removed, and
two leading null values (scheme and authority both not given) are
represented by using the <tt>discard</tt> alternative instead.</t>
        <t>The rules <tt>scheme</tt>, <tt>authority</tt>, <tt>path</tt>, <tt>query</tt>, <tt>fragment</tt>
correspond to the (sub-)components of a CRI, as described in
<xref target="constraints"/>, with the addition of the <tt>discard</tt> section.</t>
        <section anchor="the-discard-section">
          <name>The <tt>discard</tt> Section</name>
          <t>The <tt>discard</tt> section can be used in a CRI reference when neither a
scheme nor an authority is present.
It then expresses the operations performed on a base CRI by CRI references that
are equivalent to URI references with relative paths and path prefixes such as "/", "./", "../", "../../", etc.
"." and ".." are not available in CRIs and are therefore expressed
using <tt>discard</tt> after a normalization step, as is the presence or absence of a leading "/".</t>
          <t>E.g., a simple URI reference "foo" specifies to remove one leading segment
from the base URI's path, which is represented in the equivalent CRI
reference discard section as the value <tt>1</tt>; similarly "../foo" removes
two leading segments, represented as <tt>2</tt>;
and "/foo" removes all segments, represented in the <tt>discard</tt> section as the value <tt>true</tt>.
The exact semantics of the section values are defined by
<xref target="reference-resolution"/>.</t>
          <t>Most URI references that <xref section="4.2" sectionFormat="of" target="RFC3986"/> calls "relative
references" (i.e., references that need to undergo a resolution
process to obtain a URI) correspond to the CRI form that starts with
<tt>discard</tt>.  The exception are relative references with an <tt>authority</tt>
(called a "network-path reference" in <xref section="4.2" sectionFormat="of" target="RFC3986"/>), which
discard the entire path of the base CRI.
These CRI references never carry a <tt>discard</tt> section: the value of
<tt>discard</tt> defaults to <tt>true</tt>.</t>
        </section>
        <section anchor="visualization">
          <name>Visualization</name>
          <t>The structure of a CRI reference is visualized using the somewhat limited means
of a railroad diagram:</t>
          <artset>
            <artwork type="svg"><svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 850 300">
                <g transform="translate(40 50)">
                  <text x="-30" y="-10">cri-reference:</text>
                  <path class="station" d="M5.5 94 v12 m 4 0 v-12" fill="none" stroke="black" stroke-width="1.5"/>
                  <path class="station" d="M780.5 94 v12 m 4 0 v-12" fill="none" stroke="black" stroke-width="1.5"/>
                  <path class="arrow" d="M397 10 l-4 3 v-6 z" fill="none" stroke="black" stroke-width="1.5"/>
                  <rect class="rule" fill="none" height="20" rx="0" ry="0" stroke="black" stroke-width="1.5" width="70" x="90" y="90"/>
                  <text class="rule" text-anchor="middle" x="125" y="105">scheme</text>
                  <rect class="rule" fill="none" height="20" rx="0" ry="0" stroke="black" stroke-width="1.5" width="90" x="180" y="90"/>
                  <text class="rule" text-anchor="middle" x="225" y="105">authority</text>
                  <rect class="rule" fill="none" height="20" rx="0" ry="0" stroke="black" stroke-width="1.5" width="70" x="145" y="120"/>
                  <text class="rule" text-anchor="middle" x="180" y="135">discard</text>
                  <path class="arrow" d="M527 30 l-4 3 v-6 z" fill="none" stroke="black" stroke-width="1.5"/>
                  <rect class="rule" fill="none" height="20" rx="0" ry="0" stroke="black" stroke-width="1.5" width="50" x="350" y="90"/>
                  <text class="rule" text-anchor="middle" x="375" y="105">path</text>
                  <path class="arrow" d="M562 50 l-4 3 v-6 z" fill="none" stroke="black" stroke-width="1.5"/>
                  <rect class="rule" fill="none" height="20" rx="0" ry="0" stroke="black" stroke-width="1.5" width="50" x="450" y="90"/>
                  <text class="rule" text-anchor="middle" x="475" y="105">query</text>
                  <path class="arrow" d="M597 70 l-4 3 v-6 z" fill="none" stroke="black" stroke-width="1.5"/>
                  <rect class="rule" fill="none" height="20" rx="0" ry="0" stroke="black" stroke-width="1.5" width="90" x="550" y="90"/>
                  <text class="rule" text-anchor="middle" x="595" y="105">fragment</text>
                  <path d="M40 20 v70" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M750 90 q0 10 10 10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M330 40 v50" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M720 90 q0 10 10 10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M430 60 v30" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M690 90 q0 10 10 10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M530 80 v10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M660 90 q0 10 10 10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M640 100 h140" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M520 100 q10 0 10 -10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M530 80 q0 -10 10 -10 h110 q10 0 10 10 v10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M500 100 h50" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M420 100 q10 0 10 -10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M430 60 q0 -10 10 -10 h240 q10 0 10 10 v30" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M400 100 h50" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M320 100 q10 0 10 -10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M330 40 q0 -10 10 -10 h370 q10 0 10 10 v50" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M290 110 v10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M215 130 h65 q10 0 10 -10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M70 120 q0 10 10 10 h65" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M290 110 q0 -10 10 -10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M270 100 h80" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M160 100 h20" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M60 100 q10 0 10 10 v10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M30 100 q10 0 10 -10" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M40 20 q0 -10 10 -10 h690 q10 0 10 10 v70" fill="none" stroke="black" stroke-width="1.5"/>
                  <path d="M10 100 h80" fill="none" stroke="black" stroke-width="1.5"/>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[cri-reference:
        ╭──────────────────────────────────────>───────────────────────────────────────╮
        │                                                                              │
        │                               ╭─────────────────────>─────────────────────╮  │
        │                               │                                           │  │
        │                               │          ╭──────────────>──────────────╮  │  │
        │                               │          │                             │  │  │
        │                               │          │           ╭──────>───────╮  │  │  │
        │                               │          │           │              │  │  │  │
    │├──╯──╮── scheme ── authority ──╭──╯── path ──╯── query ──╯── fragment ──╰──╰──╰──╰──┤│
           │                         │
           ╰──────── discard ────────╯

]]></artwork>
          </artset>
          <t>This visualization does not go into the details of the elements.</t>
        </section>
        <section anchor="examples">
          <name>Examples</name>
          <sourcecode type="cbor-diag"><![CDATA[
[-1,             / scheme -- equivalent to "coap" /
 [h'C6336401',   / host /
  61616],        / port /
 [".well-known", / path /
  "core"]
]
]]></sourcecode>
          <sourcecode type="cbor-diag"><![CDATA[
[true,                  / discard /
 [".well-known",        / path /
  "core"],
 ["rt=temperature-c"]]  / query /
]]></sourcecode>
          <sourcecode type="cbor-diag"><![CDATA[
[-6,             / scheme -- equivalent to "did" /
 true,           / authority = NOAUTH-NOSLASH /
 ["web:alice:bob"] / path /
]
]]></sourcecode>
        </section>
        <section anchor="specific-terminology">
          <name>Specific Terminology</name>
          <t>A CRI reference is considered <em>well-formed</em> if it matches the
structure as expressed in <xref target="cddl"/> in CDDL, with the additional
requirement that trailing <tt>null</tt> values are removed from the array.</t>
          <t>A CRI reference is considered <em>absolute</em> if it is well-formed
and the sequence of sections starts with a non-null <tt>scheme</tt>.</t>
          <t>A CRI reference is considered <em>relative</em> if it is well-formed
and the sequence of sections is empty or starts with a section other
than those that would constitute a <tt>scheme</tt>.</t>
        </section>
      </section>
      <section anchor="ingesting-and-encoding-a-cri-reference">
        <name>Ingesting and encoding a CRI Reference</name>
        <t>From an abstract point of view, a CRI Reference is a data structure
with six sections:</t>
        <t>scheme, authority, discard, path, query, fragment</t>
        <t>Each of these sections can be unset ("null"),
<!-- "not defined" in RFC 3986 -->
except for discard,
which is always an unsigned number or <tt>true</tt>.  If scheme and/or
authority are non-null, discard must be <tt>true</tt>.</t>
        <t>When ingesting a CRI Reference that is in the transfer form, those
sections are filled in from the transfer form (unset sections are
filled with null), and the following steps are performed:</t>
        <ul spacing="normal">
          <li>If the array is entirely empty, replace it with <tt>[0]</tt>.</li>
          <li>If discard is present in the transfer form (i.e., the outer array
starts with true or an unsigned number), set scheme and authority to null.</li>
          <li>If scheme and/or authority are present in the transfer form (i.e.,
the outer array starts with null, a text string, or a negative integer), set
discard to <tt>true</tt>.</li>
        </ul>
        <t>Upon encoding the abstract form into the transfer form, the inverse
processing is performed:  If scheme and/or authority are not null, the
discard value is not transferred (it must be true in this case).  If
they are both null, they are both left out and only discard is
transferred.
Trailing null values are removed from the array.
As a special case, an empty array is sent in place for a remaining
<tt>[0]</tt> (URI "").</t>
      </section>
      <section anchor="reference-resolution">
        <name>Reference Resolution</name>
        <t>The term "relative" implies that a "base CRI" exists against which the
relative reference is applied. Aside from fragment-only references,
relative references are only usable when a base CRI is known.</t>
        <t>The following steps define the process of resolving any well-formed CRI
reference against a base CRI so that the result is a CRI in the form of
an absolute CRI reference:</t>
        <ol spacing="normal" type="1"><li>Establish the base CRI of the CRI reference and express it in the
  form of an abstract absolute CRI reference.</li>
          <li>Initialize a buffer with the sections from the base CRI.</li>
          <li>
            <t>If the value of discard is <tt>true</tt> in the CRI reference (which is
implicitly the case when scheme and/or authority are present in the reference), replace the
path in the buffer with the empty array, unset query and
fragment, and set a <tt>true</tt> authority to <tt>null</tt>.  If the value of
discard is an unsigned number, remove as many elements
from the end of the path array; if it is non-zero, unset query and
fragment.  </t>
            <t>
Set discard to <tt>true</tt> in the buffer.</t>
          </li>
          <li>If the path section is set in the CRI reference, append all
elements from the path array to the array in the path section in
the buffer; unset query and fragment.</li>
          <li>Apart from the path and discard, copy all non-null sections from
the CRI reference to the buffer in sequence; unset fragment in the buffer if
query is non-null in the CRI reference (and therefore has been
copied to the buffer).</li>
          <li>Return the sections in the buffer as the resolved CRI.</li>
        </ol>
      </section>
    </section>
    <section anchor="relationship-between-cris-uris-and-iris">
      <name>Relationship between CRIs, URIs and IRIs</name>
      <t>CRIs are meant to replace both <xref target="RFC3986">Uniform Resource Identifiers (URIs)</xref>
and <xref target="RFC3987">Internationalized Resource Identifiers (IRIs)</xref>
in <xref target="RFC7228">constrained environments</xref>.
Applications in these environments may never need to use URIs and IRIs
directly, especially when the resource identifier is used simply for
identification purposes or when the CRI can be directly converted into a
CoAP request.</t>
      <t>However, it may be necessary in other environments to determine the
associated URI or IRI of a CRI, and vice versa. Applications can perform
these conversions as follows:</t>
      <dl newline="true">
        <dt>CRI to URI</dt>
        <dd>
          <t>A CRI is converted to a URI as specified in <xref target="cri-to-uri"/>.</t>
        </dd>
        <dt>URI to CRI</dt>
        <dd>
          <t>The method of converting a URI to a CRI is unspecified;
implementations are free to use any algorithm as long as converting
the resulting CRI back to a URI yields an equivalent URI.</t>
        </dd>
        <dt>CRI to IRI</dt>
        <dd>
          <t>A CRI can be converted to an IRI by first converting it to a URI as
specified in <xref target="cri-to-uri"/>, and then converting the URI
to an IRI as described in <xref section="3.2" sectionFormat="of" target="RFC3987"/>.</t>
        </dd>
        <dt>IRI to CRI</dt>
        <dd>
          <t>An IRI can be converted to a CRI by first converting it to a URI as
described in <xref section="3.1" sectionFormat="of" target="RFC3987"/>, and then
converting the URI to a CRI as described above.</t>
        </dd>
      </dl>
      <!-- What? -->
<t>Everything in this section also applies to CRI references, URI
references and IRI references.</t>
      <section anchor="cri-to-uri">
        <name>Converting CRIs to URIs</name>
        <t>Applications <bcp14>MUST</bcp14> convert a CRI reference to a URI
reference by determining the components of the URI reference according
to the following steps and then recomposing the components to a URI
reference string as specified in <xref section="5.3" sectionFormat="of" target="RFC3986"/>.</t>
        <dl newline="true">
          <dt>scheme</dt>
          <dd>
            <t>If the CRI reference contains a <tt>scheme</tt> section, the scheme
component of the URI reference consists of the value of that
section.
Otherwise, the scheme component is unset.</t>
          </dd>
          <dt>authority</dt>
          <dd>
            <t>If the CRI reference contains a <tt>host-name</tt> or <tt>host-ip</tt> item, the
authority component of the URI reference consists of a host
subcomponent, optionally followed by a colon (":") character and a
port subcomponent, optionally preceded by a <tt>userinfo</tt> subcomponent.
Otherwise, the authority component is unset.
</t>
            <t>The host subcomponent consists of the value of the <tt>host-name</tt> or
<tt>host-ip</tt> item.</t>
            <t>The <tt>userinfo</tt> subcomponent, if present, is turned into a single
string by
appending a "@".  Otherwise, both the subcomponent and the "@" sign
are omitted.
Any character in the value of the <tt>userinfo</tt> elements that is not in
the set of unreserved characters (<xref section="2.3" sectionFormat="of" target="RFC3986"/>) or
"sub-delims" (<xref section="2.2" sectionFormat="of" target="RFC3986"/>) <bcp14>MUST</bcp14> be
percent-encoded.</t>
            <t>The <tt>host-name</tt> is turned into a single string by joining the
elements separated by dots (".").
Any character in the elements of a <tt>host-name</tt> item that is a dot
("."), or not in
the set of unreserved characters (<xref section="2.3" sectionFormat="of" target="RFC3986"/>) or
"sub-delims" (<xref section="2.2" sectionFormat="of" target="RFC3986"/>) <bcp14>MUST</bcp14> be
percent-encoded.</t>
            <t>The value of a <tt>host-ip</tt> item <bcp14>MUST</bcp14> be
represented as a string that matches the "IPv4address" or
"IP-literal" rule (<xref section="3.2.2" sectionFormat="of" target="RFC3986"/>).
Any zone-id is appended to the string, separated by "%25" as
defined in <xref section="2" sectionFormat="of" target="RFC6874"/>, or as specified in a superseding
zone-id specification document <xref target="I-D.carpenter-6man-rfc6874bis"/>; this also leads to a modified
"IP-literal" rule as specified in these documents.</t>
            <t>If the CRI reference contains a <tt>port</tt> item, the port
subcomponent consists of the value of that item in decimal
notation.
Otherwise, the colon (":") character and the port subcomponent are
both omitted.</t>
          </dd>
          <dt>path</dt>
          <dd>
            <t>If the CRI reference contains a <tt>discard</tt> item of value <tt>true</tt>, the
path component is considered <em>rooted</em>.  If it
contains a <tt>discard</tt> item of value <tt>0</tt> and the <tt>path</tt> item is
present, the conversion fails.  If it contains a positive discard
item, the path component is considered <em>unrooted</em> and
prefixed by as many "../" components as the <tt>discard</tt> value minus
one indicates.
</t>
            <t>If the discard item is not present and the CRI reference contains an
authority that is <tt>true</tt>, the path component of the URI reference is
considered unrooted.  Otherwise, the path component is considered
rooted.</t>
            <t>If the CRI reference contains one or more <tt>path</tt> items, the path
component is constructed by concatenating the sequence of
representations of these items.  These representations generally
contain a leading slash ("/") character and the value of each item,
processed as discussed below.  The leading slash character is
omitted for the first path item only if the path component is
considered "unrooted".  <!-- A path segment that contains a colon
character (e.g., --> <!-- "this:that") cannot directly be used as
the first such item.  Such a --> <!-- segment MUST be preceded by a
dot-segment (e.g., "./this:that") --> <!-- unless scheme and/or
authority are present. -->
            </t>
            <t>Any character in the value of a <tt>path</tt> item that is not
in the set of unreserved characters or "sub-delims" or a colon
(":") or commercial at ("@") character <bcp14>MUST</bcp14> be
percent-encoded.</t>
            <t>If the authority component is present (not <tt>null</tt> or <tt>true</tt>) and the
path component does not match the "path-abempty" rule (<xref section="3.3" sectionFormat="of" target="RFC3986"/>), the conversion fails.</t>
            <t>If the authority component is not present, but the scheme component
is, and the path component does not match the "path-absolute",
"path-rootless" (authority == <tt>true</tt>) or "path-empty" rule (<xref section="3.3" sectionFormat="of" target="RFC3986"/>), the conversion fails.</t>
            <t>If neither the authority component nor the scheme component are
present, and the path component does not match the "path-absolute",
"path-noscheme" or "path-empty" rule (<xref section="3.3" sectionFormat="of" target="RFC3986"/>), the
conversion fails.</t>
          </dd>
          <dt>query</dt>
          <dd>
            <t>If the CRI reference contains one or more <tt>query</tt> items,
the query component of the URI reference consists of the value of
each item, separated by an ampersand ("&amp;") character.
Otherwise, the query component is unset.
</t>
            <t>Any character in the value of a <tt>query</tt> item that is not
in the set of unreserved characters or "sub-delims" or a colon
(":"), commercial at ("@"), slash ("/") or question mark ("?")
character <bcp14>MUST</bcp14> be percent-encoded.
Additionally, any ampersand character ("&amp;") in the item
value <bcp14>MUST</bcp14> be percent-encoded.</t>
          </dd>
          <dt>fragment</dt>
          <dd>
            <t>If the CRI reference contains a fragment item, the fragment
component of the URI reference consists of the value of that
item.
Otherwise, the fragment component is unset.
</t>
            <t>Any character in the value of a <tt>fragment</tt> item that is
not in the set of unreserved characters or "sub-delims" or a colon
(":"), commercial at ("@"), slash ("/") or question mark ("?")
character <bcp14>MUST</bcp14> be percent-encoded.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="pet">
      <name>Extended CRI: Accommodating Percent Encoding (PET)</name>
      <t>CRIs have been designed to relieve implementations operating on CRIs
from string scanning, which both helps constrained implementations and
implementations that need to achieve high throughput.</t>
      <t>Basic CRI does not support URI components that <em>require</em>
percent-encoding (<xref section="2.1" sectionFormat="of" target="RFC3986"/>) to represent them in the URI
syntax, except where that percent-encoding is used to escape the main
delimiter in use.</t>
      <t>E.g., the URI</t>
      <sourcecode type="uri"><![CDATA[
https://alice/3%2f4-inch
]]></sourcecode>
      <t>is represented by the basic CRI</t>
      <sourcecode type="coap-diag"><![CDATA[
[-4, ["alice"], ["3/4-inch"]]
]]></sourcecode>
      <t>However, percent-encoding that is used at the application level is not
supported by basic CRIs:</t>
      <sourcecode type="uri"><![CDATA[
did:web:alice:7%3A1-balun
]]></sourcecode>
      <t>This section presents a method to represent percent-encoded segments
of userinfo, hostnames, paths, and queries, as well as fragments.</t>
      <t>The four CDDL rules</t>
      <sourcecode type="cddl"><![CDATA[
userinfo    = (false, text .feature "userinfo")
host-name   = (*text)
path        = [*text]
query       = [*text]
fragment    = text
]]></sourcecode>
      <t>are replaced with</t>
      <sourcecode type="cddl"><![CDATA[
userinfo    = (false, text-or-pet .feature "userinfo")
host-name   = (*text-or-pet)
path        = [*text-or-pet]
query       = [*text-or-pet]
fragment    = text-or-pet

text-or-pet = text /
    text-pet-sequence .feature "extended-cri"

; text1 and pet1 alternating, at least one pet1:
text-pet-sequence = [?text1, ((+(pet1, text1), ?pet1) // pet1)]
; pet is percent-encoded bytes
pet1 = bytes .ne ''
text1 = text .ne ""
]]></sourcecode>
      <t>That is, for each of the host-name, path, and query segments, and for
the userinfo and fragment components, an alternate representation is provided
besides a simple text string: a non-empty array of alternating non-blank text and byte
strings, the text strings of which stand for non-percent-encoded text,
while the byte strings retain the special
semantics of percent-encoded text without actually being
percent-encoded.</t>
      <t>The above DID URI can now be represented as:</t>
      <sourcecode type="cbor-diag"><![CDATA[
[-6, true, [["web:alice:7", ':', "1-balun"]]]
]]></sourcecode>
    </section>
    <section anchor="impl">
      <name>Implementation Status</name>
      <t>With the exception of the authority=true fix, host-names split into
labels, and <xref target="pet"/>, CRIs are implemented in <tt>https://gitlab.com/chrysn/micrurus</tt>.
A golang implementation of version -10 of this document is found at:
<tt>https://github.com/thomas-fossati/href</tt>
        <!-- see RFC 7942 -->
      </t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Parsers of CRI references must operate on input that is assumed to be
untrusted. This means that parsers <bcp14>MUST</bcp14> fail gracefully
in the face of malicious inputs.
Additionally, parsers <bcp14>MUST</bcp14> be prepared to deal with
resource exhaustion (e.g., resulting from the allocation of big data
items) or exhaustion of the call stack (stack overflow).
See <xref section="10" sectionFormat="of" target="RFC8949"/> for additional
security considerations relating to CBOR.</t>
      <t>The security considerations discussed in <xref section="7" sectionFormat="of" target="RFC3986"/> and
<xref section="8" sectionFormat="of" target="RFC3987"/> for URIs and IRIs also apply to CRIs.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC3987" target="https://www.rfc-editor.org/info/rfc3987">
          <front>
            <title>Internationalized Resource Identifiers (IRIs)</title>
            <author fullname="M. Duerst" initials="M." surname="Duerst">
              <organization/>
            </author>
            <author fullname="M. Suignard" initials="M." surname="Suignard">
              <organization/>
            </author>
            <date month="January" year="2005"/>
            <abstract>
              <t>This document defines a new protocol element, the Internationalized  Resource Identifier (IRI), as a complement of the Uniform Resource  Identifier (URI). An IRI is a sequence of characters from the  Universal Character Set (Unicode/ISO 10646). A mapping from IRIs to   URIs is defined, which means that IRIs can be used instead of URIs,  where appropriate, to identify resources.</t>
              <t> The approach of defining a new protocol element was chosen instead of extending or changing the definition of URIs.  This was done in order  to allow a clear distinction and to avoid incompatibilities with  existing software. Guidelines are provided for the use and deployment of IRIs in various protocols, formats, and software components that currently deal with URIs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3987"/>
          <seriesInfo name="DOI" value="10.17487/RFC3987"/>
        </reference>
        <reference anchor="RFC6874" target="https://www.rfc-editor.org/info/rfc6874">
          <front>
            <title>Representing IPv6 Zone Identifiers in Address Literals and Uniform Resource Identifiers</title>
            <author fullname="B. Carpenter" initials="B." surname="Carpenter">
              <organization/>
            </author>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire">
              <organization/>
            </author>
            <author fullname="R. Hinden" initials="R." surname="Hinden">
              <organization/>
            </author>
            <date month="February" year="2013"/>
            <abstract>
              <t>This document describes how the zone identifier of an IPv6 scoped address, defined as &lt;zone_id&gt; in the IPv6 Scoped Address Architecture (RFC 4007), can be represented in a literal IPv6 address and in a Uniform Resource Identifier that includes such a literal address.  It updates the URI Generic Syntax specification (RFC 3986) accordingly.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6874"/>
          <seriesInfo name="DOI" value="10.17487/RFC6874"/>
        </reference>
        <reference anchor="I-D.carpenter-6man-rfc6874bis" target="https://www.ietf.org/archive/id/draft-carpenter-6man-rfc6874bis-03.txt">
          <front>
            <title>Representing IPv6 Zone Identifiers in Address Literals and Uniform Resource Identifiers</title>
            <author fullname="Brian Carpenter">
	 </author>
            <author fullname="Stuart Cheshire">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Robert M. Hinden">
              <organization>Check Point Software</organization>
            </author>
            <date day="8" month="February" year="2022"/>
            <abstract>
              <t>   This document describes how the zone identifier of an IPv6 scoped
   address, defined as &lt;zone_id&gt; in the IPv6 Scoped Address Architecture
   (RFC 4007), can be represented in a literal IPv6 address and in a
   Uniform Resource Identifier that includes such a literal address.  It
   updates the URI Generic Syntax and Internationalized Resource
   Identifier specifications (RFC 3986, RFC 3987) accordingly, and
   obsoletes RFC 6874.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-carpenter-6man-rfc6874bis-03"/>
        </reference>
        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz">
              <organization/>
            </author>
            <author fullname="C. Vigano" initials="C." surname="Vigano">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049).  Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="Unicode" target="https://www.unicode.org/versions/Unicode13.0.0/">
          <front>
            <title>The Unicode Standard, Version 13.0.0</title>
            <author>
              <organization>The Unicode Consortium</organization>
            </author>
            <date year="2020" month="March"/>
          </front>
          <seriesInfo name="ISBN" value="978-1-936213-26-9"/>
        </reference>
        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
          <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 format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049.  It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7228" target="https://www.rfc-editor.org/info/rfc7228">
          <front>
            <title>Terminology for Constrained-Node Networks</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="M. Ersue" initials="M." surname="Ersue">
              <organization/>
            </author>
            <author fullname="A. Keranen" initials="A." surname="Keranen">
              <organization/>
            </author>
            <date month="May" year="2014"/>
            <abstract>
              <t>The Internet Protocol Suite is increasingly used on small devices with severe constraints on power, memory, and processing resources, creating constrained-node networks.  This document provides a number of basic terms that have been useful in the standardization work for constrained-node networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7228"/>
          <seriesInfo name="DOI" value="10.17487/RFC7228"/>
        </reference>
        <reference anchor="RFC7230" target="https://www.rfc-editor.org/info/rfc7230">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7230"/>
          <seriesInfo name="DOI" value="10.17487/RFC7230"/>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8141" target="https://www.rfc-editor.org/info/rfc8141">
          <front>
            <title>Uniform Resource Names (URNs)</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre">
              <organization/>
            </author>
            <author fullname="J. Klensin" initials="J." surname="Klensin">
              <organization/>
            </author>
            <date month="April" year="2017"/>
            <abstract>
              <t>A Uniform Resource Name (URN) is a Uniform Resource Identifier (URI) that is assigned under the "urn" URI scheme and a particular URN namespace, with the intent that the URN will be a persistent, location-independent resource identifier.  With regard to URN syntax, this document defines the canonical syntax for URNs (in a way that is consistent with URI syntax), specifies methods for determining URN-equivalence, and discusses URI conformance.  With regard to URN namespaces, this document specifies a method for defining a URN namespace and associating it with a namespace identifier, and it describes procedures for registering namespace identifiers with the Internet Assigned Numbers Authority (IANA).  This document obsoletes both RFCs 2141 and 3406.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8141"/>
          <seriesInfo name="DOI" value="10.17487/RFC8141"/>
        </reference>
        <reference anchor="RFC8288" target="https://www.rfc-editor.org/info/rfc8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </reference>
        <reference anchor="RFC8820" target="https://www.rfc-editor.org/info/rfc8820">
          <front>
            <title>URI Design and Ownership</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <date month="June" year="2020"/>
            <abstract>
              <t>Section 1.1.1 of RFC 3986 defines URI syntax as "a federated and extensible naming system wherein each scheme's specification may further restrict the syntax and semantics of identifiers using that scheme."  In other words, the structure of a URI is defined by its scheme. While it is common for schemes to further delegate their substructure to the URI's owner, publishing independent standards that mandate particular forms of substructure in URIs is often problematic.</t>
              <t>This document provides guidance on the specification of URI substructure in standards.</t>
              <t>This document obsoletes RFC 7320 and updates RFC 3986.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="190"/>
          <seriesInfo name="RFC" value="8820"/>
          <seriesInfo name="DOI" value="10.17487/RFC8820"/>
        </reference>
        <reference anchor="W3C.REC-html52-20171214" target="https://www.w3.org/TR/2017/REC-html52-20171214">
          <front>
            <title>HTML 5.2</title>
            <author fullname="Steve Faulkner" initials="S." surname="Faulkner">
              <organization/>
            </author>
            <author fullname="Arron Eicholz" initials="A." surname="Eicholz">
              <organization/>
            </author>
            <author fullname="Travis Leithead" initials="T." surname="Leithead">
              <organization/>
            </author>
            <author fullname="Alex Danilo" initials="A." surname="Danilo">
              <organization/>
            </author>
            <author fullname="Sangwhan Moon" initials="S." surname="Moon">
              <organization/>
            </author>
            <date day="14" month="December" year="2017"/>
          </front>
          <seriesInfo name="World Wide Web Consortium Recommendation" value="REC-html52-20171214"/>
        </reference>
      </references>
    </references>
    <section anchor="the-small-print">
      <name>The Small Print</name>
      <t>This appendix lists a few corner cases of URI semantics that
implementers of CRIs need to be aware of, but that are not
representative of the normal operation of CRIs.</t>
      <ol spacing="normal" type="SP%d." group="SP"><li anchor="sp-initial-empty">Initial (Lone/Leading) Empty Path Segments:</li>
      </ol>
      <ul spacing="normal">
        <li>
          <em>Lone empty path segments:</em>
  As per <xref target="RFC3986"/>, <tt>s://x</tt> is distinct from <tt>s://x/</tt> -- i.e., a URI
  with an empty path is different from one with a lone empty path segment.
  However, in HTTP, CoAP, they are implicitly aliased (for CoAP, in
  item 8 of <xref section="6.4" sectionFormat="of" target="RFC7252"/>).
  As per item 7 of <xref section="6.5" sectionFormat="of" target="RFC7252"/>, recomposition of a URI
  without Uri-Path Options from the other URI-related CoAP Options
  produces <tt>s://x/</tt>, not <tt>s://x</tt> -- CoAP prefers the lone empty path
  segment form.
  <cref anchor="leps-tbd">TBD: add similar text for HTTP, if that can be made.</cref>
  After discussing HTTP semantics, <xref section="6.2.3" sectionFormat="of" target="RFC3986"/> even states:</li>
      </ul>
      <blockquote>
        <t>In general, a URI that uses the generic syntax for authority with an
  empty path should be normalized to a path of "/".</t>
      </blockquote>
      <ul spacing="normal">
        <li>
          <em>Leading empty path segments without authority</em>:
  Somewhat related, note also that URIs and URI references that do not
  carry an authority cannot represent initial empty path segments
  (i.e., that are followed by further path segments): <tt>s://x//foo</tt>
  works, but in a <tt>s://foo</tt> URI or an (absolute-path) URI reference of
  the form <tt>//foo</tt> the double slash would be mis-parsed as leading in
  to an authority.</li>
      </ul>
      <ol spacing="normal" type="SP%d." group="SP"><li anchor="sp-constraints">
          <t>Constraints (<xref target="constraints"/>) of CRIs/basic CRIs  </t>
          <t>
While most URIs in everyday use can be converted to CRIs and back to URIs
matching the input after syntax-based normalization of the URI,
these URIs illustrate the constraints by example:  </t>
          <ul spacing="normal">
            <li>
              <t><tt>https://host%ffname</tt>, <tt>https://example.com/x?data=%ff</tt>      </t>
              <t>
All URI components must, after percent decoding, be valid UTF-8 encoded text.
Bytes that are not valid UTF-8 show up, for example, in BitTorrent web seeds.
<!-- <https://www.bittorrent.org/beps/bep_0017.html>, not sure this warrants an informative reference -->
              </t>
            </li>
            <li>
              <t><tt>https://example.com/component%3bone;component%3btwo</tt>, <tt>http://example.com/component%3dequals</tt>      </t>
              <t>
While delimiters can be used in an escaped and unescaped form in URIs with generally distinct meanings,
basic CRIs (i.e., without percent-encoded text <xref target="pet"/>) only support one escapable delimiter character per component,
which is the delimiter by which the component is split up in the CRI.      </t>
              <t>
Note that the separators <tt>.</tt> (for authority parts), <tt>/</tt> (for paths), <tt>&amp;</tt> (for query parameters)
are special in that they are syntactic delimiters of their respective components in CRIs.
Thus, the following examples <em>are</em> convertible to basic CRIs:      </t>
              <t><tt>https://interior%2edot/</tt>      </t>
              <t><tt>https://example.com/path%2fcomponent/second-component</tt>      </t>
              <t><tt>https://example.com/x?ampersand=%26&amp;questionmark=?</tt></t>
            </li>
            <li>
              <t><tt>https://alice@example.com/</tt>      </t>
              <t>
The user information can be expressed in CRIs if the "userinfo"
feature is present.  The URI <tt>https://@example.com</tt> is
represented as <tt>[-4, [false, "", "example", "com"]]</tt>; the <tt>false</tt>
serves as a marker that the next element is the userinfo.      </t>
              <t>
The rules do not cater for unencoded ":" in userinfo, which is
commonly considered a deprecated inclusion of a literal password.</t>
            </li>
          </ul>
        </li>
      </ol>
    </section>
    <section removeInRFC="true" anchor="change-log">
      <name>Change Log</name>
      <t>Changes from -08 to -09</t>
      <ul spacing="normal">
        <li>Identify more esoteric features with a CDDL ".feature".</li>
        <li>Clarify that well-formedness requires removing trailing nulls.</li>
        <li>Fragments can contain PET.</li>
        <li>Percent-encoded text in PET is treated as byte strings.</li>
        <li>
          <t>URIs with an authority but a completely empty path (e.g.,
<tt>http://example.com</tt>): CRIs with an authority component no longer
always produce at least a slash in the path component.  </t>
          <t>
For generic schemes, the conversion of <tt>scheme://example.com</tt> to a
CRI is now possible
because CRI produces a URI with an authority not followed by a slash
following the updated rules of <xref target="cri-to-uri"/>.
Schemes like http and coap do not distinguish between the empty path
and the path containing a single slash when an authority is set (as
recommended in <xref target="RFC3986"/>).
For these schemes, that equivalence allows implementations to
convert the just-a-slash URI to a CRI with a zero length path array
(which, however, when converted back, does not produce a slash after
the authority).  </t>
          <t>
(Add an appendix "the small print" for more detailed discussion of
pesky corner cases like this.)</t>
        </li>
      </ul>
      <t>Changes from -07 to -08</t>
      <ul spacing="normal">
        <li>Fix the encoding of NOAUTH-NOSLASH / NOAUTH-LEADINGSLASH</li>
        <li>Add URN and DID schemes, add example.</li>
        <li>Add PET</li>
        <li>Remove hopeless attempt to encode "remote trailing nulls" rule in
CDDL (which is not a transformation language).</li>
      </ul>
      <t>Changes from -06 to -07</t>
      <ul spacing="normal">
        <li>More explicitly discuss constraints (<xref target="constraints"/>), add examples (<xref target="sp-constraints"/>).</li>
        <li>Make CDDL more explicit about special simple values.</li>
        <li>Lots of gratuitous changes from XML2RFC redefinition of <tt>&lt;tt&gt;</tt>
semantics.</li>
      </ul>
      <t>Changes from -05 to -06</t>
      <ul spacing="normal">
        <li>
          <t>rework authority:
          </t>
          <ul spacing="normal">
            <li>split reg-names at dots;</li>
            <li>add optional zone identifiers <xref target="RFC6874"/> to IP addresses</li>
          </ul>
        </li>
      </ul>
      <t>Changes from -04 to -05</t>
      <ul spacing="normal">
        <li>Simplify CBOR structure.</li>
        <li>Add implementation status section.</li>
      </ul>
      <t>Changes from -03 to -04:</t>
      <ul spacing="normal">
        <li>Minor editorial improvements.</li>
        <li>Renamed path.type/path-type to discard.</li>
        <li>Renamed option to section, substructured into items.</li>
        <li>Simplified the table "resolution-variables".</li>
        <li>Use the CBOR structure inspired by Jim Schaad's proposals.</li>
      </ul>
      <t>Changes from -02 to -03:</t>
      <ul spacing="normal">
        <li>Expanded the set of supported schemes (#3).</li>
        <li>Specified creation, normalization and comparison (#9).</li>
        <li>Clarified the default value of the <tt>path.type</tt> option (#33).</li>
        <li>Removed the <tt>append-relation</tt> path.type option (#41).</li>
        <li>Renumbered the remaining path.types.</li>
        <li>Renumbered the option numbers.</li>
        <li>Restructured the document.</li>
        <li>Minor editorial improvements.</li>
      </ul>
      <t>Changes from -01 to -02:</t>
      <ul spacing="normal">
        <li>Changed the syntax of schemes to exclude upper case characters (#13).</li>
        <li>Minor editorial improvements (#34 #37).</li>
      </ul>
      <t>Changes from -00 to -01:</t>
      <ul spacing="normal">
        <li>None.</li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>CRIs were developed by <contact fullname="Klaus Hartke"/> for use in the Constrained
RESTful Application Language (CoRAL).
The current author team is completing this work with a view to achieve
good integration with the potential use cases, both inside and outside of CoRAL.</t>
      <t>Thanks to
<contact fullname="Christian Amsüss"/>,
<contact fullname="Thomas Fossati"/>,
<contact fullname="Ari Keränen"/>,
<contact fullname="Jim Schaad"/>,
<contact fullname="Dave Thaler"/> and
<contact fullname="Marco Tiloca"/>
for helpful comments and discussions that have shaped the
document.</t>
      <!--  LocalWords:  CRI normalizations dereferencing dereference CRIs
 -->
<!--  LocalWords:  untrusted subcomponent
 -->

</section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="K." surname="Hartke" fullname="Klaus Hartke">
        <organization>Ericsson</organization>
        <address>
          <postal>
            <street>Torshamnsgatan 23</street>
            <city>Stockholm</city>
            <code>16483</code>
            <country>Sweden</country>
          </postal>
          <email>klaus.hartke@ericsson.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIANeEJmIAA9V923Yb2ZXYe33FGWi1BdAo8CpKgix3sym1xVgtaURqehwt
jVkACkBZhSq4LqTYWszKR+QD8jCfkaf4T/Il2ddzKYCS7EnWStpeIlCoc9tn
n33f+8RxHNVNUsz+nORlkY5NU7VplK0r+lQ3B3t7j/cOolk5LZIV/DyrknkT
Z2kzj6dllcbLKp3HedKkdRNNk2Zs6mYW1e1kldV1VhbNzRoanT2/+CmalkWd
FnVbyxh5UizGJi2idTaOjGnK6djcx1/u87dZum6W8OgQv9c3Kxio9t6oy6oJ
HjVZk8NYpzBMUyVZkc7M27Qu22qamrNZWjTZPEurOrpe4Etvn5tfyupjVizM
H6qyXUdR0jbLshpHMXTOaz1NqrpJC/NjWa2SooDnZQWN3xXZFXSUNX/798b8
WKUreOXiP5/hnGBGKcDgTVk382S6NIeHe0dHe/DLNGtuxvIyfi1n0P+z+ODR
4YPH9L0tmgre+EOKQ93Ao/WStuO3R4/jo4P9+GD/UXx8+PhgH35KV0mWj800
mZQ/NL9mI5gVPK1KXH46y5qyimKTFQCaFyPzY1Z9XJb5r3ZVL9Lio/+U1vRT
lbTFspynlTk/u4CnyWRSpVdbfpDBl9DLaCK9/ADAGM3tm6NZ6gHj7TLNaEvq
OjUPH9jV3z8+Onj84L4FzrOkWgEmzppt8IgQfZoqm7QN7REv748j8yKpmo+p
Xdwf86St3UNa2/Mqm9Z1WXhzuiirepmsinqRAO6bg0M7i3PAPFzTys1z//jo
ESGhndX5dTqjfRRgfMRRR0sa9YdUhhtNy1UUXaVFmyJ+LxDLOuj5/Pxi3ubm
eXGVVWUBqNHU8KbsLpyuH/CcyfYusmbZTvh5fL3YxYMXRVkxR+RsACNxkLc/
nT48OHgEJwzgpt8P92C7mmat3x8cYC+JfH+0f7Q/Nm1VyNeDR9D8Op3EeVbg
8ZDHjw6glzy5xtd+OTwdvX1+Gi+bVf7gID7Y23+4f7B/NI6KzlwOHz86xr4z
+/Xh2GT69fjRw6Ox+RXQHL6fxc9G06RaAwzSKj6GTY+r+RRfmWQ1vwUfZDLH
+zCZ6WyWw3c4jbRP8BHIRlItcH9xufV4d/f6+nrU8gsIxl06t7ADu9Jq/3C0
N9rb5bZMPy6WqfYJyACEMalmQ/Mv3NBwA3pf6QV+jhnT/La40UCisnZFb8yA
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
nhWy/pGhZ0tP7oYkPwuFX//fUjKoUX6gAAA=

-->

</rfc>
