diff --git a/SDT/schema4.0/etc/domain.rnc b/SDT/schema4.0/etc/domain.rnc index 4efe8813fe12a6a7aed462efdd08241eee53d322..eedce92f68935fb336fb4ecaf9d88d2d632a91b3 100644 --- a/SDT/schema4.0/etc/domain.rnc +++ b/SDT/schema4.0/etc/domain.rnc @@ -18,7 +18,7 @@ Domain = ModuleClasses?, element DeviceClasses { element DeviceClass { - attribute id { xsd:Name }, + attribute id { xsd:NCName }, DocDef, PropertiesDef?, ModuleClasses?, @@ -107,10 +107,7 @@ ModuleClasses = element ModuleClass { attribute name { text }, attribute optional { xsd:boolean }?, - element extends { - attribute domain { xsd:IDREF }, - attribute class { text } - }?, + ExtendsDef?, DocDef, PropertiesDef?, Actions?, @@ -157,3 +154,20 @@ Events = Data? }+ } +ExtendsDef = + element extends { + # TODO: Uppercase + attribute domain { xsd:IDREF }, + attribute class { text }, + element excludes { + # TODO: Uppercase + "...s" -> Excludes + element exclude { + attribute name { text }, + attribute type { + text + # TODO: add ExcludeTypes + + } + }+ + }? + } diff --git a/SDT/schema4.0/src/domain.rng b/SDT/schema4.0/src/domain.rng index fd4813f47131fd65f3e00573c5d8e662e95a774c..1989aef03563180ab553d6fe743052f39ebe6ab5 100644 --- a/SDT/schema4.0/src/domain.rng +++ b/SDT/schema4.0/src/domain.rng @@ -229,6 +229,7 @@ </element> </define> + <define name="DocText"> <zeroOrMore> <choice> @@ -285,12 +286,7 @@ </attribute> </optional> <optional> - <element name="extends"> - <attribute name="domain"> - <data type="IDREF"/> - </attribute> - <attribute name="class"/> - </element> + <ref name="ExtendsDef" /> </optional> <ref name="DocDef"/> <optional> @@ -405,5 +401,29 @@ </element> </define> + + <define name="ExtendsDef"> + <element name="extends"> <!-- TODO: Uppercase --> + <attribute name="domain"> + <data type="IDREF"/> + </attribute> + <attribute name="class"/> + <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> + </optional> + </element> + </define> + </grammar> diff --git a/SDT/schema4.0/src/domain.xsd b/SDT/schema4.0/src/domain.xsd index 8222d4b94a049dcf5bdf8209d7b7564066cca60f..4bca234a2aca8db21f988184039f10c37c0c6016 100644 --- a/SDT/schema4.0/src/domain.xsd +++ b/SDT/schema4.0/src/domain.xsd @@ -57,7 +57,7 @@ <xs:element minOccurs="0" ref="ModuleClasses"/> <xs:element minOccurs="0" ref="SubDevices"/> </xs:sequence> - <xs:attribute name="id" use="required" type="xs:Name"/> + <xs:attribute name="id" use="required" type="xs:NCName"/> </xs:complexType> </xs:element> <xs:element name="SubDevices"> @@ -240,12 +240,6 @@ <xs:attribute name="optional" type="xs:boolean"/> </xs:complexType> </xs:element> - <xs:element name="extends"> - <xs:complexType> - <xs:attribute name="domain" use="required" type="xs:IDREF"/> - <xs:attribute name="class" use="required"/> - </xs:complexType> - </xs:element> <xs:element name="Actions"> <xs:complexType> <xs:sequence> @@ -317,4 +311,26 @@ <xs:attribute name="optional" type="xs:boolean"/> </xs:complexType> </xs:element> + <xs:element name="extends"> + <xs:complexType> + <xs:sequence> + <xs:element minOccurs="0" ref="excludes"/> + </xs:sequence> + <xs:attribute name="domain" use="required" type="xs:IDREF"/> + <xs:attribute name="class" use="required"/> + </xs:complexType> + </xs:element> + <xs:element name="excludes"> + <xs:complexType> + <xs:sequence> + <xs:element maxOccurs="unbounded" ref="exclude"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="exclude"> + <xs:complexType> + <xs:attribute name="name" use="required"/> + <xs:attribute name="type" use="required"/> + </xs:complexType> + </xs:element> </xs:schema> diff --git a/SDT/schema4.0/test/extends-test.xml b/SDT/schema4.0/test/extends-test.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b28b70376c813f42b44b04f6057931c5de6b546 --- /dev/null +++ b/SDT/schema4.0/test/extends-test.xml @@ -0,0 +1,35 @@ +<?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"> + <ModuleClasses> + <ModuleClass name="TestExtendsParent"> + <Data> + <DataPoint name="TestExtendsDataPoint1" writable="true"> + <DataType> + <SimpleType type="integer" /> + </DataType> + </DataPoint> + <DataPoint name="TestExtendsDataPoint2" writable="true"> + <DataType> + <SimpleType type="integer" /> + </DataType> + </DataPoint> + </Data> + </ModuleClass> + <ModuleClass name="TestExtendsChild"> + <extends domain="extends-test" class="TestExtendsParent"> + <excludes> + <exclude name="TestExtendsDataPoint2" type="datapoint" /> + </excludes> + </extends> + <Data> + <DataPoint name="TestExtendsDataPoint3" writable="true"> + <DataType> + <SimpleType type="integer" /> + </DataType> + </DataPoint> + </Data> + </ModuleClass> + </ModuleClasses> +</Domain> \ No newline at end of file