SlideShare una empresa de Scribd logo
1 de 51
SCHEMATRON FÜR 
TECHNISCHE 
REDAKTEURE 
Stefan Krause – Ovidius GmbH, Berlin
Ziele für den Workshop 
 Ich möchte Schematron populär machen. 
 Ich möchte erste oder zweite Schritte mit 
Ihnen gemeinsam gehen. 
 Was sind Ihre Ziele? 
© Ovidius Seite 2
Agenda 
 Was kann Schematron? 
 Schematron für Anfänger 
 XPath für Anfänger 
 Diskussion 
 Schematron für Fortgeschrittene 
 Praxistipps 
 Schematron für Profis 
 Diskussion 
© Ovidius Seite 3
über mich 
 Consultant/Application Developer bei der 
Ovidius GmbH (CMS-Anbieter) 
 davor 10 Jahre Projektmanager bei XML-lastigen 
Content-Digitalisierungsprojekten, 
vor allem für Archive, Bibliotheken und 
Verlage 
© Ovidius Seite 4
Was kann Schematron? 
→ Agenda
Was kann Schematron I? 
 Texte inspizieren 
 verbotene Zeichen 
 »z.B.« vs. »z. B.« 
 Worte, die mit »u« anfangen 
© Ovidius Seite 6
Was kann Schematron II? 
 Strukturen überprüfen 
 in Abhängigkeit von Attributen oder Text 
testen 
 Beispiel: Reihenfolge von Kapiteln 
 Beispiel: keine fette Schrift in kursiver Schrift 
 in Abhängigkeit von Berechnungen prüfen 
 Beispiel: Prozentangaben müssen sich zu 
100% addieren 
© Ovidius Seite 7
Was kann Schematron III? 
 informative, sachgerechte 
Fehlermeldungen ausgeben 
 mit beliebiger Detailliertheit 
 mit unterschiedlichen Schweregraden 
© Ovidius Seite 8
Was kann Schematron IV? 
 auf externe Dateien und WebServices 
lesend zugreifen 
 (in WebServices schreiben) 
© Ovidius Seite 9
demo.xml/demo.sch in OxygenXML 
© Ovidius Seite 10
demo.xml/demo.sch in antillesXML 
© Ovidius Seite 11
Was ist Schematron? 
 Schemasprache für XML-Dokumente 
 in Ergänzung zu DTD, XML Schema oder 
RNG 
 eher nicht für vollständige Grammatiken 
geeignet 
 ISO-Standard 
 Referenzimplementierung als Open 
Source 
 XPath als Abfragesprache 
 XSLT als Programmiersprache 
© Ovidius Seite 12
Warum Schematron? 
 Es ist einfach! 
 Es ist leicht zu erlernen. 
 Tests sind einfach zu schreiben und zu 
warten. 
 Deshalb werden Tests möglich, die bei 
anderen Ansätzen wegen hohen Aufwänden 
nicht durchgeführt werden. 
 Es ist mächtig! 
 XPath ist eine vollständige 
Programmiersprache. 
© Ovidius Seite 13
Schematron für Anfänger 
→ Agenda
Hello World! 
<?xml version="1.0" encoding="UTF-8"?> 
<schema 
xmlns="http://purl.oclc.org/dsdl/schematron"> 
<pattern> 
<rule context="/"> 
<report test="true()">Hello World!</report> 
</rule> 
</pattern> 
</schema> 
<?xml version="1.0" encoding="UTF-8"?> 
<literatur> 
<buecher> 
<buch xml:id="b1"> 
<autor ref="p1">Mann, Thomas</autor> 
<titel>Der Zauberberg</titel> 
<isbn>978-3-596-29433-7</isbn> 
<href>http://d-nb.info/942764498</href> 
</buch> 
<buch xml:id="b2"> 
<autor ref="p2">Mann,Klaus</autor> 
<titel> Mephisto</titel> 
<isbn>3 10 046705 1</isbn> 
<href>http://d nb.info/959653694</href> 
</buch> 
<buch xml:id="b3"> 
[…] 
01_Hello_World.sch example_01.xml 
© Ovidius Seite 15
Hello World in OxygenXML 
© Ovidius Seite 16
erste Prüfung 
<?xml version="1.0" encoding="UTF-8"?> 
<schema 
xmlns="http://purl.oclc.org/dsdl/schematron"> 
<pattern> 
<rule context="isbn"> 
<report test="not(contains(., '-'))">ISBNs 
sollen mit Bindestrich geschrieben 
werden!</report> 
</rule> 
</pattern> 
</schema> 
<?xml version="1.0" encoding="UTF-8"?> 
<literatur> 
<buecher> 
<buch xml:id="b1"> 
<autor ref="p1">Mann, Thomas</autor> 
<titel>Der Zauberberg</titel> 
<isbn>978-3-596-29433-7</isbn> 
<href>http://d-nb.info/942764498</href> 
</buch> 
<buch xml:id="b2"> 
<autor ref="p2">Mann,Klaus</autor> 
<titel> Mephisto</titel> 
<isbn>3 10 046705 1</isbn> 
<href>http://d nb.info/959653694</href> 
</buch> 
<buch xml:id="b3"> 
[…] 
02_Erste_Pruefung.sch example_01.xml 
© Ovidius Seite 17
erste Prüfung mit assert 
<?xml version="1.0" encoding="UTF-8"?> 
<schema 
xmlns="http://purl.oclc.org/dsdl/schematron"> 
<pattern> 
<rule context="isbn"> 
<assert test="contains(., '-')">ISBNs sollen 
mit Bindestrich geschrieben werden!</assert> 
</rule> 
</pattern> 
</schema> 
<?xml version="1.0" encoding="UTF-8"?> 
<literatur> 
<buecher> 
<buch xml:id="b1"> 
<autor ref="p1">Mann, Thomas</autor> 
<titel>Der Zauberberg</titel> 
<isbn>978-3-596-29433-7</isbn> 
<href>http://d-nb.info/942764498</href> 
</buch> 
<buch xml:id="b2"> 
<autor ref="p2">Mann,Klaus</autor> 
<titel> Mephisto</titel> 
<isbn>3 10 046705 1</isbn> 
<href>http://d nb.info/959653694</href> 
</buch> 
<buch xml:id="b3"> 
[…] 
02_Erste_Pruefung_mit_assert.sch example_01.xml 
© Ovidius Seite 18
mehrere Prüfungen 
<?xml version="1.0" encoding="UTF-8"?> 
<schema 
xmlns="http://purl.oclc.org/dsdl/schematron"> 
<pattern> 
<rule context="isbn"> 
<assert test="contains(., '-')">ISBNs sollen 
mit Bindestrich geschrieben werden!</assert> 
<report test="string-length(.) != 17">Es sollen 
ISBN-13 verwendet werden</report> 
</rule> 
</pattern> 
<pattern> 
<rule context="text()"> 
<report test="starts-with(., ' ')">Text soll nicht 
mit Leerzeichen beginnen.</report> 
</rule> 
</pattern> 
</schema> 
<?xml version="1.0" encoding="UTF-8"?> 
<literatur> 
<buecher> 
<buch xml:id="b1"> 
<autor ref="p1">Mann, Thomas</autor> 
<titel>Der Zauberberg</titel> 
<isbn>978-3-596-29433-7</isbn> 
<href>http://d-nb.info/942764498</href> 
</buch> 
<buch xml:id="b2"> 
<autor ref="p2">Mann,Klaus</autor> 
<titel> Mephisto</titel> 
<isbn>3 10 046705 1</isbn> 
<href>http://d nb.info/959653694</href> 
</buch> 
<buch xml:id="b3"> 
[…] 
03_mehrere_Pruefungen.sch example_01.xml 
© Ovidius Seite 19
gute Fehlermeldungen 
<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://purl.oclc.org/dsdl/schematron"> 
<pattern> 
<rule context="isbn" role="error"> 
<assert test="contains(., '-')">ISBNs sollen mit Bindestrich geschrieben werden!</assert> 
<report test="string-length(.) != 17" role="info">Es sollen ISBN-13 verwendet 
werden</report> 
</rule> 
</pattern> 
<pattern> 
<rule context="text()" role="warn"> 
<report test="starts-with(., ' ')">Text soll nicht mit Leerzeichen beginnen.</report> 
</rule> 
</pattern> 
</schema> 
03_mehrere_Pruefungen_mit_unterschiedlichen_Schweregraden.sc 
h 
© Ovidius Seite 20
Zwischenstand 
 nur 6 Elemente genügen 
 schema, pattern, rule, assert/report 
 (ns) 
 die Mächtigkeit kommt aus XPath 
 So schwer ist das doch gar nicht! 
© Ovidius Seite 21
XPath für Anfänger 
→ Agenda
XML als Baum & Knotentypen 
0 
1 
2 
3 
9 
4 
5 
6 7 
8 
10 
11 
<wurzelelement> 
<eltern> 
<kind attribut="wert"> 
Text 
</kind> 
<kind attribut="value"> 
other text 
</kind> 
</eltern> 
<eltern> 
<!--Kommentar--> 
<?processing instruction?> 
</eltern> 
</wurzelelement> 
© Ovidius Seite 23
Achsenschritte I 
 / 
 /wurzelelement 
 /wurzelelement/eltern 
 //eltern 
 //kind/text() 
 //kind/@attribut 
 //* 
 //@* 
0 
1 
2 
3 
9 
<wurzelelement> 
4 
5 
6 7 
8 
10 
11 
<eltern> 
<kind attribut 
Text 
</kind> 
<kind attribut 
other text 
</kind> 
</eltern> 
<eltern> 
<!--Kommentar 
<?processing 
</eltern> 
</wurzelelement> 
© Ovidius Seite 24
Achsenschritte II 
 . 
 .. 
 ancestor::node() 
 descendant::text() 
 descendant-or-self::* 
 following::* 
 following-sibling::* 
 preceding::* 
0 
1 
2 
3 
9 
<wurzelelement> 
4 
5 
6 7 
8 
10 
11 
<eltern> 
<kind attribut 
Text 
</kind> 
<kind attribut 
other text 
</kind> 
</eltern> 
<eltern> 
<!--Kommentar 
<?processing 
</eltern> 
</wurzelelement> 
© Ovidius Seite 25
<wurzelelement> 
<eltern> 
<kind attribut="wert"> 
Text 
</kind> 
<kind attribut="value"> 
other text 
</kind> 
</eltern> 
<eltern> 
<!--Kommentar--> 
<?processing instruction?> 
</eltern> 
</wurzelelement> 
Filterausdrücke 
 //*[true()] 
 //*[parent::eltern] 
 //*[child::eltern] 
 //*[@attribut = "wert"] 
 //*[count(*) = 2] 
 //*[position() = 2] 
 //*[2] 
 //*[1]/*[2]/comment() 
© Ovidius Seite 26
Funktionen 
 count(), position(), not() 
 starts-with(), ends-with(), matches() 
 upper-case(), lower-case() 
 substring(), substring-before(), 
substring-after() 
 tokenize(), string-join() 
 doc() 
© Ovidius Seite 27
seltsame Funktionen 
 text(), comment(), processing-instruction(), 
document-node(), node() 
 Dies sind auch Knotentests! 
© Ovidius Seite 28
Operatoren und Ausdrücke 
 =, != 
 eq, ne, lt, gt 
 and, or, | 
 +, -, *, div, mod 
 (…, …) 
 if … then … else 
 for $i in … return 
 some/every $i in … satisfies … 
© Ovidius Seite 29
wichtige Konzepte von XPath 
 Kontextknoten 
 Datentypen 
 Knotentypen: Element, Attribut, Text-Knoten, 
Dokumenten-Knoten, Kommentar, PI 
 sind Teil des Baumes, mit Eltern und Kindern 
 atomare Werte: String, Integer, Datum usw. 
 sind nicht Teil des Baumes 
 Sequencen bzw. Listen 
© Ovidius Seite 30
Tools 
 OxygenXML 
 Editor und IDE für XML und XML-Techniken 
 sehr gute Unterstützung von Schematron 
beim Entwickeln und Prüfen 
 AntillesXML 
 GUI für verschiedene XML-Tools 
 kostenlos 
 Ant, Java, cmd/.bat … 
© Ovidius Seite 31
Diskussion 
→ Agenda
Was kann Schematron? 
 Haben alle Teilnehmer eine Vorstellung 
davon, was mit Schematron möglich ist? 
 Gibt es schon erste Ideen für eigene 
Prüfungen? 
© Ovidius Seite 33
Ein Blick aus der Vogelperspektive I 
 gute Fehlermeldungen 
 Fehler vs. Warnung 
 eindeutige Fehlerbeschreibung 
Fehlermeldung mit IDs oder Weblink 
 Schematron im Workflow der Technischen 
Redaktion 
 zur Überprüfung von Meilensteinen 
 als ständiger Begleiter 
 Anwender vs. Software-Entwickler 
© Ovidius Seite 34
Ein Blick aus der Vogelperspektive II 
 Schematron als Ergänzung von DTD/XML 
Schema 
 ermöglicht zusätzliche Prüfungen, ohne in 
die bestehende Infrastruktur eingreifen zu 
müssen 
 ermöglicht großzügige DTDs 
© Ovidius Seite 35
Schematron für Fortgeschrittene 
→ Agenda
value-of und let 
[…] 
<rule context="row[@type = 'dimensions']/cell[4]"> 
<let name="volumen" value="../cell[1] * ../cell[2] * ../cell[3] div 1000000"/> 
<assert test="false()" role="error">Das berechnete Volumen beträgt 
<value-of select="$volumen"/>l</assert> 
</rule> 
[…] 
demo.sch 
© Ovidius Seite 37
Phasen 
<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2"> 
<phase id="text"> 
<active pattern="text_01"/> 
</phase> 
<phase id="structure"> 
<active pattern="struct_01"/> 
<active pattern="calc_01"/> 
</phase> 
[…] 
<pattern id="text_01"> 
[…] 
<pattern id="struct_01"> 
[…] 
<pattern id="calc_01"> 
demo.sch 
© Ovidius Seite 38
externe Referenzen (lokal) 
<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2"> 
<pattern> 
<rule context="isbn" role="error"> 
<let name="current-isbn" value="text()"/> 
<assert test="doc('example_02.xml')//isbn/text()[. eq $current-isbn]">ISBN 
<value-of select="$current-isbn"/> nicht in externer Referenz 
aufgelistet.</assert> 
</rule> 
</pattern> 
</schema> 
04_externe_Referenzen.sch 
© Ovidius Seite 39
externe Referenzen (WebService) 
<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2"> 
<pattern> 
<rule context="isbn" role="error"> 
<let name="current-isbn" value="text()"/> 
<let name="query-url" 
value="concat('http://xisbn.worldcat.org/webservices/xid/isbn/', $current-isbn, 
'?method=fixChecksum&amp;format=xml')"/> 
<let name="result" value="doc($query-url)"/> 
<assert test="$result//*:isbn/text()[. eq $current-isbn]">ISBN <value-of 
select="$current-isbn"/> nicht in WebService gefunden.</assert> 
</rule> 
</pattern> 
</schema> 
04_externe_Referenzen_web.sch 
© Ovidius Seite 40
Praxistipps 
• technische vs. fachliche Probleme 
• Schemata in OxygenXML einbinden 
• gefährlicher =-Operator 
• solved-Attribute 
→ Agenda
Schematron für Profis 
→ Agenda
XSLT verwenden – Warum? 
 einfacher und übersichtlicher zu 
programmieren als reines XPath 
 zusätzliche Funktionen 
 Zugriff auf vorhanden 
Funktionsbibliotheken wie XSLT-SB 
© Ovidius Seite 43
XSLT verwenden – Wie gehts? 
1. XSLT-Namespace im Schematron 
deklarieren: 
<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://purl.oclc.org/dsdl/schematron" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
queryBinding="xslt2"> 
[…] 
© Ovidius Seite 44
XSLT verwenden – Wie gehts? 
2. Fremde Elemente bei der 
Schemaverarbeitung erlauben: 
© Ovidius Seite 45
XSLT verwenden – xsl:key und key() 
<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://purl.oclc.org/dsdl/schematron" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
queryBinding="xslt2"> 
<xsl:key name="myKey" match="person" 
use="@xml:id"/> 
<pattern id="p3"> 
<rule context="autor"> 
<assert test="key('myKey', @ref)">[p3] autor/@ref 
muss auf ein person/@xml:id verweisen</assert> 
</rule> 
</pattern> 
</schema> 
<?xml version="1.0" encoding="UTF- 
<literatur> 
<buecher> 
[…] 
<buch xml:id="b3"> 
<autor ref="b1"/> 
<titel/> 
</buch> 
</buecher> 
<autoren> 
<person xml:id="p1"> 
<vorname>Thomas</vorname> 
<nachname>Mann</nachname> 
</person> 
[…] 
05_SCH_mit_XSLT_key.sch example_01.xml 
© Ovidius Seite 46
XSLT verwenden – interne 
Funktionen 
<schema xmlns="http://purl.oclc.org/dsdl/schematron" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
queryBinding="xslt2"> 
<ns prefix="my" uri="test"/> 
<?xml version="1.0" encoding="UTF- 
<literatur> 
<buecher> 
[…] 
<buch xml:id="b2"> 
<xsl:function name="my:literal-autor" as="xs:string?"> 
<xsl:param name="vorname" as="xs:string?"/> 
<xsl:param name="nachname" as="xs:string?"/> 
<xsl:sequence select="concat($nachname, ', ', $vorname)"/> 
</xsl:function> 
<pattern id="p3"> 
<rule context="autor"> 
<assert test="my:literal-autor(//person[@xml:id eq 
<autor ref="p2">Mann,Klaus</autor 
<titel> Mephisto</titel> 
<isbn>3 10 046705 1</isbn> 
<href>http://d nb.info/959653694</ 
</buch> 
[…] 
</buecher> 
<autoren> 
<person xml:id="p1"> 
current()/@ref]/vorname, //person[@xml:id eq 
current()/@ref]/nachname) eq .">[p3] autor muss […] </assert> 
<vorname>Thomas</vorname> 
<nachname>Mann</nachname> 
</person> 
</rule> 
[…] 
[…] 
06_SCH_mit_interner_XSLT-Funktion.sch example_01.xml 
© Ovidius Seite 47
XSLT verwenden – externe 
Funktionen 
<schema xmlns="http://purl.oclc.org/dsdl/schematron" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
queryBinding="xslt2"> 
<ns prefix="my" uri="test"/> 
<xsl:include href="example_01.xsl"/> 
<pattern id="p3"> 
<rule context="autor"> 
<assert test="my:literal-autor(//person[@xml:id eq 
<?xml version="1.0" encoding="UTF- 
<literatur> 
<buecher> 
[…] 
<buch xml:id="b2"> 
<autor ref="p2">Mann,Klaus</autor 
<titel> Mephisto</titel> 
<isbn>3 10 046705 1</isbn> 
<href>http://d nb.info/959653694</ 
</buch> 
[…] 
</buecher> 
<autoren> 
<person xml:id="p1"> 
current()/@ref]/vorname, //person[@xml:id eq 
current()/@ref]/nachname) eq .">[p3] autor muss […] </assert> 
<vorname>Thomas</vorname> 
<nachname>Mann</nachname> 
</person> 
</rule> 
[…] 
[…] 
07_SCH_mit_externer_XSLT-Funktion.sch example_01.xml 
© Ovidius Seite 48
Diskussion 
• Fragen? 
• Diskussion? 
→ Agenda
zum Weiterlesen und Ausprobieren 
 Beispiele aus den Folien zum Download hier 
 Marko Hedler/Manuel Montero Pineda/Nico 
Kutscherauer: Schematron. Effiziente 
Business Rules für XML-Dokumente. 
Heidelberg: dpunkt.verlag, 2011. 
ISBN 978-3-89864-721-2 
 Dave Pawson/Roger Costello/Florent 
Georges: ISO Schematron tutorial. An 
introductroy guide. 2007. 
http://www.dpawson.co.uk/schematron/ 
 diverse Beiträge in meinem Blog 
© Ovidius Seite 50
Ihre Meinung ist uns wichtig! Sagen Sie uns bitte, wie Ihnen der Vortrag 
gefallen hat. Wir freuen uns auf Ihr Feedback per Smartphone oder Tablet 
unter http://OTS9.honestly.de oder scannen Sie den QR-Code 
Das Bewertungstool steht Ihnen auch noch nach der Tagung zur Verfügung! 
© Ovidius Seite 51

Más contenido relacionado

La actualidad más candente

TypeScript for Java Developers
TypeScript for Java DevelopersTypeScript for Java Developers
TypeScript for Java DevelopersYakov Fain
 
1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스Terry Cho
 
[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용NAVER D2
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20Amazon Web Services Korea
 
Amazon EFS (Elastic File System) 이해하고사용하기
Amazon EFS (Elastic File System) 이해하고사용하기Amazon EFS (Elastic File System) 이해하고사용하기
Amazon EFS (Elastic File System) 이해하고사용하기Amazon Web Services Korea
 
Releasing Software Quickly and Reliably with AWS CodePipline
Releasing Software Quickly and Reliably with AWS CodePiplineReleasing Software Quickly and Reliably with AWS CodePipline
Releasing Software Quickly and Reliably with AWS CodePiplineAmazon Web Services
 
Golang Project Layout and Practice
Golang Project Layout and PracticeGolang Project Layout and Practice
Golang Project Layout and PracticeBo-Yi Wu
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해Terry Cho
 
딥러닝을 활용한 뉴스 메타 태깅
딥러닝을 활용한 뉴스 메타 태깅딥러닝을 활용한 뉴스 메타 태깅
딥러닝을 활용한 뉴스 메타 태깅if kakao
 
Angular Best Practices - Perfomatix
Angular Best Practices - PerfomatixAngular Best Practices - Perfomatix
Angular Best Practices - PerfomatixPerfomatix Solutions
 
Python and CSV Connectivity
Python and CSV ConnectivityPython and CSV Connectivity
Python and CSV ConnectivityNeeru Mittal
 
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 

La actualidad más candente (20)

TypeScript for Java Developers
TypeScript for Java DevelopersTypeScript for Java Developers
TypeScript for Java Developers
 
1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스
 
[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
 
JavaScript Looping Statements
JavaScript Looping StatementsJavaScript Looping Statements
JavaScript Looping Statements
 
Amazon EFS (Elastic File System) 이해하고사용하기
Amazon EFS (Elastic File System) 이해하고사용하기Amazon EFS (Elastic File System) 이해하고사용하기
Amazon EFS (Elastic File System) 이해하고사용하기
 
Releasing Software Quickly and Reliably with AWS CodePipline
Releasing Software Quickly and Reliably with AWS CodePiplineReleasing Software Quickly and Reliably with AWS CodePipline
Releasing Software Quickly and Reliably with AWS CodePipline
 
Javascript frameworks
Javascript frameworksJavascript frameworks
Javascript frameworks
 
Golang Project Layout and Practice
Golang Project Layout and PracticeGolang Project Layout and Practice
Golang Project Layout and Practice
 
Begin with Python
Begin with PythonBegin with Python
Begin with Python
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해
 
Python recursion
Python recursionPython recursion
Python recursion
 
Introduction to JSON
Introduction to JSONIntroduction to JSON
Introduction to JSON
 
딥러닝을 활용한 뉴스 메타 태깅
딥러닝을 활용한 뉴스 메타 태깅딥러닝을 활용한 뉴스 메타 태깅
딥러닝을 활용한 뉴스 메타 태깅
 
Tuples in Python
Tuples in PythonTuples in Python
Tuples in Python
 
Intro to html 5
Intro to html 5Intro to html 5
Intro to html 5
 
Angular Best Practices - Perfomatix
Angular Best Practices - PerfomatixAngular Best Practices - Perfomatix
Angular Best Practices - Perfomatix
 
Python and CSV Connectivity
Python and CSV ConnectivityPython and CSV Connectivity
Python and CSV Connectivity
 
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
 
An introduction to MongoDB
An introduction to MongoDBAn introduction to MongoDB
An introduction to MongoDB
 

Similar a Schematron für Technische Redakteure

Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareAndreas Schreiber
 
Am Ende ist doch alles HTML (Jax 2010)
Am Ende ist doch alles HTML (Jax 2010)Am Ende ist doch alles HTML (Jax 2010)
Am Ende ist doch alles HTML (Jax 2010)Jens Grochtdreis
 
Python, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und RaumfahrtforschungPython, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und RaumfahrtforschungAndreas Schreiber
 
Am Ende ist doch alles HTML (Uni Mainz)
Am Ende ist doch alles HTML (Uni Mainz)Am Ende ist doch alles HTML (Uni Mainz)
Am Ende ist doch alles HTML (Uni Mainz)Jens Grochtdreis
 
Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)Sebastian Adler
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresMatthias Jauernig
 
Top 10 Internet Trends 2007
Top 10 Internet Trends 2007Top 10 Internet Trends 2007
Top 10 Internet Trends 2007Jürg Stuker
 
Agiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific LanguagesAgiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific LanguagesDominik Hirt
 
Suchmaschinenoptimierung für Professoren
Suchmaschinenoptimierung für ProfessorenSuchmaschinenoptimierung für Professoren
Suchmaschinenoptimierung für ProfessorenPascal Kremp
 
HTML5 - presentation at W3C-Tag 2009
HTML5 - presentation at W3C-Tag 2009HTML5 - presentation at W3C-Tag 2009
HTML5 - presentation at W3C-Tag 2009Felix Sasaki
 
Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Jürg Stuker
 
Top 10 Internet Trends 2004
Top 10 Internet Trends 2004Top 10 Internet Trends 2004
Top 10 Internet Trends 2004Jürg Stuker
 
magnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleunigermagnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleunigerThomas Kratz
 
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungEduard Hildebrandt
 
Developing UXD - weitere Tipps, Tricks und Argumente
Developing UXD - weitere Tipps, Tricks und ArgumenteDeveloping UXD - weitere Tipps, Tricks und Argumente
Developing UXD - weitere Tipps, Tricks und ArgumenteDeveloping UXD
 

Similar a Schematron für Technische Redakteure (20)

Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
 
Am Ende ist doch alles HTML (Jax 2010)
Am Ende ist doch alles HTML (Jax 2010)Am Ende ist doch alles HTML (Jax 2010)
Am Ende ist doch alles HTML (Jax 2010)
 
Web Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 BetaWeb Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 Beta
 
Python, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und RaumfahrtforschungPython, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und Raumfahrtforschung
 
Am Ende ist doch alles HTML (Uni Mainz)
Am Ende ist doch alles HTML (Uni Mainz)Am Ende ist doch alles HTML (Uni Mainz)
Am Ende ist doch alles HTML (Uni Mainz)
 
Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core Middlewares
 
Top 10 Internet Trends 2007
Top 10 Internet Trends 2007Top 10 Internet Trends 2007
Top 10 Internet Trends 2007
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
 
Agiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific LanguagesAgiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific Languages
 
Suchmaschinenoptimierung für Professoren
Suchmaschinenoptimierung für ProfessorenSuchmaschinenoptimierung für Professoren
Suchmaschinenoptimierung für Professoren
 
HTML5 - presentation at W3C-Tag 2009
HTML5 - presentation at W3C-Tag 2009HTML5 - presentation at W3C-Tag 2009
HTML5 - presentation at W3C-Tag 2009
 
Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Top 10 Internet Trends 2006
Top 10 Internet Trends 2006
 
Node.js
Node.jsNode.js
Node.js
 
Top 10 Internet Trends 2004
Top 10 Internet Trends 2004Top 10 Internet Trends 2004
Top 10 Internet Trends 2004
 
[DE] Glossar zu Dokumenten-Technologien | PROJECT CONSULT | Hamburg 2010
 [DE] Glossar zu Dokumenten-Technologien | PROJECT CONSULT | Hamburg 2010 [DE] Glossar zu Dokumenten-Technologien | PROJECT CONSULT | Hamburg 2010
[DE] Glossar zu Dokumenten-Technologien | PROJECT CONSULT | Hamburg 2010
 
Oracle Forms: How to create a Framework
Oracle Forms: How to create a FrameworkOracle Forms: How to create a Framework
Oracle Forms: How to create a Framework
 
magnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleunigermagnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleuniger
 
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
 
Developing UXD - weitere Tipps, Tricks und Argumente
Developing UXD - weitere Tipps, Tricks und ArgumenteDeveloping UXD - weitere Tipps, Tricks und Argumente
Developing UXD - weitere Tipps, Tricks und Argumente
 

Schematron für Technische Redakteure

  • 1. SCHEMATRON FÜR TECHNISCHE REDAKTEURE Stefan Krause – Ovidius GmbH, Berlin
  • 2. Ziele für den Workshop  Ich möchte Schematron populär machen.  Ich möchte erste oder zweite Schritte mit Ihnen gemeinsam gehen.  Was sind Ihre Ziele? © Ovidius Seite 2
  • 3. Agenda  Was kann Schematron?  Schematron für Anfänger  XPath für Anfänger  Diskussion  Schematron für Fortgeschrittene  Praxistipps  Schematron für Profis  Diskussion © Ovidius Seite 3
  • 4. über mich  Consultant/Application Developer bei der Ovidius GmbH (CMS-Anbieter)  davor 10 Jahre Projektmanager bei XML-lastigen Content-Digitalisierungsprojekten, vor allem für Archive, Bibliotheken und Verlage © Ovidius Seite 4
  • 5. Was kann Schematron? → Agenda
  • 6. Was kann Schematron I?  Texte inspizieren  verbotene Zeichen  »z.B.« vs. »z. B.«  Worte, die mit »u« anfangen © Ovidius Seite 6
  • 7. Was kann Schematron II?  Strukturen überprüfen  in Abhängigkeit von Attributen oder Text testen  Beispiel: Reihenfolge von Kapiteln  Beispiel: keine fette Schrift in kursiver Schrift  in Abhängigkeit von Berechnungen prüfen  Beispiel: Prozentangaben müssen sich zu 100% addieren © Ovidius Seite 7
  • 8. Was kann Schematron III?  informative, sachgerechte Fehlermeldungen ausgeben  mit beliebiger Detailliertheit  mit unterschiedlichen Schweregraden © Ovidius Seite 8
  • 9. Was kann Schematron IV?  auf externe Dateien und WebServices lesend zugreifen  (in WebServices schreiben) © Ovidius Seite 9
  • 10. demo.xml/demo.sch in OxygenXML © Ovidius Seite 10
  • 11. demo.xml/demo.sch in antillesXML © Ovidius Seite 11
  • 12. Was ist Schematron?  Schemasprache für XML-Dokumente  in Ergänzung zu DTD, XML Schema oder RNG  eher nicht für vollständige Grammatiken geeignet  ISO-Standard  Referenzimplementierung als Open Source  XPath als Abfragesprache  XSLT als Programmiersprache © Ovidius Seite 12
  • 13. Warum Schematron?  Es ist einfach!  Es ist leicht zu erlernen.  Tests sind einfach zu schreiben und zu warten.  Deshalb werden Tests möglich, die bei anderen Ansätzen wegen hohen Aufwänden nicht durchgeführt werden.  Es ist mächtig!  XPath ist eine vollständige Programmiersprache. © Ovidius Seite 13
  • 15. Hello World! <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://purl.oclc.org/dsdl/schematron"> <pattern> <rule context="/"> <report test="true()">Hello World!</report> </rule> </pattern> </schema> <?xml version="1.0" encoding="UTF-8"?> <literatur> <buecher> <buch xml:id="b1"> <autor ref="p1">Mann, Thomas</autor> <titel>Der Zauberberg</titel> <isbn>978-3-596-29433-7</isbn> <href>http://d-nb.info/942764498</href> </buch> <buch xml:id="b2"> <autor ref="p2">Mann,Klaus</autor> <titel> Mephisto</titel> <isbn>3 10 046705 1</isbn> <href>http://d nb.info/959653694</href> </buch> <buch xml:id="b3"> […] 01_Hello_World.sch example_01.xml © Ovidius Seite 15
  • 16. Hello World in OxygenXML © Ovidius Seite 16
  • 17. erste Prüfung <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://purl.oclc.org/dsdl/schematron"> <pattern> <rule context="isbn"> <report test="not(contains(., '-'))">ISBNs sollen mit Bindestrich geschrieben werden!</report> </rule> </pattern> </schema> <?xml version="1.0" encoding="UTF-8"?> <literatur> <buecher> <buch xml:id="b1"> <autor ref="p1">Mann, Thomas</autor> <titel>Der Zauberberg</titel> <isbn>978-3-596-29433-7</isbn> <href>http://d-nb.info/942764498</href> </buch> <buch xml:id="b2"> <autor ref="p2">Mann,Klaus</autor> <titel> Mephisto</titel> <isbn>3 10 046705 1</isbn> <href>http://d nb.info/959653694</href> </buch> <buch xml:id="b3"> […] 02_Erste_Pruefung.sch example_01.xml © Ovidius Seite 17
  • 18. erste Prüfung mit assert <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://purl.oclc.org/dsdl/schematron"> <pattern> <rule context="isbn"> <assert test="contains(., '-')">ISBNs sollen mit Bindestrich geschrieben werden!</assert> </rule> </pattern> </schema> <?xml version="1.0" encoding="UTF-8"?> <literatur> <buecher> <buch xml:id="b1"> <autor ref="p1">Mann, Thomas</autor> <titel>Der Zauberberg</titel> <isbn>978-3-596-29433-7</isbn> <href>http://d-nb.info/942764498</href> </buch> <buch xml:id="b2"> <autor ref="p2">Mann,Klaus</autor> <titel> Mephisto</titel> <isbn>3 10 046705 1</isbn> <href>http://d nb.info/959653694</href> </buch> <buch xml:id="b3"> […] 02_Erste_Pruefung_mit_assert.sch example_01.xml © Ovidius Seite 18
  • 19. mehrere Prüfungen <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://purl.oclc.org/dsdl/schematron"> <pattern> <rule context="isbn"> <assert test="contains(., '-')">ISBNs sollen mit Bindestrich geschrieben werden!</assert> <report test="string-length(.) != 17">Es sollen ISBN-13 verwendet werden</report> </rule> </pattern> <pattern> <rule context="text()"> <report test="starts-with(., ' ')">Text soll nicht mit Leerzeichen beginnen.</report> </rule> </pattern> </schema> <?xml version="1.0" encoding="UTF-8"?> <literatur> <buecher> <buch xml:id="b1"> <autor ref="p1">Mann, Thomas</autor> <titel>Der Zauberberg</titel> <isbn>978-3-596-29433-7</isbn> <href>http://d-nb.info/942764498</href> </buch> <buch xml:id="b2"> <autor ref="p2">Mann,Klaus</autor> <titel> Mephisto</titel> <isbn>3 10 046705 1</isbn> <href>http://d nb.info/959653694</href> </buch> <buch xml:id="b3"> […] 03_mehrere_Pruefungen.sch example_01.xml © Ovidius Seite 19
  • 20. gute Fehlermeldungen <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://purl.oclc.org/dsdl/schematron"> <pattern> <rule context="isbn" role="error"> <assert test="contains(., '-')">ISBNs sollen mit Bindestrich geschrieben werden!</assert> <report test="string-length(.) != 17" role="info">Es sollen ISBN-13 verwendet werden</report> </rule> </pattern> <pattern> <rule context="text()" role="warn"> <report test="starts-with(., ' ')">Text soll nicht mit Leerzeichen beginnen.</report> </rule> </pattern> </schema> 03_mehrere_Pruefungen_mit_unterschiedlichen_Schweregraden.sc h © Ovidius Seite 20
  • 21. Zwischenstand  nur 6 Elemente genügen  schema, pattern, rule, assert/report  (ns)  die Mächtigkeit kommt aus XPath  So schwer ist das doch gar nicht! © Ovidius Seite 21
  • 22. XPath für Anfänger → Agenda
  • 23. XML als Baum & Knotentypen 0 1 2 3 9 4 5 6 7 8 10 11 <wurzelelement> <eltern> <kind attribut="wert"> Text </kind> <kind attribut="value"> other text </kind> </eltern> <eltern> <!--Kommentar--> <?processing instruction?> </eltern> </wurzelelement> © Ovidius Seite 23
  • 24. Achsenschritte I  /  /wurzelelement  /wurzelelement/eltern  //eltern  //kind/text()  //kind/@attribut  //*  //@* 0 1 2 3 9 <wurzelelement> 4 5 6 7 8 10 11 <eltern> <kind attribut Text </kind> <kind attribut other text </kind> </eltern> <eltern> <!--Kommentar <?processing </eltern> </wurzelelement> © Ovidius Seite 24
  • 25. Achsenschritte II  .  ..  ancestor::node()  descendant::text()  descendant-or-self::*  following::*  following-sibling::*  preceding::* 0 1 2 3 9 <wurzelelement> 4 5 6 7 8 10 11 <eltern> <kind attribut Text </kind> <kind attribut other text </kind> </eltern> <eltern> <!--Kommentar <?processing </eltern> </wurzelelement> © Ovidius Seite 25
  • 26. <wurzelelement> <eltern> <kind attribut="wert"> Text </kind> <kind attribut="value"> other text </kind> </eltern> <eltern> <!--Kommentar--> <?processing instruction?> </eltern> </wurzelelement> Filterausdrücke  //*[true()]  //*[parent::eltern]  //*[child::eltern]  //*[@attribut = "wert"]  //*[count(*) = 2]  //*[position() = 2]  //*[2]  //*[1]/*[2]/comment() © Ovidius Seite 26
  • 27. Funktionen  count(), position(), not()  starts-with(), ends-with(), matches()  upper-case(), lower-case()  substring(), substring-before(), substring-after()  tokenize(), string-join()  doc() © Ovidius Seite 27
  • 28. seltsame Funktionen  text(), comment(), processing-instruction(), document-node(), node()  Dies sind auch Knotentests! © Ovidius Seite 28
  • 29. Operatoren und Ausdrücke  =, !=  eq, ne, lt, gt  and, or, |  +, -, *, div, mod  (…, …)  if … then … else  for $i in … return  some/every $i in … satisfies … © Ovidius Seite 29
  • 30. wichtige Konzepte von XPath  Kontextknoten  Datentypen  Knotentypen: Element, Attribut, Text-Knoten, Dokumenten-Knoten, Kommentar, PI  sind Teil des Baumes, mit Eltern und Kindern  atomare Werte: String, Integer, Datum usw.  sind nicht Teil des Baumes  Sequencen bzw. Listen © Ovidius Seite 30
  • 31. Tools  OxygenXML  Editor und IDE für XML und XML-Techniken  sehr gute Unterstützung von Schematron beim Entwickeln und Prüfen  AntillesXML  GUI für verschiedene XML-Tools  kostenlos  Ant, Java, cmd/.bat … © Ovidius Seite 31
  • 33. Was kann Schematron?  Haben alle Teilnehmer eine Vorstellung davon, was mit Schematron möglich ist?  Gibt es schon erste Ideen für eigene Prüfungen? © Ovidius Seite 33
  • 34. Ein Blick aus der Vogelperspektive I  gute Fehlermeldungen  Fehler vs. Warnung  eindeutige Fehlerbeschreibung Fehlermeldung mit IDs oder Weblink  Schematron im Workflow der Technischen Redaktion  zur Überprüfung von Meilensteinen  als ständiger Begleiter  Anwender vs. Software-Entwickler © Ovidius Seite 34
  • 35. Ein Blick aus der Vogelperspektive II  Schematron als Ergänzung von DTD/XML Schema  ermöglicht zusätzliche Prüfungen, ohne in die bestehende Infrastruktur eingreifen zu müssen  ermöglicht großzügige DTDs © Ovidius Seite 35
  • 37. value-of und let […] <rule context="row[@type = 'dimensions']/cell[4]"> <let name="volumen" value="../cell[1] * ../cell[2] * ../cell[3] div 1000000"/> <assert test="false()" role="error">Das berechnete Volumen beträgt <value-of select="$volumen"/>l</assert> </rule> […] demo.sch © Ovidius Seite 37
  • 38. Phasen <schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2"> <phase id="text"> <active pattern="text_01"/> </phase> <phase id="structure"> <active pattern="struct_01"/> <active pattern="calc_01"/> </phase> […] <pattern id="text_01"> […] <pattern id="struct_01"> […] <pattern id="calc_01"> demo.sch © Ovidius Seite 38
  • 39. externe Referenzen (lokal) <schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2"> <pattern> <rule context="isbn" role="error"> <let name="current-isbn" value="text()"/> <assert test="doc('example_02.xml')//isbn/text()[. eq $current-isbn]">ISBN <value-of select="$current-isbn"/> nicht in externer Referenz aufgelistet.</assert> </rule> </pattern> </schema> 04_externe_Referenzen.sch © Ovidius Seite 39
  • 40. externe Referenzen (WebService) <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2"> <pattern> <rule context="isbn" role="error"> <let name="current-isbn" value="text()"/> <let name="query-url" value="concat('http://xisbn.worldcat.org/webservices/xid/isbn/', $current-isbn, '?method=fixChecksum&amp;format=xml')"/> <let name="result" value="doc($query-url)"/> <assert test="$result//*:isbn/text()[. eq $current-isbn]">ISBN <value-of select="$current-isbn"/> nicht in WebService gefunden.</assert> </rule> </pattern> </schema> 04_externe_Referenzen_web.sch © Ovidius Seite 40
  • 41. Praxistipps • technische vs. fachliche Probleme • Schemata in OxygenXML einbinden • gefährlicher =-Operator • solved-Attribute → Agenda
  • 43. XSLT verwenden – Warum?  einfacher und übersichtlicher zu programmieren als reines XPath  zusätzliche Funktionen  Zugriff auf vorhanden Funktionsbibliotheken wie XSLT-SB © Ovidius Seite 43
  • 44. XSLT verwenden – Wie gehts? 1. XSLT-Namespace im Schematron deklarieren: <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://purl.oclc.org/dsdl/schematron" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" queryBinding="xslt2"> […] © Ovidius Seite 44
  • 45. XSLT verwenden – Wie gehts? 2. Fremde Elemente bei der Schemaverarbeitung erlauben: © Ovidius Seite 45
  • 46. XSLT verwenden – xsl:key und key() <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://purl.oclc.org/dsdl/schematron" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" queryBinding="xslt2"> <xsl:key name="myKey" match="person" use="@xml:id"/> <pattern id="p3"> <rule context="autor"> <assert test="key('myKey', @ref)">[p3] autor/@ref muss auf ein person/@xml:id verweisen</assert> </rule> </pattern> </schema> <?xml version="1.0" encoding="UTF- <literatur> <buecher> […] <buch xml:id="b3"> <autor ref="b1"/> <titel/> </buch> </buecher> <autoren> <person xml:id="p1"> <vorname>Thomas</vorname> <nachname>Mann</nachname> </person> […] 05_SCH_mit_XSLT_key.sch example_01.xml © Ovidius Seite 46
  • 47. XSLT verwenden – interne Funktionen <schema xmlns="http://purl.oclc.org/dsdl/schematron" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" queryBinding="xslt2"> <ns prefix="my" uri="test"/> <?xml version="1.0" encoding="UTF- <literatur> <buecher> […] <buch xml:id="b2"> <xsl:function name="my:literal-autor" as="xs:string?"> <xsl:param name="vorname" as="xs:string?"/> <xsl:param name="nachname" as="xs:string?"/> <xsl:sequence select="concat($nachname, ', ', $vorname)"/> </xsl:function> <pattern id="p3"> <rule context="autor"> <assert test="my:literal-autor(//person[@xml:id eq <autor ref="p2">Mann,Klaus</autor <titel> Mephisto</titel> <isbn>3 10 046705 1</isbn> <href>http://d nb.info/959653694</ </buch> […] </buecher> <autoren> <person xml:id="p1"> current()/@ref]/vorname, //person[@xml:id eq current()/@ref]/nachname) eq .">[p3] autor muss […] </assert> <vorname>Thomas</vorname> <nachname>Mann</nachname> </person> </rule> […] […] 06_SCH_mit_interner_XSLT-Funktion.sch example_01.xml © Ovidius Seite 47
  • 48. XSLT verwenden – externe Funktionen <schema xmlns="http://purl.oclc.org/dsdl/schematron" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" queryBinding="xslt2"> <ns prefix="my" uri="test"/> <xsl:include href="example_01.xsl"/> <pattern id="p3"> <rule context="autor"> <assert test="my:literal-autor(//person[@xml:id eq <?xml version="1.0" encoding="UTF- <literatur> <buecher> […] <buch xml:id="b2"> <autor ref="p2">Mann,Klaus</autor <titel> Mephisto</titel> <isbn>3 10 046705 1</isbn> <href>http://d nb.info/959653694</ </buch> […] </buecher> <autoren> <person xml:id="p1"> current()/@ref]/vorname, //person[@xml:id eq current()/@ref]/nachname) eq .">[p3] autor muss […] </assert> <vorname>Thomas</vorname> <nachname>Mann</nachname> </person> </rule> […] […] 07_SCH_mit_externer_XSLT-Funktion.sch example_01.xml © Ovidius Seite 48
  • 49. Diskussion • Fragen? • Diskussion? → Agenda
  • 50. zum Weiterlesen und Ausprobieren  Beispiele aus den Folien zum Download hier  Marko Hedler/Manuel Montero Pineda/Nico Kutscherauer: Schematron. Effiziente Business Rules für XML-Dokumente. Heidelberg: dpunkt.verlag, 2011. ISBN 978-3-89864-721-2  Dave Pawson/Roger Costello/Florent Georges: ISO Schematron tutorial. An introductroy guide. 2007. http://www.dpawson.co.uk/schematron/  diverse Beiträge in meinem Blog © Ovidius Seite 50
  • 51. Ihre Meinung ist uns wichtig! Sagen Sie uns bitte, wie Ihnen der Vortrag gefallen hat. Wir freuen uns auf Ihr Feedback per Smartphone oder Tablet unter http://OTS9.honestly.de oder scannen Sie den QR-Code Das Bewertungstool steht Ihnen auch noch nach der Tagung zur Verfügung! © Ovidius Seite 51

Notas del editor

  1. demo.xml, demo.sch