English | >> česky <<ZVON > Tutorials > Schematron Tutorial
>> Příklad 16 << | Předešlý | Následující | Obsah

Autor: Jelliffe Rick

Popis

Příklad vzorů (patterns) pro ověřování vztahů typu ID/IDREF

Schema


<schema xmlns="http://www.ascc.net/xml/schematron" >
     <pattern name="Vyžadované ID">
          <rule context="cat | dog">
               <assert test="@id">Element typu
                    <name/> má mít atribut "id", který je jedinečným identifikátorem zvířete.
               </assert>
          </rule>
     </pattern>
     <pattern name="Vyžadované IDREF">
          <rule context="catowner">
               <assert test="@pet">Element typu
                    <name/> má mít atribut "pet".
               </assert>
          </rule>
     </pattern>
     <pattern name="IDREF má odkazovat na ID použité v tom samém dokumentu">
          <rule context="catowner[@pet]">
               <assert test="id(@pet)">Element typu
                    <name/> má odkazovat na ID použité v tom samém dokumentu
               </assert>
          </rule>
     </pattern>
     <pattern name="IDREF má odkazovat na ID, ovšem jen pro určitý typ elementu">
          <rule context="catowner[@pet]">
               <assert test="(name(id(@pet)) ='cat')"> Element typu
                    <name/> má mít atribut "pet", který má obsahovat jednoznačný odkaz na element "cat".
               </assert>
          </rule>
     </pattern>
</schema>

Zdroje a výstupy

Zdroj (XML 1)Výstup


<!DOCTYPE ideg
[
<!ELEMENT ideg    ( dog, cat, catowner+ )>
<!ELEMENT dog     ( #PCDATA )>
<!ELEMENT cat      ( #PCDATA )>
<!ELEMENT catowner ( #PCDATA )>
<!ATTLIST dog  id ID #REQUIRED >
<!ATTLIST cat   id ID #REQUIRED >
<!ATTLIST catowner  pet IDREF #REQUIRED>
]>
<ideg>
        <dog  id="danny"            >Danny</dog>
        <cat   id="bede"              >Bede</cat>
        <catowner >Harold</catowner>
        <catowner pet="poochi" >Fumiaki</catowner>
        <catowner pet="danny"   >Jimmy</catowner>
        <catowner pet="bede"    >Rick</catowner>
</ideg>

 Pattern: Vyžadované ID

 Pattern: Vyžadované IDREF
/ideg/catowner[1]: Element typu catowner má mít atribut "pet".

 Pattern: IDREF má odkazovat na ID použité v tom samém dokumentu
/ideg/catowner[2]: Element typu catowner má odkazovat na ID použité v tom samém dokumentu

 Pattern: IDREF má odkazovat na ID, ovšem jen pro určitý typ elementu
/ideg/catowner[2]: Element typu catowner má mít atribut "pet", který má obsahovat jednoznačný odkaz na element "cat".
/ideg/catowner[3]: Element typu catowner má mít atribut "pet", který má obsahovat jednoznačný odkaz na element "cat".