Hi,
ich muss in XML ein Regelwerk bestehende aus Bedingungen (Conditions) und auszulösenden Aktionen (Actions) abbilden. Dabei bestehe eine Regel (Rule) immer aus genau 1 Condition und 1 Action. Natürlich sollen auch komplexe Bedingungen möglichsein, was zu kombinierten Bedingungen (CombinedCondition) führt.
Das Problem liegt gerade darin, diese CombinedConditions in XSD abzubilden:
Wenn ich hier jetzt eine CombinedCondition definieren würde, müssten alle anderen Definitionen von Bedinungen ja wieder als Sub-Elemente definiert werden und eben auch wieder CombinedConditions. Problem wird klar?
Das XSD File würde unendlich lang werden
Wie kann ich das elegant erledigen?
Grüße
serow
ich muss in XML ein Regelwerk bestehende aus Bedingungen (Conditions) und auszulösenden Aktionen (Actions) abbilden. Dabei bestehe eine Regel (Rule) immer aus genau 1 Condition und 1 Action. Natürlich sollen auch komplexe Bedingungen möglichsein, was zu kombinierten Bedingungen (CombinedCondition) führt.
Das Problem liegt gerade darin, diese CombinedConditions in XSD abzubilden:
Code:
<xs:element name="automation" minOccurs="1" maxOccurs="1" >
<xs:complexType>
<xs:sequence>
<xs:element name="rule" minOccurs="0" maxOccurs="unbounded" >
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="1" maxOccurs="1" >
<xs:element name="contact" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence />
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="device" type="xs:string" use="required" />
<xs:attribute name="state" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="time" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence />
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="hour" type="xs:integer" use="required" />
<xs:attribute name="minute" type="xs:integer" use="required" />
<xs:attribute name="mode" use="required" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="BEFORE|AFTER"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<!-- TODO: many more condition types go here -->
</xs:choice>
<xs:choice minOccurs="1" maxOccurs="1" >
<xs:element name="switch" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence />
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="device" type="xs:string" use="required" />
<xs:attribute name="state" type="xs:boolean" use="required" />
</xs:complexType>
</xs:element>
<!-- TODO: many more actions types go here -->
</xs:choice>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
Wenn ich hier jetzt eine CombinedCondition definieren würde, müssten alle anderen Definitionen von Bedinungen ja wieder als Sub-Elemente definiert werden und eben auch wieder CombinedConditions. Problem wird klar?


Grüße
serow