XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT * DIVERSES



XML-Schema / xs:element name

xs:element name

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:

pic/xsd_element.svg

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 -, -, -, - 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 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.






Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/XSD3_1.html