Pravidlo místo seznamu elementů
XSD může vyžadovat číslo; Schematron může vyžadovat, aby splatnost nebyla před vystavením nebo součet odpovídal položkám. Pravidlo se vyhodnocuje v uzlech určených context. Assert uspěje, když test vrátí true; report naopak hlásí splněnou podmínku.
Funkční příklad
Toto schéma používá základní vazbu xslt a XPath 1.0. Faktura musí mít alespoň jednu položku a celkem musí odpovídat součtu atributů cena. Výpočet je výukový: pro peníze v produkci použij definovaná desetinná a zaokrouhlovací pravidla.
<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt">
<pattern id="castky"><rule context="faktura">
<assert test="count(polozka) > 0">Chybí položky.</assert>
<assert test="number(@celkem) = sum(polozka/@cena)">Nesouhlasí součet.</assert>
</rule></pattern>
</schema> Výsledek a procesor
Procesor pravidla přeloží nebo interpretuje; často vytváří výsledky v XML formátu SVRL. U neúspěšných kontrol si přečti místo chyby a její vysvětlení. Samotný XML parser schéma nespustí a náš XSD/RELAX NG validátor Schematron neprovádí. Jednotlivé testy si můžeš ověřit v XPath testeru.
<faktura celkem="150"><polozka cena="100"/><polozka cena="50"/></faktura> Jmenné prostory a verze
Pro dokument v namespace deklaruj prefix přes element ns schématu a používej jej v context i test. Výchozí namespace zdrojového XML nestačí. Aktuální norma je ISO/IEC 19757-3:2025; existující procesory a fakturační sady mohou vyžadovat starší vydání a konkrétní queryBinding. Nepřepínej vazbu na xslt2/xslt3 bez podpory procesoru.
Spuštění základního schématu a čtení SVRL
xsltproc iso_svrl_for_xslt1.xsl faktura.sch > validator.xsl
xsltproc validator.xsl faktura.xml > report.svrl Ulož schéma z úvodu jako faktura.sch a dokument jako faktura.xml. Pro tento základní příklad použij XSLT 1.0 procesor xsltproc a soubory iso_svrl_for_xslt1.xsl a iso_schematron_skeleton_for_xslt1.xsl ze stejné release/verze ISO Skeleton implementace, ve stejné složce. První příkaz vytvoří validační stylesheet, druhý report. Historická implementace zde demonstruje základní vazbu xslt; není dokladem podpory všech vlastností normy 2025.
U platné faktury se v reportu nevyskytne failed-assert. Změň celkem ze 150 na 151 a znovu spusť druhý příkaz. Výsledek obsahuje neúspěšné tvrzení se zprávou Nesouhlasí součet. Úspěšný návratový kód XSLT transformace sám neznamená úspěšnou obchodní validaci: pro rozhodnutí musíš prohlédnout SVRL.
<svrl:failed-assert xmlns:svrl="http://purl.oclc.org/dsdl/svrl"
test="number(@celkem) = sum(polozka/@cena)" location="/faktura">
<svrl:text>Nesouhlasí součet.</svrl:text>
</svrl:failed-assert> V XPath nad reportem navaž svrl na uvedené URI a hledej //svrl:failed-assert. Report může obsahovat i successful-report; aplikace musí mít dohodnuté závažnosti. Pro schémata používající include či abstract patterns je potřebný další předzpracovací krok; výše uvedené dva příkazy jsou určeny jednoduchému schématu bez těchto konstrukcí.
Pravidla pro dokument se jmenným prostorem
<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt">
<ns prefix="f" uri="urn:faktury"/>
<pattern><rule context="f:faktura">
<assert test="count(f:polozka) > 0">Faktura nemá položky.</assert>
</rule></pattern>
</schema> Pro <faktura xmlns="urn:faktury"> nebude pravidlo s prostým context=faktura odpovídat. To může vést k prázdnému reportu, který se omylem vyhodnotí jako úspěch. Vedle chyb kontroluj, zda se očekávaná pravidla skutečně aktivovala, a testuj alespoň jeden dokument, který je má porušit. XSD ověření namespace a struktury proto nech před Schematronem.