XML-Validierung: Wozu? / xs:group

xs:group

xs:group

➪ Eine weitere Design-Alternative liegt in den XML-Schema-Gruppierungen. Mit xs:group name werden Gruppen von Elementen global definiert, die sich an anderer Stelle durch xs:group ref wieder einbinden lassen.


<?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:NCName">
      <xs:maxLength value="20"/>
      <xs:minLength value="2"/>
      <xs:pattern value="[A-Z][a-z,ä,ö,ü]*"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="name" type="stringmax20"/>
  <xs:element name="Vorname" type="stringmax20"/>
  <xs:element name="Anrede">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="Herr"/>
        <xs:enumeration value="Frau"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="Alter" 
              type="xs:nonNegativeInteger"/>
  <xs:group name="grpPerson">
    <xs:sequence>
      <xs:element ref="Vorname" 
                  maxOccurs="unbounded"/>
      <xs:element ref="name"/>
      <xs:element ref="Anrede"/>
      <xs:element ref="Alter"/>
    </xs:sequence>
  </xs:group>
  <xs:group name="grpOrt">
    <xs:sequence>
      <xs:element ref="name"/>
      <xs:element name="Person" 
                  maxOccurs="unbounded">
        <xs:complexType>
          <xs:group ref="grpPerson"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="Orte">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Ort" 
                    maxOccurs="unbounded">
          <xs:complexType>
            <xs:group ref="grpOrt"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

pic/xsd4.png

Dieses Beispiel scheint nahezulegen, dass xs:group eine Alternative zum global definierten xs:complexType ist. Sie können sie dafür verwenden, aber es gibt noch einen anderen Einsatzzweck. xs:group erlaubt, Elementgruppen global zu deklarieren, die nach Bedarf verwendet werden können.


<xs:schema 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  elementFormDefault="qualified">
  <xs:element name="root">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:group 
            ref="grp_1" 
            minOccurs="1" 
            maxOccurs="unbounded"/>
        <xs:group 
            ref="grp_2" 
            minOccurs="1" 
            maxOccurs="unbounded"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:group name="grp_1">
    <xs:sequence>
      <xs:element name="A" type="xs:string"/>
      <xs:element name="B" type="xs:string"/>
      <xs:element name="C" type="xs:string"/>
    </xs:sequence>
  </xs:group>
  <xs:group name="grp_2">
    <xs:sequence>
      <xs:element name="X" type="xs:string"/>
      <xs:element name="Y" type="xs:string"/>
      <xs:element name="Z" type="xs:string"/>
    </xs:sequence>
  </xs:group>
</xs:schema>

pic/XSD_group.jpg

Auf diese Weise ist es möglich, etwa folgenden XML-Baum zu definieren:


<root>
    <X>X0</X>
    <Y>Y0</Y>
    <Z>Z0</Z>
    <X>X1</X>
    <Y>Y1</Y>
    <Z>Z1</Z>
    <A>a1</A>
    <B>b1</B>
    <C>c1</C>
    <X>X0</X>
    <Y>Y0</Y>
    <Z>Z0</Z>
    <A>a2</A>
    <B>b2</B>
    <C>c2</C>
    <X>X1</X>
    <Y>Y1</Y>
    <Z>Z1</Z>
</root>

wg / 27. Juni 2018



Fragen? Anmerkungen? Tips?

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