PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX s4dmgt: <https://saref.etsi.org/saref4dmgt/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

s4dmgt:ManageableDevice a rdfs:Class ;
  rdfs:label "Manageable Device"@en ;
  rdfs:comment """A tangible object that has at least one Device Management Function.

This class extends the saref:Device class, it is a Feature of Interest by definition."""@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/Device> .

s4dmgt:isRepresentedBy a rdf:Property ;
  rdfs:label "is represented by"@en ;
  rdfs:comment "A relationship between a Manageable Device and one of the Clients that expose its DM functions to DM servers."@en ;
  rdfs:domain s4dmgt:ManageableDevice ;
  rdfs:range s4dmgt:Client .

s4dmgt:Server a rdfs:Class ;
  rdfs:label "Server"@en ;
  rdfs:comment """A DM Server is the software entity which is responsible for performing DM operations on a fleet of Devices. It exposes the set of available operations to an entity that needs to trigger an operation, such as a manufacturer or a Customer Care service. 

The DM Server is a endpoint, generally secured, with which DM Clients communicate. 

The protocol used between Server and Client is not in the scope of this ontology. It can follow a DM standard such as CWMP or LwM2M, or be completely proprietary."""@en ;
  rdfs:subClassOf <https://saref.etsi.org/saref4syst/System> .

s4dmgt:hasConnectedClient a rdf:Property ;
  rdfs:label "has connected client"@en ;
  rdfs:comment "Relationship between a Server and a Client when the Client is connected and authenticated to the Server, enabling the exposition of its DM Functions. This relationship could be inferred when a Management Service connects both the Client and the Server. Inverse of saref4dmgt:connectedToServer."@en ;
  rdfs:domain s4dmgt:Server ;
  rdfs:range s4dmgt:Client ;
  rdfs:subPropertyOf <https://saref.etsi.org/saref4syst/connectedTo> .

s4dmgt:DeviceManagementState a rdfs:Class ;
  rdfs:label "Device Management State"@en ;
  rdfs:comment "This is a class of states for Device Management."@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/State> .

s4dmgt:DeviceManagementFunctionCategory a rdfs:Class ;
  rdfs:label "Device Management Function Category"@en ;
  rdfs:comment """Category of Functions related to the Device Management domain.

These Functions correspond to the capabilities of the Device to perform its own diagnostics, maintenance, configuration, monitoring and control."""@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/Function> .

<https://saref.etsi.org/core/Device> a rdfs:Class .

s4dmgt:PackageManagementCommandCategory a rdfs:Class ;
  rdfs:label "Package Management Command Category"@en ;
  rdfs:comment "Category of commands enabling the manipulation of device packages."@en ;
  rdfs:subClassOf s4dmgt:DeviceManagementCommandCategory .

<https://saref.etsi.org/core/Service> a rdfs:Class .

s4dmgt:DevicePackage a rdfs:Class ;
  rdfs:label "Device Package"@en ;
  rdfs:comment """A DevicePackage is an archive file that may contain resource files, code, libraries or executable files.
It is a resource that the Device should retrieve or receive from an external source.

A DevicePackage is only actionable once it has been downloaded and installed.

It may allow a Device to support additional Functions by instantiating a DeviceModule.

A DevicePackage may be uninstalled and then removed from the Device."""@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/FeatureOfInterest> .

s4dmgt:ManagementConnection a rdfs:Class ;
  rdfs:label "Management Connection"@en ;
  rdfs:comment """Abstract representation of the connection between a Client and a Server. It does not necessarily imply that a persistent connection is established between the entities - such as a TCP connection. It represents the link and the capability of the Server to interact with the Client.

For instance, the Client has been authenticated by the Server with a certificate, and/or the client has received a configuration for access rights to its functions for the Server."""@en .

<https://saref.etsi.org/saref4syst/connectsSystem> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

s4dmgt:enablesManagementService a rdf:Property ;
  rdfs:label "enables management service"@en ;
  rdfs:comment "A relationship between a Management Service and Management Connection that represents the fact that a Management Service only exists thanks to the Management Connection. If the Management Connection is closed, the Management Service does not exist anymore."@en ;
  rdfs:domain s4dmgt:ManagementConnection ;
  rdfs:range s4dmgt:ManagementService .

s4dmgt:DeviceIdentityCommandCategory a rdfs:Class ;
  rdfs:label "Device Identity Command Category"@en ;
  rdfs:comment "Category of commands enabling the manipulation of device identification properties."@en ;
  rdfs:subClassOf s4dmgt:DeviceManagementCommandCategory .

s4dmgt:DatamodelParameterCommandCategory a rdfs:Class ;
  rdfs:label "Datamodel Parameter Command Category"@en ;
  rdfs:comment "Category of commands enabling the manipulation of one or more Datamodel Parameters."@en ;
  rdfs:subClassOf s4dmgt:DeviceManagementCommandCategory .

<https://saref.etsi.org/core/State> a rdfs:Class .

s4dmgt:SupportedDatamodelCommandCategory a rdfs:Class ;
  rdfs:label "Supported Datamodel Command Category"@en ;
  rdfs:comment "Category of commands enabling the manipulation of supported datamodels."@en ;
  rdfs:subClassOf s4dmgt:DeviceManagementCommandCategory .

<https://saref.etsi.org/core/Function> a rdfs:Class .

s4dmgt:DevicePackageState a rdfs:Class ;
  rdfs:label "Device Package State"@en ;
  rdfs:comment "State of a DevicePackage"@en ;
  rdfs:subClassOf s4dmgt:DeviceManagementState .

s4dmgt:DeviceControlCommandCategory a rdfs:Class ;
  rdfs:label "Device Control Command Category"@en ;
  rdfs:comment "Category of commands enabling the manipulation of the device state, for instance the power state with a Reboot or Shutdown command."@en ;
  rdfs:subClassOf s4dmgt:DeviceManagementCommandCategory .

s4dmgt:DeviceManagementCommandCategory a rdfs:Class ;
  rdfs:label "Device Management Command Category"@en ;
  rdfs:comment "Category of Commands that are specific to the Device Management domain."@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/Command> .

<https://saref.etsi.org/core/Command> a rdfs:Class .

s4dmgt:ManagementService a rdfs:Class ;
  rdfs:label "Management Service"@en ;
  rdfs:comment """A saref:Service that represents functions or functions of interest of the Device Management Function Category.

The ManagementService exposes these functions through a Connection, between a Client and a Server."""@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/Service> .

s4dmgt:hasConnection a rdf:Property ;
  rdfs:label "has connection"@en ;
  rdfs:comment "A relationship between a Management Service and a Management Connection, indicating that the Management Service exists solely because of the Management Connection. If the Management Connection ceases to exist, the Management Service will also cease to exist.."@en ;
  rdfs:domain s4dmgt:ManagementService ;
  rdfs:range s4dmgt:ManagementConnection .

s4dmgt:DeviceModule a rdfs:Class ;
  rdfs:label "Device Module"@en ;
  rdfs:comment """A DeviceModule is an executable software entity on the Device, i.e. a DeviceModule may be activated and deactivated on demand through dedicated Functions.

As such, the DeviceModule implements specific Functions that are available to the Device when the DeviceModule is activated.

A DeviceModule may be supported by a DevicePackage: deleting the corresponding DevicePackage will in turn remove the DeviceModule and its related Functions."""@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/FeatureOfInterest> .

<https://saref.etsi.org/saref4syst/Connection> a rdfs:Class .

s4dmgt:ModuleManagementCommandCategory a rdfs:Class ;
  rdfs:label "Module Management Command Category"@en ;
  rdfs:comment "Category of commands enabling the manipulation of device modules."@en ;
  rdfs:subClassOf s4dmgt:DeviceManagementCommandCategory .

<https://saref.etsi.org/saref4syst/System> a rdfs:Class .

s4dmgt:FirmwareManagementCommandCategory a rdfs:Class ;
  rdfs:label "Firmware Management Command Category"@en ;
  rdfs:comment "Category of commands enabling the manipulation of device firmwares."@en ;
  rdfs:subClassOf s4dmgt:DeviceManagementCommandCategory .

s4dmgt:Client a rdfs:Class ;
  rdfs:label "Client"@en ;
  rdfs:comment """Software entity which represents a Device by exposing its DM Functions to one or more DM Server(s). 

It is responsible for the triggering of the DM Functions when a Command targeting the represented Device is received by the Server. The Client is also responsible for the reporting of the results of the Function execution to the Server.

The Client has an identifier that is unique only relatively to each Server it is connected to."""@en ;
  rdfs:subClassOf <https://saref.etsi.org/saref4syst/System> .

s4dmgt:representsDevice a rdf:Property ;
  rdfs:label "represents device"@en ;
  rdfs:comment "A relationship between a Client and the Device whose DM functions the Client exposes to DM servers."@en ;
  rdfs:domain s4dmgt:Client ;
  rdfs:range s4dmgt:ManageableDevice .

s4dmgt:connectedToServer a rdf:Property ;
  rdfs:label "connected to server"@en ;
  rdfs:comment "Relationship between a Client and a Server when the Client is connected and authenticated to a Server, enabling the exposition of its DM Functions. This relationship could be inferred when a Management Service connects both the Client and the Server. Inverse of saref4dmgt:hasConnectedClient."@en ;
  rdfs:domain s4dmgt:Client ;
  rdfs:range s4dmgt:Server ;
  rdfs:subPropertyOf <https://saref.etsi.org/saref4syst/connectedTo> .

s4dmgt:DeviceModuleState a rdfs:Class ;
  rdfs:label "Device Module State"@en ;
  rdfs:comment "State of a DeviceModule"@en ;
  rdfs:subClassOf s4dmgt:DeviceManagementState .

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

<https://saref.etsi.org/core/Property> a rdfs:Class .

<https://saref.etsi.org/core/FeatureOfInterest> a rdfs:Class .

<http://www.w3.org/2004/02/skos/core#narrower> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<https://saref.etsi.org/core/hasCommand> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

s4dmgt:enablesDeviceModule a rdf:Property ;
  rdfs:label "enables device module"@en ;
  rdfs:comment "A relationship between a DevicePackage and a DeviceModule that represents the fact that the DeviceModule only exists thanks to the DevicePackage. If the DevicePackage is uninstalled, the DeviceModule does not exist anymore."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

s4dmgt:hasDevicePackage a rdf:Property ;
  rdfs:label "has device package"@en ;
  rdfs:comment "A relationship between a DeviceModule and a DevicePackage that represents the fact that the DeviceModule only exists thanks to the DevicePackage. If the DevicePackage is uninstalled, the DeviceModule does not exist anymore."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

<https://saref.etsi.org/saref4syst/connectedTo> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .
