<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-asdf-sdf-protocol-mapping-09" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="sdf-protocol-mapping">SDF Protocol Mapping</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-protocol-mapping-09"/>
    <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="2026" month="June" day="29"/>
    <area>Applications and Real-Time</area>
    <workgroup>A Semantic Definition Format for Data and Interactions of Things</workgroup>
    <keyword>IoT</keyword>
    <abstract>
      <?line 68?>

<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
non-IP and IP protocols such as Bluetooth Low Energy, Zigbee or HTTP and CoAP.
This document also describes a method to extend SCIM with an SDF model mapping.</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 77?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Semantic Definition Format (SDF) <xref target="RFC9880"/> provides a protocol-agnostic way
to describe IoT devices and their capabilities through properties, actions, and
events (collectively called affordances). When implementing an SDF model for a
device using specific communication protocols, there needs to be a mechanism to
map the protocol-agnostic SDF definitions to protocol-specific operations,
translating the model into a real-world implementation. Moreover, such a mechanism
needs to be extensible for enabling implementers to provide novel SDF protocol
mappings to expand the SDF ecosystem. SDF protocol mappings may target a variety
of protocols spanning from non-IP protocols commonly used in IoT environments,
such as <xref target="BLE53"/> and <xref target="Zigbee30"/>, to IP-based protocols such as HTTP
<xref target="RFC9110"/> and CoAP <xref target="RFC7252"/>. This document provides the required
mechanism by defining:</t>
      <ul spacing="normal">
        <li>
          <t>The <tt>sdfProtocolMap</tt> keyword, which allows SDF models to include
protocol-specific mapping information attached to the protocol-agnostic
definitions, see <xref target="sdf-pm"/>. An <tt>sdfProtocolMap</tt> <bcp14>MAY</bcp14> be applied to an SDF
affordance, be it an <tt>sdfProperty</tt>, <tt>sdfEvent</tt> or <tt>sdfAction</tt>. The mapping
enables use cases such as application gateways or multi-protocol gateways that
translate between different IoT protocols, automated generation of
protocol-specific implementations from SDF models, and interoperability across
heterogeneous device ecosystems.</t>
        </li>
        <li>
          <t>Two SDF protocol mappings for Bluetooth and Zigbee protocols, see <xref target="ble-pm"/>
and <xref target="zigbee-pm"/> respectively.</t>
        </li>
        <li>
          <t>An SDF model extension for SCIM. While SDF provides a way to describe a class
of devices, SCIM describes a device instance. The SDF model extension for SCIM
enables the inclusion of SDF models for the class of devices a device belongs
to in the SCIM object, see <xref target="scim-sdf-extension"/>.</t>
        </li>
        <li>
          <t>An IANA registry for defining additional SDF protocol mappings (in addition to
the BLE and Zigbee provided in this document), see <xref target="iana-prot-map"/>.</t>
        </li>
      </ul>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The syntax extensions to <xref target="RFC9880"/> in terms of its JSON structures are
shown in the Concise Data Definition Language (CDDL) <xref target="RFC8610"/>.</t>
      <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="sdf-pm">
      <name>SDF Protocol Mapping Structure</name>
      <t>This section defines the structure of an <tt>sdfProtocolMap</tt>. Because each protocol
has its own addressing model, a single SDF affordance requires a distinct
mapping per protocol. For example, BLE addresses a property as a service
characteristic, while Zigbee addresses it 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, nested inside an SDF affordance definition (<tt>sdfProperty</tt>, <tt>sdfAction</tt>,
or <tt>sdfEvent</tt>). Protocol-specific attributes are embedded within this object,
keyed by a protocol name registered in the IANA "SDF Protocol Mapping"
registry (<xref target="iana-prot-map"/>), e.g., "ble" or "zigbee".</t>
      <figure anchor="protmap">
        <name>SDF Protocol Mapping Structure</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="240" width="400" viewBox="0 0 400 240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,48 L 24,64" fill="none" stroke="black"/>
              <path d="M 104,80 L 104,224" fill="none" stroke="black"/>
              <path d="M 176,112 L 176,128" fill="none" stroke="black"/>
              <path d="M 176,176 L 176,192" fill="none" stroke="black"/>
              <path d="M 24,64 L 72,64" fill="none" stroke="black"/>
              <path d="M 104,96 L 152,96" fill="none" stroke="black"/>
              <path d="M 176,128 L 200,128" fill="none" stroke="black"/>
              <path d="M 104,160 L 152,160" fill="none" stroke="black"/>
              <path d="M 176,192 L 200,192" fill="none" stroke="black"/>
              <path d="M 104,224 L 152,224" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="208,192 196,186.4 196,197.6" fill="black" transform="rotate(0,200,192)"/>
              <polygon class="arrowhead" points="208,128 196,122.4 196,133.6" fill="black" transform="rotate(0,200,128)"/>
              <polygon class="arrowhead" points="160,224 148,218.4 148,229.6" fill="black" transform="rotate(0,152,224)"/>
              <polygon class="arrowhead" points="160,160 148,154.4 148,165.6" fill="black" transform="rotate(0,152,160)"/>
              <polygon class="arrowhead" points="160,96 148,90.4 148,101.6" fill="black" transform="rotate(0,152,96)"/>
              <polygon class="arrowhead" points="80,64 68,58.4 68,69.6" fill="black" transform="rotate(0,72,64)"/>
              <g class="text">
                <text x="48" y="36">sdfProperty</text>
                <text x="104" y="36">/</text>
                <text x="152" y="36">sdfAction</text>
                <text x="200" y="36">/</text>
                <text x="244" y="36">sdfEvent</text>
                <text x="140" y="68">sdfProtocolMap</text>
                <text x="176" y="100">ble</text>
                <text x="260" y="132">BLE-specific</text>
                <text x="344" y="132">mapping</text>
                <text x="188" y="164">zigbee</text>
                <text x="272" y="196">Zigbee-specific</text>
                <text x="368" y="196">mapping</text>
                <text x="176" y="228">...</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
sdfProperty / sdfAction / sdfEvent
  |
  +-----> sdfProtocolMap
            |
            +-----> ble
            |        |
            |        +--> BLE-specific mapping
            |
            +-----> zigbee
            |        |
            |        +--> Zigbee-specific mapping
            |
            +-----> ...
]]></artwork>
        </artset>
      </figure>
      <section anchor="sdf-extension-points">
        <name>SDF Extension Points</name>
        <t>The <tt>sdfProtocolMap</tt> keyword is introduced into SDF affordance definitions
through the extension points defined in the formal syntax of <xref section="A" sectionFormat="of" target="RFC9880"/>. For each affordance type, an <tt>sdfProtocolMap</tt> entry is added
via the corresponding CDDL group socket. The contents of the
<tt>sdfProtocolMap</tt> object are in turn extensible through a
protocol-mapping-specific group socket.</t>
        <t>A protocol <bcp14>MAY</bcp14> choose to extend only the affordance types that are applicable to
it. For example, the BLE protocol mapping defines extensions for properties and
events but not for actions.</t>
        <section anchor="property-extension">
          <name>Property Extension</name>
          <t>The <tt>$$SDF-EXTENSION-PROPERTY</tt> group socket in the <tt>propertyqualities</tt>
rule of <xref section="A" sectionFormat="of" target="RFC9880"/> is used to add protocol mapping to
<tt>sdfProperty</tt> definitions:</t>
          <figure anchor="sdf-prop-ext">
            <name>SDF Property Extension Point for Protocol Mapping</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-PROPERTY //= (
  sdfProtocolMap: {
    * $$SDF-PROPERTY-PROTOCOL-MAP
  }
)

property-protocol-map<name, props, read-props, write-props> = (
  name => props /
    {
      read: read-props,
      write: write-props
    }
)
]]></sourcecode>
          </figure>
          <t>The <tt>property-protocol-map</tt> generic (<xref target="sdf-prop-ext"/>) captures the common
structure of property protocol mappings. The <tt>name</tt> parameter is the protocol
name and <tt>props</tt> is the protocol-specific map of attributes. A protocol can
provide either:</t>
          <ul spacing="normal">
            <li>
              <t>A single mapping that applies to both read and write operations, or</t>
            </li>
            <li>
              <t>Separate <tt>read</tt> and <tt>write</tt> mappings when the protocol uses different
attributes for each direction.</t>
            </li>
          </ul>
          <t>To extend <tt>$$SDF-PROPERTY-PROTOCOL-MAP</tt> for a new protocol (e.g.,
"new-protocol"), implementers <bcp14>MUST</bcp14> use the <tt>property-protocol-map</tt> generic with
the protocol name and a map type defining the protocol-specific attributes.</t>
          <t>It is to be noted that the protocol <tt>name</tt> (e.g., "new-protocol") <bcp14>MUST</bcp14> be
registered in the IANA registry defined in <xref target="iana-prot-map"/>.</t>
          <t>For example:</t>
          <figure anchor="prop-ext-example">
            <name>Example Property Protocol Map Extension</name>
            <sourcecode type="cddl"><![CDATA[=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"new-protocol", new-protocol-property, new-\
                            protocol-property, new-protocol-property>
)

new-protocol-property = {
  attributeA: text,
  attributeB: uint
}
]]></sourcecode>
          </figure>
          <t>The corresponding JSON in an SDF model looks like:</t>
          <figure anchor="prop-ext-json-example">
            <name>Example Property Protocol Map in JSON</name>
            <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "type": "number",
      "unit": "Cel",
      "sdfProtocolMap": {
        "new-protocol": {
          "attributeA": "temperature-service",
          "attributeB": 1
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
          <t>When a property uses different protocol attributes for read and write
operations, the mapping can be split:</t>
          <figure anchor="prop-ext-rw-json-example">
            <name>Example Property Protocol Map with Read/Write in JSON</name>
            <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "type": "number",
      "unit": "Cel",
      "sdfProtocolMap": {
        "new-protocol": {
          "read": {
            "attributeA": "temperature-read-service",
            "attributeB": 1
          },
          "write": {
            "attributeA": "temperature-write-service",
            "attributeB": 2
          }
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="action-extension">
          <name>Action Extension</name>
          <t>The <tt>$$SDF-EXTENSION-ACTION</tt> group socket in the <tt>actionqualities</tt>
rule of <xref section="A" sectionFormat="of" target="RFC9880"/> is used to add protocol mapping to
<tt>sdfAction</tt> definitions:</t>
          <figure anchor="sdf-action-ext">
            <name>SDF Action Extension Point for Protocol Mapping</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-ACTION //= (
  sdfProtocolMap: {
    * $$SDF-ACTION-PROTOCOL-MAP
  }
)
]]></sourcecode>
          </figure>
          <t>Actions use a simpler structure than properties, as they do not require the
read/write distinction. To extend <tt>$$SDF-ACTION-PROTOCOL-MAP</tt> for a new
protocol, implementers <bcp14>MUST</bcp14> add a group entry that maps the protocol name to the
protocol-specific attributes:</t>
          <figure anchor="action-ext-example">
            <name>Example Action Protocol Map Extension</name>
            <sourcecode type="cddl"><![CDATA[$$SDF-ACTION-PROTOCOL-MAP //= (
  "new-protocol": new-protocol-action
)

new-protocol-action = {
  commandID: uint
}
]]></sourcecode>
          </figure>
          <t>The corresponding JSON in an SDF model would look like:</t>
          <figure anchor="action-ext-json-example">
            <name>Example Action Protocol Map in JSON</name>
            <sourcecode type="json"><![CDATA[{
  "sdfAction": {
    "reset": {
      "sdfProtocolMap": {
        "new-protocol": {
          "commandID": 42
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="event-extension">
          <name>Event Extension</name>
          <t>The <tt>$$SDF-EXTENSION-EVENT</tt> group socket in the <tt>eventqualities</tt>
rule of <xref section="A" sectionFormat="of" target="RFC9880"/> is used to add protocol mapping to
<tt>sdfEvent</tt> definitions:</t>
          <figure anchor="sdf-event-ext">
            <name>SDF Event Extension Point for Protocol Mapping</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-EVENT //= (
  sdfProtocolMap: {
    * $$SDF-EVENT-PROTOCOL-MAP
  }
)
]]></sourcecode>
          </figure>
          <t>Events follow the same simple pattern as actions. To extend
<tt>$$SDF-EVENT-PROTOCOL-MAP</tt> for a new protocol:</t>
          <figure anchor="event-ext-example">
            <name>Example Event Protocol Map Extension</name>
            <sourcecode type="cddl"><![CDATA[$$SDF-EVENT-PROTOCOL-MAP //= (
  "new-protocol": new-protocol-event
)

new-protocol-event = {
  eventID: uint
}
]]></sourcecode>
          </figure>
          <t>The corresponding JSON in an SDF model looks like:</t>
          <figure anchor="event-ext-json-example">
            <name>Example Event Protocol Map in JSON</name>
            <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "alert": {
      "sdfProtocolMap": {
        "new-protocol": {
          "eventID": 3
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="protocol-registration">
      <name>New Protocol Registration Procedure</name>
      <t>Protocol names used as keys in the <tt>sdfProtocolMap</tt> object (e.g., "ble",
"zigbee") <bcp14>MUST</bcp14> be registered in the IANA registry defined in
<xref target="iana-prot-map"/>.</t>
      <t>A new SDF protocol mapping <bcp14>MUST</bcp14> be defined by a specification that mandatorily
includes:</t>
      <ul spacing="normal">
        <li>
          <t>A CDDL definition that extends at least one of the group sockets
defined in this document:
<tt>$$SDF-PROPERTY-PROTOCOL-MAP</tt> (<xref target="property-extension"/>),
<tt>$$SDF-ACTION-PROTOCOL-MAP</tt> (<xref target="action-extension"/>), or
<tt>$$SDF-EVENT-PROTOCOL-MAP</tt> (<xref target="event-extension"/>).
Property mappings <bcp14>MUST</bcp14> use the <tt>property-protocol-map</tt> generic
(<xref target="property-extension"/>) to ensure a consistent structure.</t>
        </li>
        <li>
          <t>A description of the protocol-specific attributes introduced by the
CDDL extension, including their semantics and how they relate to the
underlying protocol operations.</t>
        </li>
      </ul>
      <!-- LC: Should we consider adding an appendix showing the whole process to
create a fictitious new protocol? It may be of help to implementers. -->

</section>
    <section anchor="registered-protocol-mappings">
      <name>Registered Protocol Mappings</name>
      <t>This section defines the protocol mappings registered by this document.</t>
      <section anchor="ble-pm">
        <name>BLE</name>
        <t>The BLE protocol mapping allows SDF models to specify how properties and events
should be accessed using Bluetooth Low Energy (BLE) protocol <xref target="BLE53"/>. The
mapping includes details such as service IDs and characteristic IDs that are
used to access the corresponding SDF affordances.</t>
        <section anchor="properties">
          <name>Properties</name>
          <t>For <tt>sdfProperty</tt>, the BLE protocol mapping structure is defined as follows:</t>
          <figure anchor="blemap1">
            <name>CDDL definition for BLE Protocol Mapping for sdfProperty</name>
            <sourcecode type="cddl"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"ble", ble-property, ble-property, ble-\
                                                            property>
)

ble-property = {
  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.</t>
            </li>
            <li>
              <t><tt>characteristicID</tt> is the BLE characteristic ID that corresponds to the SDF property.</t>
            </li>
          </ul>
          <t>For example, a BLE protocol mapping for a temperature property:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "ble": {
          "serviceID": "00001809-0000-1000-8000-00805f9b34fb",
          "characteristicID": "00002a1c-0000-1000-8000-00805f9b34fb"
        }
      }
    }
  }
}
]]></sourcecode>
          <t>For a temperature property that has different mappings for read and write operations,
here is an example of the BLE protocol mapping:</t>
          <sourcecode type="json"><![CDATA[=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "ble": {
          "read": {
            "serviceID": "00001809-0000-1000-8000-00805f9b34fb",
            "characteristicID": "00002a1c-0000-1000-8000-\
                                                        00805f9b34fb"
          },
          "write": {
            "serviceID": "00001809-0000-1000-8000-00805f9b34fb",
            "characteristicID": "00002a51-0000-1000-8000-\
                                                        00805f9b34fb"
          }
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="events">
          <name>Events</name>
          <t>For <tt>sdfEvent</tt>s, the BLE protocol mapping structure is similar to
<tt>sdfProperties</tt>, but it <bcp14>MUST</bcp14> include additional attributes such as the <tt>type</tt> of
the event.</t>
          <figure anchor="blemap2">
            <name>BLE Protocol Mapping for sdfEvents</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EVENT-PROTOCOL-MAP //= (
  ble: ble-event-map
)

ble-event-map = {
  type: "gatt",
  serviceID: text,
  characteristicID: text
} / { type: "advertisements" } / { type: "connection_events" }
]]></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>
          <!-- LC: Is there a way to make serviceID and characteristicID mandatory only if
the type is gatt? The current solution allows a connection event to have a
serviceID, or characteristicID, or both. -->

<t>For example, a BLE event mapping for a heart rate measurement event:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "heartRate": {
      "sdfProtocolMap": {
        "ble": {
          "type": "gatt",
          "serviceID": "0000180d-0000-1000-8000-00805f9b34fb",
          "characteristicID": "00002a37-0000-1000-8000-00805f9b34fb"
        }
      }
    }
  }
}
]]></sourcecode>
          <t>Here is an example of an <tt>isPresent</tt> event using BLE advertisements:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "isPresent": {
      "sdfProtocolMap": {
        "ble": {
          "type": "advertisements"
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
      </section>
      <section anchor="zigbee-pm">
        <name>Zigbee</name>
        <t>The Zigbee protocol mapping allows SDF models to specify how properties,
actions, and events should be accessed using the Zigbee protocol <xref target="Zigbee30"/>.
The mapping includes details such as cluster IDs and attribute IDs that are used
to access the corresponding SDF affordances.</t>
        <section anchor="properties-1">
          <name>Properties</name>
          <t>An <tt>sdfProperty</tt> is mapped to a Zigbee cluster attribute. The Zigbee property
protocol mapping structure is defined as follows:</t>
          <figure anchor="zigmap1">
            <name>CDDL definition for Zigbee Protocol Mapping for sdfProperty</name>
            <sourcecode type="cddl"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"zigbee", zigbee-property, zigbee-property, \
                                                     zigbee-property>
)

zigbee-property = {
  endpointID: uint,
  clusterID: uint,
  attributeID: uint,
  attributeType: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>endpointID</tt> is the Zigbee endpoint ID that corresponds to the SDF property.</t>
            </li>
            <li>
              <t><tt>clusterID</tt> is the Zigbee cluster ID that corresponds to the SDF property.</t>
            </li>
            <li>
              <t><tt>attributeID</tt> is the Zigbee attribute ID that corresponds to the SDF property.</t>
            </li>
            <li>
              <t><tt>attributeType</tt> is the Zigbee data type of the attribute.</t>
            </li>
            <li>
              <t><tt>profileID</tt> is the Zigbee application profile ID (optional). If not provided, it defaults to the Home Automation profile (0x0104), which is the default profile in Zigbee 3.0.</t>
            </li>
            <li>
              <t><tt>manufacturerCode</tt> is the Zigbee manufacturer code of the attribute (optional).</t>
            </li>
          </ul>
          <t>For example, a Zigbee protocol mapping for a temperature property may look as
follows:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "zigbee": {
          "endpointID": 1,
          "clusterID": 1026,
          "attributeID": 0,
          "attributeType": 41,
          "profileID": 260
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="events-1">
          <name>Events</name>
          <t>An <tt>sdfEvent</tt> is mapped to a Zigbee cluster event such as attribute reporting
or a device-initiated write to an attribute on the gateway. The Zigbee event
protocol mapping structure is defined as follows:</t>
          <figure anchor="zigmap-event">
            <name>CDDL definition for Zigbee Protocol Mapping for sdfEvents</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EVENT-PROTOCOL-MAP //= (
  zigbee: zigbee-event-map
)

zigbee-event-type = "attribute_reporting" / "write_event"

zigbee-event-map = {
  type: zigbee-event-type,
  endpointID: uint,
  clusterID: uint,
  attributeID: uint,
  attributeType: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>type</tt> is the type of Zigbee event. It <bcp14>MUST</bcp14> be one of:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>"attribute_reporting"</tt>: the event is triggered by Zigbee attribute
reporting.</t>
                </li>
                <li>
                  <t><tt>"write_event"</tt>: the event is triggered by the device writing to an
attribute on the gateway.</t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>endpointID</tt> is the Zigbee endpoint ID that corresponds to the SDF event.</t>
            </li>
            <li>
              <t><tt>clusterID</tt> is the Zigbee cluster ID that corresponds to the SDF event.</t>
            </li>
            <li>
              <t><tt>attributeID</tt> is the Zigbee attribute ID that corresponds to the SDF event.</t>
            </li>
            <li>
              <t><tt>attributeType</tt> is the Zigbee data type of the attribute.</t>
            </li>
            <li>
              <t><tt>profileID</tt> is the Zigbee application profile ID (optional). If not provided, it defaults to the Home Automation profile (0x0104), which is the default profile in Zigbee 3.0.</t>
            </li>
            <li>
              <t><tt>manufacturerCode</tt> is the Zigbee manufacturer code of the attribute (optional).</t>
            </li>
          </ul>
          <t>For example, a Zigbee event mapping for a temperature change report:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "temperatureChange": {
      "sdfProtocolMap": {
        "zigbee": {
          "type": "attribute_reporting",
          "profileID": 260,
          "endpointID": 1,
          "clusterID": 1026,
          "attributeID": 0,
          "attributeType": 41
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="actions">
          <name>Actions</name>
          <t>An <tt>sdfAction</tt> is mapped to a Zigbee cluster command. The Zigbee protocol
mapping structure for actions is defined as follows:</t>
          <figure anchor="zigmap2">
            <name>CDDL definition for Zigbee Protocol Mapping for sdfAction</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-ACTION-PROTOCOL-MAP //= (
  zigbee: zigbee-action-map
)

zigbee-action-map = {
  endpointID: uint,
  clusterID: uint,
  commandID: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>endpointID</tt> is the Zigbee endpoint ID that corresponds to the SDF action.</t>
            </li>
            <li>
              <t><tt>clusterID</tt> is the Zigbee cluster ID that corresponds to the SDF action.</t>
            </li>
            <li>
              <t><tt>commandID</tt> is the Zigbee command ID that corresponds to the SDF action.</t>
            </li>
            <li>
              <t><tt>profileID</tt> is the Zigbee application profile ID (optional). If not provided, it defaults to the Home Automation profile (0x0104), which is the default profile in Zigbee 3.0.</t>
            </li>
            <li>
              <t><tt>manufacturerCode</tt> is the Zigbee manufacturer code of the command (optional).</t>
            </li>
          </ul>
          <t>For example, a Zigbee protocol mapping to set a temperature:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfAction": {
    "setTemperature": {
      "sdfProtocolMap": {
        "zigbee": {
          "profileID": 260,
          "endpointID": 1,
          "clusterID": 1026,
          "commandID": 0
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
      </section>
    </section>
    <section anchor="scim-sdf-extension">
      <name>SCIM SDF Extension</name>
      <t>While SDF provides a way to describe a device class and SCIM defines a device
instance, a method is needed to associate a mapping between an instance of a
device and its associated SDF models. To accomplish so, this document defines
a SCIM extension that <bcp14>MAY</bcp14> be used in conjunction with
<xref target="RFC9944"/> in <xref target="scim-sdf-extension-schema"/>. Implementation
of this SCIM extension is <bcp14>OPTIONAL</bcp14> and independent of the protocol mapping
functionality defined in the rest of this document. The SCIM schema attributes
used here are described in Section 7 of <xref target="RFC7643"/>.</t>
      <figure anchor="scim-sdf-extension-schema">
        <name>SCIM SDF Extension Schema</name>
        <sourcecode type="json"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
    "id": "urn:ietf:params:scim:schemas:extension:sdf:2.0:Device",
    "name": "SDFExtension",
    "description": "Device extension schema for SDF.",
    "attributes": [
        {
            "name": "sdf",
            "type": "string",
            "description": "SDF models supported by the device.",
            "multiValued": true,
            "required": true,
            "caseExact": true,
            "mutability": "readWrite",
            "returned": "default",
            "uniqueness": "none"
        }
    ],
    "meta": {
        "resourceType": "Schema",
        "location": "/v2/Schemas/urn:ietf:params:scim:schemas:\
                                            extension:sdf:2.0:Device"
    }
}
]]></sourcecode>
      </figure>
      <t>Here is an example SCIM device schema extension with SDF models:</t>
      <sourcecode type="json"><![CDATA[{
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:Device",
        "urn:ietf:params:scim:schemas:extension:sdf:2.0:Device"
    ],
    "id": "e9e30dba-f08f-4109-8486-d5c6a3316111",
    "displayName": "Heart Monitor",
    "active": true,
    "urn:ietf:params:scim:schemas:extension:sdf:2.0:Device": {
        "sdf": [
            "https://example.com/thermometer#/sdfThing/thermometer",
            "https://example.com/heartrate#/sdfObject/healthsensor"
        ]
    }
}
]]></sourcecode>
      <t>An SDF model <bcp14>MUST</bcp14> be referenced with the <tt>sdf</tt> keyword inside the SCIM device
schema as described in <xref target="RFC9944"/>.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of <xref target="RFC9880"/> apply to this document as well.</t>
      <t>Each protocol mapped using this mechanism has its own security model.
The protocol mapping mechanism defined in this document does not provide
additional security beyond what is offered by the underlying protocols.
Implementations <bcp14>MUST</bcp14> ensure that appropriate protocol-level security
mechanisms are employed when accessing affordances through the mapped
protocol operations.</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 registration policy for this registry is "Specification Required" as
defined in Section 4.6 of <xref target="RFC8126"/>.</t>
        <t>The registry must contain the following attributes:</t>
        <ul spacing="normal">
          <li>
            <t>Protocol map name, as per <tt>sdfProtocolMap</tt></t>
          </li>
          <li>
            <t>Protocol name</t>
          </li>
          <li>
            <t>Description</t>
          </li>
          <li>
            <t>Reference of the specification describing the protocol mapping.</t>
          </li>
        </ul>
        <t>The specification requirements for a registration request are
defined in <xref target="protocol-registration"/>.</t>
        <t>The designated expert(s) <bcp14>MUST</bcp14> verify that the protocol map name is appropriate and not likely to cause confusion with existing entries.</t>
        <t>The registrant of an existing entry may request updates to that entry, subject to the same expert review.
They should verify that updates preserve backward compatibility with deployed implementations, or if breaking changes are necessary, consider whether a new registry entry is more appropriate.</t>
        <t>The following protocol mappings are described in this document:</t>
        <table anchor="protmap-reg">
          <name>Protocol Mapping Registry</name>
          <thead>
            <tr>
              <th align="left">Protocol Map Name</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, <xref target="ble-pm"/></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, <xref target="zigbee-pm"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="scim-device-schema-sdf-extension">
        <name>SCIM Device Schema SDF Extension</name>
        <t>IANA is requested to create the following extension in the SCIM
Server-Related Schema URIs registry as described in <xref target="scim-sdf-extension"/>:</t>
        <table anchor="iana-scim">
          <name>SCIM Device Schema SDF Extension</name>
          <thead>
            <tr>
              <th align="left">URN</th>
              <th align="left">Description</th>
              <th align="left">Resource Type</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">urn:ietf:params:scim: schemas:extension: sdf:2.0:Device</td>
              <td align="left">SDF Extension</td>
              <td align="left">Device</td>
              <td align="left">This document, <xref target="scim-sdf-extension"/></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="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"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <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="RFC9880">
          <front>
            <title>Semantic Definition Format (SDF) for Data and Interactions of Things</title>
            <author fullname="M. Koster" initials="M." role="editor" surname="Koster"/>
            <author fullname="C. Bormann" initials="C." role="editor" surname="Bormann"/>
            <author fullname="A. Keränen" initials="A." surname="Keränen"/>
            <date month="January" year="2026"/>
            <abstract>
              <t>The Semantic Definition Format (SDF) is a format for domain experts to use in the creation and maintenance of data and interaction models that describe Things, i.e., physical objects that are available for interaction over a network. An SDF specification describes definitions of SDF Objects/SDF Things and their associated interactions (Events, Actions, and 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="RFC" value="9880"/>
          <seriesInfo name="DOI" value="10.17487/RFC9880"/>
        </reference>
        <reference anchor="RFC9944">
          <front>
            <title>Device Schema Extensions to the System for Cross-Domain Identity Management (SCIM) Model</title>
            <author fullname="M. Shahzad" initials="M." surname="Shahzad"/>
            <author fullname="H. Iqbal" initials="H." surname="Iqbal"/>
            <author fullname="E. Lear" initials="E." surname="Lear"/>
            <date month="May" year="2026"/>
            <abstract>
              <t>The initial core schema for the System for Cross-domain Identity Management (SCIM) was designed for provisioning users. This memo specifies schema extensions that enable provisioning of devices using various underlying bootstrapping systems such as Wi-Fi Easy Connect, FIDO device onboarding vouchers, Bluetooth Low Energy (BLE) passcodes, and MAC Authenticated Bypass (MAB).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9944"/>
          <seriesInfo name="DOI" value="10.17487/RFC9944"/>
        </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="RFC7643">
          <front>
            <title>System for Cross-domain Identity Management: Core Schema</title>
            <author fullname="P. Hunt" initials="P." role="editor" surname="Hunt"/>
            <author fullname="K. Grizzle" initials="K." surname="Grizzle"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The System for Cross-domain Identity Management (SCIM) specifications are designed to make identity management in cloud-based applications and services easier. The specification suite builds upon experience with existing schemas and deployments, placing specific emphasis on simplicity of development and integration, while applying existing authentication, authorization, and privacy models. Its intent is to reduce the cost and complexity of user management operations by providing a common user schema and extension model as well as binding documents to provide patterns for exchanging this schema using HTTP.</t>
              <t>This document provides a platform-neutral schema and extension model for representing users and groups and other resource types in JSON format. This schema is intended for exchange and use with cloud service providers.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7643"/>
          <seriesInfo name="DOI" value="10.17487/RFC7643"/>
        </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="Zigbee30" target="https://csa-iot.org/all-solutions/zigbee/">
          <front>
            <title>Zigbee 3.0 Specification</title>
            <author>
              <organization>CSA IoT</organization>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </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 840?>

<section anchor="cddl-definition">
      <name>CDDL Definition</name>
      <t>This appendix contains the combined CDDL definitions for the SDF protocol mappings.</t>
      <figure anchor="sdf-protocol-map-cddl">
        <name>CDDL for SDF protocol mappings</name>
        <sourcecode type="cddl" name="sdf-protocol-map.cddl" markers="true"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-EXTENSION-PROPERTY //= (
  sdfProtocolMap: {
    * $$SDF-PROPERTY-PROTOCOL-MAP
  }
)

property-protocol-map<name, props, read-props, write-props> = (
  name => props /
    {
      read: read-props,
      write: write-props
    }
)

$$SDF-EXTENSION-ACTION //= (
  sdfProtocolMap: {
    * $$SDF-ACTION-PROTOCOL-MAP
  }
)

$$SDF-EXTENSION-EVENT //= (
  sdfProtocolMap: {
    * $$SDF-EVENT-PROTOCOL-MAP
  }
)

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"ble", ble-property, ble-property, ble-\
                                                            property>
)

ble-property = {
  serviceID: text,
  characteristicID: text
}

$$SDF-EVENT-PROTOCOL-MAP //= (
  ble: ble-event-map
)

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

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"zigbee", zigbee-property, zigbee-property, \
                                                     zigbee-property>
)

zigbee-property = {
  endpointID: uint,
  clusterID: uint,
  attributeID: uint,
  attributeType: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}

$$SDF-EVENT-PROTOCOL-MAP //= (
  zigbee: zigbee-event-map
)

zigbee-event-type = "attribute_reporting" / "write_event"

zigbee-event-map = {
  type: zigbee-event-type,
  endpointID: uint,
  clusterID: uint,
  attributeID: uint,
  attributeType: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}

$$SDF-ACTION-PROTOCOL-MAP //= (
  zigbee: zigbee-action-map
)

zigbee-action-map = {
  endpointID: uint,
  clusterID: uint,
  commandID: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}

]]></sourcecode>
      </figure>
    </section>
    <section anchor="openapi-definition">
      <name>OpenAPI Definition</name>
      <!-- LC: Maybe we need some text to explain why all of a sudden there is some
OpenAPI specifications. -->

<t>The following non-normative model is provided for convenience of the implementer.</t>
      <figure anchor="protocolmapmodel">
        <name>OpenAPI model</name>
        <sourcecode type="yaml" name="ProtocolMap.yaml" markers="true"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

openapi: 3.0.3
info:
  title: SDF Protocol Mapping
  description: |-
    SDF Protocol Mapping. When adding a
    new protocol mapping please add a reference to the protocol map
    for all the schemas in this file.
  version: 0.10.0
externalDocs:
  description: SDF Protocol Mapping IETF draft
  url: https://datatracker.ietf.org/doc/draft-ietf-asdf-sdf-protocol\
                                                            -mapping/

paths: {}

components:
  schemas:
## Protocol Map for a property
    ProtocolMap-Property:
      type: object
      properties:
        sdfProtocolMap:
          oneOf:  
            - $ref: './ProtocolMap-BLE.yaml#/components/schemas/\
                                             ProtocolMap-BLE-Propmap'
            - $ref: './ProtocolMap-Zigbee.yaml#/components/schemas/\
                                          ProtocolMap-Zigbee-Propmap'

## Protocol Map for an event
    ProtocolMap-Event:
      type: object
      properties:
        sdfProtocolMap:
          oneOf:  
            - $ref: './ProtocolMap-BLE.yaml#/components/schemas/\
                                               ProtocolMap-BLE-Event'
            - $ref: './ProtocolMap-Zigbee.yaml#/components/schemas/\
                                            ProtocolMap-Zigbee-Event'
 
]]></sourcecode>
      </figure>
      <section anchor="protocol-map-for-ble">
        <name>Protocol map for BLE</name>
        <figure anchor="protocolmapble">
          <name>OpenAPI model for BLE</name>
          <sourcecode type="yaml" name="ProtocolMap-BLE.yaml" markers="true"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

openapi: 3.0.3
info:
  title: SDF Protocol Mapping for BLE
  description: |-
    SDF Protocol Mapping for BLE devices.
  version: 0.10.0
externalDocs:
  description: SDF Protocol Mapping IETF draft
  url: https://datatracker.ietf.org/doc/draft-ietf-asdf-sdf-protocol\
                                                            -mapping/

paths: {}

components:
  schemas:
## Protocol Mapping for BLE Property
    ProtocolMap-BLE-Propmap:
      required:
        - ble
      type: object
      properties:
        ble:
          required:
            - serviceID
            - characteristicID
          type: object
          properties:
            serviceID:
              type: string
              format: uuid
              example: 00001809-0000-1000-8000-00805f9b34fb
            characteristicID:
              type: string
              format: uuid
              example: 00002a1c-0000-1000-8000-00805f9b34fb
              
## Defines different types of BLE events
    ProtocolMap-BLE-Event:
      required:
        - ble
      type: object
      properties:
        ble:
          oneOf:
            - type: object
              required:
                - type
                - serviceID
                - characteristicID
              properties:
                type:
                  type: string
                  example: gatt
                  enum:
                    - gatt
                serviceID:
                  type: string
                  example: 00001809-0000-1000-8000-00805f9b34fb
                characteristicID:
                  type: string
                  example: 00002a1c-0000-1000-8000-00805f9b34fb
            - type: object
              required:
                - type
              properties:
                type:
                  type: string
                  example: advertisements
                  enum:
                    - advertisements
            - type: object
              required:
                - type
              properties:
                type:
                  type: string
                  example: connection_events
                  enum:
                    - connection_events
]]></sourcecode>
        </figure>
      </section>
      <section anchor="protocol-map-for-zigbee">
        <name>Protocol map for Zigbee</name>
        <figure anchor="protocolmapzigbee">
          <name>OpenAPI model for Zigbee</name>
          <sourcecode type="yaml" name="ProtocolMap-Zigbee.yaml" markers="true"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

openapi: 3.0.3
info:
  title: SDF Protocol Mapping for Zigbee
  description: |-
    SDF Protocol Mapping for Zigbee devices.
  version: 0.10.0
externalDocs:
  description: SDF Protocol Mapping IETF draft
  url: https://datatracker.ietf.org/doc/draft-ietf-asdf-sdf-protocol\
                                                            -mapping/

paths: {}

components:
  schemas:
## Protocol mapping for Zigbee property
    ProtocolMap-Zigbee-Propmap:
      required:
        - zigbee
      type: object
      properties:
        zigbee:
          required:
            - endpointID
            - clusterID
            - attributeID
          type: object
          properties:
            endpointID:
              type: integer
              format: int32
              example: 1
            clusterID:
              type: integer
              format: int32
              example: 6
            attributeID:
              type: integer
              format: int32
              example: 16
            type:
              type: integer
              format: int32
              example: 1
            profileID:
              type: integer
              format: int32
              example: 260

    ProtocolMap-Zigbee-Event:
      allOf:  
        - $ref: '#/components/schemas/ProtocolMap-Zigbee-Propmap'
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document relies on SDF models described in <xref target="RFC9880"/>, as such, we are grateful to the authors of this document for putting their time and effort into defining SDF in depth, allowing us to make use of it.
The authors are grateful to Carsten Bormann, Jan Romann, Ari Keränen, and Eliot Lear
for their reviews and contributions to this document,
in particular Jan Romann for his help with the CDDL definitions (<xref target="sdf-protocol-map-cddl"/>)
and Eliot Lear for his contributions to <xref target="scim-sdf-extension"/>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
677n+n8H5rOAi4QAAA==

-->

</rfc>
