XML Validierung - wozu? / XML Schema / Datentypen, Designs / xs:simpleType

xs:simpleType

xs:simpleType

XML Schema bietet eine Vielzahl unterschiedlicher Datentypen und Design-Alternativen.

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, muß 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 / 29. Dezember 2017



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







Vielen Dank für Ihr Interesse an meiner Arbeit.


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

Mobil: 0151. 750 360 61 * eMail: info2018@wilfried-grupe.de

www.wilfried-grupe.de/XSD3_3.html