<?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-mohan-asdf-sdf-protocol-mapping-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="sdf-protocol-mapping">Protocol Mapping for SDF</title>
    <seriesInfo name="Internet-Draft" value="draft-mohan-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="August" day="18"/>
    <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-mohan-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>
