Commit 678ffb68 authored by Yongjing Zhang's avatar Yongjing Zhang
Browse files

update the relationship between Product and DeviceClass

parent cb89e5e4
/.Introduction.md.html
/.SDT_Components.md.html
/.SDT_JSON.md.html
......@@ -154,11 +154,11 @@ An example for a compound device is a connected power-strip where each of the s
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*.
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.
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.
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.
A *Product* can be defined by inheriting from an existing *DeviceClass* (e.g. removing unimplemented optional *Properties* and *ModuleClasses*), extending from an existing *DeviceClass* (adding new *Properties* and *ModuleClasses*), or from scratch (without basing on any *DeviceClass*).
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*).
#### 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.
......@@ -171,22 +171,27 @@ All elements of *DeviceClass* can be reused in *Product*, but the *optional* att
- **[ModuleClasses](#ModuleClass)** : A list of *Module* components that are local to the *Product*. Optional.
- **[SubDevices](#SubDevice)** : A list of *SubDevice* components. Optional.
- **Extends** : Reference to a *DeviceClass* which is extended with this *Product*. Optional.
- **[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 extended *DeviceClass*. Required for this element.
- **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.
The element has the following attributes:
- **domain** : Identifier / Reference of the [Domain](#Domain) of the extended *Product*. Optional if in the same domain.
- **class** : *id* of the *Product* in the [Domain](#Domain) that is extended. Required for this element.
**Note**: New extended *Properties* and *ModuleClasses* **should** have different names from those in the inherited *DeviceClass*. In case the names conflict, the newly defined *Properties* and *ModuleClasses* shall override the inherited ones.
*Editor's Note: the description of the optionality of the datapoints, properties, actions, events in the inherited ModuleClass is FFS*
**Editor's Note**: the description of the optionality of the datapoints, properties, actions, events in the inherited ModuleClass is FFS.
#### XML Example
```
<Product id="myMseebProduct">
<Extends domain="org.exampleDomain" class="MSEEB.root">
<DeviceClass domain="org.exampleDomain" class="MSEEB.root">
<ImplementedPropertyies>
<Property name="name" value="product-abc"/>
<Property name="vendor" value="xyz"/>
......@@ -196,7 +201,7 @@ The element has the following child elements:
<MoudleClass name="rootPowerOnOff"/>
<MoudleClass name="power" />
</ImplementedModuleClasses>
</Extends>
</DeviceClass>
<Properties name="someNewProperty" value="someValue">
<Doc>...</Doc>
<SimpleType type="string" />
......@@ -220,7 +225,7 @@ The element has the following child elements:
{
"Product": {
"id": "myMseebProduct",
"Extends": {
"DeviceClass": {
"domain": "org.exampleDomain",
"class": "MSEEB.root",
"ImplementedProperties": [{
......@@ -310,7 +315,7 @@ Typical *ModuleClasses* might be equivalent to "power ON/OFF", "Open/Close", "Pa
#### Elements
- **[Doc](#Documentation)** : Documentation for the *Module* or *ModuleClass*. Optional.
- **extends** : Reference to a another *ModuleClass* or *Module* which is extended with this *ModuleClass*. Optional.
- **Extends** : Reference to a another *ModuleClass* or *Module* which is extended with this *ModuleClass*. Optional.
The element has the following attributes:
- **domain** : Identifier / Reference of the [Domain](#Domain) of the extended *ModuleClass*. Required for this element.
- **class** : Name of the *ModuleClass* in the [Domain](#Domain) that is extended. Required for this element.
......
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram program="umlet" version="14.2">
<help_text/>
<zoom_level>7</zoom_level>
<zoom_level>8</zoom_level>
<element>
<id>UMLNote</id>
<coordinates>
<x>938</x>
<y>532</y>
<w>217</w>
<h>182</h>
<x>1016</x>
<y>520</y>
<w>248</w>
<h>208</h>
</coordinates>
<panel_attributes>bg=#FAF8C8
fontsize=12
......@@ -35,10 +35,10 @@ Cardinalities:
<element>
<id>Relation</id>
<coordinates>
<x>1029</x>
<y>602</y>
<w>77</w>
<h>28</h>
<x>1120</x>
<y>600</y>
<w>88</w>
<h>32</h>
</coordinates>
<panel_attributes>lt=&lt;.
fontsize=10
......@@ -49,10 +49,10 @@ m1=0..*
<element>
<id>Relation</id>
<coordinates>
<x>1029</x>
<y>630</y>
<w>77</w>
<h>21</h>
<x>1120</x>
<y>632</y>
<w>88</w>
<h>24</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;-
fontsize=10</panel_attributes>
......@@ -61,10 +61,10 @@ fontsize=10</panel_attributes>
<element>
<id>UMLClass</id>
<coordinates>
<x>1099</x>
<y>854</y>
<w>105</w>
<h>154</h>
<x>1200</x>
<y>888</y>
<w>120</w>
<h>176</h>
</coordinates>
<panel_attributes>&lt;&lt;enumeration&gt;&gt;
BasicType
......@@ -85,10 +85,10 @@ uri</panel_attributes>
<element>
<id>Relation</id>
<coordinates>
<x>805</x>
<y>917</y>
<w>98</w>
<h>56</h>
<x>864</x>
<y>960</y>
<w>112</w>
<h>64</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;.
m1= 0,1
......@@ -98,10 +98,10 @@ m1= 0,1
<element>
<id>Relation</id>
<coordinates>
<x>805</x>
<y>861</y>
<w>98</w>
<h>56</h>
<x>864</x>
<y>896</y>
<w>112</w>
<h>64</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;.
m1= 0,1
......@@ -111,10 +111,10 @@ m1= 0,1
<element>
<id>UMLClass</id>
<coordinates>
<x>469</x>
<y>861</y>
<w>133</w>
<h>84</h>
<x>480</x>
<y>896</y>
<w>152</w>
<h>96</h>
</coordinates>
<panel_attributes>DataType
--
......@@ -129,10 +129,10 @@ fg=blue</panel_attributes>
<element>
<id>Relation</id>
<coordinates>
<x>574</x>
<y>819</y>
<w>490</w>
<h>91</h>
<x>600</x>
<y>848</y>
<w>560</w>
<h>104</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;.
m2=1..*
......@@ -142,10 +142,10 @@ m2=1..*
<element>
<id>Relation</id>
<coordinates>
<x>574</x>
<y>819</y>
<w>490</w>
<h>133</h>
<x>600</x>
<y>848</y>
<w>560</w>
<h>152</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;.
m2=1
......@@ -155,10 +155,10 @@ m2=1
<element>
<id>UMLClass</id>
<coordinates>
<x>889</x>
<y>945</y>
<w>133</w>
<h>35</h>
<x>960</x>
<y>992</y>
<w>152</w>
<h>40</h>
</coordinates>
<panel_attributes>SimpleType
--
......@@ -169,10 +169,10 @@ fg=blue</panel_attributes>
<element>
<id>Relation</id>
<coordinates>
<x>1015</x>
<y>959</y>
<w>98</w>
<h>35</h>
<x>1104</x>
<y>1008</y>
<w>112</w>
<h>40</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;-
m1= 1
......@@ -182,10 +182,10 @@ m1= 1
<element>
<id>UMLClass</id>
<coordinates>
<x>889</x>
<y>1001</y>
<w>133</w>
<h>70</h>
<x>960</x>
<y>1056</y>
<w>152</w>
<h>80</h>
</coordinates>
<panel_attributes>Constraint
--
......@@ -199,10 +199,10 @@ fg=blue</panel_attributes>
<element>
<id>Relation</id>
<coordinates>
<x>595</x>
<y>931</y>
<w>308</w>
<h>98</h>
<x>624</x>
<y>976</y>
<w>352</w>
<h>112</h>
</coordinates>
<panel_attributes>lt=&lt;.
m1=0..*
......@@ -212,10 +212,10 @@ m1=0..*
<element>
<id>Relation</id>
<coordinates>
<x>1015</x>
<y>1001</y>
<w>147</w>
<h>56</h>
<x>1104</x>
<y>1056</y>
<w>168</w>
<h>64</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;-
m1=1
......@@ -225,10 +225,10 @@ m1=1
<element>
<id>UMLClass</id>
<coordinates>
<x>889</x>
<y>861</y>
<w>133</w>
<h>35</h>
<x>960</x>
<y>896</y>
<w>152</w>
<h>40</h>
</coordinates>
<panel_attributes>StructType
--
......@@ -239,10 +239,10 @@ fg=blue</panel_attributes>
<element>
<id>UMLClass</id>
<coordinates>
<x>889</x>
<y>903</y>
<w>133</w>
<h>35</h>
<x>960</x>
<y>944</y>
<w>152</w>
<h>40</h>
</coordinates>
<panel_attributes>ArrayType
--
......@@ -253,10 +253,10 @@ fg=blue</panel_attributes>
<element>
<id>Relation</id>
<coordinates>
<x>805</x>
<y>896</y>
<w>98</w>
<h>35</h>
<x>864</x>
<y>936</y>
<w>112</w>
<h>40</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;.
m1= 0,1
......@@ -267,10 +267,10 @@ m1= 0,1
<element>
<id>UMLClass</id>
<coordinates>
<x>469</x>
<y>756</y>
<w>735</w>
<h>28</h>
<x>480</x>
<y>776</y>
<w>840</w>
<h>32</h>
</coordinates>
<panel_attributes>halign=center
SDT 4.0 - DataType
......@@ -282,10 +282,10 @@ lw=0.1</panel_attributes>
<element>
<id>UMLClass</id>
<coordinates>
<x>469</x>
<y>91</y>
<w>840</w>
<h>28</h>
<x>480</x>
<y>16</y>
<w>960</w>
<h>32</h>
</coordinates>
<panel_attributes>SDT 4.0 - Basic Elements
halign=center
......@@ -297,10 +297,10 @@ lw=0.1</panel_attributes>
<element>
<id>UMLClass</id>
<coordinates>
<x>707</x>
<y>210</y>
<w>154</w>
<h>133</h>
<x>752</x>
<y>152</y>
<w>176</w>
<h>152</h>
</coordinates>
<panel_attributes>ModuleClass
--
......@@ -321,10 +321,10 @@ fg=blue
<element>
<id>UMLClass</id>
<coordinates>
<x>945</x>
<y>210</y>
<w>154</w>
<h>77</h>
<x>1024</x>
<y>152</y>
<w>176</w>
<h>88</h>
</coordinates>
<panel_attributes>Action
--
......@@ -339,10 +339,10 @@ fg=blue</panel_attributes>
<element>
<id>UMLClass</id>
<coordinates>
<x>1190</x>
<y>273</y>
<w>119</w>
<h>56</h>
<x>1304</x>
<y>224</y>
<w>136</w>
<h>64</h>
</coordinates>
<panel_attributes>Arg
--
......@@ -355,10 +355,10 @@ fg=blue</panel_attributes>
<element>
<id>Relation</id>
<coordinates>
<x>1092</x>
<y>273</y>
<w>112</w>
<h>28</h>
<x>1192</x>
<y>224</y>
<w>128</w>
<h>32</h>
</coordinates>
<panel_attributes>lt=&lt;.
m1= 0..*</panel_attributes>
......@@ -367,10 +367,10 @@ m1= 0..*</panel_attributes>
<element>
<id>UMLClass</id>
<coordinates>
<x>469</x>
<y>210</y>
<w>154</w>
<h>77</h>
<x>480</x>
<y>152</y>
<w>176</w>
<h>88</h>
</coordinates>
<panel_attributes>Domain
--
......@@ -385,10 +385,10 @@ fg=blue</panel_attributes>
<element>
<id>Relation</id>
<coordinates>
<x>616</x>
<y>210</y>
<w>105</w>
<h>63</h>
<x>648</x>
<y>152</y>
<w>120</w>
<h>72</h>
</coordinates>
<panel_attributes>lt=&lt;.
m1= 0..*</panel_attributes>
......@@ -397,10 +397,10 @@ m1= 0..*</panel_attributes>
<element>
<id>UMLClass</id>
<coordinates>
<x>469</x>
<y>392</y>
<w>154</w>
<h>70</h>
<x>480</x>
<y>360</y>
<w>176</w>
<h>80</h>
</coordinates>
<panel_attributes>SubDevice
--
......@@ -414,10 +414,10 @@ fg=blue</panel_attributes>
<element>
<id>Relation</id>
<coordinates>
<x>616</x>
<y>266</y>
<w>49</w>
<h>63</h>
<x>648</x>
<y>216</y>
<w>56</w>
<h>72</h>
</coordinates>
<panel_attributes>lt=&lt;.
m1=0..*
......@@ -427,10 +427,10 @@ m1=0..*
<element>
<id>Relation</id>
<coordinates>
<x>616</x>
<y>399</y>
<w>105</w>
<h>49</h>
<x>648</x>
<y>368</y>
<w>120</w>
<h>56</h>
</coordinates>
<panel_attributes>lt=&lt;.
m1= 0..*</panel_attributes>
......@@ -439,10 +439,10 @@ m1= 0..*</panel_attributes>
<element>
<id>UMLClass</id>
<coordinates>
<x>1190</x>
<y>441</y>
<w>119</w>
<h>35</h>
<x>1304</x>
<y>416</y>
<w>136</w>
<h>40</h>
</coordinates>
<panel_attributes>Doc
--
......@@ -452,10 +452,10 @@ fg=blue</panel_attributes>
<element>
<id>Relation</id>
<coordinates>
<x>854</x>
<y>210</y>
<w>105</w>
<h>42</h>
<x>920</x>
<y>152</y>
<w>120</w>
<h>48</h>
</coordinates>
<panel_attributes>lt=&lt;.
m1= 0..*
......@@ -465,10 +465,10 @@ m1= 0..*
<element>
<id>Relation</id>
<coordinates>
<x>1134</x>
<y>434</y>
<w>70</w>
<h>35</h>
<x>1240</x>
<y>408</y>
<w>80</w>
<h>40</h>
</coordinates>
<panel_attributes>lt=&lt;.
m1=0,1
......@@ -478,10 +478,10 @@ m1=0,1
<element>
<id>Relation</id>
<coordinates>
<x>854</x>
<y>245</y>
<w>105</w>
<h>84</h>
<x>920</x>
<y>192</y>
<w>120</w>
<h>96</h>
</coordinates>
<panel_attributes>lt=&lt;.
m1= 0..*
......@@ -491,10 +491,10 @@ m1= 0..*
<element>
<id>UMLClass</id>
<coordinates>
<x>945</x>
<y>301</y>
<w>154</w>
<h>98</h>
<x>1024</x>
<y>256</y>
<w>176</w>
<h>112</h>
</coordinates>
<panel_attributes>DataPoint
--
......@@ -513,10 +513,10 @@ fg=blue
<element>
<id>UMLClass</id>
<coordinates>
<x>945</x>
<y>413</y>
<w>154</w>
<h>63</h>
<x>1024</x>
<y>384</y>
<w>176</w>
<h>72</h>
</coordinates>
<panel_attributes>Event
--
......@@ -531,10 +531,10 @@ fg=blue</panel_attributes>
<element>
<id>Relation</id>
<coordinates>
<x>854</x>
<y>315</y>
<w>105</w>
<h>126</h>
<x>920</x>
<y>272</y>
<w>120</w>
<h>144</h>
</coordinates>
<panel_attributes>lt=&lt;.
m1= 0..*
......@@ -544,10 +544,10 @@ m1= 0..*
<element>
<id>Relation</id>
<coordinates>
<x>616</x>
<y>315</y>
<w>105</w>
<h>147</h>
<x>648</x>
<y>272</y>
<w>120</w>
<h>168</h>
</coordinates>
<panel_attributes>lt=&lt;.
......@@ -557,10 +557,10 @@ m1= 0..*
<element>
<id>UMLClass</id>
<coordinates>
<x>469</x>
<y>301</y>
<w>154</w>
<h>77</h>
<x>480</x>
<y>256</y>
<w>176</w>
<h>88</h>
</coordinates>
<panel_attributes>DeviceClass
--
......@@ -575,10 +575,10 @@ fg=blue</panel_attributes>
<element>
<id>Relation</id>
<coordinates>
<x>616</x>
<y>364</y>
<w>42</w>
<h>56</h>
<x>648</x>
<y>328</y>
<w>48</w>
<h>64</h>
</coordinates>
<panel_attributes>lt=&lt;.
m1=0..*
......@@ -588,10 +588,10 @@ m1=0..*
<element>
<id>Relation</id>
<coordinates>
<x>616</x>
<y>315</y>
<w>105</w>
<h>42</h>
<x>648</x>
<