Home
Über mich
Blog
Veröffentlichungen
IT-Trainings
Impressum


SimpleTypes

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 diverse 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>

qrpic/XSD3_3.jpg

wg / 30. September 2017




Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf (info10@wilfried-grupe.de).



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: info10@wilfried-grupe.de