CARVIEW |
Select Language
HTTP/2 200
server: GitHub.com
content-type: text/turtle; charset=utf-8
last-modified: Thu, 09 Oct 2025 13:57:28 GMT
access-control-allow-origin: *
etag: "68e7bf48-28cb"
expires: Sat, 11 Oct 2025 05:08:50 GMT
cache-control: max-age=600
x-proxy-cache: MISS
x-github-request-id: 8873:2C78A2:335DD:44AF7:68E9E40A
accept-ranges: bytes
age: 0
date: Sat, 11 Oct 2025 04:58:50 GMT
via: 1.1 varnish
x-served-by: cache-bom-vanm7210058-BOM
x-cache: MISS
x-cache-hits: 0
x-timer: S1760158730.448279,VS0,VE294
vary: Accept-Encoding
x-fastly-request-id: 0dc86424d508ad7101996db48041f68c7b10b6e1
content-length: 10443
@prefix : .
@prefix rdf: .
@prefix rdfs: .
@prefix owl: .
@prefix xsd: .
@prefix schema: .
@prefix hctl: .
@prefix dcterms: .
@prefix vann: .
@prefix vaem: .
@prefix td: .
@prefix jsonschema: .
@prefix bacv: .
@base .
rdf:type owl:Ontology ;
owl:versionIRI ;
dcterms:contributor "Dogan Fennibay" ;
dcterms:created "2021-07-01"^^xsd:date ;
dcterms:creator "Dogan Fennibay" ;
dcterms:modified "2022-01-13"^^xsd:date;
dcterms:description "The BACnet model describes how WoT InteractionAffordances are represented on BACnet including data model and protocol specifics" ;
# TODO: Use an open source license, or just leave out:
# dcterms:license "TODO" ;
# dcterms:publisher "TODO" ;
# dcterms:rights "TODO" ;
dcterms:title "BACnet Model" ;
dcterms:source "https://www.w3.org/2022/bacnet" ;
vann:preferredNamespacePrefix "bacv" ;
vann:preferredNamespaceUri bacv: ;
vaem:hasOwner "Dogan Fennibay" ;
owl:versionInfo "0.1.1" ;
rdfs:comment """
# BACnet Model
BACnet model describes how InteractionAffordances are represented on BACnet. Essentially it is a [protocol binding for WoT TD via context extension](https://www.w3.org/TR/wot-thing-description/#adding-protocol-bindings).
Wherever possible, this model refers to ANSI/ASHRAE Standard 135-2020 for BACnet.
"""@en ;
rdfs:label "BACnet in RDF for WoT"@en ;
owl:versionInfo "0.1.1" .
hctl:hasTarget rdfs:comment """
Should be of form bacnet:///,[/[/]]
Additional parameters can be specified via URI variable syntax, e.g., `?commandPriority=13` to change command priority, `?relinquish` to relinquish a priority, or `?covIncrement=0.5` to increment COV.
"""@en ;
rdfs:seeAlso "ASHRAE 135-2020 BACnet Q.8 BACnet URI Scheme" .
#################################################################
# Communication properties
#################################################################
bacv:usesService rdf:type owl:DatatypeProperty ;
rdfs:domain hctl:Form ;
rdfs:range [owl:oneOf (
"ReadProperty"^^xsd:string
"WriteProperty"^^xsd:string
"SubscribeCOV"^^xsd:string
"GetEventInfo"^^xsd:string
"AcknowledgeAlarm"^^xsd:string
"AddListElement"^^xsd:string
"RemoveListElement"^^xsd:string
)] ;
rdfs:comment """
Default BACnet service by td:OperationType:
- td:readProperty -> ReadProperty
- td:writeProperty -> WriteProperty
- td:observeProperty -> SubscribeCOV, subscribe to object if no property ID is present in target, otherwise subscribe to property
- td:unobserveProperty -> SubscribeCOV (will do an unsubscribe instead)
- td:subscribeEvent -> AddListElement (will always be to the Recipient-List property of the Notification-Class object)
- td:unsubscribeEvent -> RemoveListElement (will always be to the Recipient-List property of the Notification-Class object)
TODO: Can we specify the defaults in a machine-readable, RDF-standard way?
No defaults are specified for the following; TD must specify the service explicitly for them:
- td:invokeAction, td:queryAction, td:cancelAction
- td:readAllProperties, td:writeAllProperties, td:readMultipleProperties, td:writeMultipleProperties, td:observeAllProperties, td:unobserveAllProperties
- td:queryAllActions
- td:subscribeAllEvents, td:unsubscribeAllEvents
"""@en .
bacv:CovIncrement rdf:type owl:Class ;
rdfs:subClassOf jsonschema:NumberSchema ;
rdfs:subClassOf [
a owl:Restriction ;
owl:onProperty jsonschema:minimum ;
owl:hasValue 0
] ;
rdfs:comment "Specifies the minimum change for numeric values in that will cause a COV notification to be issued to subscribers. Only applies when SubscribeCOVProperty is used. If missing for the present-value, the default value on the object will be used instead."@en ;
rdfs:seeAlso "ASHRAE 135-2020 BACnet 13.1 Change of Value Reporting" .
bacv:CommandPriority rdf:type owl:Class ;
rdfs:subClassOf jsonschema:IntegerSchema ;
rdfs:subClassOf [
a owl:Restriction ;
owl:onProperty jsonschema:enum ;
# Prio 6 is reserved for minimum on off by BACnet, see clause 19.2.3 Minimum_On_Time and Minimum_Off_Time
owl:hasValue 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
] ;
rdfs:subClassOf [
a owl:Restriction ;
owl:onProperty jsonschema:default ;
# Default priority for writing is 16, ref. ASHRAE 135-2020 BACnet 15.9.1.1.5 Priority
owl:hasValue 16
] ;
rdfs:comment "Specifies the writing priority for BACnet objects with commanding, i.e., priority array."@en ;
rdfs:seeAlso "ASHRAE 135-2020 BACnet 19.2 Command Prioritization" .
bacv:Relinquish rdf:type owl:Class ;
rdfs:subClassOf jsonschema:BooleanSchema ;
rdfs:subClassOf [
a owl:Restriction ;
owl:onProperty jsonschema:default ;
owl:hasValue false
] ;
rdfs:comment "Specifies that the value at this priority should be deleted/relinquished by writing NULL to this priority."@en ;
rdfs:seeAlso "ASHRAE 135-2020 BACnet 19.2 Command Prioritization" .
#################################################################
# Type information properties
# BACnet has an own data model, which cannot always be derived
# from the logical schema of the interaction affordances. Hence
# the type information has to be amended in the protocol binding.
#################################################################
bacv:hasDataType rdf:type owl:ObjectProperty ;
rdfs:domain [ owl:unionOf (hctl:Form bacv:NamedMember) ] ;
rdfs:range bacv:DataType .
bacv:DataType rdf:type owl:Class ;
rdfs:comment "Base for all BACnet data types" .
bacv:SequenceOf rdfs:subClassOf bacv:DataType .
bacv:Sequence rdfs:subClassOf bacv:DataType .
bacv:List rdfs:subClassOf bacv:DataType .
bacv:Choice rdfs:subClassOf bacv:DataType .
bacv:Date rdfs:subClassOf bacv:DataType .
bacv:Time rdfs:subClassOf bacv:DataType .
bacv:WeekNDay rdfs:subClassOf bacv:DataType .
bacv:Unsigned rdfs:subClassOf bacv:DataType .
bacv:Signed rdfs:subClassOf bacv:DataType .
bacv:Real rdfs:subClassOf bacv:DataType .
bacv:Double rdfs:subClassOf bacv:DataType .
bacv:Boolean rdfs:subClassOf bacv:DataType .
bacv:Enumerated rdfs:subClassOf bacv:DataType .
bacv:String rdfs:subClassOf bacv:DataType .
bacv:OctetString rdfs:subClassOf bacv:DataType .
bacv:BitString rdfs:subClassOf bacv:DataType .
bacv:Any rdfs:subClassOf bacv:DataType .
bacv:Null rdfs:subClassOf bacv:DataType .
bacv:ObjectIdentifier rdfs:subClassOf bacv:DataType .
bacv:isIso8601 rdf:type owl:DatatypeProperty ;
rdfs:domain bacv:Sequence ;
rdfs:range xsd:boolean ;
rdfs:comment "This field indicates that the Sequence has a date and a time field, and should be collectively represented in the ISO 8601 (aka. RFC 3339, section 5.6) format"@en .
bacv:hasBinaryRepresentation rdf:type owl:DatatypeProperty ;
rdfs:domain bacv:OctetString ;
rdfs:range [owl:oneOf ("hex"^^xsd:string "dotted-decimal"^^xsd:string "base64"^^xsd:string)] .
bacv:hasMember rdf:type owl:ObjectProperty ;
rdfs:domain [owl:unionOf (bacv:SequenceOf bacv:List ) ];
rdfs:range bacv:DataType .
bacv:hasNamedMember rdf:type owl:ObjectProperty ;
rdfs:domain [owl:unionOf (bacv:Sequence bacv:Choice ) ];
rdfs:range bacv:NamedMember .
bacv:NamedMember rdf:type owl:Class .
bacv:hasFieldName rdf:type owl:DatatypeProperty ;
rdfs:domain bacv:NamedMember ;
rdfs:range xsd:string .
bacv:hasContextTag rdf:type owl:DatatypeProperty ;
rdfs:domain bacv:NamedMember ;
rdfs:range xsd:integer .
bacv:ValueMap rdf:type owl:Class .
bacv:ValueMapEntry rdf:type owl:Class .
bacv:hasMapEntry rdf:type owl:ObjectProperty ;
rdfs:domain bacv:ValueMap ;
rdfs:range bacv:ValueMapEntry .
bacv:hasLogicalVal rdf:type owl:DatatypeProperty ;
rdfs:domain bacv:ValueMapEntry ;
rdfs:range [owl:unionOf (xsd:integer xsd:string xsd:boolean)] .
bacv:hasProtocolVal rdf:type owl:DatatypeProperty ;
rdfs:domain bacv:ValueMapEntry ;
rdfs:range xsd:integer .
bacv:hasValueMap rdf:type owl:ObjectProperty ;
rdfs:domain [owl:unionOf (bacv:Boolean bacv:Enumerated bacv:Unsigned bacv:BitString)] ;
rdfs:range bacv:ValueMap .