Schematron-Referenz

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

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

 

A

<active>

Für eine Phase aktiviert dieses Element genau ein Pattern. Die Aktivierung erfolgt über das Attribut pattern.

Elternelement: <phase>

Kindelemente: <span>, <emph>, <dir>

Attribut:

pattern Mit diesem Attribut wird auf ein Pattern referenziert.
Werte: ID-REF
Der übergebene Wert muss mit der ID eines Patterns übereinstimmen.

Beispiel: siehe <phase>.

 

<assert>

Dieses Element definiert eine Annahme, die zutreffen muss, um die Schematron-Validität zu gewährleisten. Der Kontextknoten für die Annahme wird von der umschließenden Regel bestimmt. Im Attribut test wird ein XPath-Ausdruck angegeben, der auf den Kontextknoten angewandt und von dem ein boolescher Wert erwartet wird. Wird die Annahme erfüllt – also der Wert true zurückgegeben – dann wird kein Fehler erzeugt. Andernfalls wird die Fehlernachricht ausgegeben, die innerhalb dieses Elementes steht. Mit den inzeiligen Kindelementen <value-of> und <name> lässt sich die Fehlermeldung variabel zum Kontext gestalten. Alternativ oder ergänzend kann auch mit dem Attribut diagnostics auf einen Lösungsvorschlag verwiesen werden.

Elternelement: <rule>

Kindelemente: <dir>, <emph>, <span>, <value-of>, <name>

Attribute:

test Das obligatorische Attribut enthält einen XPath-Ausdruck.
Werte: XPath-Ausdruck
Es dürfen absolute und relative XPath-Ausdrücke verwendet werden.
diagnostics Mit diesem Attribut kann auf einen Lösungsvorschlag verwiesen werden. Abhängig von der Implementierung wird der referenzierte Lösungsvorschlag ergänzend zur Fehlermeldung dargestellt.
Werte: ID-REF
Der Wert muss der ID eines Lösungsvorschlages entsprechen.
subject Ohne dieses Attribut wird eine ausgelöste Fehlermeldung immer dem Kontextknoten zugeordnet. Mit dem Attribut subject kann ein abweichender Knoten bestimmt werden.
Werte: XPath-Ausdruck
Es dürfen absolute und relative Ausdrücke verwendet werden.
role Dieses Attribut gibt mit einem Namen eine kurze Beschreibung der Funktion innerhalb des Patterns an. Der Name kann auch für eine Sortierung oder Suche verwendet werden.
Werte: String
Name zur Beschreibung der Fehlermeldung bzw. Regel.
flag Mit einem flag-Attribut kann eine weitere Gruppierung von Fehlern, Annahmen bzw. Regeln erreicht werden. Einem flag werden alle Fehler, Annahmen oder Regeln zugeordnet, die den gleichen Flagwert haben. Der boolesche Wert nimmt den Wert true an, sobald eines der Elemente, die dem Flag zugeordnet sind, einen Fehler auslöst, also eine Annahme nicht erfüllt wird, oder eine der Regeln einen Fehler auslöst.
Werte: flag-Name
XML-Name – jedes <assert>-, <report>- oder <rule>-Element mit dem gleichen flag-Name wird dem gleichen flag zugeordnet.
see Hier kann ein URI /eine URL angegeben werden, der/die zu weiterführenden Informationen über das entsprechende Element führt. Eine Implementierung kann dies umsetzen, indem beispielsweise ein Lösungsvorschlag in einen Link umgewandelt wird, der dann zu dem angegebenen URI führt.
Werte: xs:anyURI
URI /URL, der/die zu Hintergrundinformationen führt.
fpi Weist einen systemunabhängigen ID-Wert dem gesamten Schema, einem Pattern, einer Phase, einer Regel, einem Fehler, einer Annahme oder einem Lösungsvorschlag zu.
Werte: ID
Formal public identifier.
icon Mit diesem Attribut können Elemente optisch gruppiert werden. Durch einen Verweis auf eine Bilddatei werden den entsprechenden Elementen Symbole zugeordnet, die von der Implementierung im Zusammenhang dargestellt werden können. So könnte beispielsweise unterschieden werden, ob es sich um einen fatalen oder nur einen leichten Fehler bzw. ob es sich um eine Warnung handelt.
Werte: xs:anyUri
Hierbei kann es sich um eine absolute oder relative Pfadangabe handeln, die zur verwendenden Grafikdatei führt.
id Weist dem Element einen ID-Wert zu. Dieser wird verwendet, um auf das Element zu referenzieren. Der ID-Wert muss eindeutig einem Element zugeordnet sein und darf von keinem anderen Element im Schema als ID verwendet werden.
Werte: ID
Eindeutiger Identifizierer dieses Elementes.

Beispiel:

<rule context="arc:tier">
  <assert test="count(parent::*/arc:tier[arc:art=current()/arc:art]) = 2">In dieser Unterkunft gibt es weniger oder mehr als zwei Tiere dieser Art.</assert>
  <assert test="count(parent::*/arc:tier[arc:art=current()/arc:art][@geschlecht='männlich']) = 1">Ein Paar muss immer aus einem Männchen und einem Weibchen bestehen.</assert>
</rule>

Da <assert>-Elemente Annahmen darstellen, wird in dieser Regel beim ersten Test festgelegt, dass die Anzahl der Tiere, die im gleichen Zimmer untergebracht sind und der gleichen Art angehören, genau zwei sein muss. Im zweiten Test wird festgelegt, dass ein Tier dieses Paares ein Männchen ist, sodass das zweite Tier weiblich sein muss.

nach oben

 

D

<diagnostic>

Das Element definiert einen einzelnen Lösungsvorschlag. Der Hinweis ergibt sich durch den textuellen Inhalt des Elementes.

Elternelement: <diagnostics>

Kindelemente: <dir>, <emph>, <span>, <value-of>

Attribute:

id Siehe Element <assert>.
see Siehe Element <assert>.
icon Siehe Element <assert>.
fpi Siehe Element <assert>.

Beispiel:

<pattern>
  <rule context="arc:tier">
    <report test="count(parent::*/arc:tier[arc:art=current()/arc:art]) &gt; 2" diagnostics="Anzahl">In dieser Unterkunft gibt es mehr als zwei Tiere einer Art.</report>
  </rule>
</pattern>
<diagnostics>
  <diagnostic id="Anzahl">Noah du musst so viele Tiere davon entfernen, dass nur zwei einer Art in dieser Unterkunft hausen.</diagnostic>
</diagnostics>

Das <report>-Element verweist auf ein <diagnostic>-Element. Wird an dieser Stelle ein Fehler ausgelöst, wird der Lösungsvorschlag dargestellt. Die Fehlerbeschreibung könnte also lauten: »In dieser Unterkunft gibt es mehr als zwei Tiere einer Art«.
Lösungsvorschlag: »Noah, du musst so viele Tiere entfernen, dass nur zwei einer Art in dieser Unterkunft hausen«.

 

<diagnostics>

Dieses Top-Level-Element bildet einen Container für Lösungsvorschläge. Jedes diagnostic-Element steht für einen Lösungsvorschlag, auf welche bei einem Test (<assert> bzw. <report>) referenziert werden kann.

Elternelemente: <schema>, <pattern>

Kindelemente: <include>, <diagnostic>

 

<dir>

Dieses inzeilige Element kann bei Textpassagen die Schreibrichtung angeben.

Elternelemente: <p>, <diagnostic>, <active>, <title>, <assert>, <report>

Kindelemente:

Attribut:

value Mit diesem Attribut wird die zu verwendende Schreibrichtung angegeben.
Werte:
ltr — Schreibrichtung von links nach rechts (default)
rtl — Schreibrichtung von rechts nach links
nach oben

 

E

<emph>

Dieses inzeilige Element kann Textstellen hervorheben. Wird dieses Element unterstützt, hebt die Implementierung die entsprechende Textpassage mit typographischen Mitteln hervor. Welche typografischen Mittel hierfür verwendet werden, ist freigestellt – hängt also von der verwendeten Implementierung ab.

Elternelemente: <p>, <diagnostic>, <active>, <assert>, <report>

Kindelemente: –

 

<extends>

Mit diesem Element kann eine abstrakte Regel aufgerufen werden. Hierzu wird das Attribut rule verwendet.

Elternelement: <rule>

Kindelemente: –

Attribut:

rule Mit diesem obligatorischen Attribut wird mittels entsprechender ID auf eine abstrakte Regel referenziert.
Werte: ID-REF
Der Wert muss der ID einer abstrakten Regel entsprechen.

Beispiel:

<rule context="arc:tier">
  <extends rule="gewicht"/>
</rule>
<rule abstract="true" id="gewicht">
  <report test="parent::*/arc:tier/arc:gewicht &lt; (arc:gewicht div 10)">Noah, das Tier ist zu schwer für seine Zimmergenossen! Es könnte einen zertrampeln.</report>
</rule>
nach oben

 

I

<include>

Mit diesem Element lassen sich in externe XML-Dokumente gelagerte Schematron-Elemente in ein Schematron-Schema integrieren. Je nach Kontext kann so z.B. ein diagnostics-Element, Pattern, eine Phase, Regel oder ein Test (<assert> bzw. <report>) eingebunden werden. Mittels des href-Attributs wird auf eine Schematron-Schema-Datei referenziert. Diese Schematron-Datei muss das einzubindende Element als Wurzelelement enthalten.

Elternelemente: <schema>, <diagnostics>, <pattern>, <phase>, <rule>

Kindelemente:

Attribut:

href Das obligatorische href-Attribut gibt den Pfad der einzubindenden Schematron-Datei an.
Werte: xs:anyURI
Hierbei kann es sich um eine absolute oder relative Pfadangabe handeln.

Beispiel:

<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <ns uri="http://www.schematron.info/arche" prefix="arc"/>
  <pattern>
    <rule context="arc:tier">
      <report test="count(parent::*/arc:tier[arc:art=current()/arc:art]) &gt; 2" diagnostics="Anzahl">In dieser Unterkunft gibt es mehr als zwei Tiere einer Art.</report>
    </rule>
  </pattern>
  <include href="diagnostics.xml"/>
</schema>

Das Schema enthält an einer Stelle ein <include>-Element. Es verweist auf die unten stehende Datei:

<diagnostics xmlns="http://purl.oclc.org/dsdl/schematron">
  <diagnostic id="Anzahl">Noah, du musst so viele davon entfernen, dass nur zwei Tiere einer Art in dieser Unterkunft hausen.</diagnostic>
</diagnostics>

Das unten stehende Schema ist identisch mit dem oben stehenden. Das <include>-Element wird durch das <diagnostics>-Element – dem Wurzelelement der Datei diagnostics.xml – ersetzt.

<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <ns uri="http://www.schematron.info/arche" prefix="arc"/>
  <pattern>
    <rule context="arc:tier">
      <report test="count(parent::*/arc:tier[arc:art=current()/arc:art]) &gt; 2" diagnostics="Anzahl">In dieser Unterkunft gibt es mehr als zwei Tiere einer Art.</report>
    </rule>
  </pattern>
  <diagnostics>
    <diagnostic id="Anzahl">Noah du musst so viele davon entfernen, dass nur zwei Tiere einer Art in dieser Unterkunft hausen.</diagnostic>
  </diagnostics>
</schema>
nach oben

 

L

<let>

Dieses Element deklariert eine Variable. Dazu wird mit dem Attribut name der Variablenname angegeben und mit dem Attribut value durch einen XPath-Ausdruck der Variablenwert. Innerhalb einer Regel wird der XPath-Ausdruck anhand des Kontextknotens ausgewertet. Gleichzeitig legt die Regel auch den Gültigkeitsbereich der Variable fest. Wie dieser Abruf syntaktisch aufgebaut ist, hängt von der Abfragesprache ab. In XPath wird eine Variable durch den Variablennamen und einem vorgestellen $-Zeichen verwendet. Der Abruf der Variable mit dem Variablennamen name sähe folglich so aus: $name.

Elternelemente: <schema>, <pattern>, <phase>, <rule>

Kindelemente:

Attribute:

name Definiert den Variablennamen.
Werte: QName
Der Variablenname muss der XML-Namenskonvention entsprechen. Die Variable kann in XPath-Ausdrücken mit dem Ausdruck $variablenname verwendet werden.
value Der hier angegebene XPath-Ausdruck bestimmt den Wert der Variablen. Hierzu wird der Ausdruck im Kontext der Variablendefinition ausgewertet.
Werte: XPath-Ausdruck
Es dürfen absolute und relative XPath-Ausdrücke verwendet werden.

Beispiel:

[...]
<zimmer>
  <tier geschlecht="weiblich" fleischfresser="ja">
    <art>Löwe</art>
    <gewicht>200</gewicht>
    <alter>30</alter>
  </tier>
</zimmer>
[...]
<rule context="arc:tier">
  <let name="tierart" value="arc:art"/>
  <report test="count(parent::*/arc:tier[arc:art=$tierart]) &gt; 2">In dieser Unterkunft gibt es mehr als zwei Tiere dieser Art.</report>
  <assert test="not(count(parent::*/arc:tier[arc:art=$tierart]) &lt; 2)">In dieser Unterkunft gibt es kein Paar dieser Art.</assert>
</rule>

Für das <rule>-Element wurde die Variable tierart definiert. Sie enthält den Inhalt des Elements arc:art des entsprechenden Kontextknotens (arc:tier). Die Variable kann also in jedem XPath-Ausdruck innerhalb der Regel mit dem vorangestellten $-Zeichen verwendet werden (count(parent::*/arc:tier[arc:art=$tierart]) &gt; 2).

nach oben

 

N

<name>

Dieses Element ist, ohne weiteres Attribut, eine Kurzform des Elementes <value-of>, dem im select-Attribut der XPath-Ausdruck name() übergeben wird. Es gibt also stets den Elementnamen des Kontextknoten aus und findet Verwendung, um Fehlernachrichten (<assert> bzw. <report>) oder Lösungsvorschläge variabel zum Kontextknoten zu gestalten.

Elternelemente: <assert>, <report>

Kindelemente:

Attribut:

pathWird dem <name>-Element mit diesem Attribut ein XPath-Ausdruck mitgegeben, wird nicht der Name des Kontextknotens ausgegeben, sondern der Name des Knotens, auf den der XPath-Ausdruck verweist. Das folgende <name>-Element <name path="XPath-Ausdruck"/> hat also die gleiche Funktionsweise wie <value-of select="XPath-Ausdruck/name()"/>.
Werte: XPath-Ausdruck.
Es dürfen absolute und relative Ausdrücke verwendet werden.

Beispiel:

[...]
<zimmer>
  <tier geschlecht="weiblich" fleischfresser="nein">
    <art>Zebra</art>
    <gewicht>200</gewicht>
    <alter>40</alter>
  </tier>
  <tier geschlecht="männlich" fleischfresser="nein">
    <art>Zebra</art>
    <gewicht>250</gewicht>
    <alter>40</alter>
  </tier>
  <tier geschlecht="männlich" fleischfresser="nein">
    <art>Zebra</art>
    <gewicht>280</gewicht>
    <alter>40</alter>
  </tier>
</zimmer>
<zimmer>
  <tier geschlecht="weiblich" fleischfresser="ja">
    <art>Löwe</art>
    <gewicht>200</gewicht>
    <alter>30</alter>
  </tier>
</zimmer>
[...]
<rule context="arc:tier">
  <let name="tierart" value="arc:art"/>
  <report test="count(parent::*/arc:tier[arc:art=$tierart]) &gt; 2">In diesem <name path="parent::*"/>-Element gibt es mehr als zwei <name/>-Elemente dieser Art.</report>
  <assert test="not(count(parent::*/arc:tier[arc:art=$tierart]) &lt; 2)">In diesem <name path="parent::*"/>-Element gibt es kein weiteres <name/>-Element dieser Art.</assert>
</rule>

Die resultierende Fehlermeldung des ersten Fehlers lautet: »In diesem zimmer-Element gibt es mehr als zwei tier-Elemente dieser Art.« Die zweite Fehlermeldung lautet entsprechend: »In diesem zimmer-Element gibt es kein weiteres tier-Element dieser Art.«

 

<ns>

Dieses Element deklariert einen Namensraum und das zu verwendende Präfix. Soll ein Element der XML-Instanz adressiert werden, das nicht im Null-Namensraum steht, muss hierfür ein Namensraum mit diesem Element definiert werden.

Elternelement: <schema>

Kindelemente:

Attribute:

uri Hier wird der Namensraum-URI angegeben, für den ein Präfix definiert werden soll.
Werte: xs:anyURI
eindeutiger Bezeichner eines Namensraums.
prefix Hier wird ein Präfix übergeben, das nun in allen XPath-Ausdrücken des Schemas verwendet werden kann. Zu beachten ist, dass es in XPath keinen Default-Namensraum gibt. Jedem Namensraum muss somit ein Präfix übergeben werden. Elemente ohne Präfix werden automatisch dem Null-Namensraum zugeordnet.
Werte: xs:string
Zeichenfolge, die als Präfix verwendet wird.

Beispiel:

<arche xmlns="http://www.schematron.info/arche">
  […]
</arche>
<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <ns uri="http://www.schematron.info/arche" prefix="arc"/>
  <pattern>
    <rule context="arc:zimmer">
      […]
    </rule>
  </pattern>
</schema>

In der Instanz wird der Namensraum "http://www.schematron.info/arche" verwendet. Daher muss mit dem <ns>-Element dieser Namensraum auch für das Schema definiert und ein Präfix festgelegt werden. Nun kann auch im XPath-Ausdruck des context-Attributs das Präfix bzw. der Namensraum angewandt werden.

nach oben

 

P

<p>

Wird dieses Element von der Implementierung unterstützt, wird der Inhalt in Form eines Absatzes an der entsprechenden Stelle dargestellt. Demzufolge ist eine Unterstützung nur bei einer solchen Implementierung sinnvoll, die einen zentralen Fehlerbericht erzeugt. Eine interaktive Implementierung, wie die des oxygen-Editors, unterstützt dieses Element nicht.

Elternelemente: <schema>, <pattern>, <phase>

Kindelemente: <span>, <emph>, <dir>

Attribute:

icon Siehe Element <assert>.
id Siehe Element <assert>.
class Siehe Element <span>.

Beispiel:

<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <title>Schematron für Noah</title>
  <p>Dieses Schematron soll Noah helfen, die richtigen Tiere in der adäquaten Umgebung unterzubringen.</p>
  […]
</schema>

Die Inhalte der Elemente <p> und <title> können von der Implementierung ergänzend dargestellt werden.

 

<param>

Das Element dient dazu, für einen Aufruf eines abstrakten Patterns einen Parameter zu übergeben. Mit dem Attribut value kann der Wert des Parameters angegeben werden. Im Gegensatz zu einer Variablen wird hier ein XPath-Teilausdruck übergeben, der erst beim Abrufen des Parameters aufgelöst wird. Abgerufen wird ein Parameter innerhalb eines XPath-Ausdrucks durch das Schlüsselzeichen $ mit Parameternamen. Dieser wird über das Attribut name bestimmt.

Elternelement: <pattern>

Kindelemente:

Attribute:

name Siehe Element <let>.
value Der hier angegebene String ist der Wert des Parameters und stellt einen XPath-Teilausdruck dar. Der Ausdruck wird erst im Kontext des Aufrufes ausgewertet.
Werte: String
Beim Aufruf des Parameters muss der hier angegebene String im jeweiligen Kontext einen korrekten XPath-Ausdruck erzeugen.

Beispiel:

<pattern id="noah" is-a="abstraktesPattern">
  <param name="count" value="parent::*/arc:tier[arc:art=current()/arc:art]"/>
</pattern>
<pattern id="abstraktesPattern" abstract="true">
  <rule context="arc:tier">
    <report test="count($count) &gt; 2">In dieser Unterkunft gibt es mehr als zwei Tiere dieser Art.</report>
    <assert test="not(count($count) &lt; 2)">In dieser Unterkunft gibt es kein Paar dieser Art.</assert>
  </rule>
</pattern>

Das Pattern noah ruft mit dem is-a-Attribut das Pattern mit der ID abstraktesPattern auf. Hierbei wird der Parameter $count übergeben. Dieser enthält den XPath-Ausdruck parent::*/arc:tier[arc:art=current()/arc:art]. Das abstrakte Pattern mit der ID abstraktesPattern wird nun ausgeführt.

 

<pattern>

Dieses Element gruppiert Schematron-Regeln. Für ein Pattern gilt: Jeder Knoten des zu überprüfenden XML-Dokumentes wird niemals auf mehrere passende Regeln überprüft, die in einem Pattern stehen. Passen mehrere Regeln eines Patterns auf einen Knoten, wird dieser anhand der ersten passenden Regel überprüft. Ebenfalls findet die Gliederung für die Aktivierung bestimmter Regeln (siehe <active>) Anwendung. Hier werden nicht einzelne Regeln aktiviert, sondern nur ganze Patterns.

Elternelement: <schema>

Kindelemente: <include>, <title>, <p>, <let>, <param>, <rule>

Attribute:

see Siehe Element <assert>.
fpi Siehe Element <assert>.
icon Siehe Element <assert>.
id Siehe Element <assert>.
abstract Ein abstraktes Pattern kann von anderen Patterns mit dem Attribut is-a aufgerufen und diesem Parameter übergeben werden. Ein abstraktes Pattern benötigt eine ID.
Werte:
true Mit diesem Wert wird ein Pattern abstrakt.
false Bei dem vorhandenen Pattern handelt es sich um ein normales, nicht abstraktes Pattern.
is-a Mit diesem Attribut wird ein abstraktes Pattern aufgerufen. Der Wert des Attributs referenziert dabei auf das abstrakte Pattern.
Werte: ID-REF
Der Wert muss der ID eines abstrakten Patterns entsprechen. Das Pattern mit der entsprechenden ID wird aufgerufen.

Beispiel:

<zimmer>
  <tier geschlecht="weiblich" fleischfresser="nein">
    <art>Elefant</art>
    <gewicht>900</gewicht>
    <alter>150</alter>
  </tier>
  <tier geschlecht="männlich" fleischfresser="nein">
    <art>Elefant</art>
    <gewicht>1200</gewicht>
    <alter>162</alter>
  </tier>
  <tier geschlecht="weiblich" fleischfresser="nein">
    <art>Zebra</art>
    <gewicht>100</gewicht>
    <alter>40</alter>
  </tier>
</zimmer>
<zimmer>
  <tier geschlecht="männlich" fleischfresser="ja">
    <art>Löwe</art>
    <gewicht>280</gewicht>
    <alter>40</alter>
  </tier>
  <tier geschlecht="weiblich" fleischfresser="ja">
    <art>Löwe</art>
    <gewicht>130</gewicht>
    <alter>16</alter>
  </tier>
</zimmer>
<pattern>
  <rule context="arc:tier[@fleischfresser='ja']">
    <report test="parent::*/arc:tier/arc:gewicht &lt; (arc:gewicht div 2)">Noah, dieser Fleischfresser ist zu stark (schwer) für seinen Zimmergenossen. Er könnte ihn als Nahrungsquelle benutzen.</report>
  </rule>
  <rule context="arc:tier">
    <report test="parent::*/arc:tier/arc:gewicht &lt; (arc:gewicht div 10)">Noah, das Tier ist zu schwer für seine Zimmergenossen! Es könnte einen zertrampeln.</report>
  </rule>
</pattern>

Die erste Regel fragt ab, ob das fleischfressende Tier schwerer ist als ein anderes Tier im gleichen Zimmer. Andere Tiere dürfen maximal zehnmal so schwer sein, wie ihre Zimmergenossen. Hierzu überprüft die zweite Regel jedes <tier>-Element. Da aber die erste Regel immer auf <tier>-Elemente passt, die Fleischfresser sind, fragt die zweite Regel nur die nicht fleischfressenden Tiere ab.

 

<phase>

Dieses Element definiert eine Phase. Mit verschiedenen <active>-Elementen können bestimmte Patterns aktiviert werden. Eine Implementierung kann nun den Benutzer eine Phase auswählen lassen. Das Dokument wird nur anhand der Regeln in den aktiven Patterns überprüft.

Elternelement: <schema>

Kindelemente: <let>, <p>, <include>, <active>

Attribute:

id Siehe Element <assert>.
icon Siehe Element <assert>.
fpi Siehe Element <assert>.
see Siehe Element <assert>.

Beispiel:

<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <phase id="alles">
    <active pattern="arche"/>
    <active pattern="noah"/>
  </phase>
  <phase id="unterkunft">
    <active pattern="arche"/>
  </phase>
  <phase id="paare">
    <active pattern="noah"/>
  </phase>
  <pattern id="arche"> […] </pattern>
  <pattern id="noah"> […] </pattern>
</schema>

Die Implementierung bietet den Benutzern die Möglichkeit, die Instanz nach den Phasen alles, unterkunft und paare validieren zu lassen. Bei der Phase alles werden die Patterns arche und noah aktiviert, bei unterkunft nur das Pattern arche und bei paare nur das Pattern noah. Eine Phase, die alle Pattern aktiviert, wird gewöhnlich von der Implementierung auch ohne eine Phase alles angeboten.

nach oben

 

R

<report>

Dieses Element beinhaltet einen Test auf einen Fehler. Mit dem Attribut test wird ein XPath-Ausdruck angegeben, der auf den Kontextknoten angewandt wird und von dem ein boolescher Wert erwartet wird. Wird der Wert false zurückgegeben, wird auch keine Fehlermeldung erzeugt. Andernfalls wird die Fehlernachricht ausgegeben, die innerhalb dieses Elementes steht.

Elternelement: <rule>

Kindelemente: <dir>, <emph>, <span>, <value-of>, <name>

Attribute:

test Siehe Element <assert>.
diagnostics Siehe Element <assert>.
flag Siehe Element <assert>.
fpi Siehe Element <assert>.
icon Siehe Element <assert>.
id Siehe Element <assert>.
role

Siehe Element <assert>.

see Siehe Element <assert>.
subject Siehe Element <assert>.

Beispiel:

<rule context="arc:tier">
  <report test="count(//arc:tier[arc:art=current()/arc:art]) &gt; 2">In der Arche gibt es mehr als zwei Tiere dieser Art.</report>
  <report test="count(parent::*/arc:tier[arc:art=current()/arc:art]) &lt; 2">In dieser Unterkunft gibt es weniger als zwei Tiere dieser Art.</report>
</rule>

Der erste <report>-Test überprüft, ob es innerhalb der Arche nicht mehr als zwei Tiere der gleichen Art gibt. Der zweite Test stellt hingegen sicher, dass in einem Zimmer nicht weniger als zwei Tiere dieser Art untergebracht wurden.

 

<rule>

Dieses Element definiert eine Schematron-Regel. Gibt es einen Knoten im XML-Dokument, der auf den im Attribut context angegebenen XPath-Ausdruck passt, werden alle Tests (<assert> bzw. <report>) dieser Regel mit diesem Knoten als Kontextknoten ausgeführt. Eine Ausnahme bildet eine voranstehende Regel im gleichen Pattern, die bereits auf den gleichen Knoten passt. Dann wird keine weitere Regel des aktuellen Patterns für diesen Knoten ausgeführt.

Elternelement: <pattern>

Kindelemente: <include>, <let>, <assert>, <extends>, <report>

Attribute:

abstract Hiermit kann erreicht werden, dass eine Schematron-Regel zu einer abstrakten Regel wird. Eine abstrakte Regel hat keinen Kontext und kann von anderen Regeln mit dem Element <extends> aufgerufen werden. Eine abstrakte Regel benötigt eine ID.
Werte:
true Mit diesem Wert wird eine Schematron-Regel zu einer abstrakten Regel.
false Bei der vorhandenen Regel handelt es sich um eine konkrete, nicht abstrakte Regel.
id Siehe Element <assert>.
icon Siehe Element <assert>.
fpi Siehe Element <assert>.
see Siehe Element <assert>.
context Mit einem XPath-Ausdruck wird hier der Kontextknoten der Regel bestimmt. Jede nicht abstrakte Regel benötigt einen Kontextknoten, der für alle XPath-Ausdrücke innerhalb dieser Regel verwendet wird.
Werte: XPath-Ausdruck
Es dürfen absolute und relative Ausdrücke verwendet werden.
flag Siehe Element <assert>.
role Siehe Element <assert>.
subject Siehe Element <assert>.

Beispiel:

<ladung>
  <zimmer>
    <tier geschlecht="weiblich" fleischfresser="ja">
      <art>Löwe</art>
      <gewicht>200</gewicht>
      <alter>30</alter>
    </tier>
    <tier geschlecht="männlich" fleischfresser="nein">
      <art>Zebra</art>
      <gewicht>280</gewicht>
      <alter>40</alter>
    </tier>
  </zimmer>
</ladung>
<rule context="arc:zimmer[arc:tier[@fleischfresser='nein']]">
  <report test="arc:tier[@fleischfresser='ja']">Es gibt Fleischfresser und Pflanzenfresser in einer Unterkunft. Die Tiere sind keine Nahrungsquelle!</report>
</rule>

Alle Tests einer Regel werden anhand entsprechender Kontextknoten getestet. Der jeweilige Kontextknoten für diese Regel ist ein Knoten der Instanz, der auf den XPath-Ausdruck arc:zimmer[arc:tier[@fleischfresser='nein']] passt. Es muss sich also um ein <zimmer>-Element handeln, das ein <tier>-Element enthält mit dem Attributwert nein im fleischfresser-Attribut. In der aufgeführten Instanz werden die Tests nur auf die ersten beiden <zimmer>-Elemente angewandt. Der Report-Test trifft jedoch nur auf das erste <zimmer>-Element zu – der Benutzer nimmt somit die Überprüfung des zweiten <zimmer>-Elementes nicht wahr.

nach oben

 

S

<schema>

<schema> ist das Wurzelelement eines Schematron-Schemas. Es umfasst somit das gesamte Schema und enthält alle Patterns, alle Lösungsvorschläge und alle Phasen.

Elternelemente:

Kindelemente: <diagnostics>, <include>, <let>, <ns>, <p>, <pattern>, <phase>, <title>

Attribute:

defaultPhase Mit diesem Attribut kann für ein Schematron-Schema eine Default-Phase bestimmt werden. Wird dieses Attribut unterstützt, verwendet die Implementierung die hier referenzierte Phase per Default.
Werte: ID-REF
Der Wert muss einer ID von einer im Schema verwendeten Phase entsprechen.
fpi Siehe Element <assert>.
icon Siehe Element <assert>.
id Siehe Element <assert>.
queryBinding Mit dem Namen einer Abfragesprache kann diese für die Verwendung innerhalb des Schemas eingebunden werden. Für die Einbindung muss jedoch die entsprechende Abfragesprache von der Implementierung unterstützt werden. Durch den Standard sind bestimmte Namen für die wichtigsten Sprachen reserviert.
Werte: (müssen nicht zwingend unterstützt werden)
stx Bindet die Abfragesprache STX (Streaming Transformations for XML) ein.
xslt für XSLT 1.0 (eXtensible Stylesheet Language Transformation)
xslt1.1 für XSLT 1.1
xslt2 für XSLT 2.0 (inklusive XPath 2.0)
exslt für EXSLT
xpath für XPath (XML Path Language)
xpath2 für XPath 2.0
xquery für XQuery (XML Query Language)
Abhängig von der Implementierung können weitere Abfragesprachen unterstützt werden.
schemaVersion Das Attribut gibt die Schematron-Version an. Die Verwendung ist abhängig von der Implementierung.
Werte: Undefiniert
Die erlaubten Werte des Attributs sind vom Standard ausdrücklich nicht festgelegt und somit abhängig von der verwendeten Implementierung .
see Siehe Element <assert>.

 

<span>

Dieses inzeilige Element kann Textstellen hervorheben. Wird dieses Element unterstützt, hebt die Implementierung die entsprechende Textpassage mit typografischen Mitteln hervor. Welche typografischen Mittel hierfür verwendet werden, wird durch das Attribut class bestimmt.

Elternelemente: <p>, <diagnostic>, <active>, <assert>, <report>

Kindelemente:

Attribut:

class Das Attribut bestimmt die Art der typografischen Auszeichnung. Dabei gibt es keine Vorgaben für die Werte des Attributs. Diese werden allein von der Implementierung vorgegeben.
Werte: Klasse
Schlüsselwort, das der Implementierung mitgegeben wird.
nach oben

 

T

<title>

Wird dieses Element unterstützt, wird der Inhalt in Form eines Titels an der entsprechenden Stelle dargestellt. Demzufolge ist eine Unterstützung nur bei einer Implementierung sinnvoll, die einen zentralen Fehlerbericht erzeugt. Eine interaktive Implementierung, wie die des oXygen-Editors, unterstützt ein solches Element nicht.

Elternelemente: <schema>, <pattern>

Kindelemente: <dir>, <p>

nach oben

 

V

<value-of>

Dieses Element ist mit dem XSLT-Element <xsl:value-of> gleichzusetzen. Hierbei wird mit dem Attribut select ein XPath-Ausdruck übergeben, der anhand des Kontextknotens ausgewertet und ausgegeben wird. Es findet Verwendung, um Fehlernachrichten (<assert> bzw. <report>) oder Lösungsvorschläge variabel zum Kontextknoten oder zum Dokument zu gestalten. In einem einfachen Fall kann hier der Inhalt eines Elementes aus der Instanz ausgegeben werden.

Elternelemente: <diagnostic>, <assert>, <report>

Kindelemente:

Attribut:

select Der hier angegebene XPath-Ausdruck bestimmt den für das <value-of>-Element einzusetzenden Inhalt. Je nach eingebundener Abfragesprache (siehe queryBinding) können beispielsweise auch XSLT-Funktionen verwendet werden.
Werte: XPath-Ausdruck
Es dürfen absolute und relative Ausdrücke verwendet werden.

Beispiel:

<zimmer>
  <tier geschlecht="weiblich" fleischfresser="nein">
    <art>Zebra</art>
    <gewicht>200</gewicht>
    <alter>40</alter>
  </tier>
  <tier geschlecht="männlich" fleischfresser="nein">
    <art>Zebra</art>
    <gewicht>250</gewicht>
    <alter>40</alter>
  </tier>
  <tier geschlecht="männlich" fleischfresser="nein">
    <art>Zebra</art>
    <gewicht>280</gewicht>
    <alter>40</alter>
  </tier>
</zimmer>
<rule context="arc:tier">
  <report test="count(parent::*/arc:tier[arc:art=current()/arc:art]) &gt; 2">In dieser Unterkunft gibt es mehr als zwei Tiere dieser Art (<value-of select ="arc:art"/>).</report>
</rule>

Die <value-of>-Elemente innerhalb der Tests geben jeweils den String Zebra aus.

nach oben

   

<< zurück vor >>

 

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Schematron bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

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