<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-asdf-sdf-protocol-mapping-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title abbrev="sdf-protocol-mapping">Protocol Mapping for SDF</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-protocol-mapping-00"/>
    <author initials="R." surname="Mohan" fullname="Rohit Mohan">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <street>170 West Tasman Drive</street>
          <city>San Jose</city>
          <code>95134</code>
          <country>USA</country>
        </postal>
        <email>rohitmo@cisco.com</email>
      </address>
    </author>
    <author initials="B." surname="Brinckman" fullname="Bart Brinckman">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <street>170 West Tasman Drive</street>
          <city>San Jose</city>
          <code>95134</code>
          <country>USA</country>
        </postal>
        <email>bbrinckm@cisco.com</email>
      </address>
    </author>
    <author initials="L." surname="Corneo" fullname="Lorenzo Corneo">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street>Hirsalantie 11</street>
          <city>Jorvas</city>
          <code>1296</code>
          <country>Finland</country>
        </postal>
        <email>lorenzo.corneo@ericsson.com</email>
      </address>
    </author>
    <date year="2025" month="September" day="26"/>
    <area>Applications and Real-Time</area>
    <workgroup>A Semantic Definition Format for Data and Interactions of Things</workgroup>
    <keyword>IoT</keyword>
    <abstract>
      <?line 66?>

<t>This document defines protocol mapping extensions for the Semantic Definition
Format (SDF) to enable mapping of protocol-agnostic SDF affordances to
protocol-specific operations. The protocol mapping mechanism allows SDF models
to specify how properties, actions, and events should be accessed using specific
IP and non-IP protocols such as Bluetooth Low Energy, Zigbee or HTTP and CoAP.</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-asdf-sdf-protocol-mapping/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        A Semantic Definition Format for Data and Interactions of Things Working Group mailing list (<eref target="mailto:asdf@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/asdf/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/asdf/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-asdf/sdf-protocol-mapping"/>.</t>
    </note>
  </front>
  <middle>
    <?line 74?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Semantic Definition Format (SDF) <xref target="I-D.ietf-asdf-sdf"/> provides a protocol-agnostic way
to describe IoT devices and their capabilities through properties, actions, and
events (collectively called affordances). However, when implementing these
affordances on actual devices using specific communication protocols, there
needs to be a mechanism to map the protocol-agnostic SDF definitions to
protocol-specific operations.</t>
      <t>These protocols can be non-IP protocols that are commonly used in IoT
environments, such as <xref target="BLE53"/> and <xref target="Zigbee22"/>, or IP-based protocols, such as
HTTP <xref target="RFC2616"/> or CoAP <xref target="RFC7252"/>.</t>
      <t>To leverage an SDF model to perform protocol-specific operations on an instance
of a device, a mapping of the SDF affordance to a protocol-specific attribute is
required. This document defines the protocol mapping mechanism using the
<tt>sdfProtocolMap</tt> keyword, which allows SDF models to include protocol-specific
mapping information alongside the protocol-agnostic definitions.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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>
      <?line -18?>

</section>
    <section anchor="structure">
      <name>Structure</name>
      <t>Protocol mapping is required to map a protocol-agnostic affordance to
a protocol-specific operation, as implementations of the same affordance
will differ between protocols. For example, BLE will address a property
as a service characteristic, while a property in Zigbee is addressed
as an attribute in a cluster of an endpoint.</t>
      <t>A protocol mapping object is a JSON object identified by the <tt>sdfProtocolMap</tt>
keyword. Protocol-specific properties are embedded within this object, organized
by protocol name, e.g., "ble" or "zigbee". The protocol name <bcp14>MUST</bcp14> be specified
in the IANA registry requested in <xref target="iana-prot-map"/>.</t>
      <figure anchor="protmap">
        <name>Property Mapping</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="176" width="320" viewBox="0 0 320 176" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,48 L 24,128" fill="none" stroke="black"/>
              <path d="M 96,80 L 96,96" fill="none" stroke="black"/>
              <path d="M 96,144 L 96,160" fill="none" stroke="black"/>
              <path d="M 24,64 L 72,64" fill="none" stroke="black"/>
              <path d="M 96,96 L 120,96" fill="none" stroke="black"/>
              <path d="M 24,128 L 72,128" fill="none" stroke="black"/>
              <path d="M 96,160 L 120,160" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="128,160 116,154.4 116,165.6" fill="black" transform="rotate(0,120,160)"/>
              <polygon class="arrowhead" points="128,96 116,90.4 116,101.6" fill="black" transform="rotate(0,120,96)"/>
              <polygon class="arrowhead" points="80,128 68,122.4 68,133.6" fill="black" transform="rotate(0,72,128)"/>
              <polygon class="arrowhead" points="80,64 68,58.4 68,69.6" fill="black" transform="rotate(0,72,64)"/>
              <g class="text">
                <text x="60" y="36">sdfProtocolMap</text>
                <text x="96" y="68">ble</text>
                <text x="180" y="100">BLE-specific</text>
                <text x="264" y="100">mapping</text>
                <text x="108" y="132">zigbee</text>
                <text x="192" y="164">Zigbee-specific</text>
                <text x="288" y="164">mapping</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
sdfProtocolMap
  |
  +-----> ble
  |        |
  |        +--> BLE-specific mapping
  |
  +-----> zigbee
           |
           +--> Zigbee-specific mapping
]]></artwork>
        </artset>
      </figure>
      <t>As shown in <xref target="protmap"/>, protocol-specific properties must be embedded in an
sdfProtocolMap object, for example a "ble" or a "zigbee" object.</t>
      <table anchor="proobj">
        <name>Protocol objects</name>
        <thead>
          <tr>
            <th align="left">Attribute</th>
            <th align="left">Type</th>
            <th align="left">Example</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">ble</td>
            <td align="left">object</td>
            <td align="left">an object with BLE-specific attributes</td>
          </tr>
          <tr>
            <td align="left">zigbee</td>
            <td align="left">object</td>
            <td align="left">an object with Zigbee-specific attributes</td>
          </tr>
        </tbody>
      </table>
      <t>where-</t>
      <ul spacing="normal">
        <li>
          <t>"ble" is an object containing properties that are specific to the BLE
protocol.</t>
        </li>
        <li>
          <t>"zigbee" is an object containing properties that are specific to the
Zigbee protocol.</t>
        </li>
        <li>
          <t>Other protocol mapping objects can be added by creating a new protocol
object</t>
        </li>
      </ul>
      <t>Example protocol mapping:</t>
      <figure anchor="exprotmap">
        <name>Example property mapping</name>
        <sourcecode type="json"><![CDATA[
{
  "sdfObject": {
    "healthsensor": {
      "sdfProperty": {
        "heartrate": {
          "description": "The current measured heart rate",
          "type": "number",
          "unit": "beat/min",
          "observable": false,
          "writable": false,
          "sdfProtocolMap": {
            "ble": {
              "serviceID": "12345678-1234-5678-1234-56789abcdef4",
              "characteristicID":
                "12345678-1234-5678-1234-56789abcdef4"
            }
          }
        }
      }
    }
  }
}
]]></sourcecode>
      </figure>
    </section>
    <section anchor="usage">
      <name>Usage</name>
      <t>A protocol map <bcp14>MAY</bcp14> be provided as part of the SDF model, specifically in the SDF
affordance definition. The extension points in the SDF affordance definition
defined in <xref target="I-D.ietf-asdf-sdf"/> are used to specify the protocol mapping information as a
part of the SDF model.</t>
      <t>For SDF properties, the protocol mapping is specified as an
extension to a named property quality using the <tt>sdfProtocolMap</tt> keyword.
For SDF actions and events, the protocol mapping can be specified
as an extension to the named quality or as part of the <tt>sdfInputData</tt> or
<tt>sdfOutputData</tt> objects.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="ble-protocol-mapping">
        <name>BLE Protocol Mapping</name>
        <t>The BLE protocol mapping allows SDF models to specify how properties,
actions, and events should be accessed using Bluetooth Low Energy (BLE)
protocol. The mapping includes details such as service IDs and characteristic
IDs that are used to access the corresponding SDF affordances.</t>
        <section anchor="ble-protocol-mapping-structure">
          <name>BLE Protocol Mapping Structure</name>
          <t>For SDF properties and actions, the BLE protocol mapping structure
is defined as follows:</t>
          <figure anchor="blemap1">
            <name>CDDL definition for BLE Protocol Mapping for properties and actions</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-DATA //= ble-protocol-map

ble-protocol-map = {
  serviceID: text
  characteristicID: text
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>serviceID</tt> is the BLE service ID that corresponds to the SDF property or action.</t>
            </li>
            <li>
              <t><tt>characteristicID</tt> is the BLE characteristic ID that corresponds to the SDF property or action.</t>
            </li>
          </ul>
          <t>For example, a BLE protocol mapping for a temperature property might look like:</t>
          <sourcecode type="json"><![CDATA[
{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "ble": {
          "serviceID": "12345678-1234-5678-1234-56789abcdef4",
          "characteristicID": "12345678-1234-5678-1234-56789abcdef5"
        }
      }
    }
  }
}
]]></sourcecode>
          <t>For SDF events, the BLE protocol mapping structure is similar, but it may
include additional attributes such as the type of the event.</t>
          <figure anchor="blemap2">
            <name>BLE Protocol Mapping for events</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-DATA //= ble-event-map

ble-event-map = {
  type: "gatt" / "advertisements" / "connection_events"
  ? serviceID: text
  ? characteristicID: text
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>type</tt> specifies the type of BLE event, such as "gatt" for GATT events,
"advertisements" for advertisement events, or "connection_events" for
connection-related events.</t>
            </li>
            <li>
              <t><tt>serviceID</tt> and <tt>characteristicID</tt> are optional attributes that are
specified if the type is "gatt".</t>
            </li>
          </ul>
          <t>For example, a BLE event mapping for a heart rate measurement event might look like:</t>
          <sourcecode type="json"><![CDATA[
{
  "sdfEvent": {
    "heartRate": {
      "sdfOutputData": {
        "sdfProtocolMap": {
          "ble": {
            "type": "gatt",
            "serviceID": "12345678-1234-5678-1234-56789abcdef4",
            "characteristicID": "12345678-1234-5678-1234-56789abcdef5"
          }
        }
      }
    }
  }
}
]]></sourcecode>
          <t>Another example of an <tt>isPresent</tt> event using BLE advertisements:</t>
          <sourcecode type="json"><![CDATA[
{
  "sdfEvent": {
    "isPresent": {
      "sdfOutputData": {
        "sdfProtocolMap": {
          "ble": {
            "type": "advertisements"
          }
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
      </section>
      <section anchor="zigbee-protocol-mapping">
        <name>Zigbee Protocol Mapping</name>
        <t>The Zigbee protocol mapping allows SDF models to specify how properties,
actions, and events should be accessed using the Zigbee protocol. The
mapping includes details such as cluster IDs and attribute IDs that are
used to access the corresponding SDF affordances.</t>
        <section anchor="zigbee-protocol-mapping-structure">
          <name>Zigbee Protocol Mapping Structure</name>
          <t>For SDF properties and actions, the Zigbee protocol mapping structure
is defined as follows:</t>
          <figure anchor="zigmap1">
            <name>CDDL definition for Zigbee Protocol Mapping for properties and actions</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-DATA //= zigbee-protocol-map

zigbee-protocol-map = {
  endpointID: uint
  clusterID: uint
  attributeID: uint
  type: uint
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>endpointID</tt> is the Zigbee endpoint ID that corresponds to the SDF affordance.</t>
            </li>
            <li>
              <t><tt>clusterID</tt> is the Zigbee cluster ID that corresponds to the SDF affordance.</t>
            </li>
            <li>
              <t><tt>attributeID</tt> is the Zigbee attribute ID that corresponds to the SDF affordance.</t>
            </li>
            <li>
              <t><tt>type</tt> is the Zigbee data type of the attribute.</t>
            </li>
          </ul>
          <t>For example, a Zigbee protocol mapping for a temperature property might look like:</t>
          <sourcecode type="jsonc"><![CDATA[
{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "zigbee": {
          "endpointID": 1,
          "clusterID": 1026, // 0x0402
          "attributeID": 0, // 0x0000
          "type": 41 // 0x29
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
      </section>
      <section anchor="ip-based-protocol-mapping">
        <name>IP based Protocol Mapping</name>
        <t>The protocol mapping mechanism can potentially also be used for IP-based protocols
such as HTTP or CoAP. An example of a protocol mapping for a property using HTTP
might look like:</t>
        <sourcecode type="json"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "sdfProperty": {
    "heartrate": {
      "sdfProtocolMap": {
        "openapi": {
            "operationRef": "https://example.com/openapi.json#/paths\
/~1heartrate~1{id}~1current/get",
            "$ref": "https://example.com/openapi.json#/components/sc\
hema/HeartRate/properties/pulse"
        }
      }
    }
  }
}
]]></sourcecode>
        <t>The <tt>operationRef</tt> points to the OpenAPI operation that retrieves the
current heart rate, and the <tt>$ref</tt> points to the OpenAPI schema that
defines the heart rate property. An example of the OpenAPI schema
might look like:</t>
        <sourcecode type="yaml"><![CDATA[
paths:
  /heartrate/{id}/current:
    get:
      summary: Get current heart rate
      description: |-
        Retrieve the current heart rate for a specific user
        identified by {id}.
      parameters:
        - name: id
          in: path
          required: true
          description: |-
            The ID of the user whose heart rate is being queried.
          schema:
            type: string
      responses:
        "200":
          description: |-
            Successful response with current heart rate data.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HeartRate/properties/pulse"

components:
  schemas:
    HeartRate:
      type: object
      properties:
        pulse:
          type: integer
          description: The current heart rate in beats per minute.
        spo2:
          type: number
          format: float
          description: |-
            The current body temperature in degrees Celsius.
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <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-prot-map">
        <name>Protocol mapping</name>
        <t>IANA is requested to create a new registry called "SDF Protocol mapping".</t>
        <t>The registry must contain following attributes:</t>
        <ul spacing="normal">
          <li>
            <t>Protocol map name</t>
          </li>
          <li>
            <t>Protocol name</t>
          </li>
          <li>
            <t>Description</t>
          </li>
          <li>
            <t>Reference of the specification describing the protocol mapping. This specification must be reviewed by an expert.</t>
          </li>
        </ul>
        <t>Following protocol mappings are described in this document:</t>
        <table anchor="protmap-reg">
          <name>Protocol Mapping Registry</name>
          <thead>
            <tr>
              <th align="left">Protocol map</th>
              <th align="left">Protocol Name</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ble</td>
              <td align="left">Bluetooth Low Energy (BLE)</td>
              <td align="left">Protocol mapping for BLE devices</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">zigbee</td>
              <td align="left">Zigbee</td>
              <td align="left">Protocol mapping for Zigbee devices</td>
              <td align="left">This document</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="I-D.ietf-asdf-sdf">
          <front>
            <title>Semantic Definition Format (SDF) for Data and Interactions of Things</title>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>KTC Control AB</organization>
            </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <date day="27" month="July" year="2025"/>
            <abstract>
              <t>   The Semantic Definition Format (SDF) is concerned with Things, namely
   physical objects that are available for interaction over a network.
   SDF is a format for domain experts to use in the creation and
   maintenance of data and interaction models that describe Things.  An
   SDF specification describes definitions of SDF Objects/SDF Things and
   their associated interactions (Events, Actions, Properties), as well
   as the Data types for the information exchanged in those
   interactions.  Tools convert this format to database formats and
   other serializations as needed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-24"/>
        </reference>
        <reference anchor="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">
          <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>
        <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="BLE53" target="https://www.bluetooth.com/specifications/specs/core-specification-5-3/">
          <front>
            <title>Bluetooth Core Specification Version 5.3</title>
            <author>
              <organization>Bluetooth SIG</organization>
            </author>
            <date year="2021" month="July" day="13"/>
          </front>
        </reference>
        <reference anchor="Zigbee22" target="https://zigbeealliance.org/solution/zigbee/">
          <front>
            <title>Zigbee 3.0 Specification</title>
            <author>
              <organization>Zigbee Alliance</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="RFC2616">
          <front>
            <title>Hypertext Transfer Protocol -- HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="J. Gettys" initials="J." surname="Gettys"/>
            <author fullname="J. Mogul" initials="J." surname="Mogul"/>
            <author fullname="H. Frystyk" initials="H." surname="Frystyk"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <date month="June" year="1999"/>
            <abstract>
              <t>HTTP has been in use by the World-Wide Web global information initiative since 1990. This specification defines the protocol referred to as "HTTP/1.1", and is an update to RFC 2068. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2616"/>
          <seriesInfo name="DOI" value="10.17487/RFC2616"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <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>
      </references>
    </references>
    <?line 461?>

<section anchor="cddl-definition">
      <name>CDDL Definition</name>
      <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-DATA //= ble-protocol-map

ble-protocol-map = {
  serviceID: text
  characteristicID: text
}

$$SDF-EXTENSION-DATA //= ble-event-map

ble-event-map = {
  type: "gatt" / "advertisements" / "connection_events"
  ? serviceID: text
  ? characteristicID: text
}

$$SDF-EXTENSION-DATA //= zigbee-protocol-map

zigbee-protocol-map = {
  endpointID: uint
  clusterID: uint
  attributeID: uint
  type: uint
}
]]></sourcecode>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
