From 65fd4ce746c4fc22ae78d29e09d010e0707c17ed Mon Sep 17 00:00:00 2001
From: ankraft <an.kraft@googlemail.com>
Date: Fri, 26 Apr 2019 15:52:34 +0200
Subject: [PATCH] Added new extend definition. Adapted test cases

---
 SDT/schema4.0/etc/domain.rnc               | 41 ++++++++--------
 SDT/schema4.0/src/domain.rng               | 56 +++++++++++++++-------
 SDT/schema4.0/src/domain.xsd               | 44 ++++++++++-------
 SDT/schema4.0/test/EchonetLiteExamples.xml |  8 ++--
 SDT/schema4.0/test/dal-eg.xml              |  2 +-
 SDT/schema4.0/test/datatypes-test.xml      |  2 +-
 SDT/schema4.0/test/deviceClass-test.xml    |  2 +-
 SDT/schema4.0/test/example2.SDT.xml        | 10 ++--
 SDT/schema4.0/test/example3.SDT.xml        | 12 ++---
 SDT/schema4.0/test/extends-test.xml        | 10 ++--
 SDT/schema4.0/test/mseeb.xml               |  6 +--
 SDT/schema4.0/test/semanticURI-test.xml    |  2 +-
 12 files changed, 115 insertions(+), 80 deletions(-)

diff --git a/SDT/schema4.0/etc/domain.rnc b/SDT/schema4.0/etc/domain.rnc
index f4f495c..9240b45 100644
--- a/SDT/schema4.0/etc/domain.rnc
+++ b/SDT/schema4.0/etc/domain.rnc
@@ -53,7 +53,7 @@ DataTypeDef =
     attribute unitOfMeasure { text }?,
     attribute semanticURI { xsd:anyURI }?,
     DocDef,
-    (ExtendsDef | (StructType | ArrayType | SimpleType | EnumType)),
+    (ExtendDef | (StructType | ArrayType | SimpleType | EnumType)),
     ConstraintsDef?
   }
 StructType = element Struct { DataTypeDef+ }
@@ -116,8 +116,7 @@ ModuleClasses =
       attribute optional { xsd:boolean }?,
       attribute semanticURI { xsd:anyURI }?,
       DocDef,
-      ExtendsDef,
-      # TODO: singular
+      ExtendDef,
       PropertiesDef?,
       Actions?,
       Data?,
@@ -168,21 +167,25 @@ Events =
       Data?
     }+
   }
-ExtendsDef =
-  # TODO: singular
-  element extends {
-    #  TODO: Uppercase , singular
+ExtendDef =
+  element Extend {
     attribute domain { xsd:Name },
-    attribute class { text },
-    element excludes {
-      #  TODO: Uppercase + "...s" -> Excludes
-      element exclude {
-        attribute name { text },
-        attribute type {
-          text
-          # TODO: add ExcludeTypes
-          
-        }
-      }+
-    }?
+    attribute entity { xsd:Name },
+    (element Exclude {
+       attribute name { xsd:Name },
+       attribute type { ExtendType }
+     }
+     | element Include {
+         attribute name { xsd:Name },
+         attribute type { ExtendType }
+       })?
   }?
+ExtendType =
+  "action"
+  | "datapoint"
+  | "event"
+  | "moduleclass"
+  | "product"
+  | "property"
+  | "device"
+  | "subdevice"
diff --git a/SDT/schema4.0/src/domain.rng b/SDT/schema4.0/src/domain.rng
index 4f121e9..f3746c3 100644
--- a/SDT/schema4.0/src/domain.rng
+++ b/SDT/schema4.0/src/domain.rng
@@ -150,7 +150,7 @@
 			</optional>
 			<ref name="DocDef"/>
 			<choice>
-				<ref name="ExtendsDef" />
+				<ref name="ExtendDef" />
 				<choice>
 					<ref name="StructType" />
 					<ref name="ArrayType" />
@@ -330,7 +330,7 @@
 						</attribute>
 					</optional>
 					<ref name="DocDef"/>
-					<ref name="ExtendsDef" /> <!-- TODO: singular -->
+					<ref name="ExtendDef" />
 					<optional>
 						<ref name="PropertiesDef"/>
 					</optional>
@@ -471,30 +471,52 @@
 	</define>
 
 
-	<define name="ExtendsDef"> <!-- TODO: singular -->
+	<define name="ExtendDef">
 		<optional>
-			<element name="extends"> <!-- TODO: Uppercase , singular-->
+			<element name="Extend">
 				<attribute name="domain">
 					<data type="Name"/>
 				</attribute>
-				<attribute name="class"/>
+				<attribute name="entity">
+					<data type="Name"/>
+				</attribute>
 				<optional>
-					<element name="excludes"> <!-- TODO: Uppercase + "...s" -> Excludes-->
-						<oneOrMore>
-							<element name="exclude">
-								<attribute name="name">
-									<text/>
-								</attribute>
-								<attribute name="type">
-									<text/> <!-- TODO: add ExcludeTypes -->
-								</attribute>
-							</element>
-						</oneOrMore>
-					</element>
+					<choice>
+						<element name="Exclude">
+							<attribute name="name">
+								<data type="Name"/>
+							</attribute>
+							<attribute name="type">
+								<ref name="ExtendType" />
+							</attribute>
+						</element>
+						<element name="Include">
+							<attribute name="name">
+								<data type="Name"/>
+							</attribute>
+							<attribute name="type">
+								<ref name="ExtendType" />
+							</attribute>
+						</element>
+					</choice>
 				</optional>
 			</element>
 		</optional>
 	</define>
 
+
+	<define name="ExtendType">
+		<choice>
+			<value>action</value>
+			<value>datapoint</value>
+			<value>event</value>
+			<value>moduleclass</value>
+			<value>product</value>
+			<value>property</value>
+			<value>device</value>
+			<value>subdevice</value>
+		</choice>
+	</define>
+
 </grammar>
 
diff --git a/SDT/schema4.0/src/domain.xsd b/SDT/schema4.0/src/domain.xsd
index 64c8448..6513965 100644
--- a/SDT/schema4.0/src/domain.xsd
+++ b/SDT/schema4.0/src/domain.xsd
@@ -117,7 +117,7 @@
         <xs:extension base="DocDef">
           <xs:sequence>
             <xs:choice>
-              <xs:group ref="ExtendsDef"/>
+              <xs:group ref="ExtendDef"/>
               <xs:choice>
                 <xs:element ref="Struct"/>
                 <xs:element ref="Array"/>
@@ -262,7 +262,7 @@
       <xs:complexContent>
         <xs:extension base="DocDef">
           <xs:sequence>
-            <xs:group ref="ExtendsDef"/>
+            <xs:group ref="ExtendDef"/>
             <xs:element minOccurs="0" ref="Properties"/>
             <xs:element minOccurs="0" ref="Actions"/>
             <xs:element minOccurs="0" ref="Data"/>
@@ -363,31 +363,43 @@
       </xs:complexContent>
     </xs:complexType>
   </xs:element>
-  <xs:group name="ExtendsDef">
+  <xs:group name="ExtendDef">
     <xs:sequence>
-      <xs:element minOccurs="0" ref="extends"/>
+      <xs:element minOccurs="0" ref="Extend"/>
     </xs:sequence>
   </xs:group>
-  <xs:element name="extends">
+  <xs:element name="Extend">
     <xs:complexType>
-      <xs:sequence>
-        <xs:element minOccurs="0" ref="excludes"/>
-      </xs:sequence>
+      <xs:choice minOccurs="0">
+        <xs:element ref="Exclude"/>
+        <xs:element ref="Include"/>
+      </xs:choice>
       <xs:attribute name="domain" use="required" type="xs:Name"/>
-      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="entity" use="required" type="xs:Name"/>
     </xs:complexType>
   </xs:element>
-  <xs:element name="excludes">
+  <xs:element name="Exclude">
     <xs:complexType>
-      <xs:sequence>
-        <xs:element maxOccurs="unbounded" ref="exclude"/>
-      </xs:sequence>
+      <xs:attribute name="name" use="required" type="xs:Name"/>
+      <xs:attribute name="type" use="required" type="ExtendType"/>
     </xs:complexType>
   </xs:element>
-  <xs:element name="exclude">
+  <xs:element name="Include">
     <xs:complexType>
-      <xs:attribute name="name" use="required"/>
-      <xs:attribute name="type" use="required"/>
+      <xs:attribute name="name" use="required" type="xs:Name"/>
+      <xs:attribute name="type" use="required" type="ExtendType"/>
     </xs:complexType>
   </xs:element>
+  <xs:simpleType name="ExtendType">
+    <xs:restriction base="xs:token">
+      <xs:enumeration value="action"/>
+      <xs:enumeration value="datapoint"/>
+      <xs:enumeration value="event"/>
+      <xs:enumeration value="moduleclass"/>
+      <xs:enumeration value="product"/>
+      <xs:enumeration value="property"/>
+      <xs:enumeration value="device"/>
+      <xs:enumeration value="subdevice"/>
+    </xs:restriction>
+  </xs:simpleType>
 </xs:schema>
diff --git a/SDT/schema4.0/test/EchonetLiteExamples.xml b/SDT/schema4.0/test/EchonetLiteExamples.xml
index 2cdc034..738a17a 100644
--- a/SDT/schema4.0/test/EchonetLiteExamples.xml
+++ b/SDT/schema4.0/test/EchonetLiteExamples.xml
@@ -83,15 +83,15 @@
 				<!-- Inheriting ModuleClasses from the global generic ModuleClasses -->
 
 				<ModuleClass name="installationLocation">
-					<extends domain="example.based.on.echonetLite" class="installationLocation"/>
+					<Extend domain="example.based.on.echonetLite" entity="installationLocation"/>
 				</ModuleClass>
 
 				<ModuleClass name="measuredInstantaneousPowerConsumption">
-					<extends domain="example.based.on.echonetLite" class="measuredInstantaneousPowerConsumption"/>
+					<Extend domain="example.based.on.echonetLite" entity="measuredInstantaneousPowerConsumption"/>
 				</ModuleClass>
 
 				<ModuleClass name="temperatureSensorDataPoints">
-					<extends domain="example.based.on.echonetLite" class="temperatureSensorDataPoints"/>
+					<Extend domain="example.based.on.echonetLite" entity="temperatureSensorDataPoints"/>
 				</ModuleClass>
 
 
@@ -99,7 +99,7 @@
 					 the change of name. -->
 
 				<ModuleClass name="washingMachineOperationStatus">
-					<extends domain="example.based.on.echonetLite" class="operationStatus"/>
+					<Extend domain="example.based.on.echonetLite" entity="operationStatus"/>
 
 					<!-- This Module extends the global one with an event. -->
 
diff --git a/SDT/schema4.0/test/dal-eg.xml b/SDT/schema4.0/test/dal-eg.xml
index f839729..5361e67 100644
--- a/SDT/schema4.0/test/dal-eg.xml
+++ b/SDT/schema4.0/test/dal-eg.xml
@@ -48,7 +48,7 @@
 					</Events>
 				</ModuleClass>
 				<ModuleClass name="power">
-					<extends class="BooleanState" domain="hgi.dal.core"/>
+					<Extend entity="BooleanState" domain="hgi.dal.core"/>
 				</ModuleClass>
 			</ModuleClasses>
 		</DeviceClass>
diff --git a/SDT/schema4.0/test/datatypes-test.xml b/SDT/schema4.0/test/datatypes-test.xml
index 340c31a..a4ff353 100644
--- a/SDT/schema4.0/test/datatypes-test.xml
+++ b/SDT/schema4.0/test/datatypes-test.xml
@@ -20,7 +20,7 @@
 			<Data>
 				<DataPoint name="TestDataPoint" writable="true">
 					<DataType>
-						<extends domain="datatypes-test" class="temperatureType" />
+						<Extend domain="datatypes-test" entity="temperatureType" />
 					</DataType>
 				</DataPoint>
 			</Data>
diff --git a/SDT/schema4.0/test/deviceClass-test.xml b/SDT/schema4.0/test/deviceClass-test.xml
index 0ce9beb..3720e2a 100644
--- a/SDT/schema4.0/test/deviceClass-test.xml
+++ b/SDT/schema4.0/test/deviceClass-test.xml
@@ -13,7 +13,7 @@
 			</Properties>
 			<ModuleClasses>
 				<ModuleClass name="aModuleClass">
-					<extends domain="hgi.dal.core" class="BooleanState"></extends>
+					<Extend domain="hgi.dal.core" entity="BooleanState" />
 				</ModuleClass>
 			</ModuleClasses>
 		</DeviceClass>
diff --git a/SDT/schema4.0/test/example2.SDT.xml b/SDT/schema4.0/test/example2.SDT.xml
index 1475640..ef4aacb 100644
--- a/SDT/schema4.0/test/example2.SDT.xml
+++ b/SDT/schema4.0/test/example2.SDT.xml
@@ -12,19 +12,19 @@
 		<DeviceClass id="airConditioner">
 			<ModuleClasses>
 				<ModuleClass name="operationStatus">
-					<extends domain="example1.SDT" class="operationStatus"/>
+					<Extend domain="example1.SDT" entity="operationStatus"/>
 				</ModuleClass>
 				<ModuleClass name="installationLocation">
-					<extends domain="example1.SDT" class="installationLocation"/>
+					<Extend domain="example1.SDT" entity="installationLocation"/>
 				</ModuleClass>
 				<ModuleClass name="measuredCumulativePowerConsumption">
-					<extends domain="example1.SDT" class="measuredCumulativePowerConsumption"/>
+					<Extend domain="example1.SDT" entity="measuredCumulativePowerConsumption"/>
 				</ModuleClass>
 				<ModuleClass name="measuredCumulativePowerConsumption">
-					<extends domain="example1.SDT" class="measuredCumulativePowerConsumption"/>
+					<Extend domain="example1.SDT" entity="measuredCumulativePowerConsumption"/>
 				</ModuleClass>
 				<ModuleClass name="onTimerSetting">
-					<extends domain="example1.SDT" class="onTimerSetting"/>
+					<Extend domain="example1.SDT" entity="onTimerSetting"/>
 				</ModuleClass>
 			</ModuleClasses>
 		</DeviceClass>
diff --git a/SDT/schema4.0/test/example3.SDT.xml b/SDT/schema4.0/test/example3.SDT.xml
index ef3f1a2..9cbb1c2 100644
--- a/SDT/schema4.0/test/example3.SDT.xml
+++ b/SDT/schema4.0/test/example3.SDT.xml
@@ -12,22 +12,22 @@
 		<DeviceClass id="waschingMachine">
 			<ModuleClasses>
 				<ModuleClass name="operationStatus">
-					<extends domain="example1.SDT" class="operationStatus"/>
+					<Extend domain="example1.SDT" entity="operationStatus"/>
 				</ModuleClass>
 				<ModuleClass name="installationLocation">
-					<extends domain="example1.SDT" class="installationLocation"/>
+					<Extend domain="example1.SDT" entity="installationLocation"/>
 				</ModuleClass>
 				<ModuleClass name="measuredCumulativePowerConsumption">
-					<extends domain="example1.SDT" class="measuredCumulativePowerConsumption"/>
+					<Extend domain="example1.SDT" entity="measuredCumulativePowerConsumption"/>
 				</ModuleClass>
 				<ModuleClass name="measuredCumulativePowerConsumption">
-					<extends domain="example1.SDT" class="measuredCumulativePowerConsumption"/>
+					<Extend domain="example1.SDT" entity="measuredCumulativePowerConsumption"/>
 				</ModuleClass>
 				<ModuleClass name="onTimerSetting">
-					<extends domain="example1.SDT" class="onTimerSetting"/>
+					<Extend domain="example1.SDT" entity="onTimerSetting"/>
 				</ModuleClass>
 				<ModuleClass name="statusDoor">
-					<extends domain="example1.SDT" class="statusDoor"/>
+					<Extend domain="example1.SDT" entity="statusDoor"/>
 				</ModuleClass>
 			</ModuleClasses>
 		</DeviceClass>
diff --git a/SDT/schema4.0/test/extends-test.xml b/SDT/schema4.0/test/extends-test.xml
index 2b28b70..db11236 100644
--- a/SDT/schema4.0/test/extends-test.xml
+++ b/SDT/schema4.0/test/extends-test.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
 <!-- Test the extends element -->
 
-<Domain id="extends-test" xmlns="http://homegatewayinitiative.org/xml/dal/4.0" xmlns:xi="http://www.w3.org/2001/XInclude">
+<Domain id="extend-test" xmlns="http://homegatewayinitiative.org/xml/dal/4.0" xmlns:xi="http://www.w3.org/2001/XInclude">
 	<ModuleClasses>
 		<ModuleClass name="TestExtendsParent">
 			<Data>
@@ -18,11 +18,9 @@
 			</Data>
 		</ModuleClass>
 		<ModuleClass name="TestExtendsChild">
-			<extends domain="extends-test" class="TestExtendsParent">
-				<excludes>
-					<exclude name="TestExtendsDataPoint2" type="datapoint" />
-				</excludes>
-			</extends>
+			<Extend domain="extend-test" entity="TestExtendsParent">
+				<Exclude name="TestExtendsDataPoint2" type="datapoint" />
+			</Extend>
 			<Data>
 				<DataPoint name="TestExtendsDataPoint3" writable="true">
 					<DataType>
diff --git a/SDT/schema4.0/test/mseeb.xml b/SDT/schema4.0/test/mseeb.xml
index 34500f3..b7b9438 100644
--- a/SDT/schema4.0/test/mseeb.xml
+++ b/SDT/schema4.0/test/mseeb.xml
@@ -159,7 +159,7 @@
                         The proprietry interface for turning all switches of the extension block on and off. 
                         The action "BooleanState:get" returns "true" when any of the sub-devices is in the state "on", otherwise it returns "false".
                     </Doc>
-                    <extends domain="hgi.dal.core" class="BooleanState"/>
+                    <Extend domain="hgi.dal.core" entity="BooleanState"/>
                     <Properties>
                         <Property name="version" value="1.0.0">
                             <Doc>Version for this ModuleClass</Doc>
@@ -265,7 +265,7 @@
                     </Properties>
                     <ModuleClasses>
                         <ModuleClass name="power">
-                            <extends domain="hgi.dal.core" class="BooleanState"/>
+                            <Extend domain="hgi.dal.core" entity="BooleanState"/>
                         </ModuleClass>
                     </ModuleClasses>
                 </SubDevice>
@@ -292,7 +292,7 @@
                     </Properties>
                     <ModuleClasses>
                         <ModuleClass name="power">
-                            <extends domain="hgi.dal.core" class="BooleanState"/>
+                            <Extend domain="hgi.dal.core" entity="BooleanState"/>
                         </ModuleClass>
                     </ModuleClasses>
                 </SubDevice>
diff --git a/SDT/schema4.0/test/semanticURI-test.xml b/SDT/schema4.0/test/semanticURI-test.xml
index 1d6d310..0b3259c 100644
--- a/SDT/schema4.0/test/semanticURI-test.xml
+++ b/SDT/schema4.0/test/semanticURI-test.xml
@@ -20,7 +20,7 @@
 			<Data>
 				<DataPoint name="TestDataPoint" writable="true" semanticURI="http://example.com/TestDataPoint.rdf">
 					<DataType>
-						<extends domain="datatypes-test" class="temperatureType" />
+						<Extend domain="datatypes-test" entity="temperatureType" />
 					</DataType>
 				</DataPoint>
 			</Data>
-- 
GitLab