<?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.36 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-asdf-sdf-protocol-mapping-08" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="sdf-protocol-mapping">SDF Protocol Mapping</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-protocol-mapping-08"/>
    <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="May" day="07"/>
    <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>
      <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,
  ? 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>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
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="events-1">
          <name>Events</name>
          <t>An <tt>sdfEvent</tt> is 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 sdfEvents</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EVENT-PROTOCOL-MAP //= (
  zigbee: zigbee-event-map
)

zigbee-event-map = {
  endpointID: uint,
  clusterID: uint,
  attributeID: uint,
  attributeType: 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 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>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": {
          "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,
  ? 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>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": {
          "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="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>
        <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="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, 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="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 820?>

<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,
  ? manufacturerCode: uint,
}

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

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

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

zigbee-action-map = {
  endpointID: uint,
  clusterID: uint,
  commandID: 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

    ProtocolMap-Zigbee-Event:
      allOf:  
        - $ref: '#/components/schemas/ProtocolMap-Zigbee-Propmap'
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <!-- LC: We need to add all the names of the ASDF WG that contributed with discussions, reviews, etc. -->

<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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
/wdM3YO45H4AAA==

-->

</rfc>
