- 1 Intro
- 2 Anwendungsgebiete
- 2.1 XSLT - die Programmiersprache im XML Bereich
- 2.2 Aktuelle und vergangene Anwendungen
- 2.3 Professionelle XML Verarbeitung
- 2.4 Technische Dokumentation
- 3 Wichtige Konzepte
- 3.1 Push vs. Pull Stylesheets
- 3.2 Eindeutigkeit der Regelbasis
- 3.3 Namespaces
- 3.4 Schemata
- 3.5 Standards
- 3.5.1 DITA
- 3.5.2 DITA Inhaltsmodell
- 3.5.1 DITA
- 4 Ausgewählte Themen
- 4.1 Transformationen mit XSLT
- 4.1.1 Vortransformationen
- 4.1.2 Komplexe XML-2-XML Transformationen
- 4.1.2.8 Vererbung
- 4.1.2.8 Vererbung
- 4.1.3 XSLT Streaming
- 4.1.3.1 XSLT Akkumulator
- 4.1.3.2 XSLT Iterator
- 4.1.4 Reguläre Ausdrücke
- 4.1.5 Modus vs. Tunnel Lösung
- 4.1.6 Identifikation mit
generate-id()
- 4.1.6.4 XPath-Achsenbereich selektieren
- 4.1.6.4.1 Funktionen und Module
- 4.1.6.4.1 Funktionen und Module
- 4.1.6.4 XPath-Achsenbereich selektieren
- 4.1.7 Webservice Calls mit doc() und unparsed-text()
- 4.1.8 Stylesheet-Parameter auf der Kommandozeile
- 4.1.9 Leerzeichenbehandlung
- 4.1.10 Mit
translate
Zeichen ersetzen
- 4.1.10.1 Spass mit dem Sequenzvergleich
- 4.1.11 Character Mappings in der Ausgabe
- 4.1.12 JSON mit XSLT 1.0 und Python lxml
- 4.1.1 Vortransformationen
- 4.2 Abfragen mit XQuery
- 4.2.5 XQuery als Programmiersprache
- 4.2.5.3
if..then..else
Ausdrücke
- 4.2.5.3.2 SQL Views in MarkLogic
- 4.2.5.3
if..then..else
Ausdrücke
- 4.2.6 Hilfreiche XQuery Schippsel
- 4.2.5 XQuery als Programmiersprache
- 4.3 XML Datenbanken
- 4.3.1 Connector zu Marklogic in Oxygen
- 4.3.2 Bi-Temporale Dokumente
- 4.3.2.1 Anlegen des Testszenarios auf der ML Konsole
- 4.3.2.2 Ausführen einiger Beispiel-Queries
- 4.3.3 Webapps mit MarkLogic
- 4.3.3.5 Wikipedia Scrapper Applikation
- 4.3.3.5 Wikipedia Scrapper Applikation
- 4.3.4 Dokument-Rechte in MarkLogic
- 4.3.5 MarkLogic Tools
- 4.3.5.1 EXPath Konsole
- 4.3.5.2 mlcp - MarkLogic Content Pump
- 4.3.5.3 Deployment-Tools
- 4.4 XSL-FO mit XSLT1.x
- 4.5 Testing
- 4.5.1 Validierung mit Schematron
- 4.5.2 Erste Schritte mit XSpec
- 4.5.1 Validierung mit Schematron
- 4.6 Performanz-Optimierung
- 4.1 Transformationen mit XSLT
- 5 Zusätzliches Know-How
- 5.1 XML Editoren
- 5.2 Quellcode-Versionskontrolle
- 5.2.1 Kurze Geschichte zur Versionskontrolle Test
- 5.2.2 GIT Kommandos
- 5.2.1 Kurze Geschichte zur Versionskontrolle Test
- 5.1 XML Editoren
- 6 Glossary
- 7 Tektur CCMS
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.
<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-Methoden
deklariert:
<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.
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.