XML Validierung - wozu? / XML Schema / Datentypen, Designs / 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 SimpleTypes 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 / 11. Februar 2018
Fragen? Anmerkungen? Tips?
Bitte nehmen Sie Kontakt zu mir auf:
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de