Formulierung in XML-Schema

Yujun

Grünschnabel
Hallo,

kann jemand mir bei der Formulierung in XML-Schema helfen?



Ich möchte z.B. drei XML-Elemente in xsd:comlexType definieren und habe in XML-Schema folgendes formuliert:

<xs:complexType name="typeDef">

<xs:sequence>

<xs:element name="e1" type="xsd:string“ />

<xs:element name="e2" type="xsd:string“ />

<xs:element name="e3" type="xsd:string“ />

</xs:complexType>



Aber laut Definition von W3C (http://www.edition-w3c.de/TR/2001/REC-xmlschema-0-20010502/) müssen die drei Elemente e1, e2 und e3 in der XML-Datei auch in der Reihenfolge erscheinen, in der sie deklariert wurde. Z.B.:

<e1>Das erste Element</e1>

<e2>Das zweite Element</e1>

<e3>Das dritte Element</e1>



Wenn ich aber die Reihenfolge der Elemente nicht festlegen möchte, d.h. in der XML-Datei dürfen die drei Elemente in beliebiger Reihenfolge erscheinen, wie muss ich die Regel in XML-Schema formuliert?



Vielen Dank im voraus.
 
Hallo,

vielen Dank für die Hilfe. Mit <xs.all> löst das Problem mit der festen Reihenfolge. Aber alle Elemente unter <xs.all> dürfen leider nur einmal vorkommen. Ich habe leider vergessen zu sagen, dass alle Elemente (e1, e2, und e3) auch mehrfach vorkommen dürfen.

Schöne Grüße
 
Benutze für die Elemente, die Du keinmal bzw. öfters benutzbar vorschreiben möchtest die Attribute minOccurs="0" maxOccurs="unbounded"

Code:
 <xs:element name="e1" type="xsd:string“ minOccurs="0" maxOccurs="unbounded" />
 
Hi,

das ist leider ein Problem. Laut Definition dürfen minOccurs und maxOccurs für die Elemente in der Gruppe <xs:all> nur den Wert 0 oder 1 haben. d.h. maxOccurs > 1 ist in diesem Fall nicht erlaubt.

Schöne Grüße
 
Stimmt, dann muß man doch <xsd:sequence> nehmen auf minOccurs="0" und maxOccurs="unbounded" setzen, und jeweils alle Elemente darunter auf minOccurs="0".
Jetzt müßte es gehen.

Code:
	<xsd:element name="bla">
		<xsd:complexType>
			<xsd:sequence minOccurs="0" maxOccurs="unbounded">
				<xsd:element name="test0" type="xsd:string" minOccurs="0"/>
				<xsd:element name="test1" type="xsd:string" minOccurs="0"/>
				<xsd:element name="test2" type="xsd:string" minOccurs="0"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>

und das xml dazu:

Code:
	<bla>
		<test0>xxx</test0>
		<test0>xxx</test0>
		<test1>xxx</test1>
		<test0>xxx</test0>
		<test0>xxx</test0>
		<test1>xxx</test1>
		<test1>xxx</test1>
	</bla>

test0, test1 und test2 kommen in beliebiger Reihenfolge und Quantität vor; in diesem Beispiel test2 sogar garnicht. Beliebige Umstellungen möglich.
 
vielen herzlichen Dank. Das ist die Lösung. Auf die Idee <xsd:sequence minOccurs="0" maxOccurs="unbounded"> bin ich nicht dazu gekommen. Das ist der entscheidende Punkt.

Schöne Grüße
 
Zurück