Kontrola XML podle DTD

Školení, která pořádám

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.

Jakub Vrána, Řešení problému, 7.9.2005, diskuse: 4 (nové: 0)

Diskuse

Michal Molhanec:

Taky umí validovat oproti Relax NG (ne kompaktní) a XML schématu. Viz http://badame.vse.cz/izi248/slides/foil33.html

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL: Reakce na: Michal Molhanec

Michal 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

ikona Jakub Vrána OpenID:

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'.
avatar © 2005-2019 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.