PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Jemand schonmal mit XSD gearbeitet?


Gast
2008-08-17, 21:59:00
Hallo,

also ich würde gerne in XML-Dokument nach seiner Struktur validieren. Dafür sind XML-Schemata ja bestens geeignet und auch vorgesehen.

Ich habe hier einen komplexen Typen, welcher Kindelemente dreier Arten enthält:


<xsd:complexType name="MatchTyp">
<xsd:sequence>
<xsd:element name="eins" type="einsTyp" />
<xsd:element name="zwei" type="zweiTyp" />
<xsd:element name="drei" type="dreiTyp" minOccurs="3" maxOccurs="3" />
</xsd:sequence>
</xsd:complexType>


"sequence" sorgt ja dafür, dass die Kindelemente genau in der angegebenen Reihenfolge vorhanden sein müssen. Das dritte Element drei soll außerdem genau 3 mal auftreten. Soweit, so gut.

Jetzt habe ich aber festgestellt, dass das Kindelement zwei manchmal vor Kindelement eins auftritt, ergo gibts beim Validieren einen Fehler ("eins statt zwei erwartet"). Normalerweise kann man statt "sequence" ja "all" verwenden, dann spielt die Reihenfolge keine Rolle mehr. Leider kann ich mit "all" beim dritten Kindelement nichtmehr max- und minOccurs festlegen, denn jedes Element darf bei all vorkommen wo es will, aber nur einmal 8und keine 3 mal, wie gewollt).

Wie könnte man da vorgehen?

Danke

rad05
2008-08-18, 09:43:58
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="MatchTyp">
<xs:sequence>
<xs:element name="eins" type="einsTyp" />
<xs:choice>
<xs:sequence>
<xs:element name="zwei" type="zweiTyp" />
<xs:element minOccurs="3" maxOccurs="3" name="drei" type="dreiTyp" />
</xs:sequence>
<xs:sequence>
<xs:element minOccurs="3" maxOccurs="3" name="drei" type="dreiTyp" />
<xs:element name="zwei" type="zweiTyp" />
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="einsTyp" />
<xs:complexType name="zweiTyp" />
<xs:complexType name="dreiTyp" />
</xs:schema>