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) &gt; 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]) &gt; 1">Duplicitní osobní číslo
          <value-of select="@id"/> u elementu <name/>.</report>
    </rule>
  </pattern>
</schema>

Příklad ke stažení – download/schematron.zip


  • 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 trnasformací 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).