This specification defines a Profiling Mechanism and a registry of Profiles which enable out-of-the-box interoperability between Web Things and their Consumers on the Web of Things.

Being out-of-the-box interoperable means that any Consumer which conforms with a given Profile can interact with any Thing which conforms with the same Profile, without additional customization.

A Profile is a technical specification which provides a set of assertions to which conformant Consumers and Things must conform.

The Profiling Mechanism provides a means to denote that a given Thing conforms to one or more Profiles, by referring to the identifiers of those Profiles in the profile member of its Thing Description.

The Profile Registry provides a list of profiles maintained by the W3C WoT Working Group.

Introduction

Motivation

The Web of Things (WoT) seeks to counter the fragmentation of the Internet of Things (IoT) by using and extending existing, standardized web technologies.

The W3C WoT Thing Description [[wot-thing-description11]] specification defines an information model and JSON-based representation format for describing the capabilities of connected devices and the interfaces with which to communicate with them. Thing Descriptions are designed to be protocol-agnostic and flexible enough to describe a wide range of existing ("brownfield") IoT devices.

In order to provide this level of flexibility the Thing Description specification includes a number of extension points including protocol bindings, payload bindings, security mechanisms, link relations and semantic contexts. As long as all of the capabilities of a device can be described using a Thing Description and a Consumer implements all of the extensions used, the Consumer should be able to interoperate with that device. However, the result of this extensible architecture is that any given Consumer can only interoperate with a subset of possible Web Things.

This specification is designed to complement the Thing Description [[wot-thing-description11]] specification, by enabling ad-hoc interoperability through the use of "Profiles". A Profile prescribes a finite set of extensions and defaults that a Thing can be constrained to in order to guarantee out-of-the-box interoperability with any Consumer which implements that profile.

Profiles are designed specifically for new ("greenfield") implementations where developers have the freedom to conform to a prescriptive protocol binding and set of common constraints, in order to benefit from this additional level of interoperability.

Future versions of this specification, or extension specifications, may define additional Profiles.

Use Cases and Requirements

The Web of Things Interest Group collected use cases for the Web of Things from stakeholders representing various different industries. This includes both vertical domain-specific use cases and horizontal use cases which apply to multiple application domains [[wot-usecases]].

Several of the domain-specific use cases refer to the need for easy integration of devices from multiple vendors. This is especially important for cross-domain use cases which require "multi-vendor system integration" and "out-of-the-box interoperability".

A set of requirements for Profiles were derived from these use cases.

Out-of-the-Box Interoperability

At a high level, out-of-the-box interoperability means that a Consumer is guaranteed to be able to use every capability of a Thing, without Thing-specific customization.

The full definition of out-of-the-box interoperability used in this specification includes multiple layers. The following classification adopts terminology from the "H2020 - CREATE-IoT Project - Recommendations for commonalities and interoperability profiles of IoT platforms" [[?H2020-CREATE-IoT]] report. The definitions below have been adapted to reflect the scope of the WoT profile.

Technical Interoperability

Technical Interoperability is usually associated with communication protocols and the infrastructure needed for those protocols to operate. This implies agreeing on a common protocol (e.g. HTTP / TCP/IP) and providing additional clarifications, where required.

Syntactic Interoperability

Syntactic Interoperability is usually associated with data formats and encodings along with techniques for compressing them. Examples for these formats and encodings in the WoT are JSON, XML, JSON-LD, UTF-8 payloads.

Semantic Interoperability

Semantic Interoperability is associated with a common understanding of the behavior of communication partners. In the profile context, it includes a common interpretation of (synchronous and asynchronous) action semantics, a common event model, how to set/get multiple properties, writable properties, a common error model and error messages.

Domain specific ontologies, e.g. semantic interop of automotive and medical devices exceed the scope of the this specification.

Organizational Interoperability

Organizational Interoperability in the profile context implies that any Consumer which conforms with a given profile can interact with any Thing which conforms with the same Profile, without additional customization.

Organizational Interoperability also requires commonly agreed approaches to security, trust and privacy, i.e. a Consumer is provided access to Things only when these common terms and conditions are applied.

Devices created by various engineers, vendors and SDOs that satisfy the requirements of the profile specification can be integrated with compliant Consumers without additional customization. This works across infrastructures, regions and cultures.

A Thing or Consumer implementation complies with this specification if it follows the normative statements in the present document.

Terminology

Fundamental WoT terminology such as Web Thing (Thing), Consumer and Thing Description are defined in Section 3 of the WoT Architecture specification [[wot-architecture11]].

Additional Definitions

Profile
A technical specification which provides a set of assertions such that any Consumer which conforms with the those assertions is out-of-the-box interoperable with any Thing which also conforms with those assertions.

Profiling Mechanism

In order to conform with a Profile, a Web Thing MUST conform with all the normative statements in the Profile's specification.

In order to denote that a given Web Thing conforms to one or more Profiles, its Thing Description MUST include a profile member [[wot-thing-description11]]. The value of the profile member MUST be set to either a valid URI [[RFC3986]] identifying a single Profile, or an array of valid URIs identifying multiple Profiles.

In order to use a profile member in a Thing Description, the @context member MUST contain the anyURI https://www.w3.org/2022/wot/td/v1.1 in order to denote that the document is using version 1.1 of the Thing Description specification. [[wot-thing-description11]].

    {
      "@context": "https://www.w3.org/2022/wot/td/v1.1",
      "id": "urn:dev:ops:32473-WoTLamp-1234",
      "profile": "https://www.w3.org/2022/wot/profile/http-basic/v1",
      "title": "My Lamp",
      "description": "A web connected lamp",
      ...
    }
    
    {
      "@context": "https://www.w3.org/2022/wot/td/v1.1",
      "id": "urn:dev:ops:32473-WoTLamp-1234",
      "profile": [
        "https://www.w3.org/2022/wot/profile/http-basic/v1",
        "https://www.w3.org/2022/wot/profile/http-sse/v1"
      ],
      "title": "My Lamp",
      "description": "A web connected lamp",
      ...
    }
    

All Things and Consumers conforming to a Profile MUST satisfy the assertions specified in the WoT Thing Description 1.1 specification [[wot-thing-description11]], except for the assertion with text "TD 1.1 consumers MUST accept TDs satisfying the W3C WoT Thing Description 1.0 [wot-thing-description] specification."

A Profile SHOULD NOT redefine defaults from protocol binding templates [[wot-binding-templates]]. E.g., if a profile uses an HTTP protocol binding and the HTTP Binding Template specifies that in an HTTP protocol binding the default value of htv:methodName for a readproperty operation is GET, the profile should not redefine that value as POST.

A Profile SHOULD NOT require a Thing to respond in a way which would be unexpected by a Consumer which does not implement the Profile. E.g., a Profile may define details of a protocol binding for a queryaction operation which would not currently be possible to fully describe using a protocol binding template in a Thing Description (due to current limitations of the WoT Thing Description 1.1 specification), and would be consumable by a conformant Consumer, but any other action-related operations exposed by the Thing Description ought to still respond in the way that a Consumer which does not implement the Profile would expect.

Conforming to a Profile does not prevent a Web Thing from describing additional capabilities and protocol bindings in their Thing Description beyond those described in the Profile, as long as they conform with all of the normative assertions of the Profile.

Just because a Thing Description claims that the Thing it describes conforms to a given Profile, a Consumer should not assume that it does in fact conform. E.g. a Consumer should be able to recover gracefully if a Thing does not respond as specified to a given operation.

Profile Registry

Name Identifier Specification
HTTP Basic Profile https://www.w3.org/2022/wot/profile/http-basic/v1 [Link to Group Note goes here]
HTTP SSE Profile https://www.w3.org/2022/wot/profile/http-sse/v1 [Link to Group Note goes here]
HTTP Webhook Profile https://www.w3.org/2022/wot/profile/http-webhook/v1 [Link to Group Note goes here]

Privacy Considerations

The privacy considerations of the WoT Architecture [[wot-architecture11]] and WoT Thing Description [[wot-thing-description11]] specifications SHOULD be taken into account.

Please also see WoT Security and Privacy Guidelines [[wot-security]] for implementation advice.

Security Considerations

The security considerations of the WoT Architecture [[wot-architecture11]] and WoT Thing Description [[wot-thing-description11]] specifications SHOULD be taken into account.

Please also see WoT Security and Privacy Guidelines [[wot-security]] for implementation advice.

Accessibility Considerations

The values of title and description members at all levels of a Thing Description may be used to generate a user interface and SHOULD therefore be human readable strings which can also be rendered by assistive technologies when necessary.

Recent Specification Changes

Changes from the WD published 18 January 2023

Changes from the FPWD published 24 November 2020