In vroegere jaren werd dat gedaan door middel van een DTD (nog steeds een handige methode om je XML mee te defineren) maar ik geef toch de voorkeur aan XSD. In combinatie met het xs-schema van w3c is dit een erg simpele en mooie methode:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
Bij het inlezen van de XML kan je de XML (sinds PHP 5) valideren tegen het schema door gebruik te maken van DOM. Ik maak daarvoor gebruik van het volgende.
function XMLValidate() {
libxml_use_internal_errors(TRUE);
$dom = new DOMDocument;
$dom->preserveWhiteSpace = true;
$dom->resolveExternals = true; // for character entities
$dom->load($xml); // xml file
$result = $dom->schemaValidate($xsd); // xsd file
// catch errors
$errors = libxml_get_errors();
libxml_clear_errors();
if (0 < count($errors)) {
return $errors;
}
return $result;
}
Met een paar regels en een XSD heb ik nu een check kunnen doen of het aangeleverde bestand voldoet aan de afspraak die ik met de andere machines heb gemaakt.
IRL heeft me dit al een paar maal gered van een hoop gepriegel om aangeleverde gegevens op juistheid te controleren.
Linken:
W3C's XSD tutorial
PHP's $dom->schemaValidate()
No comments:
Post a Comment