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

Add support for exlcude elements. Test case for extends.

parent f5e6b480
No related branches found
No related tags found
No related merge requests found
...@@ -18,7 +18,7 @@ Domain = ...@@ -18,7 +18,7 @@ Domain =
ModuleClasses?, ModuleClasses?,
element DeviceClasses { element DeviceClasses {
element DeviceClass { element DeviceClass {
attribute id { xsd:Name }, attribute id { xsd:NCName },
DocDef, DocDef,
PropertiesDef?, PropertiesDef?,
ModuleClasses?, ModuleClasses?,
...@@ -107,10 +107,7 @@ ModuleClasses = ...@@ -107,10 +107,7 @@ ModuleClasses =
element ModuleClass { element ModuleClass {
attribute name { text }, attribute name { text },
attribute optional { xsd:boolean }?, attribute optional { xsd:boolean }?,
element extends { ExtendsDef?,
attribute domain { xsd:IDREF },
attribute class { text }
}?,
DocDef, DocDef,
PropertiesDef?, PropertiesDef?,
Actions?, Actions?,
...@@ -157,3 +154,20 @@ Events = ...@@ -157,3 +154,20 @@ Events =
Data? 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
}
}+
}?
}
...@@ -229,6 +229,7 @@ ...@@ -229,6 +229,7 @@
</element> </element>
</define> </define>
<define name="DocText"> <define name="DocText">
<zeroOrMore> <zeroOrMore>
<choice> <choice>
...@@ -285,12 +286,7 @@ ...@@ -285,12 +286,7 @@
</attribute> </attribute>
</optional> </optional>
<optional> <optional>
<element name="extends"> <ref name="ExtendsDef" />
<attribute name="domain">
<data type="IDREF"/>
</attribute>
<attribute name="class"/>
</element>
</optional> </optional>
<ref name="DocDef"/> <ref name="DocDef"/>
<optional> <optional>
...@@ -405,5 +401,29 @@ ...@@ -405,5 +401,29 @@
</element> </element>
</define> </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> </grammar>
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
<xs:element minOccurs="0" ref="ModuleClasses"/> <xs:element minOccurs="0" ref="ModuleClasses"/>
<xs:element minOccurs="0" ref="SubDevices"/> <xs:element minOccurs="0" ref="SubDevices"/>
</xs:sequence> </xs:sequence>
<xs:attribute name="id" use="required" type="xs:Name"/> <xs:attribute name="id" use="required" type="xs:NCName"/>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="SubDevices"> <xs:element name="SubDevices">
...@@ -240,12 +240,6 @@ ...@@ -240,12 +240,6 @@
<xs:attribute name="optional" type="xs:boolean"/> <xs:attribute name="optional" type="xs:boolean"/>
</xs:complexType> </xs:complexType>
</xs:element> </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:element name="Actions">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
...@@ -317,4 +311,26 @@ ...@@ -317,4 +311,26 @@
<xs:attribute name="optional" type="xs:boolean"/> <xs:attribute name="optional" type="xs:boolean"/>
</xs:complexType> </xs:complexType>
</xs:element> </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> </xs:schema>
<?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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment