4.5.2  Erste Schritte mit XSpec

XSpec ist ein Test-Framework ↗↗ für XSLT, XQuery und Schematron. Um beispielsweise komplexe Schematron Regeln zu testen, hinterlegt man in einem Test-Szenario Erwartungswerte für positive und negative Testfälle in Form von XML Schnippseln. hallo
<test-szenario>
  <testfall>
    <personen>
      <person>
        <vorname>Horst</vorname>
        <nachname>Schlämmer</nachname>
        <gewicht>100</gewicht>
      </person>
      <person>
        <vorname>Gundula</vorname>
        <nachname></nachname>
        <gewicht>60</gewicht>
      </person>
    </personen>
  </testfall>
</test-szenario>
in einer XSpec Datei *.xspec werden Assert- und Not-Assert-Methodendeklariert:
<x:description xslt-version="2.0" xmlns:x="http://www.jenitennison.com/xslt/xspec" 
               schematron="test.sch">
  <x:scenario label="ALL">
    <x:context href="test.xml"/>
    <x:expect-not-assert id="person-nachname-rule" location="//person[1]/nachname"/>
    <x:expect-assert id="person-nachname-rule" location="//person[2]/nachname"/>
  </x:scenario>
</x:description>
Grds. bdeutet ein Assert, dass das Mapping zwischen tatsächlichem Wert und Erwartungswert des Testfalls positiv erfüllt ist. Beim Not-Assert ist das Gegenteil der Fall. Im obigen Beispiel reichen zwei Regeln, um den Testfall vollständig abzudecken.
Wenn man Schematron Regeln mit Hilfe von XSpec testen will, dann muss man ein bisschen um die Ecke denken. Denn auch diese Regeln werden mittels Assert und Not-Assert modelliert.
<sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron" 
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform" queryBinding="xslt2">
  <sch:pattern id="main">
    <sch:rule context="nachname">
      <sch:assert id="person-nachname-rule" role="error" test="normalize-space(.)">
        Der Nachname der Person mit ID: <sch:value-of select="@id"/> fehlt! 
      </sch:assert>
    </sch:rule>
  </sch:pattern>
</sch:schema>
In der Schematron-Regel wird zugesichert (Assert), dass jede Person einen Nachnamen hat.
Hat sie keinen Nachnamen, so wird der Bericht zum Fehlerfall in die Schematron Ergebnisdatei geschrieben. Diese Datei wertet nun XSpec aus.
Hinweis
NOTIZ
Erscheint ein Fehler (= das Feld nachname ist leer), so greift bei XSpec die Assert-Regel! Das ist die umgekehrte Logik zu den Schematron Regeln.
Als Eselsbrücke kann man ein Assert in der XSpec Datei gleichsetzen mit Appear und ein Not-Assert mit Not-Appear.
Ein Assert sichert also zu, dass sich ein Fehlerbericht in der Schematron Ergebnisdatei zum Testfall befindet. Ein Not-Assert sichert zu, dass sich kein Fehlerbericht befindet.
Wie man sich leicht vorstellen kann, sind Assert-Regeln in diesem Fall leicht zu finden, dazu muss man nur die Schematron Testregeln ins Leere zeigen lassen. Alles ist grün und alles ist gut - dem Augenschein nach.
Previous Page Next Page
Version: 93
Jan 25 2021