XPath a Schematron
Schematron
-
dovoluje kontrovat chyby, které na gramatice založené schémové jazyky nedokáží kontrolovat
-
sada podmínek zapsaná pomocí dotazovacího jazyka XPath
Příklad 1. Ukázka schématu ve Schematronu
<?xml version="1.0" encoding="utf-8"?>
<schema xmlns="http://purl.oclc.org/dsdl/schematron">
<pattern>
<title>Seznam zaměstnanců je neprázdný a máme na výplaty</title>
<rule context="zamestnanci">
<assert test="zamestnanec">V seznamu musí být alespoň
jeden zaměstnanec</assert>
<report test="sum(zamestnanec/plat) > 500000">Součet platů nemůže
být větší než 500.000,-</report>
</rule>
</pattern>
<pattern>
<title>Podmínky pro zaměstnance</title>
<rule context="zamestnanec">
<assert test="jmeno">U zaměstnance musí být zadáno jméno.</assert>
<assert test="prijmeni">U zaměstnance musí být zadáno příjmení.</assert>
<assert test="email">U zaměstnance musí být zadán e-mail.</assert>
<assert test="narozen">U zaměstnance musí být zadáno datum narození.</assert>
<assert test="@id">U zaměstnance musí být zadáno jeho osobní číslo.</assert>
<report test="jmeno[2]|prijmeni[2]">Zaměstnanec nemůže mít více
než jedno jméno.</report>
</rule>
</pattern>
<pattern>
<title>Duplicita osobních čísel</title>
<rule context="zamestnanec">
<report test="count(../zamestnanec[@id = current()/@id]) > 1">Duplicitní osobní číslo
<value-of select="@id"/> u elementu <name/>.</report>
</rule>
</pattern>
</schema>
-
přímou podporu Schematronu nabízí jen některé nástroje (včetně oXygenu)
-
v opačných případech je možné validaci nahradit transformací, která se ze schématu automaticky vygeneruje
Validace pomocí XSLT
Kromě samostatných knihoven a programů, které umějí provádět validaci oproti Schematronu, můžeme k použít libovolný XSLT procesor. Existuje totiž sada XSLT transformací, které ze Schematronového schématu vygenerují další transformaci XSLT. Takto vygenerovanou transformací pak zpracujeme dokument, který chceme validovat. Výsledkem validace je pak seznam chyb.
Validaci pro naše ukázkové schéma tak můžeme provést v následujících
krocích. Nejprve v několika postupných krocích vygenerujeme ze schématu
transformaci XSLT (validuj.xsl
):
saxon -o temp1.sch zamestnanci.sch iso_dsdl_include.xsl
saxon -o temp2.sch temp1.sch iso_abstract_expand.xsl
saxon -o validuj.xsl temp2.sch iso_schematron_message.xsl
Získanou transformací pak zpracujeme dokument, který chceme zvalidovat:
saxon zamestnanci-chyby.xml validuj.xsl
Součet platů nemůže být větší než 500.000,-
Duplicitní osobní číslo 102 u elementu zamestnanec.
Duplicitní osobní číslo 102 u elementu zamestnanec.
Domácí úkol
Procvičení Schematronu
Napište schéma ve Schematronu, které v dokumentu
objednavka.xml
zkontroluje následující:
-
V objednávce jsou položky pouze s jednou měnou (CZK/USD).
-
Velikost objednávky musí být menší než 18.000 CZK nebo 1000 USD.
-
Datum přijetí musí být menší než datum doručení.
-
Velikost jedné položky objednávky musí být nejméně 18 Kč nebo 1 USD.
Odevzdání: Na projektový disk odevzdejte soubor.sch
a
ukázkový dokument obsahující chybu pro každou z výše uvedených kontrol.
Schematronové schéma připojte k dokumentu v Oxygenu pomocí relativní cesty (menu: Document – Associate schema).