<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.2.3) -->
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ramos-asdf-api-translation-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="SDF for API translation">Semantic Definition Format (SDF) for API translation</title>
    <seriesInfo name="Internet-Draft" value="draft-ramos-asdf-api-translation-03"/>
    <author initials="E." surname="Ramos" fullname="Edgar Ramos">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street>Hirsalantie 11</street>
          <city>02420 Jorvas, Kirkkonummi</city>
          <country>Finland</country>
        </postal>
        <email>edgar.ramos@ericsson.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="20"/>
    <area>Applications</area>
    <workgroup>ASDF Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 80?>
<t>This document defines an extension to the Semantic Definition Format (SDF) that enables API translation between applications and devices. The translation enables clarification of complex syntax for a service or device to utilize a different API from the one that was first designed to use.</t>
    </abstract>
  </front>
  <middle>
    <?line 83?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In many cases, a service needed by an application can be provided through APIs by several suppliers. Semantic matching can be used to map the needs of the applications and adapt API calls to what the service suppliers could provide. The main purpose of this document is to describe methods that enable the translation of one device or application API to another equivalent API, utilizing syntax understandable by the deploying party.</t>
      <t>An API translator from the original API to the updated one or even mapping to a new service would allow an automatic adaptation to the target API. Also, it would enable the possibility to adapt to multiple APIs with the same data model, enabling the deployment of services from multiple sources. This feature enables use cases such as the usage of the cheapest or most robust service, deployment of national services when traveling, and execution of device services even from a different ecosystem origin.</t>
      <t>This document provides enabling elements for communication from devices or applications belonging to different ecosystems that do not share the same semantic modelling. Utilizing SDF syntax enhanced with an API format depiction, it is possible to provide an API description that is understandable with the syntax known by the device or application, if such semantics are defined in their data model. The final result uses a navigable description of the API's functions to provide the necessary information that is required by a device application to map external required services, their parameters, and results to an application logic using ontologically defined objects that can be matched to remote calls in another device application, for example.</t>
      <t>The API requires a mapping in applications functions by matching syntax in addition to the actual discovery of the API; therefore, the importance of the translation to an understandable model. This matching could be enabled by several mechanisms described, and it is dynamically adjusted to every new interface faced. Using SDF in conjunction with the given schema allows an automated way to match functionality to application intents.</t>
      <artwork><![CDATA[
┌──────────────────────┐                  ┌──────────────────────┐    
│                      │                  │                      │
│  Service platform    │                  │  Service platform    │
│        #1            │                  │        #2            │
│                      │                  │                      │
│       ┌──────────────┐                  │       ┌──────────────┐
│       │ Service API  ┼──┐               │       │ Service API  │
└───────└─────▲────────┘  │               └───────└─────▲──┬─────┘
              │           │                             │  │     
              │           │         ┌───────────┐       │  │      
              │           ▼───┐     │ SDF-API   │       │  │      
              └───────────┤   │     │TRANSLATION│       │  │      
                          │   ┼─────►  MODEL    ├───────┘  │      
                          │   ◄─────┐           ◄──────────┘      
                          └───┘     └───────────┘                 
                         Device                                   
]]></artwork>
      <t><strong>Example of a device using the API translation model to access the same service in a different platform with a different API</strong></t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The definitions of <xref target="I-D.ietf-asdf-sdf"/> apply.
  The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <xref target="RFC2119"/>. 
  As explained in <xref target="RFC8174"/> the words apply when, and only when, they appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="discoverable-api-interfaces">
      <name>Discoverable API interfaces</name>
      <t>A device or application may expose its capabilities as an API list. This could be acquired in real-time by calling a command that provides such a list of commands. For example, the resource “.well-known/commands” <xref target="RFC8615"/> could be used as a specific way to request all the commands available. The reply then includes a list of the different API supported calls, which would be called in a hierarchical way from the root domain that is provided by the device, an application, or a mediating platform.
The reply would contain a description of the supported API with a semantic definition attached. Using the Semantic Definition Format (SDF), a reply for two commands may include what is given in the following example:</t>
      <sourcecode type="json"><![CDATA[
{
  "namespace": {
    "name": "Relevant_URL_or_namespace_used_as_semantic_reference_(example)",
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns",
    "demo": "https://example.com/iss-demo-setup/#",
  },
  "defaultNamespace": "demo",
  "sdfObject": {
    "target_object": {
      "sdfProperty": {
        "target_property": {
          "description": "possible description of the property",
          "sdfRelation": {
            "FeedType": {
              "relType": "rdf:type",
              "target": [
                "demo:Output"
              ]
            }
          },
          "contentFormat": "application/typeofcontent-info"
        }
      },
      "sdfAction": {
        "Name_of_the_command_1": {
          "description": "Description of the command and input required",
          "sdfRelation": {
            "FeedType": {
              "relType": "rdf:type",
              "target": "demo:command1"
            }
          },
          "sdfInputData": {
            "type": "object",
            "properties": {
              "input_1_required": {
                "description": "Description of what element is needed as first input",
                "sdfRelation": {
                  "FeedType": {
                    "relType": "rdf:type",
                    "target": [
                      "demo:input1"                    ]
                  }
                },
                "type": "number",
                "sdfChoice": {
                  "input_2_required": {
                    "description": "A number needed as an input of the command",
                    "const":"0",
                    "sdfRelation": {
                      "FeedType": {
                        "relType": "rdf:type",
                        "target": [
                          "demo":"input2",
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "sdfOutputData": {
            "contentFormat": "application/typeofcontent-info"
          }
        },
        "Name_of_the_command_2": {
          "sdfRelation": {
            "FeedType": {
              "relType": "rdf:type",
              "target": "demo:command2"
            }
          },
          "sdfInputData": {
            "description": "Description of input required for second command",
            "sdfRelation": {
              "FeedType": {
                "relType": "rdf:type",
                "target": "demo:secondInput"
              }
            },
            "type": "typeoftheinput",
            "contentFormat": "application/typeofinput-info"
          }
        }
      }
    }
  }
}

]]></sourcecode>
      <t>In this example, one service is defined with a command1, which requires an input1 (an object) and input2 (a number). The other service requires a different call (command2), which requires only one input (secondInput).</t>
      <t>Further interaction capabilities can be included either in the initial response, as shown above in the "sdfAction" block, or could be discovered by further requests. For example, the descriptions of the two actions detailed above show if they require input, what the details of such input and the output are, and if there is additional information related to the nature of the output. Also, the description field could be tailor-made to provide a URI to a vocabulary that is understandable by the device or application. In this way, the device or application could make sense of the possible options, parameters, and actions that the command provides or requires.</t>
    </section>
    <section anchor="inputting-parameters-to-the-api">
      <name>Inputting parameters to the API</name>
      <t>Once the available function calls and input parameters required by the API have been provisioned to the requester device or application, it can make calls to the API when required by its application logic. The application would map the “need for a capability” to the concrete capability provided by the provider application or device through matching the syntax and data model. The functions are then mapped to the calls that the application can handle and has defined syntax. The parts of the API that are not understood by the requester device are normally ignored. The mapping semantics from a target device or application may be communicated to the application of the requesting device using an SDF mapping extension draft <xref target="bormann-mapping"/>. In such mapping, the actions and data can be expressed using the data model that are understandable by the requester and allows it to produce the API call and provide the required data. The only problem with this mapping is that if the API call structure is different, the logic required to call the target API might be complicated for certain device applications.</t>
      <t>With SDF notation, it is possible to explain the data model but not the mapping for a specific API call. That would require, in some cases, mapping of values and, depending on the API definition, reshuffling of the parameters or even the URI utilized.</t>
      <t>To tackle those challenges, we introduced a new SDF quality that can express URL template patterns from <xref target="RFC6570"/>. The quality <strong>"template-href"</strong>, includes the URL or the URL pattern that matches the command known by the requester device application. As explained in <xref target="RFC6570"/>, the pattern may have variable terms, which are also given an SDF definition and relationship so the requested device can understand how to map its own data model to what the target API requires. Also, we introduce a value mapper <strong>"template-value"</strong> that enables mapping of values to parameters in the target API. The <strong>sdfRelation</strong> <xref target="I-D.ietf-asdf-sdf"/> is used as a vehicle to support the mapping between APIs.</t>
      <t>The namespace <strong>"cmd"</strong> MUST be utilized to provide this API mapping values. 
In this example, we map a command_1 with several inputs to a command_2 that utilizes the inputs in a different way. The schema maps semantically the inputs and instructs the system how to make the API call based on the previously known API.</t>
      <sourcecode type="json"><![CDATA[
  {
 "info":{
    "title": "API mapping of two systems"
  },
  "namespace": {
    "targetSem": "https://example.org/targetSemantics/#",
    "targetDev": "https://example.org/targetDevice",
    "requestDev": "https://example.com/requesterDevice",
    "requestSem": "https://example.com/destinationSemantics/#"
  },
  "defaultNamespace": "requestSem",
  "sdfData": {
    "input_2_required": {
      "type": "number",
      "sdfChoice": {
        "requesterSemantic_1": {
          "const": 1
        },
        "requesterSemantic_2": {
          "const": 2
        }
      },
      "sdfRelation": {
        "FeedType": {
          "relType": "rdf:type",
          "target": [
            "targetDev:#/sdfObject/target_object/sdfAction/Name_of_the_command_1/sdfInputData/input2",
            "requestDev:#/sdfObject/request_object/sdfAction/requester_command/sdfInputData/semanticRequesterInput"
          ]
        }
      }
    }
  },
  "map": {
    "#/sdfObject/request_object/sdfAction/requester_command": {
      "cmd:template-href": "https://example.org/targetDevice/control/Name_of_the_command_1?input1={input_2_required}&input2={input_1}",
      "sdfRelation": {
        "FeedType": {
          "relType": "rdf:type",
          "target": [
            "targetDev:#/sdfObject/target_object/sdfAction/Name_of_the_command_1",
            "requestSem:requester_command"
          ]
        }
      }
    },
    "cmd :template-values": {
      "input2": "#/sdfData/input_1_required",
      "input1": "#/sdfObject/target_object/sdfAction/name_of_command1/sdfInputData/input_1"
    },
    "#/sdfObject/request_object/sdfAction/requester_command_2": {
      "cmd:template-href": "https://example.org/targetDevice/control/Name_of_the_command_2?secondInput={requesterSecondInput}",
      "sdfRelation": {
        "FeedType": {
          "relType": "rdf:type",
          "target": "targetDev:#/sdfObject/target_object/sdfAction/Name_of_the_command_2"
        }
      }
    },
    "cmd:template-values": {
      "secondInput": "#/sdfObject/request_object/sdfAction/requester_command_2/sdfInputData/requesterSecondInput"
    }
  }
}
]]></sourcecode>
    </section>
    <section anchor="methods-on-the-api-calls">
      <name>Methods on the API calls</name>
      <t>Sometimes, only calling an API is not enough. For example, in some cases, the API call requires additional actions such as submitting a payload. To handle this dimension on the API calls, the <strong>method</strong> command has been introduced.  This command SHALL enable the requested device to understand how to handle the API call, since in the previous example, the API URL has all the information required in the call itself. However, in some cases, the action necessary with the API may need to be specified in a manner that the requested device can understand. The keyword <strong>method</strong> is meant to describe how MUST be handled the API URL and what to expect of it. In some other examples, the <strong>method</strong> could result in an OBSERVE or another type of new action not yet specified, for example, how to address an XR-type application.</t>
      <t>An example could be the use of an LWM2M camera <xref target="lwm2m-cameraObject"/>. To use this model, a payload has to be submitted in the POST method. The following example describes such a translation from one camera API to the LWM2M model.</t>
      <sourcecode type="json"><![CDATA[
{
    "info": {
      "title": "LwM2M Camera Device to Requester dev. Application API mapping"
    },
    "namespace": {
      "sdm": "https://sdm.wide.ad.jp/sdmo/#/",
      "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns",
      "oma": "https://onedm.org/ecosystem/oma",
      "dev": "http://traffic-light202125.traffic-center.fi/10340/0/",
      "app": "http://owner.mycar.fi/"
    },
    "defaultNamespace": "dev",
    "map": {
      "#/sdfObject/video/sdfAction/playStream": {
        "cmd:template-href": "http://traffic-light202125.traffic-center.fi/10340/0/101",
        "cmd:method":"POST",
        "description": "Starts the recording of the camera",
        "sdfInputData": {
            "type": "number",
            "const":1
         },
        "sdfRelation": {
            "FeedType": {
            "relType": "rdf:type",
             "target": [
                "dev:#/sdfObject/Camera/sdfAction/Local_Recording_Control",
                "oma:#/sdfObject/10340/101",
                "sdm:playStream"              ]
            }
          }    
      },
      "#/sdfObject/video/sdfAction/StopStream": {
        "cmd:template-href": "http://traffic-light202125.traffic-center.fi/10340/0/101",
        "cmd:method":"POST",
        "description": "Stops the recording of the camera",
        "sdfInputData": {
              "type": "number",
              "const":0
        },
        "sdfRelation": {
          "FeedType": {
          "relType": "rdf:type",
          "target": [
            "dev:#/sdfObject/Camera/sdfAction/Local_Recording_Control",
            "oma:#/sdfObject/10340/101",
            "sdm:stopStream"
          ]
          }
        }
      },
      "#/sdfObject/Camera/sdfProperty/Input-video-stream":{  
        "cmd:template-href": "http://traffic-light202125.traffic-center.fi/10340/0/9",
        "sdfRelation": {
          "FeedType": {
            "relType": "rdf:type",
            "target": [
              "dev:#/sdfObject/Camera/sdfProperty/Recording_Location",
              "sdm:VideoMedia"
            ]
          }
       }
     }
    }
 } 
]]></sourcecode>
    </section>
    <section anchor="matching-api-to-application-logic">
      <name>Matching API to application logic</name>
      <t>Each application has a logic that requires either information from the API call or the execution of a service. With this translation tool, the application logic may need to consider the different types of APIs that may be present. For example, if the API requires a payload or the info is directly appended to the call. Also, on the way the API produces the output, and how to handle it.</t>
    </section>
    <section anchor="agentic-ai-integration">
      <name>Agentic AI Integration</name>
      <t>AI agents rely heavily on natural language to understand APIs. But mistakes can be made without a full understanding of semantics. With the help of SDF, the semantics can be clarified and used as intended. Instead of forcing the LLM to output the translated raw payload token-by-token, an API translation could be utilized to indicate a new API deployment.</t>
      <t>Nowadays, MCP (Model Context Protocol) <xref target="mcp"/> provides a standard way for AI agents to discover APIs descriptions, invoke translated operations safely, and receive structured results. SDF definitions and SDF API translation descriptions may be exposed to agentic systems as MCP resources. For example:
- sdf://devices/thermostat-123/model. The result of the calls can be an SDF model.
- sdf://devices/thermostat-123/translation. After providing the SDF model of the device, the system provides a translation on how to use the service provided.
- sdf://translations/vendor-x-to-vendor-y. Provides a translation from a system from vendor X to a system from vendor Y.</t>
    </section>
    <section anchor="ontologies-describing-apis">
      <name>Ontologies describing APIs</name>
      <t>Every application domain has an ontology or vocabulary that indicates actions and their parameters. These actions can be translated to APIs but they do not necessarily explain the API itself. Just the result of the API action.</t>
      <t>Some ontologies describing APIs may need to be involved in some cases. Such as W3C Web of Things (WoT) Thing Description (TD)<xref target="wot"/>, Hydra Core Vocabulary (for hypermedia Web APIs) <xref target="hydra"/> and others with less focus in APIs but relevant like OWL S / WSMO (Semantic Web Services) <xref target="owls"/>, schema.org Actions <xref target="schema"/> and OGC SensorThings API <xref target="ogc"/> .</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "{XXXX}" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types registry <xref target="IANA.media-types"/>. --&gt;</t>
        <table align="left" anchor="new-media-type">
          <name>A media type for SDF mapping files</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">sdf-mapping+json</td>
              <td align="left">application/ sdf-mapping+json</td>
              <td align="left">RFC XXXX, section 5.1</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Some wider issues are discussed in <xref target="RFC8576"/>.</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Thanks to Ari Keränen for the support in realizing this idea.</t>
    </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="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8576">
          <front>
            <title>Internet of Things (IoT) Security: State of the Art and Challenges</title>
            <author fullname="O. Garcia-Morchon" initials="O." surname="Garcia-Morchon"/>
            <author fullname="S. Kumar" initials="S." surname="Kumar"/>
            <author fullname="M. Sethi" initials="M." surname="Sethi"/>
            <date month="April" year="2019"/>
            <abstract>
              <t>The Internet of Things (IoT) concept refers to the usage of standard Internet protocols to allow for human-to-thing and thing-to-thing communication. The security needs for IoT systems are well recognized, and many standardization steps to provide security have been taken -- for example, the specification of the Constrained Application Protocol (CoAP) secured with Datagram Transport Layer Security (DTLS). However, security challenges still exist, not only because there are some use cases that lack a suitable solution, but also because many IoT devices and systems have been designed and deployed with very limited security capabilities. In this document, we first discuss the various stages in the lifecycle of a thing. Next, we document the security threats to a thing and the challenges that one might face to protect against these threats. Lastly, we discuss the next steps needed to facilitate the deployment of secure IoT systems. This document can be used by implementers and authors of IoT specifications as a reference for details about security considerations while documenting their specific security challenges, threat models, and mitigations.</t>
              <t>This document is a product of the IRTF Thing-to-Thing Research Group (T2TRG).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8576"/>
          <seriesInfo name="DOI" value="10.17487/RFC8576"/>
        </reference>
        <reference anchor="RFC8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="RFC6570">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="bormann-mapping" target="https://datatracker.ietf.org/doc/draft-bormann-asdf-sdf-mapping/">
          <front>
            <title>Semantic Definition Format (SDF): Mapping files</title>
            <author initials="C. B. and J." surname="Romann" fullname="Carsten Bormann and Jan Romann">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="lwm2m-cameraObject" target="https://raw.githubusercontent.com/OpenMobileAlliance/lwm2m-registry/prod/10340.xml">
          <front>
            <title>Camera - OMAobjectId: 10340 V1.0</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="mcp" target="https://github.com/modelcontextprotocol">
          <front>
            <title>Model Context Protocol</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="wot" target="https://www.w3.org/TR/wot-thing-description11/">
          <front>
            <title>Web of Things (WoT) Thing Description 1.1</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="hydra" target="https://www.hydra-cg.com/spec/latest/core/">
          <front>
            <title>Hydra Core Vocabulary</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="owls" target="https://www.w3.org/submissions/OWL-S/">
          <front>
            <title>OWL-S: Semantic Markup for Web Service</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="schema" target="https://schema.org/Action">
          <front>
            <title>Schemas from schema.org</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ogc" target="https://www.ogc.org/standards/sensorthings/">
          <front>
            <title>OGC SensorThings API Standard</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
dWBuDSP/D52F9GPcVQAA

-->

</rfc>
