Skip to content
Snippets Groups Projects
Commit 1ebe8086 authored by ankraft's avatar ankraft
Browse files

Documentation on component descriptions.

parent 92d803f7
No related branches found
No related tags found
No related merge requests found
Showing
with 802 additions and 632 deletions
# SDT Components # SDT Components
[Domain](#Domain) 1. [Basic Components](#BasicComponents)
[Device](#Device) | [SubDevice](#SubDevice) 1. [Domain](#Domain)
[Product](#Product) 2. [ModuleClass](#ModuleClass)
[Property](#Property) 1. [DataPoint](#DataPoint)
[ModuleClass](#ModuleClass) 2. [Action](#Action)
   [Action](#Action) 1. [Arg](#Arg)
      [Arg](#Arg) 3. [Event](#Event)
   [DataPoint](#DataPoint) 4. [DeviceClass](#DeviceClass)
   [Event](#Event) 1. [SubDevice](#SubDevice)
[Data Types](#Data_Types) 5. [Product](#Product)
   [DataType](#DataType) 6. [Property](#Property)
   [Constraint](#Constraint) 2. [Data Types](#DataTypes)
   [SimpleType](#SimpleType) 1. [DataType](#DataType)
   [StructType](#StructType) 1. [Constraint](#Constraint)
   [ArrayType](#ArrayType) 2. [TypeChoice](#TypeChoice)
[Doc](#Documentation) 2. [SimpleType](#SimpleType)
3. [StructType](#StructType)
4. [ArrayType](#ArrayType)
5. [EnumType](#EnumType)
1. ExtendExclude
3. [Extending (Inheriting)](#Extending)
1. [Extend](#Extend)
1. [Include](#ExtendInclude)
2. [Exclude](#ExtendExclude)
3. [ExtendType](#ExtendType)
4. [Documentation (Doc)](#Documentation)
--- ---
**Editor's Note**: TS-0023 needs to be updated to remove "Module", and change the column name of "Module Instance Name" of all device models to "ModuleClass Specialization Name".
## SDT Overview ## SDT Overview
The following UML diagram presents an overview of the structure (elements) of every SDT which is conformant with these guidelines. As implied in the above descriptions, there can be many different choices of the details of a SDT, each one optimized for a particular market segment and the types of devices used in that market segment. Obviously an unnecessary proliferation is counter-productive, but as long as each SDT conforms to the structure shown below then it will be possible with little or modest effort for software to be adapted accordingly. The following UML diagram presents an overview of the structure (elements) of every SDT which is conformant with these guidelines. As implied in the above descriptions, there can be many different choices of SDT details, each one optimized for a particular market segment and the types of devices used in that market segment. Obviously an unnecessary proliferation is counter-productive, but as long as each SDT conforms to the structure shown below then it will be possible with little or modest effort for software to be adapted accordingly.
![](images/SDT_UML_Basic_Elements.png) The key to the diagram elements of the UML diagrams and the snippets in the following sections follow this figure:
The key to the diagram elements of the UML diagrams above and the snippets in the following sections:
![](images/SDT_UML_Key.png) ![](images/SDT_UML_Key.png)
<a name="Domain"></a> The syntax used in the diagrams to model an XML Schema Definition (XSD) as an UML diagram follows the following approaches:
The syntax used in the diagram to model an XML Schema Definition (XSD) as an UML diagram follows the following approaches:
- [Design XML schemas using UML](http://www.ibm.com/developerworks/library/x-umlschem/) - [Design XML schemas using UML](http://www.ibm.com/developerworks/library/x-umlschem/)
- [UML For W3C XML Schema Design](http://www.xml.com/pub/a/2002/08/07/wxs_uml.html) - [UML For W3C XML Schema Design](http://www.xml.com/pub/a/2002/08/07/wxs_uml.html)
<a name="BasicComponents"></a>
## Basic Elements
![](images/SDT_UML_Basic_Elements.png)
<a name="Domain"></a>
### Domain ### Domain
![](images/Domain.png) ![](images/Domain.png)
The *Domain* element allows labeling of different SDT templates for different technologies and/or industry segments ("verticals"): for example eHealth and Building Management might prefer quite different detailed structures/templates. This also helps keep information in human-friendly and manageable blocks. It is assumed that there will be multiple "SDT Templates" and some of them may be completely proprietary. The *Domain* element allows labeling of different SDT templates for different technologies and/or industry segments ("verticals"): for example eHealth and Building Management might prefer quite different detailed structures/templates. This also helps keep information in human-friendly and manageable blocks. It is assumed that there will be multiple "SDT Templates" and some of them may be completely proprietary.
It can also be used to collect all specified [ModuleClasses](#ModuleClasses) It can also be used to collect all specified [ModuleClasses](#ModuleClasses), [DeviceClasses](#DeviceClasss), [DataTypes](#DataTypes) and [ProductClasses](#ProductClasses) in one referencable logical group.
and [Devices](#Devices) in one referencable logical group.
#### Attributes #### Attributes
- **id** : The identifier for that *Domain*. Required. - **id** : The identifier for that *Domain*. Required.
- **semanticURI** : An attribute that contains a URI to a semantic description of the element. Optional.
#### Elements #### Elements
- **[Doc](#Documentation)** : Documentation for the *Domain*. Optional. - **[Doc](#Documentation)** : Documentation for the *Domain*. Optional.
- **Imports** : XML import/include of other XML files. Optional. - **Imports** : XML import/include of other XML files / SDT templates. Optional.
Note, that when using **Imports** one must include the following namespace in the Domain-Element definition, as shown in the example below: ```xmlns:xi="http://www.w3.org/2001/XInclude"```
- **[DataTypes](#DataType)** : A list of *DataTypes* that are global to the whole domain. They can be referenced from other definitions by the [Extend](#Extend) element. Optional.
- **[ModuleClasses](#ModuleClass)** : A list of those *ModuleClass* components that are global to the whole domain. Optional. - **[ModuleClasses](#ModuleClass)** : A list of those *ModuleClass* components that are global to the whole domain. Optional.
- **[Devices](#Device)** : a List of *Devices* components. Optional. - **[DeviceClasses](#DeviceClass)** : a List of *DeviceClass* components. Optional.
- **[ProductClasses](#ProductClass)** : a List of *ProductClass* components. Optional.
#### Example #### Example
```xml
<Domain xmlns:xi="http://www.w3.org/2001/XInclude" <Domain xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns="http://homegatewayinitiative.org/xml/dal/3.0" xmlns="http://homegatewayinitiative.org/xml/dal/3.0"
id="org.homegatewayinitiative"> id="org.homegatewayinitiative">
<Doc>Some documentation</Doc> <Doc>Some documentation</Doc>
<Imports> <Imports>
<!-- Import other SDTs via XInclude's include mechanism --> <!-- Import other SDTs via XInclude's include mechanism -->
<xi:include href="./dal-core.xml" parse="xml" /> <xi:include href="anotherSDT.xml" parse="xml" />
</Imports> </Imports>
<ModuleClasses> <ModuleClasses>
<!-- List of Domain global ModuleClasses goes here --> <!-- List of Domain global ModuleClasses goes here -->
</ModuleClasses> </ModuleClasses>
<Devices> <DeviceClasses>
<!-- List of Devices goes here --> <!-- List of Devices goes here -->
</Devices> </DeviceClasses>
</Domain> </Domain>
```
--- ---
<a name="Device"/></a> <a name="ModuleClass"/></a>
### ModuleClass
Element of [Domain](#Domain) and [Product](#Product).
### Device ![](images/ModuleClass.png)
![](images/Device.png) *ModuleClass* elements are basically constraints or templates for how to model functionality of real things/appliances/devices within the [Domain](#Domain). A *ModuleClass* can extend another *ModuleClass* with additional functionalities.
The *Device* was initially thought of as the representation of "the basic things we are trying to model" and can still be considered so. However, after discussion with various SDOs, it was decided to add also "[sub-devices](#SubDevice)". That is, there is one level of hierarchy to allow modeling of e.g. a set of independent energy monitoring plugs in a single addressable power-extension-block. (Other SDOs might consider it more appropriate to use a recursive sub-sub-sub ... device definition). Note that all the different devices which one needs to model within a Domain are composed of one or more [ModuleClasses](#ModuleClass). Every [DeviceClass](#DeviceClass) can be described by a collection of *ModuleClasses* (functionality).
For each physical device on the network at least one *Device* **must** be defined. If the physical device is a simple device, i.e. it does not contain embedded devices, e.g. a light switch, it does not include further [SubDevices](#SubDevices). On the other hand, if the physical is a compound device, i.e. it does contain embedded devices that can be addressed separately, the *Device* **should** contain [SubDevices](SubDevices) for each of the identifiable embedded devices. The set of *ModuleClasses* is defined at the [Domain](#Domain) level or in the context of a [DeviceClass](#DeviceClass).
An example for a compound device is a connected power-strip where each of the sockets can be switched on and off individually. The power-strip itself can provide functions such as "all sockets off" and "overall power consumption". In principle there could be an infinite number of *ModuleClasses*, for every kind of functionality found in automation protocol ... However that would not simplify the job of software developers at all. Therefore, oneM2M recommends that a finite and convenient number of prototypical *ModuleClasses* are re-used as much as possible (within a Domain at least). oneM2M TS-0023 specification defines a rich set of such standardized *ModuleClasses* (as well as *DeviceClass* models).
Typical *ModuleClasses* might be equivalent to "power ON/OFF", "Open/Close", "PanUP/DOWN", "Temperature", etc. Those examples make it apparent that various read/write usage of parameters, invoking of actions and waiting for events might be needed in the different *ModuleClasses*, and a guideline for those structures is explained below.
*Devices* may define their own [ModuleClasses](#ModuleClass) or refer to predefined ModuleClasses(#ModuleClass) of the same or another [Domain](#Domain).
#### Attributes #### Attributes
- **id** : The identifier for that *Device*. The identifier must be unique at least in the scope of the domain, but the final scope is also influenced by implementing technologies. Required. - **name** : Name of the *ModuleClass*. The name must be unique in the scope of the [Domain](#Domain). Required.
- **optional**: Boolean that indicates whether a *ModuleClass* is optional or mandatory. Optional, the default is *false*.
- **semanticURI** : An attribute that contains a URI to a semantic description of the element. Optional.
#### Elements #### Elements
- **[Doc](#Documentation)** : Documentation for the *Device*. Optional. - **[Doc](#Documentation)** : Documentation for the *ModuleClass*. Optional.
- **[Properties](#Property)** : Further meta-data (or properties) about the *Device*. Optional. - **[Extend](#Extend)** : Reference to a another *ModuleClass* which is extended by this *ModuleClass*. Optional.
- **[ModuleClasses](#ModuleClass)** : A list of *ModuleClass* components that are local to the *Device*. Optional. - **[Properties](#Property)** : Further meta-data (or properties) about the *ModuleClass*. Optional.
- **[SubDevices](#SubDevice)** : A list of *SubDevice* components. Optional. - **[Actions](#Action)** : A list of *Action* components, each defining a single action. Optional.
- **[Data](#DataPoint)** : A list of *DataPoint* components. Optional.
- **[Events](#Event)** : A list of *Event* components. Optional.
#### Example #### Example
```xml
<Device id="aDevice"> <ModuleClass name="BooleanState">
<Doc>Some documentation</Doc> <Doc>Some documentation</Doc>
<Properties> <Actions>
<!-- The list of Properties for the Device goes here--> <!-- List of Actions goes here-->
</Properties> </Actions>
<ModuleClasses> <Events>
<!-- List of ModuleClasses local to the Device goes here--> <!-- List of Events goes here-->
</ModuleClasses> </Events>
<SubDevices> <Data>
<!-- List of Sub-Devices of the Device goes here--> <!-- List of DataPoints goes here-->
</SubDevices> </Data>
</Device> </ModuleClass>
```
--- ---
<a name="SubDevice"/></a> <a name="DataPoint"/></a>
### DataPoint
Element of [ModuleClass](#ModuleClass) and [Event](#Event).
### SubDevice ![](images/DataPoint.png)
*SubDevices* are optional components of a [Device](#Device). They represent physical sub-devices and services inside another device (the *Device*).
*SubDevices* may define their own [ModuleClasses](#ModuleClass) or extend *ModuleClasses* of it's or another [Domain](#Domain). A *DataPoint* element represents an aspect of a device which can be read/written to, and forms part of a device’s data model. Manipulating *DataPoints* is the most common way of controlling devices. Each *DataPoint* has an associated *[DataType](#DataType)* (e.g. simple integer/real numbers, string of text, struct, or arrays thereof, or an enumeration) which facillitates data integrity.
![](images/SubDevice.png) Note, that all RESTful systems (e.g. CoAP) use only *DataPoint* operations, so the mapping of a data models using an SDT into RESTful applications is easy.
However, *DataPoints* are not the only way of controlling and monitoring devices, so further [Actions](#Action) and [Events](#Event) are described below.
Though *DataPoints* only refer to single data points of a physical device it is possible to describe hierarchies by model the path to the data point in the hierarchy by a path-like structure like to the pathname of a UNIX file system. Here, the root node of the hierarchy is a slash (/ 0x2F) and the segments or nodes along the path are also separated by slashes. The actual datapoint is the last leaf at the path.
In EBNF:
```ebnf
name = dataPointName | "/" path ;
path = segment "/" path | dataPointName ;
segment = string ;
dataPointName = string ;
string = (* character string excluding the character "/" *) ;
```
#### Attributes #### Attributes
- **id** : The identifier for that *SubDevice*. The identifier must be unique at least in the scope of the domain, but the final scope is also influenced by implementing technologies. Required. - **name** : The name (and possible path in a hierarchical data model) of the *DataPoint*. The name must be unique in the scope of the [ModuleClass](#ModuleClass). Required.
- **optional**: Boolean that indicates whether a *DataPoint* is optional or mandatory. Optional, the default is *false*.
- **writable** : Boolean value that indicates whether this *DataPoint* is writable by an application. Optional. Default: true.
- **readable** : Boolean value that indicates whether this *DataPoint* is readable by an application. Optional. Default: true.
- **eventable** : Boolean value that indicates whether an internal or external change of this *DataPoint* raises an event. Optional. Default: false.
- **default** : A default value for the *DataPoint*.
- - **semanticURI** : An attribute that contains a URI to a semantic description of the element. Optional.
#### Elements #### Elements
- **[Doc](#Documentation)** : Documentation for the *SubDevice*. Optional. - **[Doc](#Documentation)** : Documentation for the *DataPoint*. Optional.
- **[Properties](#Property)** : Further meta-data (or properties) about the *SubDevice*. Optional. - **[DataType](#DataType)** : The type of the *DataPoint*. It must comply to the *DataType* definition. Required.
- **[ModuleClasses](#ModuleClass)** : A list of *Module* components that are local to the *SubDevice*. Optional.
#### Example #### Example
```xml
<SubDevice id="aSubDevice"> <Data>
<Doc>Some documentation</Doc> <DataPoint name="attributeName" writable="false">
<Properties> <Doc>Some documentation for the DataPoint</Doc>
<!-- The list of Properties for the Device goes here--> <DataType>
</Properties> <SimpleType type="string" />
<ModuleClasses> </DataType
<!-- List of ModuleClasses local to the Device goes here--> </DataPoint>
</ModuleClasses> </Data>
</SubDevice> ```
--- ---
<a name="Product"/></a>
### Product <a name="Action"/></a>
### Action
![](images/Product.png)
In real life of device manufacturing, there is an important concept of *Product* under a certain *DeviceClass*. For example, oneM2M may specify a generic *DeviceClass* called 'deviceSmartBracelt' with many fancy features (*ModuleClasses*). Based on the same *DeviceClass*, company A may design a *Product* called 'X-Fit' with only the *ModuleClass* of 'stepCounter' and the instantiated *Property* value of 'Manufacturer = Company A', while company B may design a *Product* called 'Y-Wristband' with the *ModuleClasses* of 'stepCounter' and 'heartRateMonitor' and the instantiated *Property* value of 'Manufacturer = Company B'. Those two *Products* are different but follow the same *DeviceClass*. Element of [ModuleClass](#ModuleClass).
On the other hand, a *Product* is **NOT** yet a real device instance of that *DeviceClass*. It may not have an instantiated *Properties* like device-id, date-of-manufacturing, and the firmware/software-version, etc. It can be ordered by the customers, but not necessarily instantiated or manufactured. ![](images/Action.png)
In short, a *Product* is a concrete device model with deterministic Device Properties and ModuleClasses (no optionality). It's deemed as an specialized implementation of a *DeviceClass* but not yet an device instance. Examples are the shopping items in an online digital store that can be ordered (but not necessarily manufactured) by a customer. *Action* elements are an efficient way of describing arbitrary sequences of operations/methods; these are very common in automation. Typical example include "FactoryReset", and "AutoCalibrate". *Actions* preserve transaction integrity by putting together all the parameters ([Args](#Arg), see next section) with the method which checks and executes them, in one step.
A *Product* can be defined by implementing the functionalities of an existing *DeviceClass* (while removing unimplemented optional *Properties* and *ModuleClasses*), extending from an existing *DeviceClass* (adding new *Properties* and *ModuleClasses*), or from scratch (without basing on any *DeviceClass*). Note, that systems which rely on RESTful operations need to carry out such complex setup-parameters-then-do-action by first using (several) [DataPoint](#DataPoint) operations to "load" the parameters to the device and then do a [DataPoint](#DataPoint) operation to manipulate the "start operation NOW" action.
#### Attributes #### Attributes
- **id** : The identifier for that *Product*. The identifier must be unique at least in the scope of the domain, but the final scope is also influenced by implementing technologies. Required. - **name** : The name of the *Action*. The name must be unique in the scope of the [ModuleClass](#ModuleClass). Required.
- **optional**: Boolean that indicates whether an *Action* is optional or mandatory. Optional, the default is *false*.
- **semanticURI** : An attribute that contains a URI to a semantic description of the element. Optional.
#### Elements #### Elements
All elements of *DeviceClass* can be reused in *Product*, but the *optional* attribute of those elements is not applicable (ignored if present). - **[Doc](#Documentation)** : Documentation for the *Action*. Optional.
- **[DataType](#DataType)** : The return type of the *Action*. It must comply to the *DataType* definition. Optional. If no *DataType* is specified the *Action* does not return a value.
- **[Args](#Arg)** : Zero or more occurances of argument definitions for an *Action*. Optional.
- **[Doc](#Documentation)** : Documentation for the *Product*. Optional. <a name="ActionExample"/></a>
- **[Properties](#Property)** : Further meta-data (or properties) about the *Product*. Optional. #### Example
- **[ModuleClasses](#ModuleClass)** : A list of *Module* components that are local to the *Product*. Optional. The following are two examples for actions implementing a getter and a setter for boolean values.
- **[SubDevices](#SubDevice)** : A list of *SubDevice* components. Optional. ```xml
<Action name="get" type="boolean">
<Doc>Obtain the current associated state. Example of a getter.</Doc>
</Action>
<Action name="setTarget">
<Doc>Set the associated state to the specified value. Example of a setter.</Doc>
<Args>
<Arg name="value">
<Doc>The desired value of the associated state.</Doc>
<DataType>
<SimpleType type="boolean" />
</DataType>
</Arg>
</Args>
</Action>
```
- **[DeviceClass](#DeviceClass)** : Reference to a *DeviceClass* which is implemented by this *Product*. Optional. ---
The element has the following attributes:
- **domain** : Identifier / Reference of the [Domain](#Domain) of the implemented *DeviceClass*. Optional if in the same domain.
- **class** : Name of the *DeviceClass* in the [Domain](#Domain) that is extended. Required for this element.
The element has the following child elements:
- **ImplementedModuleClasses** : A list of names of the implemented optional [ModuleClasses](#ModuleClass) in the [DeviceClass](#DeviceClass) that is extended. Optional. If not present, only mandatory [ModuleClasses](#ModuleClass) are implemented. If present, both the listed optional [ModuleClasses](#ModuleClass) and the mandatory [ModuleClass](#ModuleClass) are implemented.
- **ImplementedProperties** : A list of name-value pairs of the implemented optional device [Properties](#Property) in the [DeviceClass](#DeviceClass) that is extended. Optional. If not present, only mandatory [Properties](#Property) are implemented. If present, both the listed optional [Properties](#Property) and the mandatory [Properties](#Property) are implemented, and the values of those [Properties](#Property) are initiated as provided. In the case that the value of the [Properties](#Property) should not be initiated, the value can be omitted.
- **Extends** : Reference to a parent *Product* from which this *Product* is extended. Optional. <a name="Arg"/></a>
The element has the following attributes: ### Arg
- **domain** : Identifier / Reference of the [Domain](#Domain) of the extended *Product*. Optional if in the same domain. Element of [Action](#Action).
- **class** : *id* of the *Product* in the [Domain](#Domain) that is extended. Required for this element.
**Note**: New extended *Properties* and *ModuleClasses* **shall** have different names from those in the implemented *DeviceClass* if they're defined in the same *Domain*. ![](images/Arg.png)
The *Arg* element represents the parameter information which a device needs to carry out a required *Action*.
**Editor's Note**: the description of the optionality of the datapoints, properties, actions, events in the implemented ModuleClass is FFS. The *Arg* has the following attributes and elements:
#### XML Example #### Attributes
``` - **name** : The name of the *Arg* attribute. Required.
<Product id="myMseebProduct"> - **optional**: Boolean that indicates whether an *Arg* is optional or mandatory. Optional, the default is *false*.
<DeviceClass domain="org.exampleDomain" class="MSEEB.root"> - **default** : A default value for the *Arg*.
<ImplementedPropertyies> - **semanticURI** : An attribute that contains a URI to a semantic description of the element. Optional.
<Property name="name" value="product-abc"/>
<Property name="vendor" value="xyz"/>
<Property name="SerialNumber"/>
</ImplementedProperties>
<ImplementedModuleClasses>
<MoudleClass name="rootPowerOnOff"/>
<MoudleClass name="power" />
</ImplementedModuleClasses>
</DeviceClass>
<Properties name="someNewProperty" value="someValue">
<Doc>...</Doc>
<SimpleType type="string" />
</Properties>
<ModuleClasses name="someNewModuleClass">
<Actions>
<!-- List of Actions goes here-->
</Actions>
<Events>
<!-- List of Events goes here-->
</Events>
<DataPoints>
<!-- List of DataPoints goes here-->
</DataPoints>
</ModuleClasses>
</Product>
```
#### JSON Example #### Elements
``` - **[Doc](#Documentation)** : Documentation for the *argument*. Optional.
{ - **[DataType](#DataType)** : The return type of the *argument*. It must comply to the *DataType* definition. Required.
"Product": {
"id": "myMseebProduct",
"DeviceClass": {
"domain": "org.exampleDomain",
"class": "MSEEB.root",
"ImplementedProperties": [{
"name": "name",
"value": "product-abc"
},
{
"name": "Vendor",
"value": "xyz"
},
{
"name": "SerialNumber"
}],
"ImplementedModuleClasses": ["rootPowerOnOff","power"]
},
"Properties": [{
"name": "someNewProperty",
"value": "someValue",
"Doc": "...",
"DataType": "..."
}],
"ModuleClasses": [{
"name": "someNewModuleClass",
"Actions": [],
"DataPoints": [],
"Events": []
}]
}
}
```
---
<a name="Property"/></a>
### Property : Element of a *Device* or *ModuleClass* #### Example
See [example above](#ActionExample).
![](images/Property.png) ---
*Property* elements are used to append to [Devices](#Device) and their [ModuleClass](ModuleClass) elements with arbitrary additional information. For [Devices](#Device) it would be very common for a manufacturer to want to add into the XML file which is describing the device such information as "Manufacturing Site", "Date of Manufacture", "Certification Code", "Energy Label Code", "compatible LAN technology", "URL for the device handbook", "physical limits of operation environments", etc. <a name="Event"/></a>
### Event
Element of [ModuleClass](#ModuleClass).
Some of that information might in some devices be available by reading a specific device [DataPoint](#DataPoint), however even if it cannot be read from the device then at least it can be noted in the device's XML description. Examples for organizations that specify these kind of added "Property" information are [eCl@ss](http://www.eclass.eu) and [UNSPSC](http://www.unspsc.org) (United Nations Standard Products and Services Code). ![](images/Event.png)
Since the *Properties* are highly varied, depending on industry segment, no attempt is made in the SDT to constrain the options: however it is highly recommended to provide software-developer-friendly information in the [Doc](#Documentation) field of each Property. *Event* elements are needed for automation protocols which "push" information, instead of relying on polling by the software application. A typical example would be a "SensorAlert" where a window sensor immediately transmits a change of its state from "closed" to "open", which could be used in a burglar alarm application, needs to be ready to accept such information immediately, and not wait for a regular polling of the device.
#### Attributes #### Attributes
- **name**: Name or identifier of a *Property*. - **name** : The name of the *Event*. The name must be unique in the scope of the [ModuleClass](#ModuleClass). Required.
- **optional**: Boolean that indicates whether a *Property* is optional or mandatory. Optional, the default is *false*. - **optional**: Boolean that indicates whether an *Event* is optional or mandatory. Optional, the default is *false*.
- **value**: Text representation of value of a *Property*. Optional. - **semanticURI** : An attribute that contains a URI to a semantic description of the element. Optional.
#### Elements #### Elements
- **[Doc](#Documentation)** : Documentation for the *Property*. Optional. - **[Doc](#Documentation)** : Documentation for the *Event* Element. Optional.
- **DataType** : The data type of the property. This must be a [SimpleType](#SimpleType). - **[Data](#DataPoint)** : A list of *DataPoint* components for an event's payload. Optional.
#### Example #### Example
```xml
<Property name="ManufacturedDate" value="2015.10.30 10:06"> <Event name="stateChanged">
<SimpleType type="datetime" /> <Doc>Some documentation for the Event</Doc>
</Property> <Data>
<DataPoint name="state">
<DataType>
<SimpleType type="boolean" />
</DataType>
</DataPoint>
</Data>
</Event>
```
--- ---
<a name="ModuleClass"/></a> <a name="DeviceClass"/></a>
### DeviceClass
### Module and ModuleClass Element of [Domain](#Domain) and [Product](#Product).
![](images/ModuleClass.png) ![](images/DeviceClass.png)
**ModuleClass** The *DeviceClass* was initially thought of as the representation of "the basic things we are trying to model" and can still be considered so. However, after discussion with various SDOs, it was decided to add also "[sub-devices](#SubDevice)". That is, there is one level of hierarchy to allow modeling of e.g. a set of independent energy monitoring plugs in a single addressable power-extension-block.
*ModuleClass* elements are basically constraints or templates for how to model functionality of real things/appliances/devices within the [Domain](#Domain). A *ModuleClass* can be extended from another *ModuleClass* with additional functionalities. Note, that all the different devices which one needs to model within a Domain are composed of one or more [ModuleClasses](#ModuleClass).
Every [Device](#Device) can be described by a collection of *ModuleClasses* (functionality). For each physical device on the network at least one *DeviceClass* **must** be defined. If the physical device is a simple device, i.e. it does not contain embedded devices, e.g. a light switch, it does not include further [SubDevices](#SubDevices). On the other hand, if the physical is a compound device, i.e. it does contain embedded devices that can be addressed separately, the *DeviceClass* **should** contain [SubDevices](SubDevices) for each of the identifiable embedded devices.
The set of *ModuleClasses* is defined at the [Domain](#Domain) level or in the context of a [Device](#Device). An example for a compound device is a connected power-strip where each of the sockets can be switched on and off individually. The power-strip itself can provide functions such as "all sockets off" and "overall power consumption".
In principle there could be an infinite number of *ModuleClasses*, for every kind of functionality found in UPnP, ZigBee and all the other automation protocols ... However that would not simplify the job of software developers at all! Therefore, oneM2M recommends that a finite and convenient number of prototypical *ModuleClasses* are re-used as much as possible (within a Domain at least). oneM2M TS-0023 specifies a set of such standardized ModuleClasses (as well as Device models).
Typical *ModuleClasses* might be equivalent to "power ON/OFF", "Open/Close", "PanUP/DOWN", "ReadTemperature", etc. Those examples make it apparent that various read/write usage of parameters, invoking of actions and waiting for events might be needed in the different *ModuleClasses*, and a guideline for those structures is explained below.
*DeviceClasses* may define their own [ModuleClasses](#ModuleClass) or refer to predefined [ModuleClasses](#ModuleClass) of the same or another [Domain](#Domain).
#### Attributes #### Attributes
- **name** : Name of the *Module* or *ModuleClass*. The name must be unique in the scope of the [Domain](#Domain). Required. - **id** : The identifier for that *DeviceClass*. The identifier must be unique at least in the scope of the domain, but the final scope is also influenced by implementing technologies. Required.
- **optional**: Boolean that indicates whether a *Module* or *ModuleClass* is optional or mandatory. Optional, the default is *false*. - **semanticURI** : An attribute that contains a URI to a semantic description of the element. Optional.
#### Elements #### Elements
- **[Doc](#Documentation)** : Documentation for the *Module* or *ModuleClass*. Optional. - **[Doc](#Documentation)** : Documentation for the *Device*. Optional.
- **Extends** : Reference to a another *ModuleClass* or *Module* which is extended with this *ModuleClass*. Optional. - **[Properties](#Property)** : Further meta-data (or properties) about the *Device*. Optional.
The element has the following attributes: - **[ModuleClasses](#ModuleClass)** : A list of *ModuleClass* components that are local to the *Device*. Optional.
- **domain** : Identifier / Reference of the [Domain](#Domain) of the extended *ModuleClass*. Required for this element. - **[SubDevices](#SubDevice)** : A list of *SubDevice* components. Optional.
- **class** : Name of the *ModuleClass* in the [Domain](#Domain) that is extended. Required for this element.
- **[Properties](#Property)** : Further meta-data (or properties) about the *Module* or *ModuleClass*. Optional.
- **[Actions](#Action)** : A list of *Action* components, each defining a single action. Optional.
- **[Data](#DataPoint)** : A list of *DataPoint* components. Optional.
- **[Events](#Event)** : A list of *Event* components. Optional.
#### Example #### Example
```xml
<ModuleClass name="BooleanState"> <Device id="aDevice">
<Doc>Some documentation</Doc> <Doc>Some documentation</Doc>
<Actions> <Properties>
<!-- List of Actions goes here--> <!-- The list of Properties for the Device goes here-->
</Actions> </Properties>
<Events> <ModuleClasses>
<!-- List of Events goes here--> <!-- List of ModuleClasses local to the Device goes here-->
</Events </ModuleClasses>
<Data> <SubDevices>
<!-- List of DataPoints goes here--> <!-- List of Sub-Devices of the Device goes here-->
</Data> </SubDevices>
</ModuleClass> </Device>
```
--- ---
<a name="DataPoint"/></a> <a name="SubDevice"/></a>
### SubDevice
### DataPoint : Element of *ModuleClass* and *Event* Element of [DeviceClass](#DeviceClass) and [Product](#Product).
![](images/DataPoint.png)
A *DataPoint* element represents an aspect of a device which can be read/written to, and forms part of a device’s data model. Manipulating *DataPoints* is the most common way of controlling devices. Each *DataPoint* has an associated *type* (e.g. simple integer/real numbers, string of text, struct, or arrays thereof) which facillitates data integrity. Note that all RESTful systems (e.g. CoAP) use only *DataPoint* operations, so the mapping of a data models using an SDT into RESTful applications is easy.
However, *DataPoints* are not the only way of controlling devices, so further [Actions](#Action) and [Events](#Event) are described below.
Though *DataPoints* only refer to single data points of a physical device it is possible to describe hierarchies by model the path to the data point in the hierarchy by a path-like structure like to the pathname of a UNIX file system. Here, the root node of the hierarchy is a slash (/ 0x2F) and the segments or nodes along the path are also separated by slashes. The actual datapoint is the last leaf at the path.
In EBNF: *SubDevices* are optional components of a [DeviceClass](#DeviceClass). They represent physical sub-devices and services inside another device (the *DeviceClass*).
name = dataPointName | "/" path ; *SubDevices* may define their own [ModuleClasses](#ModuleClass) or extend *ModuleClasses* of it's or another [Domain](#Domain).
path = segment "/" path | dataPointName ;
segment = string ;
dataPointName = string ;
string = (* character string excluding the character "/" *) ;
![](images/SubDevice.png)
#### Attributes #### Attributes
- **name** : The name (and possible path in a hierarchical data model) of the *DataPoint*. The name must be unique in the scope of the [ModuleClass](#ModuleClass). Required. - **id** : The identifier for that *SubDevice*. The identifier must be unique at least in the scope of the domain, but the final scope is also influenced by implementing technologies. Required.
- **optional**: Boolean that indicates whether a *DataPoint* is optional or mandatory. Optional, the default is *false*. - **semanticURI** : An attribute that contains a URI to a semantic description of the element. Optional.
- **writable** : Boolean value that indicates whether this *DataPoint* is writable by an application. Optional. Default: true.
- **readable** : Boolean value that indicates whether this *DataPoint* is readable by an application. Optional. Default: true.
- **eventable** : Boolean value that indicates whether an internal or external change of this *DataPoint* raises an event. Optional. Default: false.
#### Elements #### Elements
- **[Doc](#Documentation)** : Documentation for the *DataPoint*. Optional. - **[Doc](#Documentation)** : Documentation for the *SubDevice*. Optional.
- **[DataType](#DataType)** : The type of the *DataPoint*. It must comply to the *DataType* definition. Required. - **[Properties](#Property)** : Further meta-data (or properties) about the *SubDevice*. Optional.
- **[ModuleClasses](#ModuleClass)** : A list of *Module* components that are local to the *SubDevice*. Optional.
#### Example #### Example
```xml
<Data> <SubDevice id="aSubDevice">
<DataPoint name="attributeName" writable="false"> <Doc>Some documentation</Doc>
<Doc>Some documentation for the DataPoint</Doc> <Properties>
<DataType> <!-- The list of Properties for the Device goes here-->
<SimpleType type="string" /> </Properties>
</DataType <ModuleClasses>
</DataPoint> <!-- List of ModuleClasses local to the Device goes here-->
</Data> </ModuleClasses>
</SubDevice>
```
--- ---
<a name="ProductClass"/></a>
### ProductClass
Element of [Domain](#Domain).
<a name="Action"/></a> ![](images/Product.png)
### Action : Element of *ModuleClass* In real life of device manufacturing, there is the important concept of a *ProductClass* for a certain [DeviceClass](#DeviceClass). For example, oneM2M may specify a generic [DeviceClass](#DeviceClass) called *deviceSmartBracelt* with many fancy features (ie. a [ModuleClasses](#ModuleClass). Based on the same [DeviceClass](#DeviceClass), company A may design a *ProductClass* called "X-Fit" with only the [ModuleClass](#ModuleClass) of "stepCounter" and the instantiated [Property](#Property) value of "Manufacturer = Company A", while company B may design a *ProductClass* called "Y-Wristband" with the [ModuleClasseses](#ModuleClass) of "stepCounter" and "heartRateMonitor" and the instantiated [Property](#Property) value of "Manufacturer = Company B". Those two *ProductClasses* are different but follow the same [DeviceClass](#DeviceClass).
![](images/Action.png) On the other hand, a *ProductClass* is **NOT** yet a real device instance of that [DeviceClass](#DeviceClass). It may not have an instantiated [Properties](#Property) like device-id, date-of-manufacturing, and the firmware/software-version, etc. It can be ordered by the customers, but not necessarily instantiated or manufactured.
*Action* elements are an efficient way of describing arbitrary sequences of operations/methods; these are very common in automation. Typical example include "FactoryReset", and "AutoCalibrate". *Actions* preserve transaction integrity by putting together all the parameters ("args", see next section) with the method which checks and executes them, in one step. In short, a *ProductClass* is a concrete device model with deterministic Device Properties and ModuleClasses (no optionality). It's deemed as an specialized implementation of a [DeviceClass](#DeviceClass) but not yet an device instance. Examples are the shopping items in an online digital store that can be ordered (but not necessarily manufactured) by a customer.
Note that systems which rely on RESTful operations need to carry out such complex setup-parameters-then-do-action by first using (several) [DataPoint](#DataPoint) operations to "load" the parameters to the device and then do a [DataPoint](#DataPoint) operation to manipulate the "start operation NOW" action. A *ProductClass* can be defined by implementing the functionalities of an existing [DeviceClass](#DeviceClass) (while removing unimplemented optional *Properties* and [ModuleClasses](#ModuleClass)), extending from an existing [DeviceClass](#DeviceClass) (adding new [Properties](#Property) and [ModuleClasses](#ModuleClass)), or from scratch (without basing on any [DeviceClass](#DeviceClass)).
#### Attributes #### Attributes
- **name** : The name of the *Action*. The name must be unique in the scope of the [ModuleClass](#ModuleClass). Required. - **id** : The identifier for that *ProductClass*. The identifier must be unique at least in the scope of the domain, but the final scope is also influenced by the manufacturer or implementation domain. Required.
- **optional**: Boolean that indicates whether an *Action* is optional or mandatory. Optional, the default is *false*. - **semanticURI** : An attribute that contains a URI to a semantic description of the element. Optional.
#### Elements #### Elements
- **[Doc](#Documentation)** : Documentation for the *Action*. Optional. All elements of [DeviceClass](#DeviceClass) can be reused in *ProductClass*, but the *optional* attribute of those elements is not applicable (ignored if present).
- **[DataType](#DataType)** : The return type of the *Action*. It must comply to the *DataType* definition. Optional. If no *DataType* is specified the *Action* does not return a value.
- **Args** : Zero or more occurances of [argument](#Arg) definitions for an *Action*. Optional.
<a name="ActionExample"/></a> - **[Doc](#Documentation)** : Documentation for the *ProductClass*. Optional.
- **[Properties](#Property)** : Further meta-data (or properties) about the *ProductClass*. Optional.
- **[ModuleClasses](#ModuleClass)** : A list of *ModuleClass* components that are local to the *ProductClass*. Optional.
- **[SubDevices](#SubDevice)** : A list of *SubDevice* components. Optional.
- **[DeviceClass](#DeviceClass)** : Reference to a *DeviceClass* which is implemented by this *ProductClass*. Optional.
- **Extends** : Reference to a parent *ProductClass* from which this *ProductClass* is extended. Optional.
**Note**: New extended *Properties* and *ModuleClasses* **shall** have different names from those in the implemented *DeviceClass* if they're defined in the same *Domain*. Also, when extending a *ProductClass* that has a [DeviceClass](#DeviceClass) defined (or in any other parent in the inheritance hierarchy) then the child *ProductClass* **must not** define another [DeviceClass](#DeviceClass).
#### Example #### Example
The following are two examples for actions implementing a getter and a setter for boolean values. ```xml
<ProductClass id="TestProductClass">
<Action name="get" type="boolean"> <Doc>This is a new product</Doc>
<Doc>Obtain the current associated state. Example of a getter.</Doc> <Properties>
</Action> <Property name="name" value="product-abc">
<SimpleType type="string"></SimpleType>
<Action name="setTarget"> </Property>
<Doc>Set the associated state to the specified value. Example of a setter.</Doc> <Property name="vendor" value="xyz"/>
<Args> <SimpleType type="string"></SimpleType>
<Arg name="value"> </Property>
<Doc>The desired value of the associated state.</Doc> <Property name="SerialNumber"/>
<DataType> <SimpleType type="string"></SimpleType>
<SimpleType type="boolean" /> </Property>
</DataType> </Properties>
</Arg> <ModuleClasses>
</Args> <ModuleClass name="aModuleClass">
</Action> <Extend domain="adomain" entity="aModuleClass" />
</ModuleClass>
<ModuleClass name="newModuleClass">
<!-- List of Actions, Events and DataPoints goes here-->
</ModuleClass>
</ModuleClasses>
<DeviceClass>
<Extend domain="adomain" entity="aDeviceClass" />
</DeviceClass>
</ProductClass>
```
--- ---
<a name="Event"/></a> <a name="Property"/></a>
### Property
Element of a [ProductClass](#ProductClass), [DeviceClass](#DeviceClass), [SubDevice](#SubDevice), and [ModuleClass](#ModuleClass).
### Event : Element of *ModuleClass* ![](images/Property.png)
![](images/Event.png) *Property* elements are used to append to [ProductClasses](#ProductClass) [DevicesClasses](#DeviceClass) and their [ModuleClass](ModuleClass) elements with arbitrary additional information. For example, for a [ProductClass](#DeviceClass) it would be very common for a manufacturer to want to add into the XML file which is describing the manufacturer appliance such information as "Manufacturing Site", "Date of Manufacture", "Certification Code", "Energy Label Code", "compatible LAN technology", "URL for the device handbook", "physical limits of operation environments", etc.
*Event* elements are needed for automation protocols which "push" information, instead of relying on polling by the software application. A typical example would be a "SensorAlert" where a window sensor immediately transmits a change of its state from "closed" to "open", which could be used in a burglar alarm application, needs to be ready to accept such information immediately, and not wait for a regular polling of the device. Some of that information might in some devices be available by reading a specific device [DataPoint](#DataPoint), however even if it cannot be read from the device then at least it can be noted in the device's XML description. Examples for organizations that specify these kind of added "Property" information are [eCl@ss](http://www.eclass.eu) and [UNSPSC](http://www.unspsc.org) (United Nations Standard Products and Services Code).
Since the *Properties* are highly varied, depending on industry segment, no attempt is made in the SDT to constrain the options: however it is highly recommended to provide software-developer-friendly information in the [Doc](#Documentation) field of each Property.
#### Attributes #### Attributes
- **name** : The name of the *Event*. The name must be unique in the scope of the [ModuleClass](#ModuleClass). Required. - **name**: Name or identifier of a *Property*.
- **optional**: Boolean that indicates whether an *Event* is optional or mandatory. Optional, the default is *false*. - **optional**: Boolean that indicates whether a *Property* is optional or mandatory. Optional, the default is *false*.
- **value**: Text representation of value of a *Property*. Optional.
- **semanticURI** : An attribute that contains a URI to a semantic description of the element. Optional.
#### Elements #### Elements
- **[Doc](#Documentation)** : Documentation for the *Event* Element. Optional. - **[Doc](#Documentation)** : Documentation for the *Property*. Optional.
- **[Data](#DataPoint)** : A list of *DataPoint* components for an event's payload. Optional. - **DataType** : The data type of the property. This must be a [SimpleType](#SimpleType).
#### Example #### Example
```xml
<Event name="stateChanged"> <Property name="ManufacturedDate" value="2015.10.30 10:06">
<Doc>Some documentation for the Event</Doc> <SimpleType type="datetime" />
<Data> </Property>
<DataPoint name="state"> ```
<DataType>
<SimpleType type="boolean" />
</DataType>
</DataPoint>
</Data>
</Event>
--- ---
<a name="Arg"/></a> <a name="DataTypes"/></a>
## Data Types
### Arg : Element of *Action*
![](images/Arg.png) A data type can be simple integers or string text, or rather complex, as shown in the following diagram:
The *Arg* element represents the parameter information which a device needs to carry out a required *Action*.
The *Arg* has the following attributes and elements: ![](images/SDT_UML_DataType.png)
#### Attributes
- **name** : The name of the *Arg* attribute. Required.
#### Elements
- **[Doc](#Documentation)** : Documentation for the *argument*. Optional.
- **[DataType](#DataType)** : The return type of the *argument*. It must comply to the *DataType* definition. Required.
#### Example The various elements of *DataType* are described in the following sections.
See [example above](#ActionExample).
--- *DataTypes* can be rather complex and it might be reasonable to define them on the [Domain](#Domain) level. This way the only need to be defined once and can be references through the [Extend](#Extend) element later, and also across [Domains](#Domain).
<a name="Data_Types"/></a>
<a name="DataType"/></a>
### DataType ### DataType
The data type can be simple integers or string text, or rather complex, as shown below:
![](images/SDT_UML_DataType.png) Element of a [Domain](#Domain), [Property](#Property), [Action](#Action), [Arg](#Arg), [DataPoint](#DataPoint), [Event](#Event), [StructType](#StructType), and [ArrayType](#ArrayType).
The various elements are described in the sections below.
![](images/DataType.png) ![](images/DataType.png)
The *DataType* element is a "container" for the various aspects of a type. The *DataType* element is a "container" for the various aspects of a type.
#### Attributes #### Attributes
- **name** : The name of the *DataType*. The name must be set for the [Struct](#Struct) types to distinguish individual fields in that structure. It can be used in other cases. Optional. - **name** : The name of the *DataType*. Optional, with the exception that the name must be set for fields in a [Struct](#Struct) to distinguish individual fields in that structure.
- **unitOfMeasure** : Before considering the type of data in detail, there is the option to label the data with the units of measurement. A "Temperature" measurement is meaningless until the units Kelvin, Celcius, Fahrenheit etc are known. Because of the extreme variety of units, a string field is the default annotation method, although of course a SDO could decide to reference a standardized list of units. Optional. - **unitOfMeasure** : Before considering the type of data in detail, there is the option to label the data with the units of measurement. A "Temperature" measurement is meaningless until the units Kelvin, Celcius, Fahrenheit etc are known. Because of the extreme variety of units, a string field is the default annotation method, although of course a SDO could decide to reference a standardized list of units. Optional.
- **semanticURI** : An attribute that contains a URI to a semantic description of the element. Optional.
#### Elements #### Elements
- **[Doc](#Documentation)** : Documentation for the *DataType* Element. Optional. - **[Doc](#Documentation)** : Documentation for the *DataType* Element. Optional.
...@@ -501,39 +496,42 @@ The *DataType* element is a "container" for the various aspects of a type. ...@@ -501,39 +496,42 @@ The *DataType* element is a "container" for the various aspects of a type.
- **[SimpleType](#SimpleType)** - **[SimpleType](#SimpleType)**
- **[Struct](#StructType)** - **[Struct](#StructType)**
- **[Array](#ArrayType)** - **[Array](#ArrayType)**
- **[EnumType](#EnumType)**
- **[Constraint](#Constraint)** : A list of *Constraint* elements. Optional. - **[Constraint](#Constraint)** : A list of *Constraint* elements. Optional.
--- ---
<a name="Constraint"/></a> <a name="Constraint"/></a>
### Constraint
### Constraint : Element of DataType Element of [DataType](#DataType).
![](images/Constraint.png) ![](images/Constraint.png)
The *Constraint* element is an optional element allowing the manufacturer to provide constraints on the permitted values of measured data or input parameters. It can significantly improve the reliability of software and validation of transmitted data. The *Constraint* element is an optional element allowing the manufacturer or organization to provide constraints on the permitted values of measured data or input parameters. It can significantly improve the reliability of software and validation of transmitted data.
#### Attributes #### Attributes
- **name** : The name or ID that identifies the *Constraint*. Required. - **name** : The name or ID that identifies the *Constraint*. Required.
- **type** : The basic data type of the constraint. Note that this may be different from the type of the [DataType](#DataType) that this *Constraint* is assigned to. For example, a *Constraint* that specifies a maximum length of a string is of type *integer*. Optional. - **type** : The basic data type of the constraint. Note that this may be different from the type of the [DataType](#DataType) that this *Constraint* is assigned to. For example, a *Constraint* that specifies a maximum length of a string is of type *integer*. Optional.
- **value** : A pre-assigned value for the constraint, for example the maximum number of characters in a string. Optional. - **value** : A pre-assigned value for the constraint, for example the maximum number of characters in a string. Optional.
- **semanticURI** : An attribute that contains a URI to a semantic description of the element. Optional.
#### Elements #### Elements
- **[Doc](#Documentation)** : Documentation for the *Cosntraint* Element. Optional. - **[Doc](#Documentation)** : Documentation for the *Constraint* Element. Optional.
--- ---
### TypeChoice : Construct of *DataType* ### TypeChoice
Construct of [DataType](#DataType).
![](images/TypeChoice.png) ![](images/TypeChoice.png)
The *TypeChoice* construct is required for syntactic reasons in the UML diagram and the choice from the enumerated list simply designates the complexity of the following DataType. The *TypeChoice* construct is required for syntactic reasons in the UML diagram and the choice from the enumerated list simply designates the complexity of the following DataType. It is not directly instantiated or addressed.
--- ---
<a name="SimpleType"/></a> <a name="SimpleType"/></a>
### SimpleType
### SimpleType : Element of *TypeChoice* Element of [DataType](#DataType).
![](images/SimpleType.png) ![](images/SimpleType.png)
...@@ -545,12 +543,13 @@ The *SimpleType* element is required in order for software to understand the for ...@@ -545,12 +543,13 @@ The *SimpleType* element is required in order for software to understand the for
If not stated otherwise datatypes should comply to the equivalent datatypes defined in [XML Schema Part 2: Datatypes Second Edition](http://www.w3.org/TR/xmlschema-2/#boolean): If not stated otherwise datatypes should comply to the equivalent datatypes defined in [XML Schema Part 2: Datatypes Second Edition](http://www.w3.org/TR/xmlschema-2/#boolean):
![](images/BasicType.png)
- **boolean** : A boolean value as defined in [http://www.w3.org/TR/xmlschema-2/#boolean](http://www.w3.org/TR/xmlschema-2/#boolean) . - **boolean** : A boolean value as defined in [http://www.w3.org/TR/xmlschema-2/#boolean](http://www.w3.org/TR/xmlschema-2/#boolean) .
- **byte** : An integer datatype with the range of [0 - 255] as defined in [http://www.w3.org/TR/xmlschema-2/#unsignedByte](http://www.w3.org/TR/xmlschema-2/#unsignedByte) . - **byte** : An integer datatype with the range of [0 - 255] as defined in [http://www.w3.org/TR/xmlschema-2/#unsignedByte](http://www.w3.org/TR/xmlschema-2/#unsignedByte) .
- **integer** : An integer value as defined in [http://www.w3.org/TR/xmlschema-2/#integer](http://www.w3.org/TR/xmlschema-2/#integer) . - **integer** : An integer value as defined in [http://www.w3.org/TR/xmlschema-2/#integer](http://www.w3.org/TR/xmlschema-2/#integer) .
- **float** : An IEEE single-precision 32-bit floating point type as defined in [http://www.w3.org/TR/xmlschema-2/#float](http://www.w3.org/TR/xmlschema-2/#float) . - **float** : An IEEE single-precision 32-bit floating point type as defined in [http://www.w3.org/TR/xmlschema-2/#float](http://www.w3.org/TR/xmlschema-2/#float) .
- **string** : The string datatype represents character strings as defined in [http://www.w3.org/TR/xmlschema-2/#string](http://www.w3.org/TR/xmlschema-2/#string) . - **string** : The string datatype represents character strings as defined in [http://www.w3.org/TR/xmlschema-2/#string](http://www.w3.org/TR/xmlschema-2/#string) .
- **enum** : A complete and orderd list of items in a collection. Items in an enumeration are separated by commas (, 0x2c) and must be of one of the datatypes defined here. Commas (, 0x2c) and backslashes (\ 0x5c) in enumaration items must be escaped by backslash.
- **date** : A date value as defined in [http://www.w3.org/TR/xmlschema-2/#date](http://www.w3.org/TR/xmlschema-2/#date) . - **date** : A date value as defined in [http://www.w3.org/TR/xmlschema-2/#date](http://www.w3.org/TR/xmlschema-2/#date) .
- **time** : A time value as defined in [http://www.w3.org/TR/xmlschema-2/#time](http://www.w3.org/TR/xmlschema-2/#time) . - **time** : A time value as defined in [http://www.w3.org/TR/xmlschema-2/#time](http://www.w3.org/TR/xmlschema-2/#time) .
- **datetime** : A time value as defined in [http://www.w3.org/TR/xmlschema-2/#dateTime](http://www.w3.org/TR/xmlschema-2/#dateTime) . - **datetime** : A time value as defined in [http://www.w3.org/TR/xmlschema-2/#dateTime](http://www.w3.org/TR/xmlschema-2/#dateTime) .
...@@ -558,38 +557,200 @@ If not stated otherwise datatypes should comply to the equivalent datatypes defi ...@@ -558,38 +557,200 @@ If not stated otherwise datatypes should comply to the equivalent datatypes defi
- **uri** : A URI that represents a Uniform Resource Identifier Reference (URI) as defined by as defined in [RFC 2396](http://www.ietf.org/rfc/rfc2396.txt) and amended in [RFC 2732](http://www.ietf.org/rfc/rfc2732.txt) . - **uri** : A URI that represents a Uniform Resource Identifier Reference (URI) as defined by as defined in [RFC 2396](http://www.ietf.org/rfc/rfc2396.txt) and amended in [RFC 2732](http://www.ietf.org/rfc/rfc2732.txt) .
- **void** : The data type *void* represents the absence of a value. This data type can be used for [Actions](#Action) that don't return any value. - **void** : The data type *void* represents the absence of a value. This data type can be used for [Actions](#Action) that don't return any value.
### Example
```xml
<DataPoint name="simpleDataPoint">
<DataType>
<SimpleType type="string" />
</DataType>
</DataPoint>
```
--- ---
<a name="StructType"/></a> <a name="StructType"/></a>
### StructType
### StructType : Element of *TypeChoice* Element of [DataType](#DataType).
![](images/Struct.png) ![](images/Struct.png)
The *StructType* element can be used to represent an ordered list of diverse DataTypes, which are represented by the *name* attribute of each [DataType](#DataType), and can be used recursively. The *StructType* element can be used to represent an ordered list of diverse DataTypes, which are represented by the *name* attribute of each [DataType](#DataType), and can be used recursively.
#### Elements #### Elements
- **[DataType](#DataType)** : A list of DataTypes elements representing the elements of a structure. - **[DataType](#DataType)** : A list of *DataTypes* elements representing the elements of a structure.
### Example
```xml
<DataPoint name="structDataPoint">
<DataType name="structured">
<Struct>
<DataType name="aString">
<SimpleType type="string" />
</DataType>
<DataType name="anInteger">
<SimpleType type="integer" />
</DataType>
</Struct>
</DataType>
</DataPoint>
```
--- ---
<a name="ArrayType"/></a> <a name="ArrayType"/></a>
### ArrayType
### ArrayType : Element of *TypeChoice* Element of [DataType](#DataType).
![](images/Array.png) ![](images/Array.png)
The *ArrayType* element is provided for defining lists of data; the definition is recursive so that multi-dimensional arrays can be described. Note that a Constraint can be used to provide limits on Array size. The *ArrayType* element is provided for defining lists of data; the definition is recursive so that multi-dimensional arrays can be described. Note that a Constraint can be used to provide limits on Array size.
#### Elements #### Elements
- **[DataType](#DataType)** : A single DataType element that specifies the data type for the elements of the array. - **[DataType](#DataType)** : A single *DataType* element that specifies the data type for the elements of the array.
### Example
```xml
<DataPoint name="arrayDataPoint">
<DataType name="arrayOfInteger">
<Array>
<DataType>
<SimpleType type="integer" />
</DataType>
</Array>
</DataType>
</DataPoint>
```
--- ---
<a name="Documentation"/></a> <a name="EnumType"/></a>
### EnumType
Element of [DataType](#DataType).
![](images/Enum.png)
The *EnumType* element is provided for defining an enumeration data type; it defines a (possibly mixed) typed set of [EnumValues](#EnumValue).
#### Elements
- **[EnumValue](#EnumValue)** : A list of *EnumValue" element that specifies the data type for the elements of the array.
<a name="EnumTypeExample"/></a>
#### Example
```xml
<DataPoint name="enumDataPoint">
<DataType name="enumOfInteger">
<Enum>
<EnumValue name="red" value="1" type="integer" />
<EnumValue name="green" value="2" />
<EnumValue name="blue" value="3" />
</Enum>
</DataType>
</DataPoint>
```
---
### Doc : Element for all Documentation <a name="EnumValue"/></a>
### EnumValue
Element of [EnumType](#EnumType).
![](images/EnumValue.png)
The *EnumType* element is provided for defining an enumeration data type; it defines a (possibly mixed) typed set of [EnumValues](#EnumValue).
#### Attributes
- **name** : The name that identifies the *EnumValue*. Required.
- **value** : An assigned value for the *EnumValue*. Required.
- **type** : The *BasicType* of the *EnumValue*. An [EnumType](#EnumType) may have *EnumValues* of mixed type. Optional, the default is *integer*.
- **semanticURI** : An attribute that contains a URI to a semantic description of the element. Optional.
#### Elements
- **[Doc](#Documentation)** : Documentation for the *EnumValue* Element. Optional.
#### Example
See [example in *EnumType*](#EnumTypeExample).
---
<a name="Extending"/></a>
## Extending (Inheriting)
The SDT supports inhering for certain element types. This is done by extending a parent element definition.
By default, this method can be used in a simple way by just extending a whole parent element, but it is also possible to explicitly include or exclude certain elements from the derived element.
Extension across [Domains](#Domain) is supported and encouraged.
![](images/SDT_UML_Extend.png)
<a name="ExtendExample"/></a>
#### Example
The following example defines two [ModuleClasses](#ModuleClass), where the second definition extends to first one, but explicitly excludes one of the [DataPoints](#DataPoint).
```xml
<ModuleClasses>
<ModuleClass name="aModuleClass">
<Data>
<DataPoint name="dataPoint1">
<!-- type definition -->
</DataPoint>
<DataPoint name="dataPoint2">
<!-- type definition -->
</DataPoint>
</Data>
</ModuleClass>
<ModuleClass name="anotherModuleClass">
<Extend domain="aDomain" entity="aModuleClass">
<Exclude name="dataPoint2" type="datapoint" />
</Extend>
<!-- more local definitions, such as Actions, DataPoints etc -->
</ModuleClass>
</ModuleClasses>
```
---
<a name="Extend"/></a>
### Extend
Element of [ProductClass](#ProductClass), [ModuleClass](#ModuleClass) and [DataType](#DataType).
![](images/Extend.png)
The *Extend* element specifies which element to extend. As a simple element it can be used to fully include the referenced element into the derived element, but it is also possible to explicitly include or exclude certain elements. Please note, that it is only possible to either **include** or **exclude** elements.
#### Attributes
- **domain** : Identifier / Reference of the [Domain](#Domain) of the extended element. Required.
- **entity** : Name of the element in the [Domain](#Domain) that is extended. Required.
#### Elements
- **ExtendChoice** : This element is actual an element from the following list of extend choices. Please note, that it is only possible to either **include** or **exclude** elements.
- **[Include](#ExtendInclude)**
- **[Exclude](#ExtendExclude)**
#### Example
See [example in *Extending (Inheriting)*](#ExtendExample).
---
<a name="ExtendInclude"/></a>
### Include
---
<a name="ExtendExclude"/></a>
### Exclude
---
<a name="ExtendType"/></a>
### ExendType
---
<a name="Documentation"/></a>
## Documentation (Doc)
Element for documentation in all elements.
![](images/Doc.png) ![](images/Doc.png)
...@@ -618,3 +779,7 @@ The intended use for each element is: ...@@ -618,3 +779,7 @@ The intended use for each element is:
- **paragraph** : Structure the text in paragraphs. - **paragraph** : Structure the text in paragraphs.
- **image** : Include an image in the text. The image is loaded from the specified URL and must include a caption text. - **image** : Include an image in the text. The image is loaded from the specified URL and must include a caption text.
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram program="umlet" version="14.3.0"> <diagram program="umlet" version="14.3.0">
<help_text/> <help_text/>
<zoom_level>10</zoom_level> <zoom_level>8</zoom_level>
<element> <element>
<id>UMLNote</id> <id>UMLNote</id>
<coordinates> <coordinates>
<x>1390</x> <x>1168</x>
<y>1690</y> <y>1352</y>
<w>290</w> <w>232</w>
<h>260</h> <h>208</h>
</coordinates> </coordinates>
<panel_attributes>bg=#FAF8C8 <panel_attributes>bg=#FAF8C8
fontsize=12 fontsize=12
...@@ -27,8 +27,8 @@ Subclassing ...@@ -27,8 +27,8 @@ Subclassing
Cardinalities: Cardinalities:
0,1 : zero or one 0,1 : zero or one
1 : exact one 1 : exact one
0..* : zero or many 0..n : zero or many
1..* : at least one or many 1..n : at least one or many
group=1</panel_attributes> group=1</panel_attributes>
<additional_attributes/> <additional_attributes/>
...@@ -36,14 +36,14 @@ group=1</panel_attributes> ...@@ -36,14 +36,14 @@ group=1</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1520</x> <x>1272</x>
<y>1790</y> <y>1432</y>
<w>110</w> <w>88</w>
<h>40</h> <h>32</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
fontsize=10 fontsize=10
m1=0..* 0..n
group=1</panel_attributes> group=1</panel_attributes>
<additional_attributes>90.0;20.0;10.0;20.0</additional_attributes> <additional_attributes>90.0;20.0;10.0;20.0</additional_attributes>
...@@ -51,10 +51,10 @@ group=1</panel_attributes> ...@@ -51,10 +51,10 @@ group=1</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1520</x> <x>1272</x>
<y>1830</y> <y>1464</y>
<w>110</w> <w>88</w>
<h>30</h> <h>24</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;- <panel_attributes>lt=&lt;&lt;-
fontsize=10 fontsize=10
...@@ -64,10 +64,10 @@ group=1</panel_attributes> ...@@ -64,10 +64,10 @@ group=1</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1530</x> <x>1280</x>
<y>1230</y> <y>984</y>
<w>150</w> <w>120</w>
<h>220</h> <h>176</h>
</coordinates> </coordinates>
<panel_attributes>&lt;&lt;enumeration&gt;&gt; <panel_attributes>&lt;&lt;enumeration&gt;&gt;
BasicType BasicType
...@@ -88,10 +88,10 @@ void</panel_attributes> ...@@ -88,10 +88,10 @@ void</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>910</x> <x>784</x>
<y>1310</y> <y>1048</y>
<w>140</w> <w>112</w>
<h>80</h> <h>64</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;. <panel_attributes>lt=&lt;&lt;.
m1= 0..1 m1= 0..1
...@@ -101,10 +101,10 @@ fontsize=12</panel_attributes> ...@@ -101,10 +101,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>910</x> <x>784</x>
<y>1230</y> <y>984</y>
<w>140</w> <w>112</w>
<h>80</h> <h>64</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;. <panel_attributes>lt=&lt;&lt;.
m1=0..1 m1=0..1
...@@ -114,10 +114,10 @@ fontsize=12</panel_attributes> ...@@ -114,10 +114,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>430</x> <x>400</x>
<y>1230</y> <y>984</y>
<w>190</w> <w>152</w>
<h>150</h> <h>120</h>
</coordinates> </coordinates>
<panel_attributes>DataType <panel_attributes>DataType
-- --
...@@ -134,10 +134,10 @@ fg=blue</panel_attributes> ...@@ -134,10 +134,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>610</x> <x>544</x>
<y>1180</y> <y>944</y>
<w>680</w> <w>544</w>
<h>120</h> <h>96</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;. <panel_attributes>lt=&lt;&lt;.
m2=1..n m2=1..n
...@@ -147,10 +147,10 @@ fontsize=12</panel_attributes> ...@@ -147,10 +147,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>610</x> <x>544</x>
<y>1180</y> <y>944</y>
<w>680</w> <w>544</w>
<h>180</h> <h>144</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;. <panel_attributes>lt=&lt;&lt;.
m2=1 m2=1
...@@ -160,10 +160,10 @@ fontsize=12</panel_attributes> ...@@ -160,10 +160,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1030</x> <x>880</x>
<y>1350</y> <y>1080</y>
<w>190</w> <w>152</w>
<h>50</h> <h>40</h>
</coordinates> </coordinates>
<panel_attributes>SimpleType <panel_attributes>SimpleType
-- --
...@@ -174,10 +174,10 @@ fg=blue</panel_attributes> ...@@ -174,10 +174,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1210</x> <x>1024</x>
<y>1380</y> <y>1104</y>
<w>340</w> <w>272</w>
<h>40</h> <h>32</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;- <panel_attributes>lt=&lt;&lt;-
m1= 1 m1= 1
...@@ -187,10 +187,10 @@ fontsize=12</panel_attributes> ...@@ -187,10 +187,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1030</x> <x>880</x>
<y>1470</y> <y>1176</y>
<w>190</w> <w>152</w>
<h>110</h> <h>88</h>
</coordinates> </coordinates>
<panel_attributes>Constraint <panel_attributes>Constraint
-- --
...@@ -205,10 +205,10 @@ fg=blue</panel_attributes> ...@@ -205,10 +205,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>610</x> <x>544</x>
<y>1330</y> <y>1064</y>
<w>440</w> <w>352</w>
<h>180</h> <h>144</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1=0..n m1=0..n
...@@ -218,10 +218,10 @@ fontsize=12</panel_attributes> ...@@ -218,10 +218,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1210</x> <x>1024</x>
<y>1440</y> <y>1152</y>
<w>420</w> <w>336</w>
<h>140</h> <h>112</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;- <panel_attributes>lt=&lt;&lt;-
m1=1 m1=1
...@@ -231,10 +231,10 @@ fontsize=12</panel_attributes> ...@@ -231,10 +231,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1030</x> <x>880</x>
<y>1230</y> <y>984</y>
<w>190</w> <w>152</w>
<h>50</h> <h>40</h>
</coordinates> </coordinates>
<panel_attributes>StructType <panel_attributes>StructType
-- --
...@@ -245,10 +245,10 @@ fg=blue</panel_attributes> ...@@ -245,10 +245,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1030</x> <x>880</x>
<y>1290</y> <y>1032</y>
<w>190</w> <w>152</w>
<h>50</h> <h>40</h>
</coordinates> </coordinates>
<panel_attributes>ArrayType <panel_attributes>ArrayType
-- --
...@@ -259,10 +259,10 @@ fg=blue</panel_attributes> ...@@ -259,10 +259,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>910</x> <x>784</x>
<y>1280</y> <y>1024</y>
<w>140</w> <w>112</w>
<h>50</h> <h>40</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;. <panel_attributes>lt=&lt;&lt;.
m1= 0..1 m1= 0..1
...@@ -273,10 +273,10 @@ fontsize=12 ...@@ -273,10 +273,10 @@ fontsize=12
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>430</x> <x>400</x>
<y>1090</y> <y>872</y>
<w>1250</w> <w>1000</w>
<h>40</h> <h>32</h>
</coordinates> </coordinates>
<panel_attributes>halign=center <panel_attributes>halign=center
SDT 4.0 - DataType SDT 4.0 - DataType
...@@ -288,10 +288,10 @@ lw=0.1</panel_attributes> ...@@ -288,10 +288,10 @@ lw=0.1</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>70</x> <x>112</x>
<y>0</y> <y>0</y>
<w>1610</w> <w>1288</w>
<h>40</h> <h>32</h>
</coordinates> </coordinates>
<panel_attributes>SDT 4.0 - Basic Elements <panel_attributes>SDT 4.0 - Basic Elements
halign=center halign=center
...@@ -303,10 +303,10 @@ lw=0.1</panel_attributes> ...@@ -303,10 +303,10 @@ lw=0.1</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>780</x> <x>680</x>
<y>130</y> <y>104</y>
<w>240</w> <w>192</w>
<h>180</h> <h>144</h>
</coordinates> </coordinates>
<panel_attributes>ModuleClass <panel_attributes>ModuleClass
-- --
...@@ -326,10 +326,10 @@ fg=blue ...@@ -326,10 +326,10 @@ fg=blue
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1130</x> <x>960</x>
<y>130</y> <y>104</y>
<w>220</w> <w>176</w>
<h>130</h> <h>104</h>
</coordinates> </coordinates>
<panel_attributes>Action <panel_attributes>Action
-- --
...@@ -345,10 +345,10 @@ fg=blue</panel_attributes> ...@@ -345,10 +345,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1470</x> <x>1232</x>
<y>220</y> <y>176</y>
<w>210</w> <w>168</w>
<h>130</h> <h>104</h>
</coordinates> </coordinates>
<panel_attributes>Arg <panel_attributes>Arg
-- --
...@@ -364,10 +364,10 @@ fg=blue</panel_attributes> ...@@ -364,10 +364,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1340</x> <x>1128</x>
<y>220</y> <y>176</y>
<w>150</w> <w>120</w>
<h>40</h> <h>32</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1= 0..n m1= 0..n
...@@ -377,10 +377,10 @@ fontsize=12</panel_attributes> ...@@ -377,10 +377,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>90</x> <x>128</x>
<y>130</y> <y>104</y>
<w>230</w> <w>184</w>
<h>160</h> <h>128</h>
</coordinates> </coordinates>
<panel_attributes>Domain <panel_attributes>Domain
-- --
...@@ -398,10 +398,10 @@ fg=blue</panel_attributes> ...@@ -398,10 +398,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>630</x> <x>560</x>
<y>130</y> <y>104</y>
<w>170</w> <w>136</w>
<h>80</h> <h>64</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1=0..n m1=0..n
...@@ -411,10 +411,10 @@ fontsize=12</panel_attributes> ...@@ -411,10 +411,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>420</x> <x>392</x>
<y>440</y> <y>352</y>
<w>220</w> <w>176</w>
<h>110</h> <h>88</h>
</coordinates> </coordinates>
<panel_attributes>SubDevice <panel_attributes>SubDevice
-- --
...@@ -429,10 +429,10 @@ fg=blue</panel_attributes> ...@@ -429,10 +429,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>630</x> <x>560</x>
<y>250</y> <y>200</y>
<w>70</w> <w>56</w>
<h>90</h> <h>72</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1=0..n m1=0..n
...@@ -442,10 +442,10 @@ fontsize=12</panel_attributes> ...@@ -442,10 +442,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>630</x> <x>560</x>
<y>320</y> <y>256</y>
<w>170</w> <w>136</w>
<h>190</h> <h>152</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1= 0..n m1= 0..n
...@@ -455,10 +455,10 @@ fontsize=12</panel_attributes> ...@@ -455,10 +455,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1470</x> <x>1232</x>
<y>500</y> <y>400</y>
<w>210</w> <w>168</w>
<h>50</h> <h>40</h>
</coordinates> </coordinates>
<panel_attributes>Doc <panel_attributes>Doc
-- --
...@@ -468,10 +468,10 @@ fg=blue</panel_attributes> ...@@ -468,10 +468,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1010</x> <x>864</x>
<y>130</y> <y>104</y>
<w>140</w> <w>112</w>
<h>70</h> <h>56</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1= 0..n m1= 0..n
...@@ -481,10 +481,10 @@ fontsize=12</panel_attributes> ...@@ -481,10 +481,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1410</x> <x>1184</x>
<y>500</y> <y>400</y>
<w>80</w> <w>64</w>
<h>40</h> <h>32</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1=0..1 m1=0..1
...@@ -494,10 +494,10 @@ fontsize=12</panel_attributes> ...@@ -494,10 +494,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1010</x> <x>864</x>
<y>190</y> <y>152</y>
<w>140</w> <w>112</w>
<h>120</h> <h>96</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1= 0..n m1= 0..n
...@@ -507,10 +507,10 @@ fontsize=12</panel_attributes> ...@@ -507,10 +507,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1130</x> <x>960</x>
<y>270</y> <y>216</y>
<w>220</w> <w>176</w>
<h>180</h> <h>144</h>
</coordinates> </coordinates>
<panel_attributes>DataPoint <panel_attributes>DataPoint
-- --
...@@ -531,10 +531,10 @@ fg=blue ...@@ -531,10 +531,10 @@ fg=blue
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1130</x> <x>960</x>
<y>460</y> <y>368</y>
<w>220</w> <w>176</w>
<h>110</h> <h>88</h>
</coordinates> </coordinates>
<panel_attributes>Event <panel_attributes>Event
-- --
...@@ -549,10 +549,10 @@ fg=blue</panel_attributes> ...@@ -549,10 +549,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1010</x> <x>864</x>
<y>290</y> <y>232</y>
<w>140</w> <w>112</w>
<h>210</h> <h>168</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1= 0..n m1= 0..n
...@@ -562,10 +562,10 @@ fontsize=12</panel_attributes> ...@@ -562,10 +562,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>630</x> <x>560</x>
<y>130</y> <y>104</y>
<w>170</w> <w>136</w>
<h>420</h> <h>336</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
...@@ -575,10 +575,10 @@ fontsize=12</panel_attributes> ...@@ -575,10 +575,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>420</x> <x>392</x>
<y>300</y> <y>240</y>
<w>220</w> <w>176</w>
<h>130</h> <h>104</h>
</coordinates> </coordinates>
<panel_attributes>DeviceClass <panel_attributes>DeviceClass
-- --
...@@ -594,10 +594,10 @@ fg=blue</panel_attributes> ...@@ -594,10 +594,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>630</x> <x>560</x>
<y>400</y> <y>320</y>
<w>80</w> <w>64</w>
<h>80</h> <h>64</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1=0..n m1=0..n
...@@ -607,10 +607,10 @@ fontsize=12</panel_attributes> ...@@ -607,10 +607,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>630</x> <x>560</x>
<y>130</y> <y>104</y>
<w>170</w> <w>136</w>
<h>280</h> <h>224</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
fontsize=12</panel_attributes> fontsize=12</panel_attributes>
...@@ -619,10 +619,10 @@ fontsize=12</panel_attributes> ...@@ -619,10 +619,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>630</x> <x>560</x>
<y>320</y> <y>256</y>
<w>170</w> <w>136</w>
<h>70</h> <h>56</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;.</panel_attributes> <panel_attributes>lt=&lt;.</panel_attributes>
<additional_attributes>150.0;10.0;80.0;10.0;80.0;50.0;10.0;50.0</additional_attributes> <additional_attributes>150.0;10.0;80.0;10.0;80.0;50.0;10.0;50.0</additional_attributes>
...@@ -630,10 +630,10 @@ fontsize=12</panel_attributes> ...@@ -630,10 +630,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>780</x> <x>680</x>
<y>320</y> <y>256</y>
<w>240</w> <w>192</w>
<h>130</h> <h>104</h>
</coordinates> </coordinates>
<panel_attributes>Property <panel_attributes>Property
-- --
...@@ -650,10 +650,10 @@ transparency=80</panel_attributes> ...@@ -650,10 +650,10 @@ transparency=80</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1340</x> <x>1128</x>
<y>130</y> <y>104</y>
<w>70</w> <w>56</w>
<h>400</h> <h>320</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1=0..n m1=0..n
...@@ -663,10 +663,10 @@ fontsize=12</panel_attributes> ...@@ -663,10 +663,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1010</x> <x>864</x>
<y>290</y> <y>232</y>
<w>70</w> <w>56</w>
<h>70</h> <h>56</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1=0..n m1=0..n
...@@ -676,10 +676,10 @@ fontsize=12</panel_attributes> ...@@ -676,10 +676,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>730</x> <x>640</x>
<y>1240</y> <y>992</y>
<w>190</w> <w>152</w>
<h>110</h> <h>88</h>
</coordinates> </coordinates>
<panel_attributes>&lt;&lt;enumeration&gt;&gt; <panel_attributes>&lt;&lt;enumeration&gt;&gt;
TypeChoice TypeChoice
...@@ -695,10 +695,10 @@ Enum : EnumType ...@@ -695,10 +695,10 @@ Enum : EnumType
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>610</x> <x>544</x>
<y>1250</y> <y>1000</y>
<w>140</w> <w>112</w>
<h>80</h> <h>64</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;- <panel_attributes>lt=&lt;&lt;-
m1= 1 m1= 1
...@@ -708,10 +708,10 @@ fontsize=12</panel_attributes> ...@@ -708,10 +708,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>630</x> <x>560</x>
<y>210</y> <y>168</y>
<w>170</w> <w>136</w>
<h>140</h> <h>112</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
fontsize=12</panel_attributes> fontsize=12</panel_attributes>
...@@ -720,10 +720,10 @@ fontsize=12</panel_attributes> ...@@ -720,10 +720,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>310</x> <x>304</x>
<y>90</y> <y>72</y>
<w>490</w> <w>392</w>
<h>110</h> <h>88</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
</panel_attributes> </panel_attributes>
...@@ -732,10 +732,10 @@ fontsize=12</panel_attributes> ...@@ -732,10 +732,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>630</x> <x>560</x>
<y>230</y> <y>184</y>
<w>80</w> <w>64</w>
<h>240</h> <h>192</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
...@@ -745,10 +745,10 @@ fontsize=12</panel_attributes> ...@@ -745,10 +745,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1030</x> <x>880</x>
<y>1410</y> <y>1128</y>
<w>190</w> <w>152</w>
<h>50</h> <h>40</h>
</coordinates> </coordinates>
<panel_attributes>EnumType <panel_attributes>EnumType
-- --
...@@ -759,10 +759,10 @@ fg=blue</panel_attributes> ...@@ -759,10 +759,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>910</x> <x>784</x>
<y>1320</y> <y>1056</y>
<w>140</w> <w>112</w>
<h>130</h> <h>104</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;. <panel_attributes>lt=&lt;&lt;.
m1=0..1 m1=0..1
...@@ -772,10 +772,10 @@ fontsize=12</panel_attributes> ...@@ -772,10 +772,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1280</x> <x>1080</x>
<y>1430</y> <y>1144</y>
<w>210</w> <w>168</w>
<h>110</h> <h>88</h>
</coordinates> </coordinates>
<panel_attributes>EnumValue <panel_attributes>EnumValue
-- --
...@@ -790,10 +790,10 @@ fg=blue</panel_attributes> ...@@ -790,10 +790,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1210</x> <x>1024</x>
<y>1430</y> <y>1144</y>
<w>90</w> <w>72</w>
<h>40</h> <h>32</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;. <panel_attributes>lt=&lt;&lt;.
m1=1..n m1=1..n
...@@ -803,10 +803,10 @@ fontsize=12</panel_attributes> ...@@ -803,10 +803,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1480</x> <x>1240</x>
<y>1440</y> <y>1152</y>
<w>110</w> <w>88</w>
<h>80</h> <h>64</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;- <panel_attributes>lt=&lt;&lt;-
m1=0..1 m1=0..1
...@@ -816,10 +816,10 @@ fontsize=12</panel_attributes> ...@@ -816,10 +816,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>490</x> <x>448</x>
<y>780</y> <y>624</y>
<w>220</w> <w>176</w>
<h>80</h> <h>64</h>
</coordinates> </coordinates>
<panel_attributes>Extend <panel_attributes>Extend
-- --
...@@ -833,10 +833,10 @@ fg=blue ...@@ -833,10 +833,10 @@ fg=blue
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1110</x> <x>944</x>
<y>780</y> <y>624</y>
<w>240</w> <w>192</w>
<h>70</h> <h>56</h>
</coordinates> </coordinates>
<panel_attributes>Exclude <panel_attributes>Exclude
-- --
...@@ -848,10 +848,10 @@ fg=blue</panel_attributes> ...@@ -848,10 +848,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1020</x> <x>872</x>
<y>780</y> <y>624</y>
<w>110</w> <w>88</w>
<h>70</h> <h>56</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1= 1..n m1= 1..n
...@@ -862,10 +862,10 @@ fontsize=12 ...@@ -862,10 +862,10 @@ fontsize=12
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>430</x> <x>400</x>
<y>780</y> <y>624</y>
<w>80</w> <w>64</w>
<h>40</h> <h>32</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1=0..1 m1=0..1
...@@ -875,10 +875,10 @@ fontsize=12</panel_attributes> ...@@ -875,10 +875,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1460</x> <x>1224</x>
<y>780</y> <y>624</y>
<w>220</w> <w>176</w>
<h>160</h> <h>128</h>
</coordinates> </coordinates>
<panel_attributes>&lt;&lt;enumeration&gt;&gt; <panel_attributes>&lt;&lt;enumeration&gt;&gt;
ExtendType ExtendType
...@@ -896,10 +896,10 @@ subdevice ...@@ -896,10 +896,10 @@ subdevice
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1340</x> <x>1128</x>
<y>780</y> <y>624</y>
<w>140</w> <w>112</w>
<h>70</h> <h>56</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;- <panel_attributes>lt=&lt;&lt;-
m1=0..1 m1=0..1
...@@ -909,10 +909,10 @@ fontsize=12</panel_attributes> ...@@ -909,10 +909,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>1110</x> <x>944</x>
<y>860</y> <y>688</y>
<w>240</w> <w>192</w>
<h>70</h> <h>56</h>
</coordinates> </coordinates>
<panel_attributes>Include <panel_attributes>Include
-- --
...@@ -924,10 +924,10 @@ fg=blue</panel_attributes> ...@@ -924,10 +924,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1020</x> <x>872</x>
<y>840</y> <y>672</y>
<w>110</w> <w>88</w>
<h>60</h> <h>48</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1= 1..n m1= 1..n
...@@ -938,10 +938,10 @@ fontsize=12 ...@@ -938,10 +938,10 @@ fontsize=12
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1340</x> <x>1128</x>
<y>780</y> <y>624</y>
<w>140</w> <w>112</w>
<h>150</h> <h>120</h>
</coordinates> </coordinates>
<panel_attributes>lt=- <panel_attributes>lt=-
...@@ -951,10 +951,10 @@ fontsize=12</panel_attributes> ...@@ -951,10 +951,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>810</x> <x>704</x>
<y>780</y> <y>624</y>
<w>220</w> <w>176</w>
<h>80</h> <h>64</h>
</coordinates> </coordinates>
<panel_attributes>&lt;&lt;enumeration&gt;&gt; <panel_attributes>&lt;&lt;enumeration&gt;&gt;
ExtendChoice ExtendChoice
...@@ -969,10 +969,10 @@ Includes : Include ...@@ -969,10 +969,10 @@ Includes : Include
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>700</x> <x>616</x>
<y>790</y> <y>632</y>
<w>130</w> <w>104</w>
<h>70</h> <h>56</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;- <panel_attributes>lt=&lt;&lt;-
m1=0..1 m1=0..1
...@@ -983,10 +983,10 @@ fontsize=12 ...@@ -983,10 +983,10 @@ fontsize=12
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>420</x> <x>392</x>
<y>130</y> <y>104</y>
<w>220</w> <w>176</w>
<h>160</h> <h>128</h>
</coordinates> </coordinates>
<panel_attributes>ProductClass <panel_attributes>ProductClass
-- --
...@@ -1004,10 +1004,10 @@ fg=blue</panel_attributes> ...@@ -1004,10 +1004,10 @@ fg=blue</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>310</x> <x>304</x>
<y>270</y> <y>216</y>
<w>130</w> <w>104</w>
<h>70</h> <h>56</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1=0..n m1=0..n
...@@ -1017,10 +1017,10 @@ fontsize=12</panel_attributes> ...@@ -1017,10 +1017,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>310</x> <x>304</x>
<y>130</y> <y>104</y>
<w>130</w> <w>104</w>
<h>130</h> <h>104</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
m1=0..n m1=0..n
...@@ -1030,10 +1030,10 @@ fontsize=12</panel_attributes> ...@@ -1030,10 +1030,10 @@ fontsize=12</panel_attributes>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>430</x> <x>400</x>
<y>670</y> <y>536</y>
<w>1250</w> <w>1000</w>
<h>40</h> <h>32</h>
</coordinates> </coordinates>
<panel_attributes>halign=center <panel_attributes>halign=center
SDT 4.0 - Extend SDT 4.0 - Extend
......
# UML Diagram of the SDT 4.0 # UML Diagram of the SDT 4.0
The source for the diagrams below is [here](SDT_UML.uxf). The source for the diagrams below can be found [here (SDT_UML.uxf)](SDT_UML.uxf).
## Key
![](images/SDT_UML_Key.png)
## Basic Elements ## Basic Elements
![](images/SDT_UML_Basic_Elements.png) ![](images/SDT_UML_Basic_Elements.png)
...@@ -9,6 +14,6 @@ The source for the diagrams below is [here](SDT_UML.uxf). ...@@ -9,6 +14,6 @@ The source for the diagrams below is [here](SDT_UML.uxf).
![](images/SDT_UML_DataType.png) ![](images/SDT_UML_DataType.png)
## Key ## Extend
![](images/SDT_UML_Key.png) ![](images/SDT_UML_Extend.png)
SDT/schema4.0/docs/images/Action.png

4.93 KiB | W: | H:

SDT/schema4.0/docs/images/Action.png

5.98 KiB | W: | H:

SDT/schema4.0/docs/images/Action.png
SDT/schema4.0/docs/images/Action.png
SDT/schema4.0/docs/images/Action.png
SDT/schema4.0/docs/images/Action.png
  • 2-up
  • Swipe
  • Onion skin
SDT/schema4.0/docs/images/Arg.png

3.13 KiB | W: | H:

SDT/schema4.0/docs/images/Arg.png

6.05 KiB | W: | H:

SDT/schema4.0/docs/images/Arg.png
SDT/schema4.0/docs/images/Arg.png
SDT/schema4.0/docs/images/Arg.png
SDT/schema4.0/docs/images/Arg.png
  • 2-up
  • Swipe
  • Onion skin
SDT/schema4.0/docs/images/Array.png

1.53 KiB | W: | H:

SDT/schema4.0/docs/images/Array.png

1.6 KiB | W: | H:

SDT/schema4.0/docs/images/Array.png
SDT/schema4.0/docs/images/Array.png
SDT/schema4.0/docs/images/Array.png
SDT/schema4.0/docs/images/Array.png
  • 2-up
  • Swipe
  • Onion skin
SDT/schema4.0/docs/images/BasicType.png

5.07 KiB

SDT/schema4.0/docs/images/Constraint.png

4.44 KiB | W: | H:

SDT/schema4.0/docs/images/Constraint.png

5.36 KiB | W: | H:

SDT/schema4.0/docs/images/Constraint.png
SDT/schema4.0/docs/images/Constraint.png
SDT/schema4.0/docs/images/Constraint.png
SDT/schema4.0/docs/images/Constraint.png
  • 2-up
  • Swipe
  • Onion skin
SDT/schema4.0/docs/images/DataPoint.png

6.48 KiB | W: | H:

SDT/schema4.0/docs/images/DataPoint.png

8.02 KiB | W: | H:

SDT/schema4.0/docs/images/DataPoint.png
SDT/schema4.0/docs/images/DataPoint.png
SDT/schema4.0/docs/images/DataPoint.png
SDT/schema4.0/docs/images/DataPoint.png
  • 2-up
  • Swipe
  • Onion skin
SDT/schema4.0/docs/images/DataType.png

5.43 KiB | W: | H:

SDT/schema4.0/docs/images/DataType.png

7.02 KiB | W: | H:

SDT/schema4.0/docs/images/DataType.png
SDT/schema4.0/docs/images/DataType.png
SDT/schema4.0/docs/images/DataType.png
SDT/schema4.0/docs/images/DataType.png
  • 2-up
  • Swipe
  • Onion skin
SDT/schema4.0/docs/images/Device.png

4.81 KiB

SDT/schema4.0/docs/images/DeviceClass.png

6.76 KiB

SDT/schema4.0/docs/images/Domain.png

4.5 KiB | W: | H:

SDT/schema4.0/docs/images/Domain.png

7.25 KiB | W: | H:

SDT/schema4.0/docs/images/Domain.png
SDT/schema4.0/docs/images/Domain.png
SDT/schema4.0/docs/images/Domain.png
SDT/schema4.0/docs/images/Domain.png
  • 2-up
  • Swipe
  • Onion skin
SDT/schema4.0/docs/images/Enum.png

2.08 KiB

SDT/schema4.0/docs/images/EnumValue.png

5.7 KiB

SDT/schema4.0/docs/images/Event.png

4.25 KiB | W: | H:

SDT/schema4.0/docs/images/Event.png

5.19 KiB | W: | H:

SDT/schema4.0/docs/images/Event.png
SDT/schema4.0/docs/images/Event.png
SDT/schema4.0/docs/images/Event.png
SDT/schema4.0/docs/images/Event.png
  • 2-up
  • Swipe
  • Onion skin
SDT/schema4.0/docs/images/Extend.png

3.81 KiB

SDT/schema4.0/docs/images/ModuleClass.png

8.34 KiB | W: | H:

SDT/schema4.0/docs/images/ModuleClass.png

8.19 KiB | W: | H:

SDT/schema4.0/docs/images/ModuleClass.png
SDT/schema4.0/docs/images/ModuleClass.png
SDT/schema4.0/docs/images/ModuleClass.png
SDT/schema4.0/docs/images/ModuleClass.png
  • 2-up
  • Swipe
  • Onion skin
SDT/schema4.0/docs/images/Product.png

10.9 KiB | W: | H:

SDT/schema4.0/docs/images/Product.png

7.78 KiB | W: | H:

SDT/schema4.0/docs/images/Product.png
SDT/schema4.0/docs/images/Product.png
SDT/schema4.0/docs/images/Product.png
SDT/schema4.0/docs/images/Product.png
  • 2-up
  • Swipe
  • Onion skin
SDT/schema4.0/docs/images/Property.png

5.71 KiB | W: | H:

SDT/schema4.0/docs/images/Property.png

6.78 KiB | W: | H:

SDT/schema4.0/docs/images/Property.png
SDT/schema4.0/docs/images/Property.png
SDT/schema4.0/docs/images/Property.png
SDT/schema4.0/docs/images/Property.png
  • 2-up
  • Swipe
  • Onion skin
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment