diff --git a/SDT/schema4.0/etc/domain.rnc b/SDT/schema4.0/etc/domain.rnc index fc43f18e933d4c75f045adad30caf89fabfdf881..948cf751ad71f83a5d28634928f7c63169d0b961 100644 --- a/SDT/schema4.0/etc/domain.rnc +++ b/SDT/schema4.0/etc/domain.rnc @@ -16,25 +16,9 @@ Domain = DocDef, element Imports { Domain+ }?, element DataTypes { DataTypeDef+ }?, - ModuleClasses?, - element DeviceClasses { - element DeviceClass { - attribute id { xsd:Name }, - attribute semanticURI { xsd:anyURI }?, - DocDef, - PropertiesDef?, - ModuleClasses?, - element SubDevices { - element SubDevice { - attribute id { xsd:Name }, - attribute semanticURI { xsd:anyURI }?, - DocDef, - PropertiesDef?, - ModuleClasses? - }+ - }? - }+ - }? + ModuleClassesDef?, + DeviceClassesDef?, + ProductsDef? } PropertiesDef = element Properties { @@ -53,7 +37,7 @@ DataTypeDef = attribute unitOfMeasure { text }?, attribute semanticURI { xsd:anyURI }?, DocDef, - (ExtendDef | (StructType | ArrayType | SimpleType | EnumType)), + (ExtendDef? | (StructType | ArrayType | SimpleType | EnumType)), ConstraintsDef? } StructType = element Struct { DataTypeDef+ } @@ -109,20 +93,54 @@ DocDef = element caption { text } })* }? -ModuleClasses = +DeviceClassesDef = + element DeviceClasses { + element DeviceClass { + attribute id { xsd:Name }, + attribute semanticURI { xsd:anyURI }?, + DocDef, + PropertiesDef?, + ModuleClassesDef?, + SubDevicesRef? + }+ + } +SubDevicesRef = + element SubDevices { + element SubDevice { + attribute id { xsd:Name }, + attribute semanticURI { xsd:anyURI }?, + DocDef, + PropertiesDef?, + ModuleClassesDef? + }+ + } +ModuleClassesDef = element ModuleClasses { element ModuleClass { attribute name { xsd:Name }, attribute optional { xsd:boolean }?, attribute semanticURI { xsd:anyURI }?, DocDef, - ExtendDef, + ExtendDef?, PropertiesDef?, Actions?, Data?, Events? }+ } +ProductsDef = + element Products { + element Product { + attribute id { xsd:Name }, + attribute semanticURI { xsd:anyURI }?, + DocDef, + PropertiesDef?, + ModuleClassesDef?, + SubDevicesRef?, + element DeviceClass { ExtendDef }, + ExtendDef? + }+ + } Actions = element Actions { element Action { @@ -181,7 +199,7 @@ ExtendDef = attribute name { xsd:Name }, attribute type { ExtendType } })? - }? + } ExtendType = "action" | "datapoint" diff --git a/SDT/schema4.0/src/domain.rng b/SDT/schema4.0/src/domain.rng index 22f363d9a1f8c00666edea01c381c3a0a35605cd..e8b3a98def1397e9a0d6ddd09b094fe041dd04c7 100644 --- a/SDT/schema4.0/src/domain.rng +++ b/SDT/schema4.0/src/domain.rng @@ -49,53 +49,13 @@ </element> </optional> <optional> - <ref name="ModuleClasses"/> + <ref name="ModuleClassesDef"/> </optional> <optional> - <element name="DeviceClasses"> - <oneOrMore> - <element name="DeviceClass"> - <attribute name="id"> - <data type="Name"/> - </attribute> - <optional> - <attribute name="semanticURI"> - <data type="anyURI"/> - </attribute> - </optional> - <ref name="DocDef"/> - <optional> - <ref name="PropertiesDef"/> - </optional> - <optional> - <ref name="ModuleClasses"/> - </optional> - <optional> - <element name="SubDevices"> - <oneOrMore> - <element name="SubDevice"> - <attribute name="id"> - <data type="Name"/> - </attribute> - <optional> - <attribute name="semanticURI"> - <data type="anyURI"/> - </attribute> - </optional> - <ref name="DocDef"/> - <optional> - <ref name="PropertiesDef"/> - </optional> - <optional> - <ref name="ModuleClasses"/> - </optional> - </element> - </oneOrMore> - </element> - </optional> - </element> - </oneOrMore> - </element> + <ref name="DeviceClassesDef" /> + </optional> + <optional> + <ref name="ProductsDef" /> </optional> </element> </define> @@ -150,7 +110,9 @@ </optional> <ref name="DocDef"/> <choice> - <ref name="ExtendDef" /> + <optional> + <ref name="ExtendDef" /> + </optional> <choice> <ref name="StructType" /> <ref name="ArrayType" /> @@ -312,7 +274,60 @@ </define> - <define name="ModuleClasses"> + <define name="DeviceClassesDef"> + <element name="DeviceClasses"> + <oneOrMore> + <element name="DeviceClass"> + <attribute name="id"> + <data type="Name"/> + </attribute> + <optional> + <attribute name="semanticURI"> + <data type="anyURI"/> + </attribute> + </optional> + <ref name="DocDef"/> + <optional> + <ref name="PropertiesDef"/> + </optional> + <optional> + <ref name="ModuleClassesDef"/> + </optional> + <optional> + <ref name="SubDevicesRef" /> + </optional> + </element> + </oneOrMore> + </element> + </define> + + + <define name="SubDevicesRef"> + <element name="SubDevices"> + <oneOrMore> + <element name="SubDevice"> + <attribute name="id"> + <data type="Name"/> + </attribute> + <optional> + <attribute name="semanticURI"> + <data type="anyURI"/> + </attribute> + </optional> + <ref name="DocDef"/> + <optional> + <ref name="PropertiesDef"/> + </optional> + <optional> + <ref name="ModuleClassesDef"/> + </optional> + </element> + </oneOrMore> + </element> + </define> + + + <define name="ModuleClassesDef"> <element name="ModuleClasses"> <oneOrMore> <element name="ModuleClass"> @@ -330,7 +345,9 @@ </attribute> </optional> <ref name="DocDef"/> - <ref name="ExtendDef" /> + <optional> + <ref name="ExtendDef" /> + </optional> <optional> <ref name="PropertiesDef"/> </optional> @@ -349,6 +366,40 @@ </define> + <define name="ProductsDef"> + <element name="Products"> + <oneOrMore> + <element name="Product"> + <attribute name="id"> + <data type="Name"/> + </attribute> + <optional> + <attribute name="semanticURI"> + <data type="anyURI"/> + </attribute> + </optional> + <ref name="DocDef"/> + <optional> + <ref name="PropertiesDef"/> + </optional> + <optional> + <ref name="ModuleClassesDef"/> + </optional> + <optional> + <ref name="SubDevicesRef" /> + </optional> + <element name="DeviceClass"> + <ref name="ExtendDef" /> + </element> + <optional> + <ref name="ExtendDef" /> + </optional> + </element> + </oneOrMore> + </element> + </define> + + <define name="Actions"> <element name="Actions"> <oneOrMore> @@ -482,7 +533,6 @@ <define name="ExtendDef"> - <optional> <element name="Extend"> <attribute name="domain"> <data type="Name"/> @@ -511,7 +561,6 @@ </choice> </optional> </element> - </optional> </define> diff --git a/SDT/schema4.0/src/domain.xsd b/SDT/schema4.0/src/domain.xsd index 2094a78750417011f5b9c44bd0b2f1fca68f5739..f0c20b3c92da5e3be0fcaaa6fa1fc536db8faadf 100644 --- a/SDT/schema4.0/src/domain.xsd +++ b/SDT/schema4.0/src/domain.xsd @@ -24,6 +24,7 @@ <xs:element minOccurs="0" ref="DataTypes"/> <xs:element minOccurs="0" ref="ModuleClasses"/> <xs:element minOccurs="0" ref="DeviceClasses"/> + <xs:element minOccurs="0" ref="Products"/> </xs:sequence> <xs:attribute ref="xml:base"/> <xs:attribute name="id" use="required" type="xs:Name"/> @@ -46,49 +47,6 @@ </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="DeviceClasses"> - <xs:complexType> - <xs:sequence> - <xs:element maxOccurs="unbounded" ref="DeviceClass"/> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="DeviceClass"> - <xs:complexType> - <xs:complexContent> - <xs:extension base="DocDef"> - <xs:sequence> - <xs:element minOccurs="0" ref="Properties"/> - <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="semanticURI" type="xs:anyURI"/> - </xs:extension> - </xs:complexContent> - </xs:complexType> - </xs:element> - <xs:element name="SubDevices"> - <xs:complexType> - <xs:sequence> - <xs:element maxOccurs="unbounded" ref="SubDevice"/> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="SubDevice"> - <xs:complexType> - <xs:complexContent> - <xs:extension base="DocDef"> - <xs:sequence> - <xs:element minOccurs="0" ref="Properties"/> - <xs:element minOccurs="0" ref="ModuleClasses"/> - </xs:sequence> - <xs:attribute name="id" use="required" type="xs:Name"/> - <xs:attribute name="semanticURI" type="xs:anyURI"/> - </xs:extension> - </xs:complexContent> - </xs:complexType> - </xs:element> <xs:element name="Properties"> <xs:complexType> <xs:sequence> @@ -117,7 +75,7 @@ <xs:extension base="DocDef"> <xs:sequence> <xs:choice> - <xs:group ref="ExtendDef"/> + <xs:element minOccurs="0" ref="Extend"/> <xs:choice> <xs:element ref="Struct"/> <xs:element ref="Array"/> @@ -250,6 +208,48 @@ </xs:complexType> </xs:element> <xs:element name="caption" type="xs:string"/> + <xs:element name="DeviceClasses"> + <xs:complexType> + <xs:sequence> + <xs:element maxOccurs="unbounded" name="DeviceClass"> + <xs:complexType> + <xs:complexContent> + <xs:extension base="DocDef"> + <xs:sequence> + <xs:element minOccurs="0" ref="Properties"/> + <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="semanticURI" type="xs:anyURI"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="SubDevices"> + <xs:complexType> + <xs:sequence> + <xs:element maxOccurs="unbounded" ref="SubDevice"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="SubDevice"> + <xs:complexType> + <xs:complexContent> + <xs:extension base="DocDef"> + <xs:sequence> + <xs:element minOccurs="0" ref="Properties"/> + <xs:element minOccurs="0" ref="ModuleClasses"/> + </xs:sequence> + <xs:attribute name="id" use="required" type="xs:Name"/> + <xs:attribute name="semanticURI" type="xs:anyURI"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> <xs:element name="ModuleClasses"> <xs:complexType> <xs:sequence> @@ -262,7 +262,7 @@ <xs:complexContent> <xs:extension base="DocDef"> <xs:sequence> - <xs:group ref="ExtendDef"/> + <xs:element minOccurs="0" ref="Extend"/> <xs:element minOccurs="0" ref="Properties"/> <xs:element minOccurs="0" ref="Actions"/> <xs:element minOccurs="0" ref="Data"/> @@ -275,6 +275,36 @@ </xs:complexContent> </xs:complexType> </xs:element> + <xs:element name="Products"> + <xs:complexType> + <xs:sequence> + <xs:element maxOccurs="unbounded" ref="Product"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="Product"> + <xs:complexType> + <xs:complexContent> + <xs:extension base="DocDef"> + <xs:sequence> + <xs:element minOccurs="0" ref="Properties"/> + <xs:element minOccurs="0" ref="ModuleClasses"/> + <xs:element minOccurs="0" ref="SubDevices"/> + <xs:element name="DeviceClass"> + <xs:complexType> + <xs:sequence> + <xs:element ref="Extend"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element minOccurs="0" ref="Extend"/> + </xs:sequence> + <xs:attribute name="id" use="required" type="xs:Name"/> + <xs:attribute name="semanticURI" type="xs:anyURI"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> <xs:element name="Actions"> <xs:complexType> <xs:sequence> @@ -365,11 +395,6 @@ </xs:complexContent> </xs:complexType> </xs:element> - <xs:group name="ExtendDef"> - <xs:sequence> - <xs:element minOccurs="0" ref="Extend"/> - </xs:sequence> - </xs:group> <xs:element name="Extend"> <xs:complexType> <xs:choice minOccurs="0"> diff --git a/SDT/schema4.0/test/deviceClass-test.xml b/SDT/schema4.0/test/deviceClass-test.xml index 3720e2a45bd0ea82829b4fb752c635bd60ca089a..acecbc8cd76b864f5eae6f45b640072fad6bdea0 100644 --- a/SDT/schema4.0/test/deviceClass-test.xml +++ b/SDT/schema4.0/test/deviceClass-test.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<Domain xmlns="http://homegatewayinitiative.org/xml/dal/4.0" xmlns:xi="http://www.w3.org/2001/XInclude" id="deviceClass-test" > +<Domain xmlns="http://homegatewayinitiative.org/xml/dal/4.0" xmlns:xi="http://www.w3.org/2001/XInclude" id="deviceClass.test" > <Imports> <xi:include href="./dal-core.xml" parse="xml"/> </Imports> diff --git a/SDT/schema4.0/test/product-test.xml b/SDT/schema4.0/test/product-test.xml new file mode 100644 index 0000000000000000000000000000000000000000..99250ad3a139c49600b2c31aecf5b7759ff2535d --- /dev/null +++ b/SDT/schema4.0/test/product-test.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<Domain xmlns="http://homegatewayinitiative.org/xml/dal/4.0" xmlns:xi="http://www.w3.org/2001/XInclude" id="deviceClass-test" > + <Products> + <Product id="TestProduct" semanticURI="http://example.com/TestProduct.rdf"> + <Doc>This is a test product</Doc> + <Properties> + <Property name="aProperty"> + <SimpleType type="string"></SimpleType> + </Property> + </Properties> + <ModuleClasses> + <ModuleClass name="aModuleClass"> + <Extend domain="hgi.dal.core" entity="BooleanState" /> + </ModuleClass> + </ModuleClasses> + <SubDevices> + <SubDevice id="aSubDevice"> + <ModuleClasses> + <ModuleClass name="aSubDeviceModuleClass"> + <Extend domain="hgi.dal.core" entity="BooleanState"/> + </ModuleClass> + </ModuleClasses> + </SubDevice> + </SubDevices> + <DeviceClass> + <Extend domain="deviceClass.test" entity="Test" /> + </DeviceClass> + </Product> + +<!-- TODO: test <extends> element, but only when DeviceClas is optional + <Product id="AnotherTestProduct"> + </Product> --> + </Products> +</Domain> \ No newline at end of file