PHP DOM – Validation d’un document XML

En PHP, à travers l’API DOM, il est possible de vérifier la validité d’un document XML par rapport à une DTD. On utilise pour cela la méthode ‘validate’ de l’objet ‘DOMDocument’.

<?php
$dom = new DOMDocument;
$dom->Load('biblio.xml');
if ($dom->validate())
    {
    echo "Ce document est valide !\n";
    }
?>

On peut intégrer, suite à la validation, la gestion des éventuels messages d’erreur comme illustré dans le code qui suit :

<?php
$dom = new DOMDocument;
$dom->load('biblio.xml');
libxml_use_internal_errors(true);
if ($dom->validate())
    {
    echo 'Ce document est valide !';
    }
else
    {
    echo 'Document non valide:';
    $errors = libxml_get_errors();
    foreach ($errors as $error)
    {
    echo 'message: ('.$error->code.') '.$error->message.'';
    echo 'ligne: ' . $error->line . '';
    }
}
?>

Il est également possible de pousser plus avant la phase de validation en ayant recours non plus aux DTD mais aux schémas XML. Ceux-ci, définis par le W3C comme une alternative aux DTD, sont écrits en XML et permettent de préciser un ensemble de définitions et de contraintes appliquables aussi bien sur le contenu que sur la structure même d’un document XML.

On utilise pour ce type de validation la méthode ‘schemaValidate’ de l’objet ‘DOMDocument’.

<?php
$dom = new DOMDocument;
$dom->Load('biblio.xml');
if ($dom->schemaValidate('biblio.xsd'))
    {
    echo "Ce document est valide !\n";
    }
?>