Kontrola XML podle DTD
Pokud chceme zkontrolovat např. uživatelem zadaná data obsahující HTML kód, je asi nejjednodušší využít rozšíření Tidy. Jak ale postupovat v případě, pokud chceme zkontrolovat obecný XML dokument podle jeho DTD (může se jednat např. o RSS nebo XHTML)? Elegantní řešení nabízí nové rozšíření PHP 5 DOM.
<?php // kontrola HTML $tidy = tidy_parse_file($filename, array("accessibility-check" => 1), "raw"); echo tidy_get_error_buffer($tidy); // kontrola XML proti obecnému DTD $dom = DOMDocument::load($filename); // ověří správnost XML $dom->validate(); // ověří XML proti použitému DTD ?>
V PHP 4 lze ke stejnému účelu použít funkci domxml_open_file s parametrem DOMXML_LOAD_VALIDATING. by to tak jednoduché nebylo, ve starém rozšíření DOM XML obdobná metoda dostupná pokud vím není a bylo by potřeba hledat jinde.
Diskuse
Michal Molhanec:
Taky umí validovat oproti Relax NG (ne kompaktní) a XML schématu. Viz http://badame.vse.cz/izi248/slides/foil33.htmlMichal Molhanec:
Jinak v PHP 4 by mělo stačit (nezkoušel jsem) funkco domxml_open_file() parametr DOMXML_LOAD_VALIDATING, viz http://www.php.net/manual/en/function.domxml-open-file.php
Jakub Vrána
:
Díky za upozornění. Vyzkoušel jsem to a opravdu to tak je. V textu jsem to opravil.


Petr:
Kontrola XML podle norem je hezká věc. Ale zrovna dělám jednu RSS čtečku a testuji to na řadě serverů a těch, které posílají různým způsobem vadné RSS, není zrovna málo. Takže pokud chci mít možnost načítat maximum zdrojů, tak stejně musím na normy 'kašlat'.Diskuse je zrušena z důvodu spamu.

