» direct naar zoek en menu

Tijdschrift voor webwerkers » Artikel #18

XML - Interoperabiliteit

XML (de eXtensible Markup Language) is de laatste jaren uitgegroeid van buzzword tot een onmisbaar onderdeel van de IT-branche. De beheerders van de XML standaard bevinden zich in het W3C.

Dit artikel geeft een overzicht van wat XML is. Het begint met waar we heen gaan met het WWW en waarom XML daar onlosmakelijk deel van uitmaakt. Ik ga in op de eigenschappen en syntax van XML, waarna een kort overzicht van de praktische toepassingen volgt.

De toekomst van het Web

Interoperabiliteit
Twintig jaar geleden schafte je software aan die uitsluitend werkte met andere software van dezelfde leverancier. Tegenwoordig is er meer keuzevrijheid: softwarecomponenten zullen uitwisselbaar moeten zijn. Communicatie tussen systemen moet naadloos verlopen. Het ene systeem moet met het andere kunnen praten, zonder spraakverwarring.

Niet alleen tussen systemen, ook naar een willekeurige eindgebruiker toe moet communicatie mogelijk zijn. Gebruikers van het Web verwachten dat ze met de door hen gekozen software de inhoud van het Web kunnen benaderen, of dit nu verloopt middels een grafische desktop, spraakherkenning of brailleleesregels. Ook hardware speelt hier een rol: het Web moet te gebruiken zijn via PDA, XDA, GSM of autotelefoon.

Marketeers willen de ene doelgroep aanspreken met een groene vormgeving en de andere met een blauwe. Behalve naar verschillende apparaten, moeten systemen dus dezelfde inhoud kunnen publiceren in verschillende verschijningsvormen.

Al deze vormen van uitwisseling vallen onder de noemer interoperabiliteit. Interoperabiliteit is één van de belangrijkste steekwoorden voor het toekomstige Web, en XML zal hier een sleutelrol in spelen.

Vorm en inhoud
Een eerste belangrijk inzicht dat volgt uit interoperabiliteit is, dat van een willekeurige uitvoer van een systeem de vorm en de inhoud gescheiden moeten zijn.

Als een systeem communiceert met meerdere andere systemen, is het erg wenselijk dat het eerste systeem alleen inhoud (data) communiceert. De vormgeving van die data mag niet al vastgelegd zijn. Wat ze met de aangeleverde data doen mogen de externe systemen zelf bepalen.

Als je de uitvoer van een applicatie naar meerdere soorten apparaten wilt laten publiceren, is het heel belangrijk de eigenschappen van deze uitvoer te scheiden in vorm en inhoud. Voor ieder apparaat, of het nu braille of tekst produceert, moet de inhoud gelijk zijn: immers, de boodschap zelf verandert niet. De vorm is echter compleet anders per apparaat: braille levert voelbare puntjes, de autotelefoon tekst of wellicht spraak als uitvoer. Vorm en inhoud moeten dus gescheiden blijven, zodat de vorm kan worden aangepast zonder dat dit de inhoud verandert.

Natuurlijk geldt dat óók wanneer er door een systeem naar verschillende doelgroepen wordt gepubliceerd. Om er voor te kunnen zorgen dat de ene doelgroep wordt getrakteerd op een zonnig weerbericht in een donkere verschijningsvorm die appelleert aan hun liefde voor Gothic, en de techno-liefhebbers op dezelfde weersvoorspelling in fabrieksstijl, moeten vorm en inhoud gescheiden zijn.

Betekenis
Tegenwoordig deelt men kennis op het Web in talen die inhoudelijk niet geschreven zijn voor specifieke toepassingen, maar wel syntactisch algemeen toepasbaar zijn: ze zijn generiek. Dat leidt echter nog steeds tot systemen die niet kunnen communiceren met elkaar, omdat de taal van applicaties weliswaar gelijk is (in het beste geval), maar de betekenis (ofwel naamgeving) van termen niet overeen stemt.

Om een voorbeeld te geven: de meeste systemen maken gebruik van een gebruikersdatabase. Laten we er van uit gaan dat, toevalligerwijze, de programmeertaal van 2 willekeurige systemen hetzelfde is. Syntactisch is er dus geen belemmering voor communicatie, want beide systemen spreken dezelfde taal. De kans is echter groot dat voor een gebruiker in beide systemen een andere term wordt gebruikt: in het ene systeem heet de variabele voor een gebruiker een “user”, in het andere “gebruiker”. Omdat je computers altijd alles moet voorkauwen, zullen deze systemen zonder hulp niet met elkaar kunnen babbelen over hun gebruikers, omdat ze elkaar niet begrijpen.

Het tweede belangrijke inzicht (na het gescheiden houden van vorm en inhoud) is dat er dus een methode moet komen waarin geregeld wordt dat de betekenis van woorden voor verschillende systemen duidelijk is. Systeem 1 moet dus weten dat systeem 2 “user” bedoelt als hij een waarde voor “gebruiker” doorgeeft.

Over dit probleem is door veel mensen nagedacht, en er zijn inmiddels oplossingen gevonden. Op het Semantisch Web (semantiek = het geven van betekenis van de taal) zullen we ons zodanig uit kunnen drukken dat onze computers in staat zijn tot interpretatie en uitwisseling. Dat dit grote voordelen heeft, is duidelijk: meer communicatie tussen allerlei systemen zou flink helpen om datgene wat je zoekt snel te kunnen vinden: medische informatie, een filmrecensie, een boekbestelling, etcetera. En dat alles uit verschillende, vroeger niet compatibele databases.

De W3C-talen RDF (The Resource Description Framework), digital signatures en XML zijn de basis van het Semantisch Web. Omdat dit artikel nu eenmaal over XML gaat, maak ik aan de eerste twee verder geen kostbare woorden vuil.

XML

W3C
Het World Wide Web Consortium (W3C) is in oktober 1994 opgericht met als doel het Web tot zijn volle potentieel te ontwikkelen, oneder meer door gemeenschappelijke protocollen te ontwikkelen die de groei van het Web bevorderen en interoperabiliteit garanderen.

Het W3C creëert Webstandaarden. De standaarden HTML en XML zijn bijvoorbeeld onder hun beheer. De missie is: als forum voor informatie, handel, inspiratie, onafhankelijke gedachte en gemeenschappelijk begrip het potentieel van het Web ten volle benutten door het ontwikkelen van technologieën (specificaties, handleidingen, software en tools).

XML
Wat is XML nu eigenlijk? XML is bedoeld om de twee inzichten die ik eerder noemde, te faciliteren. Het gebruik van XML zorgt er voor dat tijdens communicatie tussen systemen:

XML (de eXtensible Markup Language) is gebaseerd op de Standard Generalized Markup Language, net als HTML en bijvoorbeeld LaTeX. SGML is eigenlijk de moeder van al deze opmaaktalen, en echt alleen bedoeld om tekst op te maken in een bepaalde structuur. SGML kent al de ‘tags’ die binnen HTML zo’n grote rol spelen.

Waarom is HTML alleen niet meer voldoende? Eigenlijk is dat in het vorige paragraafje al naar voren gekomen. Het Web is tegenwoordig geëvolueerd tot een verzameling interfaces voor allerhande applicaties. Deze applicaties spuugden tot voor kort voornamelijk HTML uit naar browsers op PC’s, die dat op overigens onnavolgbare wijze ieder op hun eigen manier interpreteerden.

Nu er veel meer verschillende kanalen zijn, zoals PDA’s, GSM’s, maar ook browsers met verschillende resoluties en schermgroottes en nog veel meer, die allemaal vragen om output van diezelfde applicaties, voldoet HTML niet meer. In HTML zitten inhoud en vorm verweven, wat het moeilijk maakt dezelfde inhoud voor ieder apparaat anders te presenteren.

SGML en XML zijn gericht op het markeren van de logische structuur van een document, onafhankelijk van de toepassing. Zo staan vorm en inhoud van een document los van elkaar. De mogelijke toepassingen zijn legio, zoals opslag en verfijnde publicatie van objecten binnen een document management systeem, aansturen van zetsystemen, berichtenverkeer zoals met EDI (Electronic Data Interchange), browsing en hyperlinking naar elk gewenst object.

Het gebruiken van XML doe je eigenlijk met drie middelen: XML, XSL (eXtensible Style Sheet) en DTD (Document Type Definition). Deze drie middelen staan voor de drie onderdelen van publicatie, namelijk inhoud (XML), vorm (XSL) en betekenis (DTD).

XML wordt dus gebruikt als drager van louter inhoud, oftewel data. De bij een XML document horende XSL (ook wel genoemd XSLT) bepaalt voor een specifiek uitvoerkanaal hoe deze data precies vormgegeven wordt.

Een DTD vertelt de ontvangende applicatie precies wat het verband is tussen betekenissen die hij kent, en de inhoud van het XML document wat de DTD beschrijft.

XML voorbeeld
XML zou een universele syntax moeten zijn, die iedere applicatie kan begrijpen, mits je er de juiste informatie bij meestuurt.

De structuur van een XML document lijkt erg op dat van een HTML document. Tussen vishaken staan “tags”, eventueel gevolgd door “attributen” met waarden. De tags komen gepaard voor als start- en endtags. Zij omgeven een documentdeel dat op zichzelf ook weer documentdelen kan bevatten. Een voorbeeld is het volgende, waarin Sander een tweetal aantekeningen maakt voor Mascha.

<?xml version="1.0" encoding="ISO8859-1" ?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Mascha</to>
<from>Sander</from>
<heading>Let op</heading>
<body>Het konijn is los, dus pas op het bankstel!</body>
</note>
<note>
<to>Mascha</to>
<from>Sander</from>
<heading>Niet vergeten</heading>
<body>We gaan morgen naar het Vondelpark met Zoran</body>
</note>

Dit voorbeeld bevat dus enkel inhoud, er staan geen specificaties in met betrekking tot vormgeving.

DTD voorbeeld
Welke onderdelen een XML document bevat, wat ze betekenen en in welke volgorde, staat in een Document Type Definition (“DTD”). In een DTD wordt ook vastgelegd waar in een document extra informatie opgenomen kan worden, zoals verwijzingen naar externe documentdelen, figuren, beeld en geluid, hypertext links en het gebruik van bijzondere schriftsoorten. Eigenlijk bepaal je in een DTD wat de afspraken zijn binnen het bijgaande XML document.

Dit is een voorbeeld van een DTD, wat aansluit op het XML voorbeeld “note”.

<?xml version="1.0"?>
<!DOCTYPE note
[ <!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)> ]>

Dit voorbeeld geeft aan wat voor soort inhoud de ontvanger van het vorige stuk XML mag verwachten. Na het doornemen van de DTD weet de ontvanger wat hij op de diverse posities binnen het XML document mag verwachten.

XML is eigenlijk dus ook geen taal, maar een omgeving, waarbinnen je je eigen syntax kunt geven aan data. Over die syntax moet je wel afspraken maken, want, om even op het eerdere voorbeeld terug te komen, een DTD vertaalt geen “gebruikers” in “users”. Een DTD geeft alleen aan, dat het zoveelste veld van een XML document de inhoud van “user” gevonden kan worden (bijvoorbeeld een achternaam van een gebruiker).

De semantiek, de betekenis, van een data element, wordt niet vastgelegd in een DTD. Daarover zullen nog steeds afspraken moeten worden gemaakt. Om een vergelijking te maken: XML kun je vergelijken met een schrift, zoals ons Latijnse schrift, waarmee nog verschillende talen kunnen worden gesproken en waarvan je dus niet per definitie alle woorden kent. Een DTD laat zien waar je welke woorden kunt vinden, maar niet persé wat ze betekenen. Er zijn natuurlijk wel een hele hoop tags die min of meer standaard zijn, maar je bent vrij om zelf termen te bedenken. Die algemene tags kun je een beetje vergelijken met Esperanto: het maakt gebruik van het standaard schrift en probeert een algemene semantiek te leveren.

XSL voorbeeld
Een XSL of XSLT wordt gebruikt om de uiteindelijke output in het juiste formaat en vorm af te leveren. Een XSL bepaalt dus in welke taal (HTML, WML, enzovoort) de uitvoer wordt omgezet, maar ook hoe de vormgeving er uit ziet.

Dit stukje voorbeeldcode vormt de twee “notes” om naar HTML output. Als het meer dan twee notes waren geweest, had overigens dezelfde XSL gebruikt kunnen worden.

<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Note</th>
</tr>
<xsl:for-each select="Note">
<tr>
<td>
<xsl:value-of select="To" />
</td>
<td>
<xsl:value-of select="From" />
</td>
<td>
<xsl:value-of select="Heading" />
</td>
<td>
<xsl:value-of select="Body" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Hoe pas je XML toe?
XML kan, kort gezegd, toegepast worden als er communicatie plaatsvindt tussen willekeurige apparaten of systemen. Er zijn eigenlijk een drietal toepassingsmogelijkheden voor XML binnen de ontwikkeling voor het Web:

  1. tussen applicatie en interface apparaat;
  2. tussen applicatie en applicatie;
  3. binnen een applicatie.

1. XML tussen applicatie en interface apparaat
In dit geval wordt XML gebruikt om te communiceren tussen een applicatie en een willekeurig output-apparaat, bijvoorbeeld een PC met een browser. In dat geval is er een specifieke XSL die de XML data omzet in HTML, wat de browser kan lezen.

Het voordeel van XML is hier onmiskenbaar: je zou voor een ander apparaat, zoals een mobiele telefoon met een WML browser, een andere XSL kunnen meesturen, die de inhoud weliswaar gelijk houdt, maar de output-taal en de vormgeving aanpast aan de andere dimensies en technologie van de telefoon. Zo kun je voor meerdere apparaten XSL's hebben klaarstaan.

Natuurlijk is het ook weer zo, dat een ander apparaat vaak vraagt om het sturen van andere data. De gebruikers van iMode bijvoorbeeld vallen in een heel specifieke doelgroep, die om een specifieke benadering vraagt. Een oplossing is dan niet alleen een andere XSL te gebruiken, maar ook een andere uitvoer te vragen van de applicatie. Een deel van het voordeel van het gebruiken van XML valt dan weg.

2. XML tussen applicatie en applicatie
Tussen applicaties wordt XML vaak gebruikt als transportmiddel van data. Volgens een in de DTD gespecificeerd formaat krijgt de ontvangende partij informatie van de ander. Dit gebeurt bijvoorbeeld binnen bedrijfstakken, waarin universele afspraken zijn gemaakt over de te gebruiken XML. Dit is bijvoorbeeld wat MS Biztalk doet: het verbinden van remote applicaties middels XML. Binnen zo'n afsprakenset weet dus ieder systeem precies wat de termen in een DTD ook daadwerkelijk betekenen.

Wat dichter bij huis voor veel mensen is het tussenvoegen van bijvoorbeeld beursinformatie van de AEX op een website. Vaak wordt er vanuit een centrale AEX server een XML bestand opgestuurd met daarin de laatste beursgegevens. Op grond van de in de DTD vastgelegde afspraken, giet de XSL op de server van de website het AEX XML data bestand in de vormgeving van de site zelf. De XML en DTD worden gemaakt door de mensen van de AEX server, de XSL door de ontwikkelaar van de website. Het grote voordeel hier van is dat de AEX zich niet meer met vormgeving hoeft bezig te houden. De eigenaar van de website kan nu zelf beslissen hoe het er allemaal uit moet zien. Bovendien kan hij dit ook op ieder willekeurig moment aanpassen.

3. XML binnen een applicatie
Wat steeds vaker gebeurt, is dat XML wordt gebruikt als transportmiddel van data binnen één enkele applicatie. Vaak is van tevoren niet helemaal duidelijk welk formaat output er in de toekomst gepubliceerd zal moeten worden vanuit de applicatie, en dus is het verstandig XML te laten genereren door het deel van de applicatie dat de inhoud bij elkaar sprokkelt uit bijvoorbeeld een database.

Het deel van de applicatie dat verantwoordelijk is voor de presentatie kan de XML dan naar een ander apparaat (zoals een PC met browser) doorsturen met de bijbehorende XSL. Het presentatiegedeelte van de applicatie kan ook zelf (server-side) de XML in een uitvoerformaat als HTML omzetten, en dan pas opsturen naar een ander apparaat. De keuze hiervoor is mede afhankelijk van het soort interface apparaat dat hier een rol speelt.

Conclusie

Interoperabiliteit is een sleutelwoord in de ontwikkelingen op het web van de komende jaren. Meer vrijheid van keuze van soft- en hardwarecomponenten vereist een data formaat dat uitwisselbaar is, onafhankelijk van het gekozen interface-apparaat.

XML is een data formaat dat gericht is op het markeren van de logische structuur van een document, onafhankelijk van de toepassing. Zo staan presentatie en inhoud van een document los van elkaar: de verschijningsvorm van de inhoud is op die manier variabel.

XML levert een universele syntax, die iedere applicatie kan begrijpen, mits je er de juiste informatie bij meestuurt.

Bronnen

» xmlfiles.com |
» w3c.org |
» www.sgml-ug.nl |
» xml.org |
» zvon.org/HTMLonly/XSLTutorial/Books/Book1/

Auteur

Sander Nagtegaal

is een liefhebber. Oorspronkelijk een geofysicus, raakte hij al snel verslingerd aan de veel snellere Internet-wereld. Vooral ontwikkelmethodes en het modelleren van applicaties (UML, OO) hebben zijn interesse.

Hij werkt als Business Analyst bij Evident Interactive, een van de grotere bouwers van web applicaties in Nederland, met klanten als KPN Hi, Akzo Nobel en Jaarbeurs Utrecht. Sinds kort is hij mede-eigenaar van het kersverse Centrical, dat zich richt op het in de markt zetten van technisch en commercieel vernieuwende concepten.

Publicatiedatum: 02 oktober 2002

Let op

Naar Voren is op 18 juli 2010 gestopt met publiceren. De artikelen staan als een soort archief online. Het kan dus zijn dat de informatie verouderd is en dat er inmiddels veel betere of makkelijkere manieren zijn om je doel te bereiken.

Copyright © 2002-heden » NAAR VOREN en de auteurs