XML-Schema / xs:element name
![]() |
![]() |
➪ xs:element name definiert den Namen eines XML-Elements. Der interne Aufbau, eventuelle Datentypen, Attribute und Childnodes können an verschiedenen Stellen präzisiert werden.
Siehe auch:
xs:element/@name kann in XML-Schema 1.0 unterschiedliche Strukturen aufweisen:
Ein Beispiel für eine solche Möglichkeit, auch topLevelElemente lokal abweichend zu deklarieren, finden Sie hier:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:sequence>
<xs:element
name="Vorname"
type="xs:string"/>
<xs:element
name="Beruf"
type="xs:string"/>
</xs:sequence>
</xs:choice>
</xs:sequence>
<xs:attribute
name="Nachname" type="xs:string"/>
<xs:attribute
name="Alter"
type="xs:nonNegativeInteger"
use="required"/>
<xs:attribute
name="Verheiratet"
type="xs:boolean"
use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Personen">
<xs:complexType>
<xs:choice minOccurs="0"
maxOccurs="unbounded">
<xs:element ref="Person"
minOccurs="0"
maxOccurs="unbounded"/>
<xs:sequence>
<xs:element name="Ort"
minOccurs="0"
maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Person"
minOccurs="0"
maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element
name="Firstname"
type="xs:string"/>
<xs:element
name="Job"
type="xs:string"/>
</xs:sequence>
<xs:attribute
name="Lastname"
type="xs:string"/>
<xs:attribute name="Age"
type="xs:nonNegativeInteger"
use="required"/>
<xs:attribute name="Married"
type="xs:boolean"
use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="ortname"/>
<xs:attribute name="PLZ"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
Das folgende XML-Dokument wäre valide gegenüber dem o.a. XML-Schema:
<Personen>
<Person Alter="22"
Nachname="Ratlos"
Verheiratet="true">
<Vorname>Rudi</Vorname>
<Beruf>Lebensberater</Beruf>
</Person>
<Ort ortname="Kapstadt" PLZ="09876">
<Person Lastname="Traumschlos"
Age="50" Married="false">
<Firstname>Theo</Firstname>
<Nebenjob>Schlosser</Nebenjob>
</Person>
</Ort>
</Personen>
Es gibt verschiedene Design-Alternativen für XML-Schema. Die einfachste dürfte das der "russischen Puppe" sein:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="Persons">
<xs:complexType>
<xs:sequence>
<xs:element name="Person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Lastname">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
<xs:pattern value="[A-Z][a-z]{1,19}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Firstname"
maxOccurs="unbounded">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
<xs:pattern value="[A-Z][a-z]{1,19}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="Age"
type="xs:nonNegativeInteger" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Dieses XML-Schema definiert beispielsweise die Struktur für das folgende XML-Dokument.
<?xml version="1.0" encoding="UTF-8"?>
<Persons>
<Person Age="50">
<Lastname>Aa</Lastname>
<Firstname>Aa</Firstname>
<Firstname>Aa</Firstname>
</Person>
</Persons>
Vorteil | Für jedes XML-Element ist die Beziehung zu seinen parent-, ancestor-, child-, descendant- Nodes auch ohne speziellen Editor klar erkennbar. |
Nachteil | Bei wiederholtem Auftreten derselben Elemente in verschiedenen Verzweigungen sind Mehrfachdeklarationen unausweichlich. Das Design eignet sich nicht bei rekursiver Elementdeklaration. |
Kommt ein targetNamespace ins Spiel, so hängt das XML-Beispieldokument von elementFormDefault, attributeFormDefault ab.
<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:schema>
In diesem Fall (elementFormDefault="qualified", attributeFormDefault="unqualified") sieht das XML-Beispieldokument so aus:
<Persons xmlns="https://www.wilfried-grupe.de">
<Person Age="50">
<Lastname>Aa</Lastname>
<Firstname>Aa</Firstname>
</Person>
</Persons>
oder auch:
<wg:Persons
xmlns:wg="https://www.wilfried-grupe.de">
<wg:Person Age="50">
<wg:Lastname>Aa</wg:Lastname>
<wg:Firstname>Aa</wg:Firstname>
</wg:Person>
</wg:Persons>
Im Fall (elementFormDefault="unqualified", attributeFormDefault="unqualified") sieht das XML-Beispieldokument dagegen so aus:
<wg:Persons xmlns:wg="https://www.wilfried-grupe.de">
<Person Age="50">
<Lastname>Aa</Lastname>
<Firstname>Aa</Firstname>
</Person>
</wg:Persons>
oder mit DefaultNamespace:
<Persons xmlns="https://www.wilfried-grupe.de">
<Person xmlns="" Age="50">
<Lastname xmlns="">Aa</Lastname>
<Firstname xmlns="">Aa</Firstname>
</Person>
</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