ASPNL logo (1 kb)
vrijdag 22 augustus 2008




Microsoft MVP

.NET Codewise Community
<< vorige | overzicht | volgende >>

Introductie tot XML

Door Michiel van Otegem
24 februari 2007

XML is een van de belangrijkste technologieën van de laatste jaren. Bijna alle nieuwe software die op de markt komt gebruikt XML. Toch is XML voor de meeste mensen iets ontastbaars. Wat is het en wat maakt het zo bijzonder?

XML, voluit Extensible Markup Language, is een manier om gegevens te beschrijven. XML is op zichzelf is heel eenvoudig en kan opgeslagen worden als tekst. Daar staat tegenover dat je aan XML alleen ook niet veel hebt. XML is namelijk in feite niet meer dan de grammatica van een taal. XML zelf omvat geen woorden, en om een taal te vormen heb je grammatica én woorden nodig. XML wordt daarom ook wel een meta-taal genoemd, omdat je er talen mee kunt "maken". Een dergelijk taal noemen we een XML formaat, en omdat alle formaten aan dezelfde grammatica voldoen, kun je ze op dezelfde manier behandelen. Je kunt dezelfde software dus gebruiken voor verschillende formaten. Zo kun je een XML editor gebruiken voor bijvoorbeeld CML (Chemical Markup Language) en SVG (Scalable Vector Graphics). Deze XML formaten, die je ziet in afbeelding 1 en 2, voor respectievelijk de chemie en het maken van vector afbeeldingen. Omdat ze allebei aan de regels van XML voldoen, weten we hoe we ze moeten lezen. Dat neemt overigens niet weg dat beide formaten beter te bewerken zijn met een specifieke CML of SVG editor, omdat daarmee specifiek aandacht besteed wordt aan het vocabulaire en doel van het betreffende formaat. Sterker nog, die editors zouden een weergave kunnen gebruiken die in niets doet denken aan XML. Er zijn bijvoorbeeld verschillende tekenprogramma’s die afbeeldingen kunnen opslaan als SVG. Het bewerken van SVG bestanden is net als ieder andere vectorafbeelding. Alleen bij het inlezen en opslaan maakt het uit dat de afbeelding is opgeslagen als SVG. Voor het inlezen en opslaan kunnen programma's die SVG ondersteunen wel een standaard XML "parser" kunnen gebruiken. Een XML parser is voor alle XML formaten identiek, omdat de parser alleen naar de grammatica kijkt, niet naar het vocabulaire en de daaraan verbonden betekenis. Daarom kan dezelfde parser ook gebruikt worden door bijvoorbeeld een CML editor.

   1:  <molecule convention="MDLMol" id="mols2" type="2D">
   2:    <date day="27" month="06" year="1998">
   3:    </date>
   4:    <atomArray>
   5:      <atom id="a1">
   6:        <string builtin="elementType">H</string>
   7:        <float builtin="x2">8.7542</float>
   8:        <float builtin="y2">-2.2417</float>
   9:      </atom>
  10:    </atomArray>
  11:  </molecule>
Afbeelding 1, Voorbeeld van Chemical Markup Language

   1:  <?xml version="1.0" standalone="no"?>
   2:  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
Afbeelding 2, Voorbeeld van Scalable Vector Graphics

De XML grammatica

Als we het over XML hebben, praten we over XML documenten. Een document kan een daadwerkelijk bestand zijn, maar het kan bijvoorbeeld ook onderdeel uitmaken van communicatie tussen twee systemen, zodat er geen fysiek bestand is. Een XML document bevat een of meerdere elementen . Als er meerdere elementen zijn, dan staan deze in een hiërarchische boomstructuur, net als de mappen op een harde schijf. Net als de harde schijf heeft de boomstructuur slechts één "wortel", het root element. De vraag die nu nog rest is "wat is een element?". Zoals gezegd is XML tekst, en een element is dan ook niets anders dan een markering. Deze markering wordt gemaakt aan de hand van zogenaamde tags, die we ook wel uit HTML kennen (maar met enkele subtiele verschillen). Een element ziet er als volgt uit:
<element></element>
Het eerste gedeelte is de begin-tag, en het gedeelte met de / de eind-tag. Tussen de begin- en de eind-tag kunnen andere elementen en/of tekst geplaatst worden. Doe je dit niet, dan mag je het voorbeeld hierboven ook schrijven als <element/>, waarbij de eind-tag onderdeel uitmaakt van de begin-tag. De tekst die tussen de begin- en eind-tag van een element staat is de waarde van dat element. Als er elementen tussen de begin- en eind-tag staan, dan zijn dat sub-elementen. Hierdoor ontstaat de hiërarchische structuur van een XML document. Een element kan naast sub-elementen en/of tekst ook attributen bevatten. Attributen zijn eigenschappen van een element, en worden in de begin-tag aangegeven met attribuut="waarde". Een attribuut mag maximaal één keer gebruikt worden in een element, dit in tegenstelling tot sub-elementen, waarvan er meerdere dezelfde elementen ingevoegd mogen worden. Afbeelding 3 dat een stoel beschrijft laat dit duidelijk zien.

   1:  <stoelen>
   2:    <stoel>
   3:      <poot hoogte="40"/>
   4:      <poot hoogte="40"/>
   5:      <poot hoogte="40"/>
   6:      <poot hoogte="40"/>
   7:      <leuning hoogte="60" breedte="40"/>
   8:    </stoel>
   9:  </stoelen>
Afbeelding 3, XML beschrijving van een stoel

De voordelen van XML

XML is voor alles erg eenvoudig. Zolang je je aan de grammaticaregels houdt, heb je goed gevormde (well-formed) XML, en heb je dus al iets dat gegevens bevat. XML is verder tekst en nog leesbaar door mensen ook, omdat de betekenis van de elementen en de attributen door de naam zelf wordt aangegeven. Je hoeft dus niet met allerlei vreemde tekens aan de gang, en je hoeft ook niet te gokken wat de betekenis is, zoals bijvoorbeeld met een kommagescheiden bestand. Je kunt XML daarom met iedere tekst editor wijzigen, hoewel er ook zeker meer geavanceerde tools zijn. XML leent zich door al deze eigenschappen onder andere goed voor configuratiebestanden. Microsoft is bijvoorbeeld voor dat soort bestanden van het al oude .ini formaat afgestapt ten faveure van XML. De grote kracht van XML is echter het universele karakter, en dat het een standaard is die ontwikkeld is door het W3 Consortium (W3C) dat ook onder andere HTML heeft ontwikkeld. Doordat het een standaard is en met de hiërarchische structuur van XML bijna alle gegevensstructuren te beschrijven zijn, is XML de meest universele manier om gegevens op te slaan en uit te wisselen. Zo kun je gegevens uit een relationele database eenvoudig vatten in een XML bestand, en is het mogelijk om een representatie van een object in een programma beschrijven. Het Simple Object Access Protocol (SOAP) maakt gebruik die objectrepresentatie bij het communiceren met andere machines.

XML lezen en bewerken

Om XML te lezen en bewerken kun je gebruik maken van verschillende methodes. Er zijn verschillende editors, maar je kunt zoals gezegd ook met een teksteditor werken. Voor ontwikkelaars is er de keuze uit het Document Object Model (DOM), Simple API for XML (SAX), en enkele platform specifieke mogelijkheden. DOM is een standaard van het W3C die gebruik maakt van de boomstructuur van XML. Met DOM kun je door de elementen en attributen heen lopen, en kun je bepaalde elementen selecteren. Met een groot XML document kunnen er echter problemen ontstaan, omdat het hele document hiervoor in het geheugen moet zitten. SAX, de de facto standaard naast DOM, heeft dat probleem niet, maar heeft ook nooit op een moment het hele document ter beschikking. Dit model werkt namelijk op basis van het aanroepen van bepaalde functionaliteit als een bepaald element of attribuut gevonden wordt. Het .NET Framework van Microsoft leunt zeer zwaar op XML, en heeft nog een derde interessante optie waarbij met een soort cursor door het bestand heen gelopen kan worden. In dat model, dat men de XmlReader noemt, heb je net als bij SAX weinig geheugen nodig, maar heb je meer controle dan SAX.
DOM, SAX, en de XmlReader zijn voorbeelden van XML parsers. Met een parser worden XML bestanden ingelezen om te kunnen gebruiken en bewerken. Met DOM kun je een document in het geheugen wijzigen en daarna wegschrijven. Omdat SAX en XmlReader geen representatie van een bestand in het geheugen hebben, kun je daarmee feitelijk alleen een nieuw document maken, en het oude document daarmee vervangen. Wil je XML echt manipuleren, kun je ongeacht het type parser ook gebruik maken van de Extensible Stylesheet Language Transformations (XSLT). Dit is een taal waarmee je een XML bestand kunt transformeren naar andere formaten, bijvoorbeeld HTML of platte tekst. Zoals je kunt zien in afbeelding 4 is XSLT zelf ook XML, en dus op dezelfde manier te lezen en bewerken. Voor het aanwijzen van elementen en attributen maakt XSLT gebruik van XPath, dat werkt op basis van paden en predikaten om te selecteren en te filteren. Om bijvoorbeeld uit een document als in Afbeelding 3 alle stoelen te selecteren met een leuning van 60 centimeter hoog, zou je de volgende expressie gebruiken: /stoelen/stoel[leuning/@hoogte=60]. XSLT en XPath zijn standaarden die net als XML door het W3C ontwikkeld zijn, en in combinatie met andere XML standaarden gebruikt kunnen worden. XPath wordt ook gebruikt in andere standaarden, zoals XPointer, en in de toekomst in XQuery dat momenteel nog onder ontwikkeling is. Neem voor informatie over deze en andere XML standaarden eens een kijkje op www.w3.org, de site van het W3C.

   1:  <?xml version="1.0" encoding="UTF-8"?>
   2:  <xsl:stylesheet version="1.0"
   3:    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   4:   
   5:    <xsl:template match="/">
   6:      <xsl:for-each select="stoelen/stoel">
   7:        <xsl:text>Stoel (hoogte x breedte): </xsl:text>
   8:        <xsl:value-of select="@hoogte" />
   9:        <xsl:text> x </xsl:text>
  10:        <xsl:value-of select="@breedte" />
  11:        <xsl:text>&#xA</xsl:text>
  12:      </xsl:for-each>
  13:    </xsl:template>
  14:  </xsl:stylesheet>
Afbeelding 4, XSLT voor het weergeven van stoelen

Topje van de ijsberg

XML omvat veel meer dan alleen de XML 1.0 specificatie, de basis van XML. Om XML heen zijn veel standaarden ontwikkeld die het werken met XML alleen maar beter en makkelijker maken. XML Schema, XML Namespaces, XSLT, XPath, XPointer, XLink, XHTML, XML Encryption en XML Signature, de lijst is aanzienlijk en nog steeds groeiende. XML wordt daarmee alleen maar belangrijker, en het zal ook niet lang meer duren voor vrijwel elk systeem met XML overweg kan. Het is zelfs niet ondenkbaar dat XML op den duur alle andere gegevens- en communicatieformaten zal vervangen.

Dit artikel is eerder verschenen in NetOpus, maart 2004.

<< vorige | ^ naar boven | overzicht | volgende >>
copyright 2000-2007 ASPNL