Schematron kurz und bündig

(Auszug aus "Schematron - Effiziente Business Rules für XML-Dokumente", Kapitel 5)

XPath bietet reichhaltige Möglichkeiten, XML-Dokumente zu analysieren und anhand verschiedenster Kriterien zu überprüfen. Um nun auf Fehler und Unstimmigkeiten aufmerksam zu machen und darauf mit aussagekräftigen Meldungen zu reagieren, betten wir diese XPath-Konstrukte in die Sprache Schematron ein. Diese Seiten bieten einen Einstieg in Schematron und erklären ausführlich die Funktionsweise der einzelnen Konstruktionen.

Nach intensiver Lektüre dieser Schematron-Einführung sind Sie in der Lage, dem ISO-Standard Schematron entsprechend XML-Dokumente zu analysieren, die Funktionsweise nachzuvollziehen sowie praxistaugliche Schemata zu entwerfen.

Beginnend mit einem kurzen Überblick zur Entstehungsgeschichte, wird die Funktionsweise der wichtigsten Schematron-Konstruktionen anhand der Arche Noah-Beispielinstanz erläutert.

XML-Beispielinstanz – die XML-Serialisierung der Arche Noah:

<?xml version="1.0" encoding="UTF-8"?>
<arche xmlns="http://www.schematron.info/arche" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schematron.info/arche arche.xsd">
  <ladung>
    <zimmer>
      <tier geschlecht="weiblich" fleischfresser="nein">
        <art>Zebra</art>
        <gewicht>200</gewicht>
        <alter>12</alter>
      </tier>
      <tier geschlecht="männlich" fleischfresser="nein">
        <art>Zebra</art>
        <gewicht>250</gewicht>
        <alter>13</alter>
      </tier>
    </zimmer>
    <zimmer>
      <tier geschlecht="weiblich" fleischfresser="ja">
        <art>Löwe</art>
        <gewicht>200</gewicht>
        <alter>23</alter>
      </tier>
      <tier geschlecht="männlich" fleischfresser="ja">
        <art>Löwe</art>
        <gewicht>180</gewicht>
        <alter>30</alter>
      </tier>
    </zimmer>
    <zimmer>
      <tier geschlecht="weiblich" fleischfresser="nein">
        <art>Elefant</art>
        <gewicht>10000</gewicht>
        <alter>20</alter>
      </tier>
      <tier geschlecht="männlich" fleischfresser="nein">
        <art>Elefant</art>
        <gewicht>15000</gewicht>
        <alter>40</alter>
      </tier>
    </zimmer>
  </ladung>
  <maxReproduktionsalter>
    <tier_art>
      <name>Elefant</name>
      <männlich>80</männlich>
      <weiblich>30</weiblich>
    </tier_art>
    <tier_art>
      <name>Löwe</name>
      <männlich>30</männlich>
      <weiblich>15</weiblich>
    </tier_art>
    <tier_art>
      <name>Zebra</name>
      <männlich>30</männlich>
      <weiblich>20</weiblich>
    </tier_art>
  </maxReproduktionsalter>
  <nutzlast>44000</nutzlast>
</arche>

Die Bedingungen für ein "gutes" Zusammenleben auf der Arche werden im folgenden XML Schema festgehalten:

Grafische Darstellung des Arche-Schemas:

Grafische Darstellung des Arche-Schemas

Die XML Schema-Datei:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.schematron.info/arche" xmlns="http://www.schematron.info/arche" elementFormDefault="qualified">
  <xs:element name="alter" type="xs:positiveInteger"/>
  <xs:element name="arche">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ladung"/>
        <xs:element ref="maxReproduktionsalter"/>
        <xs:element ref="nutzlast"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="art" type="xs:string"/>
  <xs:element name="gewicht" type="xs:positiveInteger"/>
  <xs:element name="ladung">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="zimmer" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="maxReproduktionsalter">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="tier_art" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="männlich" type="xs:positiveInteger"/>
  <xs:element name="name" type="xs:string"/>
  <xs:element name="nutzlast" type="xs:positiveInteger"/>
  <xs:element name="tier">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="art"/>
        <xs:element ref="gewicht"/>
        <xs:element ref="alter"/>
      </xs:sequence>
      <xs:attribute name="geschlecht" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="männlich"/>
            <xs:enumeration value="weiblich"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="fleischfresser" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="ja"/>
            <xs:enumeration value="nein"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="tier_art">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:element ref="männlich"/>
        <xs:element ref="weiblich"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="zimmer">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="tier" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="weiblich" type="xs:positiveInteger"/>
</xs:schema>

   

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Schematron bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:
  • Schematron
  • Qualitätssicherung von XML-Daten
  • XProc
  • XML-Last, aber richtig!
  • XML Schema
  • RELAX NG

Copyright © dpunkt.verlag GmbH 2011
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken. Ansonsten unterliegt dieses Kapitel aus dem Buch "Schematron - Effiziente Business Rules für XML-Dokumente" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, fon 06221-14830, fax 06221-148399, hallo(at)dpunkt.de