Wednesday 16 January 2008

XML communicatie

Gegevens kunnen op veel manieren worden uitgewisseld tussen verschillende machines. Eén van die manieren is middels XML. Om ervoor te zorgen dat gegevens altijd op dezelfde manier worden aangeleverd, ingelezen en uitgevoerd moeten er afspraken worden gemaakt, er moet een interface worden bepaald.

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: