<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-asdf-sdf-protocol-mapping-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="sdf-protocol-mapping">Protocol Mapping for SDF</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-protocol-mapping-05"/>
    <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="February" day="24"/>
    <area>Applications and Real-Time</area>
    <workgroup>A Semantic Definition Format for Data and Interactions of Things</workgroup>
    <keyword>IoT</keyword>
    <abstract>
      <?line 67?>

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

<section anchor="introduction">
      <name>Introduction</name>
      <section anchor="protocol-mapping">
        <name>Protocol Mapping</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 the SDF model
for a device on an actual implementation 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.</t>
        <t>This document defines such a mechanism using the <tt>sdfProtocolMap</tt> keyword,
which allows SDF models to include protocol-specific mapping information
attached to the protocol-agnostic definitions. An <tt>sdfProtocolMap</tt> can be applied to
an sdfAffordance, be it an sdfProperty, sdfEvent or sdfAction. 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>
        <t>The protocol mapping mechanism is designed to be extensible: target protocols
include non-IP protocols commonly used in IoT environments, such as <xref target="BLE53"/>
and <xref target="Zigbee30"/>, as well as IP-based protocols such as HTTP <xref target="RFC9110"/> or
CoAP <xref target="RFC7252"/>. This document registers mappings for BLE and Zigbee; future
specifications can define mappings for additional protocols.</t>
      </section>
      <section anchor="scim-sdf-model-extension">
        <name>SCIM SDF model extension</name>
        <t>SDF provides a way to describe a class of devices and SCIM describes a device instance. The SDF model extension in this document defines a SCIM extension that enables inclusion of the SDF model for the class of devices a device belongs to in the SCIM object for that device.</t>
      </section>
    </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>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 (sdfProperty, sdfAction,
or sdfEvent). Protocol-specific attributes are embedded within this object,
keyed by an IANA registered protocol name, e.g., "ble" or "zigbee".</t>
      <figure anchor="protmap">
        <name>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 target="RFC9880"/>
(Appendix A). 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 target="RFC9880"/> (Appendix A) is used to add protocol mapping to
sdfProperty 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> = (
  name => props /
    {
      read: props,
      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
registered 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"),
 use the <tt>property-protocol-map</tt> generic with the protocol name and a map type
defining the protocol-specific attributes. The protocol name
("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[
$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"new-protocol", 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 target="RFC9880"/> (Appendix A) is used to add protocol mapping to
sdfAction 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, add a group entry mapping 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 target="RFC9880"/> (Appendix A) is used to add protocol mapping to
sdfEvent 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 anchor="protocol-registration">
        <name>Protocol Registration</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 protocol mapping <bcp14>MUST</bcp14> be defined by a specification that 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>SHOULD</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>
      </section>
    </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">
        <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. 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 SDF properties, the BLE protocol mapping structure
is defined as follows:</t>
          <figure anchor="blemap1">
            <name>CDDL definition for BLE Protocol Mapping for properties</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"ble", 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": "12345678-1234-5678-1234-56789abcdef4",
          "characteristicID": "12345678-1234-5678-1234-56789abcdef5"
        }
      }
    }
  }
}
]]></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[
{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "ble": {
          "read": {
            "serviceID": "12345678-1234-5678-1234-56789abcdef4",
            "characteristicID": "12345678-1234-5678-1234-56789abcdef5"
          },
          "write": {
            "serviceID": "12345678-1234-5678-1234-56789abcdef4",
            "characteristicID": "12345678-1234-5678-1234-56789abcdef6"
          }
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="events">
          <name>Events</name>
          <t>For SDF events, the BLE protocol mapping structure is similar to SDF properties, but it must
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-EVENT-PROTOCOL-MAP //= (
  ble: 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:</t>
          <sourcecode type="json"><![CDATA[
{
  "sdfEvent": {
    "heartRate": {
      "sdfProtocolMap": {
        "ble": {
          "type": "gatt",
          "serviceID": "12345678-1234-5678-1234-56789abcdef4",
          "characteristicID": "12345678-1234-5678-1234-56789abcdef5"
        }
      }
    }
  }
}
]]></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">
        <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. 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>SDF properties are mapped to Zigbee cluster attributes. The Zigbee
property protocol mapping structure is defined as follows:</t>
          <figure anchor="zigmap1">
            <name>CDDL definition for Zigbee Protocol Mapping for properties</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"zigbee", zigbee-property>
)

zigbee-property = {
  endpointID: uint,
  ? manufacturerCode: uint,
  clusterID: uint,
  attributeID: uint,
  attributeType: 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>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:</t>
          <sourcecode type="json"><![CDATA[
{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "zigbee": {
          "endpointID": 1,
          "clusterID": 1026, // 0x0402
          "attributeID": 0, // 0x0000
          "attributeType": 41 // 0x29
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="events-1">
          <name>Events</name>
          <t>SDF events are mapped to Zigbee cluster attribute reporting. The Zigbee
event protocol mapping structure is defined as follows:</t>
          <figure anchor="zigmap-event">
            <name>CDDL definition for Zigbee Protocol Mapping for events</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EVENT-PROTOCOL-MAP //= (
  zigbee: zigbee-event-map
)

zigbee-event-map = {
  endpointID: uint,
  ? manufacturerCode: uint,
  clusterID: uint,
  attributeID: uint,
  attributeType: uint
}
]]></sourcecode>
          </figure>
          <t>For example, a Zigbee event mapping for a temperature change report:</t>
          <sourcecode type="json"><![CDATA[
{
  "sdfEvent": {
    "temperatureChange": {
      "sdfProtocolMap": {
        "zigbee": {
          "endpointID": 1,
          "clusterID": 1026, // 0x0402
          "attributeID": 0, // 0x0000
          "attributeType": 41 // 0x29
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="actions">
          <name>Actions</name>
          <t>SDF actions are mapped to Zigbee cluster commands. The Zigbee protocol mapping structure for actions is defined as follows:</t>
          <figure anchor="zigmap2">
            <name>CDDL definition for Zigbee Protocol Mapping for actions</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-ACTION-PROTOCOL-MAP //= (
  zigbee: zigbee-action-map
)

zigbee-action-map = {
  endpointID: uint,
  ? manufacturerCode: uint,
  clusterID: uint,
  commandID: 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>
          </ul>
          <t>For example, a Zigbee protocol mapping to set a temperature:</t>
          <sourcecode type="json"><![CDATA[
{
  "sdfAction": {
    "setTemperature": {
      "sdfProtocolMap": {
        "zigbee": {
          "endpointID": 1,
          "clusterID": 1026, // 0x0402
          "commandID": 0 // 0x0000
        }
      }
    }
  }
}
]]></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 this, we define a SCIM extension that can be used in conjunction with
<xref target="I-D.ietf-scim-device-model"/> 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>
        <artwork><![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:extens\
ion:sdf:2.0:Device"
    }
}
]]></artwork>
      </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 must be referenced with the <tt>sdf</tt> keyword inside the SCIM device schema as described in <xref target="I-D.ietf-scim-device-model"/>.</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</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>SHOULD</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</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 anchor="scim-device-schema-sdf-extension">
        <name>SCIM Device Schema SDF Extension</name>
        <t>IANA is requested to create the following extensions in the SCIM
Server-Related Schema URIs registry as described in <xref target="scim-sdf-extension"/>:</t>
        <table>
          <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 memo, <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="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="I-D.ietf-scim-device-model">
          <front>
            <title>Device Schema Extensions to the SCIM model</title>
            <author fullname="Muhammad Shahzad" initials="M." surname="Shahzad">
              <organization>North Carolina State University</organization>
            </author>
            <author fullname="Hassan Iqbal" initials="H." surname="Iqbal">
              <organization>North Carolina State University</organization>
            </author>
            <author fullname="Eliot Lear" initials="E." surname="Lear">
              <organization>Cisco Systems</organization>
            </author>
            <date day="3" month="September" year="2025"/>
            <abstract>
              <t>   The initial core schema for SCIM (System for Cross-domain Identity
   Management) was designed for provisioning users.  This memo specifies
   schema extensions that enables provisioning of devices, using various
   underlying bootstrapping systems, such as Wi-fi Easy Connect, FIDO
   device onboarding vouchers, BLE passcodes, and MAC authenticated
   bypass.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-scim-device-model-18"/>
        </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 771?>

<section anchor="cddl-definition">
      <name>CDDL Definition</name>
      <t>This appendix contains the combined CDDL definitions for the SDF protocol mappings.</t>
      <sourcecode type="cddl"><![CDATA[
<CODE BEGINS> file "sdf-protocol-map.cddl"
$$SDF-EXTENSION-PROPERTY //= (
  sdfProtocolMap: {
    * $$SDF-PROPERTY-PROTOCOL-MAP
  }
)

property-protocol-map<name, props> = (
  name => props /
    {
      read: props,
      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 = {
  serviceID: text,
  characteristicID: text
}

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

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

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

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

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

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

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

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

<CODE ENDS>
]]></sourcecode>
    </section>
    <section anchor="openapi-definition">
      <name>OpenAPI Definition</name>
      <t>The following non-normative model is provided for convenience of the implementor.</t>
      <figure anchor="protocolmapmodel">
        <sourcecode markers="true" name="ProtocolMap.yaml"><![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/Prot\
ocolMap-BLE-Propmap'
            - $ref: './ProtocolMap-Zigbee.yaml#/components/schemas/P\
rotocolMap-Zigbee-Propmap'

## Protocol Map for an event
    ProtocolMap-Event:
      type: object
      properties:
        sdfProtocolMap:
          oneOf:  
            - $ref: './ProtocolMap-BLE.yaml#/components/schemas/Prot\
ocolMap-BLE-Event'
            - $ref: './ProtocolMap-Zigbee.yaml#/components/schemas/P\
rotocolMap-Zigbee-Event'
 
]]></sourcecode>
      </figure>
      <section anchor="protocol-map-for-ble">
        <name>Protocol map for BLE</name>
        <figure anchor="protocolmapble">
          <sourcecode markers="true" name="ProtocolMap-BLE.yaml"><![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:
          required:
            - type
          type: object
          properties:
            type:
              type: string
              example: gatt
              enum:
                - gatt
                - connection_events
                - advertisements
            serviceID:
              type: string
              example: 00001809-0000-1000-8000-00805f9b34fb
            characteristicID:
              type: string
              example: 00002a1c-0000-1000-8000-00805f9b34fb
]]></sourcecode>
        </figure>
      </section>
      <section anchor="protocol-map-for-zigbee">
        <name>Protocol map for Zigbee</name>
        <figure anchor="protocolmapzigbee">
          <sourcecode markers="true" name="ProtocolMap-Zigbee.yaml"><![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

    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 would also like to thank the ASDF working group for their excellent feedback and steering of the document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
IuxuAAA=

-->

</rfc>
