Gern stehe ich zur fachlichen Unterstützung in XML-Technologien, C#.NET, VisualBasic.NET und Java zur Verfügung. Sprechen Sie mich einfach an: Mail oder ☎ 0151 . 750 360 61


Warum XML-Validierung? / xs:element ref

xs:element ref

xs:element ref

xs:element ref erlaubt, XML-Elemente über Referenzierungen in die komplexen Typen einzubinden, die an anderer Stelle durch xs:element name definiert sind.


<?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:element name="Person">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Name"/>
        <xs:element ref="Vorname" 
                    maxOccurs="unbounded"/>
        <xs:element ref="Alter" 
                    minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Name" 
              type="stringmax20"/>
  <xs:element name="Vorname" 
              type="stringmax20"/>
  <xs:element name="Alter" 
              type="xs:nonNegativeInteger"/>
  <xs:element name="Persons">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Person" 
              maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

pic/xsd3.png

Nachteil Sämtliche XML-Elemente befinden sich auf globaler Ebene. Die Beziehungen jedes XML-Elements zu seinen -, -, -, - Nodes ist ohne speziellen Editor eventuell schwer erkennbar.
Vorteil Bei wiederholtem Auftreten derselben Elemente in verschiedenen Verzweigungen (z.B. rekursiver Elementdeklaration) können Mehrfachdeklarationen vermieden werden.
Vorteil Die Arbeit mit globalen Elementen erleichtert Validierungen von XML-Elementen bzw. Attributen, die sich im Hierarchiebaum auf nachgeordneter Ebene befinden.

So gilt das oben dargestellte XML-Schema beispielsweise sowohl für dieses XML-Dokument, das ein Root-Element Persons mit mehreren Childnodes Person definiert:


<Persons>
    <Person>
        <Name>Rielos</Name>
        <Vorname>Lotte</Vorname>
    </Person>
    <Person>
        <Name>Wunschlos</Name>
        <Vorname>Wilma</Vorname>
        <Vorname>Wanja</Vorname>
    </Person>
</Persons>

... als auch für ein einzelnes XML-Dokument, das lediglich ein einziges Root-Element Person umfasst:


<Person>
    <Name>Lassmichlos</Name>
    <Vorname>Liane</Vorname>
</Person>

... oder auch nur:


<Name>Kolos</Name>

Damit bieten die globalen Elementreferenzierungen eine erhöhte Flexibilität, die nicht das Vorhandensein eines einzelnen, gesamten XML-Baums erzwingt, sondern auch die Validierung von XML-Fragmenten zulässt. Das macht sie auch für die XML-Schema-Validierung während der XSL-Transformation interessant, wie sie in XSLT 2.0 über möglich und sinnvoll sind.

Für den Einsteiger in XML-Schema kann diese Bedeutungsvielfalt jedoch eher zur Verwirrung als zur Klarheit beitragen, da das Root-Element nicht immer klar definiert ist und der Überblick über die zulässige Gesamtstruktur leicht verloren geht.

wg / 10. April 2019



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.




xs:group



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_4.html