PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX td: <https://www.w3.org/2019/wot/td#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

td:Thing a rdfs:Class ;
  rdfs:label "Thing"@en ;
  rdfs:comment "An abstraction of a physical or a virtual entity whose metadata and interfaces are described by a WoT Thing Description, whereas a virtual entity is the composition of one or more Things."@en .

td:ActionAffordance a rdfs:Class ;
  rdfs:label "ActionAffordance" ;
  rdfs:comment "An Interaction Affordance that allows to invoke a function of the Thing, which manipulates state (e.g., toggling a lamp on or off) or triggers a process on the Thing (e.g., dim a lamp over time)."@en ;
  rdfs:subClassOf td:InteractionAffordance .

td:EventAffordance a rdfs:Class ;
  rdfs:label "EventAffordance" ;
  rdfs:comment "An Interaction Affordance that describes an event source, which asynchronously pushes event data to Consumers (e.g., overheating alerts)."@en ;
  rdfs:subClassOf td:InteractionAffordance .

td:OperationType a rdfs:Class ;
  rdfs:label "OperationType" ;
  rdfs:comment "Enumeration of well-known operation types necessary to implement the WoT interaction model"@en ;
  rdfs:subClassOf <http://schema.org/Enumeration> .

td:PropertyAffordance a rdfs:Class ;
  rdfs:label "PropertyAffordance" ;
  rdfs:comment "An Interaction Affordance that exposes state of the Thing. This state can then be retrieved (read) and/or updated (write). Things can also choose to make Properties observable by pushing the new state after a change."@en ;
  rdfs:subClassOf td:InteractionAffordance .

<https://w3id.org/linkml/Any> a rdfs:Class ;
  rdfs:comment "An unconstrained type or object" .

<http://schema.org/Enumeration> a rdfs:Class .

td:InteractionAffordance a rdfs:Class ;
  rdfs:label "InteractionAffordance" ;
  rdfs:comment "Metadata of a Thing that shows the possible choices to Consumers, thereby suggesting how Consumers may interact with the Thing. There are many types of potential affordances, but W3C WoT defines three types of Interaction Affordances: Properties, Actions, and Events."@en .

<http://purl.org/dc/terms/description> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:baseURI a rdf:Property ;
  rdfs:label "baseURI" ;
  rdfs:comment "Define the base URI that is used for all relative URI references throughout a TD document. In TD instances, all relative URIs are resolved relative to the base URI using the algorithm defined in [RFC3986]. base does not affect the URIs used in @context and the IRIs used within Linked Data [LINKED-DATA] graphs that are relevant when semantic processing is applied to TD instances."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:definesSecurityScheme a rdf:Property ;
  rdfs:label "definesSecurityScheme" ;
  rdfs:comment "A Thing may define abstract security schemes, used to configure the secure access of (a set of) affordance(s)." ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:description a rdf:Property ;
  rdfs:label "description" ;
  rdfs:comment "description of the TD element (Thing, interaction affordance, security scheme or data schema)" ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://purl.org/dc/terms/description> .

td:descriptionInLanguage a rdf:Property ;
  rdfs:label "descriptionInLanguage" ;
  rdfs:comment "description of the TD element (Thing, interaction affordance, security scheme or data schema) with language tag. By convention, a language tag must be added to the object of 'descriptionInLanguage' triples. Otherwise, use 'description'." ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://purl.org/dc/terms/description> .

td:followsProfile a rdf:Property ;
  rdfs:label "followsProfile" ;
  rdfs:comment "Indicates the WoT Profile mechanisms followed by this Thing Description and the corresponding Thing implementation."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:hasActionAffordance a rdf:Property ;
  rdfs:label "hasActionAffordance" ;
  rdfs:comment "All Action-based interaction affordance of the Thing."@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf td:hasInteractionAffordance .

td:hasCancellationSchema a rdf:Property ;
  rdfs:label "hasCancellationSchema" ;
  rdfs:comment "Defines any data that needs to be passed to cancel a subscription, e.g., a specific message to remove a Webhook"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:hasEventAffordance a rdf:Property ;
  rdfs:label "hasEventAffordance" ;
  rdfs:comment "All Event-based interaction affordance of the Thing."@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf td:hasInteractionAffordance .

td:hasForm a rdf:Property ;
  rdfs:label "hasForm" ;
  rdfs:comment "Set of form hypermedia controls that describe how an operation can be performed. Forms are serializations of Protocol Bindings. The array cannot be empty"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:hasInputSchema a rdf:Property ;
  rdfs:label "hasInputSchema" ;
  rdfs:comment "Used to define the input data schema of the action."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:hasInstanceConfiguration a rdf:Property ;
  rdfs:label "hasInstanceConfiguration" ;
  rdfs:comment "Instantiation, as used here, is a form of non-symmetric equivalence between a scheme and a configuration: whatever statement on the scheme is also true of the configuration but not vice-versa." ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:hasInteractionAffordance a rdf:Property ;
  rdfs:label "hasInteractionAffordance" ;
  rdfs:comment "Offers an affordance to interact with the Thing"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:hasLink a rdf:Property ;
  rdfs:label "hasLink" ;
  rdfs:comment "Provides Web links to arbitrary resources that relate to the specified Thing Description."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:hasNotificationResponseSchema a rdf:Property ;
  rdfs:label "hasNotificationResponseSchema" ;
  rdfs:comment "Defines the data schema of the Event response messages sent by the consumer in a response to a data message."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:hasNotificationSchema a rdf:Property ;
  rdfs:label "hasNotificationSchema" ;
  rdfs:comment "Defines the data schema of the Event instance messages pushed by the Thing."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:hasOutputSchema a rdf:Property ;
  rdfs:label "hasOutputSchema" ;
  rdfs:comment "Used to define the output data schema of the action."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:hasPropertyAffordance a rdf:Property ;
  rdfs:label "hasPropertyAffordance" ;
  rdfs:comment "All Property-based interaction affordance of the Thing."@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf td:hasInteractionAffordance .

td:hasSecurityConfiguration a rdf:Property ;
  rdfs:label "hasSecurityConfiguration" ;
  rdfs:comment "A security configuration is a a security scheme applied to a (set of) affordance(s)."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:hasSubscriptionSchema a rdf:Property ;
  rdfs:label "hasSubscriptionSchema" ;
  rdfs:comment "Defines data that needs to be passed upon subscription, e.g., filters or message format for setting up Webhooks."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:hasUriTemplateSchema a rdf:Property ;
  rdfs:label "hasUriTemplateSchema" ;
  rdfs:comment "Define URI template variables  according to [[RFC6570]] as collection based on schema specifications. The individual variables DataSchema cannot be an ObjectSchema or an ArraySchema."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:instance a rdf:Property ;
  rdfs:label "instance" ;
  rdfs:comment "Provides a version identicator of this TD instance."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:isIdempotent a rdf:Property ;
  rdfs:label "isIdempotent" ;
  rdfs:comment "Indicates whether the action is idempotent (=true) or not. Informs whether the action can be called repeatedly with the same result, if present, based on the same input."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:isObservable a rdf:Property ;
  rdfs:label "isObservable" ;
  rdfs:comment "A hint that indicates whether Servients hosting the Thing and Intermediaries should provide a Protocol Binding that supports the <code>observeproperty</code> and <code>unobserveproperty</code> operations for this Property."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:isSafe a rdf:Property ;
  rdfs:label "isSafe" ;
  rdfs:comment "Signals if the action is safe (=true) or not. Used to signal if there is no internal state (cf. resource state) is changed when invoking an Action. In that case responses can be cached as example."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:isSynchronous a rdf:Property ;
  rdfs:label "isSynchronous" ;
  rdfs:comment "Indicates whether the action is synchronous (=true) or not. A synchronous action means that the response of action contains all the information about the result of the action and no further querying about the status of the action is needed. Lack of this keyword means that no claim on the synchronicity of the action can be made."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:model a rdf:Property ;
  rdfs:label "model" ;
  rdfs:comment "Provides a version indicator of the underlying TM."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:name a rdf:Property ;
  rdfs:label "name" ;
  rdfs:comment "Indexing property to store entity names when serializing them in a JSON-LD @index container."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:supportContact a rdf:Property ;
  rdfs:label "supportContact" ;
  rdfs:comment "Provides information about the TD maintainer as URI scheme (e.g., mailto [[RFC6068]], tel [[RFC3966]], https[[RFC9112]])."@en ;
  rdfs:seeAlso <http://schema.org/contactPoint> ;
  rdfs:range xsd:string .

td:title a rdf:Property ;
  rdfs:label "title" ;
  rdfs:comment "title of the TD element (Thing, interaction affordance or data schema)" ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:titleInLanguage a rdf:Property ;
  rdfs:label "titleInLanguage" ;
  rdfs:comment "title of the TD element (Thing, interaction affordance or data schema) with language tag. By convention, a language tag must be added to the object of 'titleInLanguage' triples. Otherwise, use 'title'." ;
  rdfs:range <https://w3id.org/linkml/Any> .

td:versionInfo a rdf:Property ;
  rdfs:label "versionInfo" ;
  rdfs:comment "Provides version information."@en ;
  rdfs:seeAlso <http://schema.org/version> ;
  rdfs:range xsd:string .
