XML | XML-Schema | XPath | XSL-T | XSL-FO | XQuery | XProc | SVG |
XML-Schema / xs:complexType
![]() |
![]() |
➪ xs:complexType name erlaubt, mehrere Attribute und/oder Childnodes an globaler Stelle zu deklarieren, wodurch die "type"-Deklaration von xs:element auf diesen definierten xs:complexType verweisen kann.
Siehe auch:
xs:complexType kann in XML-Schema 1.0 unterschiedliche Strukturen aufweisen:
In diesem XML-Schema werden Typen, die im vorhergehenden Beispiel lokal definiert wurden, global deklariert. Beginnend mit simplen Datentypen wie stringmax, wo der Basistyp xs:string über Patterns und minLength bzw. maxLength auf eine Stringlänge von mindestens zwei und maximal 20 Stellen begrenzt wird, wobei das erste Zeichen aus der Zeichenmenge großer Zahlen A bis Z und alle weiteren Zeichen aus der Zeichenmenge a bis z stammen müssen.
Ergänzend werden Complex-Types deklariert, die intern Elementsequenzen, Attribute, Choices oder anderen Anordnungen bilden. Bei der Typdefinition der einzelnen Elemente bzw. Attribute werden die anderen xs:simple- oder complexTypes herangezogen. Im Idealfall wird nur das Root-Element global definiert; die restlichen Abhängigkeiten ergeben sich aus dem gegenseitigen Aufbau der Complex- und Simple-Types.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:simpleType name="stringmax20">
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
<xs:pattern value="[A-Z][a-z]{1,19}"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="CTPerson">
<xs:sequence>
<xs:element name="Name" type="stringmax20"/>
<xs:element name="Vorname"
type="stringmax20"
maxOccurs="unbounded"/>
<xs:element name="Alter"
type="xs:nonNegativeInteger"
minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Persons">
<xs:complexType>
<xs:sequence>
<xs:element name="Person"
type="CTPerson"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Vorteil | Im Idealfall existiert hier nur ein einziges xs:element als Root-Element. Die gesamte Baumstruktur wird in complexTypes definiert. Bei wiederholtem Auftreten derselben Elemente in verschiedenen Verzweigungen (z.B. rekursiver Elementdeklaration) können Mehrfachdeklarationen vermieden werden. |
Nachteil | Für XML-Elemente tieferer Ordnung ist die Beziehung zu seinen parent-, ancestor-, child-, descendant- Nodes ohne speziellen Editor eventuell schwer erkennbar. |
Ohne targetNamespace sieht das XML-Beispieldokument so aus:
<Persons>
<Person Age="50">
<Name>Aa</Name>
<Vorname>Aa</Vorname>
</Person>
</Persons>
Kommt allerdings ein targetNamespace hinzu, dann ändert sich das XML-Schema.
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wg="https://www.wilfried-grupe.de"
targetNamespace="https://www.wilfried-grupe.de"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:simpleType name="stringmax20">
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
<xs:pattern value="[A-Z][a-z]{1,19}"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="CTPerson">
<xs:sequence>
<xs:element name="Name" type="wg:stringmax20"/>
<xs:element name="Vorname"
type="wg:stringmax20"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="Age"
type="xs:nonNegativeInteger" use="required"/>
</xs:complexType>
<xs:element name="Persons">
<xs:complexType>
<xs:sequence>
<xs:element name="Person"
type="wg:CTPerson"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Im Fall (elementFormDefault="qualified", attributeFormDefault="qualified") finden Sie beispielsweise diesen Aufbau:
<wg:Persons xmlns:wg="https://www.wilfried-grupe.de">
<wg:Person wg:Age="50">
<wg:Name>Aa</wg:Name>
<wg:Vorname>Aa</wg:Vorname>
</wg:Person>
</wg:Persons>
Im Fall (elementFormDefault="unqualified", attributeFormDefault="unqualified") finden Sie dagegen vielleicht diesen Aufbau:
<wg:Persons xmlns:wg="https://www.wilfried-grupe.de">
<Person Age="50">
<Name>Aa</Name>
<Vorname>Aa</Vorname>
</Person>
</wg:Persons>
wg / 21. November 2020
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de