Aangezien jullie interesse tonen om meer informatie te weten te komen over enkele PHP libraries zoals SOAP, heb ik besloten om deze reeks blogposts te beginnen met als onderwerp XML. Dit lijkt misschien een rare keuze. Aangezien SOAP gebaseerd is op XML, is het echter niet zo raar om dit eerst eventjes aan te halen. Het is altijd handig dat jullie allemaal weten waarvoor we XML nu juist gebruiken. XML wordt nu eenmaal zeer vaak gebruikt tegenwoordig.
In deze post begin ik dan ook met een basisuitleg over XML: wat is het, waarvoor gebruiken we het, dat soort vragen. Uiteraard ga ik het later ook nog hebben over het valideren van XML documenten (DTD, XML Schemas) en over hoe we een XML bestand kunnen opmaken (XSL). In een volgende post ga ik behandelen hoe we in PHP nu met XML kunnen werken.
Wat is XML?
XML (eXtensible Markup Language) is een woord dat je tegenwoordig overal hoort in de wereld van de softwareontwikkeling. Het is een taal die vaak gebruik wordt voor het communiceren tussen verschillende servers/computers. Deze taal bevat dan ook alleen maar data die semantisch is opgemaakt.
Voordelen
In de softwarewereld hebben we eigenlijk 2 soorten bestanden: een binair bestand en een tekstbestand. Beide bestanden zijn opgebouwd uit 0'n en 1'n. Bij een binair bestand bepaald de applicatie (vb. Adobe Photoshop) zelf wat deze bits betekenen. Vaak zijn deze bestanden dan ook nog is gecomprimeerd. Het komt er op neer dat wanneer er hier 1 bit verloren gaat het volledige bestand onleesbaar is - waardeloos is. In een tekstbestand daarentegen werken we gewoon met ASCII-code of Unicode. Het grote verschil dat hier van belang is is dat wanneer er 1 bit verloren gaat het bestand nog (deels) bruikbaar is.
Dat lijkt nu misschien nog nutteloos, dus laat me dat even uitleggen. Veel data uit de afgelopen 40 jaar zijn verloren gegaan, niet door natuurrampen of slechte back-upmedia, maar simpelweg omdat niemand ooit de moeite heeft gedaan hun bestandsformaat te documenteren. De meeste bedrijven kunnen hun Lotus 1-2-3-bestand dat is opgeslagen op een 15-jaar-oude 5,25-inch diskette niet meer teruglezen; toch niet zonder er zeer veel tijd en geld in te steken.
XML is gebaseerd op een tekstbestand. Als dat bedrijf 40 jaar geleden gebruik had kunnen maken van XML, dan was het nu veel makkelijker geweest om dat te lezen.
Een ander voordeel is dat XML leesbaar is, zowel voor de mens als voor de computer. Op basis van een goed stukje HTML-code zou iedereen in het land in staat moeten zijn om te achterhalen wat het betekent. Neem nu als voorbeeld dit stukje code:
<person id="508942" geslacht="M">
<naam>
<voornaam>Jos</voornaam>
<achternaam>Vermeulen</achternaam>
</naam>
<geboorte>
<datum>21 Aug 1989</datum>
</geboorte>
<dood>
<datum>21 Aug 2089</datum>
</dood>
</person>
Iets zegt mij dat iedereen wel kan achterhalen dat dit stukje XML een man genaamd Jos Vermeulen beschrijft die geboren is op 21 augustus 1989 en gestorven op 21 augustus 2089.
Waarvoor gebruik je XML?
Aangezien XML een semantische taal is, een structuurtaal, gebruik je het om semantiek te geven aan gestructureerde data. In theorie komt het er op neer dat het via XML mogelijk is om de computer de
betekenis en de
structuur van de data aan te leren. In de praktijk zijn we nog lang niet zo ver. We gebruiken het vooral om data door te geven van de eene machine naar de andere. Het schoolvoorbeeld is hier ongetwijfeld RSS. Hierdoor kunnen we de blogposts van op deze blog bekijken via een andere website of op ons bureaublad!
Hoe bouwen we een XML document?
Algemeen: vergelijkbaar met HTML
Het lijkt misschien onozel, maar XML is zeer goed te vergelijken met HTML. Ook XML is opgebouwd uit verschillende "tags", zoals <b> en <p>. Ook een XML element kan verschillende argumenten hebben, zoals <p class="lol">. Ook elke XML tag moet afgesloten worden. Er is echter 1 cruciaal verschil: een XML tag heeft geen betekenis. De tag <p>, die in HTML geassocieerd wordt met een paragraaf, kan in XML letterlijk alles betekenen: paard, person, papa en post.
Belangrijk om te weten is dat XML hiërarchisch is. Er is een soort van boomstructuur. Dat betekent dan ook dat er altijd 1 root element moet zijn, een element waaronder alle elementen vallen. Dit element kan overigens elke naam hebben, zoals bijvoorbeeld forum.
Regels
De meest logische regel is dat elk document moet voldoen aan de regels van de XML standaard. Dat houd onder andere in dat elk element afgesloten moet zijn. Dat houd ook in dat de naam van een element aan een aantal regels moet voldoen (dit zijn overigens grotendeels de standaard regels dat we ook hebben bij variabelen: geen spaties, a-z0-9_). Bij XML worden er wel een aantal regels toegevoegd: de naam mag niet beginnen met xml.
De andere regel is dat het XML document moet voldoen aan de semantische regels die worden opgesteld door het bijgeleverde XML Schema of het bijgevoegde DTD bestand. Hierop kom ik in een latere post nog wel eens terug...
Declaratie
Het is verplicht om een XML document te starten met:
<?xml version="1.0" encoding="utf-8"?>
Breed inzetbaar
Aangezien we in XML zelf onze tags en dergelijke kunnen aanmaken, is dit dan ook zeer breed inzetbaar. Om dit aan te tonen met behulp van een voorbeeld; met behulp van CML (Chemical Markup Language) ontworpen door Peter-Murray Rust en gebaseerd op XML is het mogelijk om verscheidene chemische dingen weer te geven in XML. Hieronder zie je een voorbeeld van een watermolecule in CML/XML:
<?xml version="1.0"?>
<cml
xmlns="http://www.xml-cml.org/schema/cml2/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.xml-cml.org/schema/cml2/core cmlCore.xsd">
<molecule title="Water">
<atomArray>
<atom id="a1" elementType="H" hydrogenCount="0" />
<atom id="a2" elementType="O" hydrogenCount="2" />
<atom id="a3" elementType="H" hydrogenCount="0" />
</atomArray>
<bondArray>
<bond atomRefs2="a1 a2" order="1" />
<bond atomRefs2="a2 a3" order="1" />
</bondArray>
</molecule>
</cml>