XML-Validierung: Wozu? / xs:simpleType

xs:simpleType

xs:simpleType

➪ Ähnlich wie bei der globalen Deklaration von xs:complexType können auch einfache Datentypen via xs:simpleType global deklariert und dann an anderer Stelle wiederholt eingesetzt werden.

Das Ziel des Type-Designs liegt in der Wiederverwendung bereits deklarierter Typen. Nicht selten wird eine Sammlung von etwa in eine Schemadatei simpleTypes.xsd gelegt, die in andere Schemadateien eingebunden wird.

Dann freilich wird ein exakter Umgang mit Namespaces erforderlich, wie folgendes Beispiel zeigt, das die erweiterte Beziehungsstruktur Laender - Land - Orte - Ort - Mensch darstellt und in mehrere Schemata zerteilt:


<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  elementFormDefault="unqualified" 
  attributeFormDefault="unqualified" 
  targetNamespace="www.wilfried-grupe.de/simpleTypes">
  <xs:simpleType name="stringmax20">
    <xs:restriction base="xs:string">
      <xs:minLength value="2"/>
      <xs:maxLength value="20"/>
      <xs:pattern value="[A-Z][a-zäöü]*"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="posintmax150">
    <xs:restriction base="xs:nonNegativeInteger">
      <xs:maxInclusive value="150"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

DATEI: simpleTypes.xsd

Damit diese Datei in andere Schemata eingebunden werden kann, muss in simpleTypes.xsd ein targetNamespace="www.wilfried-grupe.de/simpleTypes" definiert werden, der in der Zieldatei complexTypes.xsd angesprochen werden kann: <xs:import namespace="www.wilfried-grupe.de/simpleTypes" schemaLocation="simpleTypes.xsd"/>. Zusätzlich muss in complexTypes.xsd ein Namespace xmlns:wgst="www.wilfried-grupe.de/simpleTypes" definiert werden, damit über das Namespacepräfix wgst die Typdefinition der Elemente erfolgen kann.


<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  elementFormDefault="unqualified" 
  attributeFormDefault="unqualified" 
  xmlns:wgst="www.wilfried-grupe.de/simpleTypes" 
  targetNamespace="www.wilfried-grupe.de/complexTypes" 
  xmlns:wgct="www.wilfried-grupe.de/complexTypes">
  <xs:import namespace="www.wilfried-grupe.de/simpleTypes" 
     schemaLocation="simpleTypes.xsd"/>
  <xs:element name="Orte" type="wgct:OrteTyp"/>
  <xs:complexType name="OrteTyp">
    <xs:sequence>
      <xs:element name="Ort" 
                  type="wgct:OrtTyp" 
                  maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="OrtTyp">
    <xs:sequence>
      <xs:element name="Ortname" 
                  type="wgst:stringmax20"/>
      <xs:element name="Person"
                  type="wgct:PersonTyp" 
                  maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="PersonTyp">
    <xs:sequence>
      <xs:element name="Name" 
                  type="wgst:stringmax20"/>
      <xs:element name="Vorname" 
                  type="wgst:stringmax20"/>
      <xs:element name="Alter" 
                  type="wgst:posintmax150"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Das Prinzip wiederholt sich: Zur Weiterverwendung dieses Schemadokuments muss ein targetNamespace definiert werden, dem ein passendes Präfix wgct zugewiesen wird, über das die Typdefinition bereits in complexTypes.xsd erfolgen kann. Derselbe Namespace muss im importierenden Schema benannt werden, wobei das Namespacepräfix anders benannt (z.B. xct) werden kann.


<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  elementFormDefault="qualified" 
  attributeFormDefault="unqualified" 
  xmlns:xct="www.wilfried-grupe.de/complexTypes">
  <xs:import namespace="www.wilfried-grupe.de/complexTypes" 
    schemaLocation="complexTypes.xsd"/>
  <xs:element name="Laender" type="LaenderTyp"/>
  <xs:complexType name="LaenderTyp">
    <xs:sequence>
      <xs:element name="Land" 
         type="LandTyp" 
         maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="LandTyp">
    <xs:sequence>
      <xs:element name="Orte" 
         type="xct:OrteTyp" 
         maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

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