Nápověda:Použití RELAX NG pro popis XML

Z VirtlabWiki

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
Verze z 09:48, 2. 9. 2007
Kuc274 (Diskuse | příspěvky)
(Info k RELAX NG)
← Předchozí porovnání
Verze z 10:08, 2. 9. 2007
Kuc274 (Diskuse | příspěvky)
(PHP)
Následující porovnání →
Řádka 1: Řádka 1:
== O co jde? == == O co jde? ==
-RELAX NG (REgular LAnguage for XML Next Generation) je jeden z mnoha jazyků pro popis struktury XML. Narozdíl od DTD, které je starší, umožňuje použití datových typů. Můžeme například specifikovat, že jde o číslo nebo řetězec a navíc určit jeho minimální a maximální hodnotu.+[http://relaxng.org/ RELAX NG] (REgular LAnguage for XML Next Generation) je jeden z mnoha jazyků pro popis struktury XML. Narozdíl od DTD, které je starší, umožňuje použití datových typů. Můžeme například specifikovat, že jde o číslo nebo řetězec a navíc určit jeho minimální a maximální hodnotu.
Např. chceme, aby element "heslo" byl řetězec s minimálně 4 a maximálně 20 znaky: Např. chceme, aby element "heslo" byl řetězec s minimálně 4 a maximálně 20 znaky:
Řádka 22: Řádka 22:
''Tento příkaz načte schéma ze souboru relax_schema.rng, zkontroluje, zda toto schéma neobsahuje syntaktickou chybu a poté jej aplikuje na xml soubor k validaci. Na výstup pak vypíše odpověď, zda soubor validací prošel nebo ne. Součástí výstupu je také celý validovaný soubor. Ten však nemusíme vždy chtít vypisovat - v tom případě použijeme ještě parametr -noout, který způsobí potlačení "zbytečných" výpisů.'' ''Tento příkaz načte schéma ze souboru relax_schema.rng, zkontroluje, zda toto schéma neobsahuje syntaktickou chybu a poté jej aplikuje na xml soubor k validaci. Na výstup pak vypíše odpověď, zda soubor validací prošel nebo ne. Součástí výstupu je také celý validovaný soubor. Ten však nemusíme vždy chtít vypisovat - v tom případě použijeme ještě parametr -noout, který způsobí potlačení "zbytečných" výpisů.''
 +
 +== Validace v PHP ==
 +Jazyk PHP (ve verzi 5) má přímo zabudovánu podporu pro validaci proti tomuto schématu. Jedná se o několik tříd z rodiny DOM (Document Object Model).
 +Pro validaci nám stačí napsat pouze pár řádků:
 +
 + $dom = new DOMDocument();
 + $dom->load("soubor_k_validaci.xml");
 + $vysledek = $d->relaxNGValidate("tady_je_RELAXNG_schema.rng");
 +
 +
 +Odkazy:
 +http://cz.php.net/manual/cs/ref.dom.php

Verze z 10:08, 2. 9. 2007

O co jde?

RELAX NG (REgular LAnguage for XML Next Generation) je jeden z mnoha jazyků pro popis struktury XML. Narozdíl od DTD, které je starší, umožňuje použití datových typů. Můžeme například specifikovat, že jde o číslo nebo řetězec a navíc určit jeho minimální a maximální hodnotu.

Např. chceme, aby element "heslo" byl řetězec s minimálně 4 a maximálně 20 znaky:

<element name="heslo">
  <data type="string">
    <param name="minLength">4</param>
    <param name="maxLength">20</param>
  </data>
</element>


Jak na to?

Přestože se nejedná o jazyk oficiálně schválený W3C (tato skupina vytvořila vlastní XML schéma), je hojně používaný (dokonce prý i některými pracovními skupinami ve W3C :-) ).

Pro validaci XML dokumentů proti RELAX NG existuje množství nástrojů. V linuxu je standardně obsažena utilitka xmllint, která dokáže XML validovat proti mnoha jazykům (DTD, W3C XML schema, RELAX NG,....)

Validace proti RELAX NG:

xmmlint -relaxng relax_schema.rng k_validaci.xml

Tento příkaz načte schéma ze souboru relax_schema.rng, zkontroluje, zda toto schéma neobsahuje syntaktickou chybu a poté jej aplikuje na xml soubor k validaci. Na výstup pak vypíše odpověď, zda soubor validací prošel nebo ne. Součástí výstupu je také celý validovaný soubor. Ten však nemusíme vždy chtít vypisovat - v tom případě použijeme ještě parametr -noout, který způsobí potlačení "zbytečných" výpisů.

Validace v PHP

Jazyk PHP (ve verzi 5) má přímo zabudovánu podporu pro validaci proti tomuto schématu. Jedná se o několik tříd z rodiny DOM (Document Object Model). Pro validaci nám stačí napsat pouze pár řádků:

$dom = new DOMDocument();
$dom->load("soubor_k_validaci.xml");
$vysledek = $d->relaxNGValidate("tady_je_RELAXNG_schema.rng");


Odkazy: http://cz.php.net/manual/cs/ref.dom.php