<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-asdf-sdf-protocol-mapping-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title abbrev="sdf-protocol-mapping">Protocol Mapping for SDF</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-protocol-mapping-01"/>
    <author initials="R." surname="Mohan" fullname="Rohit Mohan">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <street>170 West Tasman Drive</street>
          <city>San Jose</city>
          <code>95134</code>
          <country>USA</country>
        </postal>
        <email>rohitmo@cisco.com</email>
      </address>
    </author>
    <author initials="B." surname="Brinckman" fullname="Bart Brinckman">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <street>170 West Tasman Drive</street>
          <city>San Jose</city>
          <code>95134</code>
          <country>USA</country>
        </postal>
        <email>bbrinckm@cisco.com</email>
      </address>
    </author>
    <author initials="L." surname="Corneo" fullname="Lorenzo Corneo">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street>Hirsalantie 11</street>
          <city>Jorvas</city>
          <code>1296</code>
          <country>Finland</country>
        </postal>
        <email>lorenzo.corneo@ericsson.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="16"/>
    <area>Applications and Real-Time</area>
    <workgroup>A Semantic Definition Format for Data and Interactions of Things</workgroup>
    <keyword>IoT</keyword>
    <abstract>
      <?line 66?>

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Semantic Definition Format (SDF) <xref target="I-D.ietf-asdf-sdf"/> provides a protocol-agnostic way
to describe IoT devices and their capabilities through properties, actions, and
events (collectively called affordances). However, when implementing these
affordances on actual devices using specific communication protocols, there
needs to be a mechanism to map the protocol-agnostic SDF definitions to
protocol-specific operations.</t>
      <t>These protocols can be non-IP protocols that are commonly used in IoT
environments, such as <xref target="BLE53"/> and <xref target="Zigbee22"/>, or IP-based protocols, such as
HTTP <xref target="RFC2616"/> or CoAP <xref target="RFC7252"/>.</t>
      <t>To leverage an SDF model to perform protocol-specific operations on an instance
of a device, a mapping of the SDF affordance to a protocol-specific attribute is
required. This document defines the protocol mapping mechanism using the
<tt>sdfProtocolMap</tt> keyword, which allows SDF models to include protocol-specific
mapping information alongside the protocol-agnostic definitions.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

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

ble-protocol-map = {
  ? ble-property,
  ? read: { ble-property },
  ? write: { 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 or action.</t>
            </li>
            <li>
              <t><tt>characteristicID</tt> is the BLE characteristic ID that corresponds to the SDF property or action.</t>
            </li>
          </ul>
          <t>For example, a BLE protocol mapping for a temperature property might look like:</t>
          <sourcecode type="json"><![CDATA[
{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "ble": {
          "serviceID": "12345678-1234-5678-1234-56789abcdef4",
          "characteristicID": "12345678-1234-5678-1234-56789abcdef5"
        }
      }
    }
  }
}
]]></sourcecode>
          <t>For a temperature property that has different mappings for read and write operations,
the BLE protocol mapping might look like:</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>
          <t>For SDF events, the BLE protocol mapping structure is similar, but it may
include additional attributes such as the type of the event.</t>
          <figure anchor="blemap2">
            <name>BLE Protocol Mapping for events</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-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 might look like:</t>
          <sourcecode type="json"><![CDATA[
{
  "sdfEvent": {
    "heartRate": {
      "sdfOutputData": {
        "sdfProtocolMap": {
          "ble": {
            "type": "gatt",
            "serviceID": "12345678-1234-5678-1234-56789abcdef4",
            "characteristicID": "12345678-1234-5678-1234-56789abcdef5"
          }
        }
      }
    }
  }
}
]]></sourcecode>
          <t>Another example of an <tt>isPresent</tt> event using BLE advertisements:</t>
          <sourcecode type="json"><![CDATA[
{
  "sdfEvent": {
    "isPresent": {
      "sdfOutputData": {
        "sdfProtocolMap": {
          "ble": {
            "type": "advertisements"
          }
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
      </section>
      <section anchor="zigbee-protocol-mapping">
        <name>Zigbee Protocol Mapping</name>
        <t>The Zigbee protocol mapping allows SDF models to specify how properties,
actions, and events should be accessed using the Zigbee protocol. The
mapping includes details such as cluster IDs and attribute IDs that are
used to access the corresponding SDF affordances.</t>
        <section anchor="zigbee-protocol-mapping-structure">
          <name>Zigbee Protocol Mapping Structure</name>
          <t>For SDF properties and events, the Zigbee protocol mapping structure
is defined as follows:</t>
          <figure anchor="zigmap1">
            <name>CDDL definition for Zigbee Protocol Mapping for properties and actions</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-PROTOCOL-MAP //= (
  zigbee: zigbee-protocol-map
)

zigbee-protocol-map = {
  ? zigbee-property,
  ? read: { zigbee-property },
  ? write: { zigbee-property }
}

zigbee-property = (
  endpointID: uint,
  manufacturerCode: uint,
  clusterID: uint,
  attributeID: uint,
  type: uint
)
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>endpointID</tt> is the Zigbee endpoint ID that corresponds to the SDF affordance.</t>
            </li>
            <li>
              <t><tt>clusterID</tt> is the Zigbee cluster ID that corresponds to the SDF affordance.</t>
            </li>
            <li>
              <t><tt>attributeID</tt> is the Zigbee attribute ID that corresponds to the SDF affordance.</t>
            </li>
            <li>
              <t><tt>type</tt> is the Zigbee data type of the attribute.</t>
            </li>
          </ul>
          <t>SDF properties are mapped to Zigbee cluster attributes and events are mapped to Zigbee cluster attribute reporting.</t>
          <t>For example, a Zigbee protocol mapping for a temperature property might look like:</t>
          <sourcecode type="jsonc"><![CDATA[
{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "zigbee": {
          "endpointID": 1,
          "clusterID": 1026, // 0x0402
          "attributeID": 0, // 0x0000
          "type": 41 // 0x29
        }
      }
    }
  }
}
]]></sourcecode>
          <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-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 might look like:</t>
          <sourcecode type="jsonc"><![CDATA[
{
  "sdfAction": {
    "setTemperature": {
      "sdfProtocolMap": {
        "zigbee": {
          "endpointID": 1,
          "clusterID": 1026, // 0x0402
          "commandID": 0 // 0x0000
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
      </section>
      <section anchor="ip-based-protocol-mapping">
        <name>IP based Protocol Mapping</name>
        <t>The protocol mapping mechanism can potentially also be used for IP-based protocols
such as HTTP or CoAP.</t>
        <t>In the case of HTTP, SDF protocol mappings towards an SDF quality <bcp14>MAY</bcp14> be
expressed by directly pointing to OpenAPI schema and/or component.</t>
        <sourcecode type="cddl"><![CDATA[
$$SDF-PROTOCOL-MAP //= (
  openapi: openapi-protocol-map
)

openapi-protocol-map = {
  ? openapi-property,
  ? read: { openapi-property },
  ? write: { openapi-property }
}

openapi-property = (
  operationRef: text,
  $ref: text
)
]]></sourcecode>
        <t>An example of a protocol mapping for a property using HTTP might look like:</t>
        <sourcecode type="json"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

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

components:
  schemas:
    HeartRate:
      type: object
      properties:
        pulse:
          type: integer
          description: The current heart rate in beats per minute.
        spo2:
          type: number
          format: float
          description: |-
            The current body temperature in degrees Celsius.
]]></sourcecode>
        <t>We assume that the readable properties will map to GET operations and the writable properties will map to PUT operations.
If this is not the case, or if the API is different, the protocol mapping can be specified as such:</t>
        <sourcecode type="json"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "sdfProperty": {
    "heartrate": {
      "sdfProtocolMap": {
        "openapi": {
          "read": {
            "operationRef": "https://example.com/openapi.json#/paths\
/~1heartrate~1{id}~1current/get",
            "$ref": "https://example.com/openapi.json#/components/sc\
hema/HeartRate/properties/pulse"
          },
          "write": {
            "operationRef": "https://example.com/openapi.json#/paths\
/~1heartrate~1{id}~1current/put",
            "$ref": "https://example.com/openapi.json#/components/sc\
hema/HeartRate/properties/pulse"
          }
        }
      }
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="scim-sdf-extension">
      <name>SCIM SDF Extension</name>
      <t>While SDF provides a way to describe a device, 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"/>, the details of which can be found in
<xref target="scim-sdf-extension-schema"/>.</t>
      <t>An example SCIM device schema extension might look like:</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>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This section provides guidance to the Internet Assigned Numbers Authority
(IANA) regarding registration of values related to this document,
in accordance with <xref target="RFC8126"/>.</t>
      <section anchor="iana-prot-map">
        <name>Protocol mapping</name>
        <t>IANA is requested to create a new registry called "SDF Protocol mapping".</t>
        <t>The registry must contain following attributes:</t>
        <ul spacing="normal">
          <li>
            <t>Protocol map name</t>
          </li>
          <li>
            <t>Protocol name</t>
          </li>
          <li>
            <t>Description</t>
          </li>
          <li>
            <t>Reference of the specification describing the protocol mapping. This specification must be reviewed by an expert.</t>
          </li>
        </ul>
        <t>Following protocol mappings are described in this document:</t>
        <table anchor="protmap-reg">
          <name>Protocol Mapping Registry</name>
          <thead>
            <tr>
              <th align="left">Protocol map</th>
              <th align="left">Protocol Name</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ble</td>
              <td align="left">Bluetooth Low Energy (BLE)</td>
              <td align="left">Protocol mapping for BLE devices</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">zigbee</td>
              <td align="left">Zigbee</td>
              <td align="left">Protocol mapping for Zigbee devices</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">openapi</td>
              <td align="left">OpenAPI</td>
              <td align="left">Protocol mapping for OpenAPI</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="I-D.ietf-asdf-sdf">
          <front>
            <title>Semantic Definition Format (SDF) for Data and Interactions of Things</title>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>KTC Control AB</organization>
            </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <date day="13" month="October" year="2025"/>
            <abstract>
              <t>   The Semantic Definition Format (SDF) is concerned with Things, namely
   physical objects that are available for interaction over a network.
   SDF is a format for domain experts to use in the creation and
   maintenance of data and interaction models that describe Things.  An
   SDF specification describes definitions of SDF Objects/SDF Things and
   their associated interactions (Events, Actions, Properties), as well
   as the Data types for the information exchanged in those
   interactions.  Tools convert this format to database formats and
   other serializations as needed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-25"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="BLE53" target="https://www.bluetooth.com/specifications/specs/core-specification-5-3/">
          <front>
            <title>Bluetooth Core Specification Version 5.3</title>
            <author>
              <organization>Bluetooth SIG</organization>
            </author>
            <date year="2021" month="July" day="13"/>
          </front>
        </reference>
        <reference anchor="Zigbee22" target="https://zigbeealliance.org/solution/zigbee/">
          <front>
            <title>Zigbee 3.0 Specification</title>
            <author>
              <organization>Zigbee Alliance</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="RFC2616">
          <front>
            <title>Hypertext Transfer Protocol -- HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="J. Gettys" initials="J." surname="Gettys"/>
            <author fullname="J. Mogul" initials="J." surname="Mogul"/>
            <author fullname="H. Frystyk" initials="H." surname="Frystyk"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <date month="June" year="1999"/>
            <abstract>
              <t>HTTP has been in use by the World-Wide Web global information initiative since 1990. This specification defines the protocol referred to as "HTTP/1.1", and is an update to RFC 2068. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2616"/>
          <seriesInfo name="DOI" value="10.17487/RFC2616"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <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>
      </references>
    </references>
    <?line 694?>

<section anchor="cddl-definition">
      <name>CDDL Definition</name>
      <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-DATA //= (
  sdfProtocolMap: {
    * $$SDF-PROTOCOL-MAP
  }
)

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

ble-protocol-map = {
  ? ble-property,
  ? read: { ble-property },
  ? write: { ble-property }
}

ble-property = (
  serviceID: text,
  characteristicID: text
)

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

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

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

zigbee-protocol-map = {
  ? zigbee-property,
  ? read: { zigbee-property },
  ? write: { zigbee-property }
}

zigbee-property = (
  endpointID: uint,
  manufacturerCode: uint,
  clusterID: uint,
  attributeID: uint,
  type: uint
)

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

zigbee-action-map = {
  endpointID: uint,
  manufacturerCode: uint,
  clusterID: uint,
  commandID: uint,
}
]]></sourcecode>
    </section>
    <section 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 global names supported by the device\
.",
            "multiValued": true,
            "required": true,
            "caseExact": false,
            "mutability": "readWrite",
            "returned": "default",
            "uniqueness": "none"
        }
    ],
    "meta": {
        "resourceType": "Schema",
        "location": "/v2/Schemas/urn:ietf:params:scim:schemas:extens\
ion:sdf:2.0:Device"
    }
}
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
7LL/BS5iBKVJUgAA

-->

</rfc>
