Module V - XML
Extensible Markub Language is een eenvoudig en flexibel text-formaat voor de opslag van data. Het is een meta opmaak (markup) taal voor de beschrijving van gestructureerde gegevens. De stukjes data worden gescheiden door tags zoals bij HTML, maar bij XML ligt de betekenis van deze tags niet vast waardoor XML zo flexibel is. De maker van het bestand bepaald zelf welke tags hij wil gebruiken om zijn gegevens te beschrijven. XML beschrijft de structuur en betekenis van gegevens, maar niet de uiteindelijke presentatie ervan, waardoor het mogelijk wordt om deze gegevens uit te wisselen tussen verschillende gebruikers of toepassingen. De eindgebruiker (dit is niet per definitie een persoon) bepaald hoe en welke gegevens op het scherm getoond worden.
Stefan Flipkens - Cursus: Internet - Intranet (2004-2005)
V–1
1. Algemeen 1.1. Wat is XML.? XML staat voor Extensible Markup Language en is een vereenvoudigde versie van SGML1 die geoptimaliseerd is voor het web. De belangrijkste functie van XML is data indelen met behulp van zelfbeschrijvende tags.
1.2. XML parsers Een XML parser is een onderdeel van het programma dat XML interpreteert. Zo'n parser zal de structuur van het XML bestand analyseren en syntaxisfouten opsporen.
1.3. XML vs HTML Wat HTML doet voor het weergeven van informatie, doet XML voor het uitwisselen van informatie. Zowel bij HTML als XML wordt er gewerkt met tags en attributen. Het grote verschil is wat er met die tags en attributen beschreven wordt. Bij HTML worden er vastgelegde tags – zoals
,
, … - gebruikt om de lay-out, de presentatie van de gegevens te beschrijven. XML echter, zijn tags, waarvan de namen zelf gekozen namen zijn, die de gegevens in het XML bestand beschrijven.
1.3.1. Voorbeeld: HTML tags Uit Code Snippit 88 en Figuur 77 kunnen we afleiden dat de tags die zich rond de tekst (gegevens) bevinden het uitzicht bepalen van hoe de tekst er zal uitzien als ze in een webbrowser bekeken wordt. [cd-rom]:\Examples\Module V – XML\1 Algemeen\Example 01\example01.htm
Module V - XML: Algemeen\Example 1 HTML: een voorbeeld
Een voorbeeld van HTML code vind je terug in e broncode van deze webpagina.
Code Snippit 88
1
SGML: Structured Generalized Markup Language
Stefan Flipkens - Cursus: Internet - Intranet (2004-2005)
V–2
Figuur 77:
1.3.2. Voorbeeld: XML tags De broncode van Code Snippit 89 toont een boekenlijst met de boeken De Schaduwman, Heilstaat en Strafkamp. Er is niet veel verschil tussen de visuele weergave van het XML bestand in een webbrowser ten opzichte van de broncode. De zelfgekozen tags bepalen hier immers niet het uitzicht van de gegevens in een webbrowser, maar wel de betekenis van de gegevens. Uit de namen van de tags kunnen we afleiden dat het XML bestand een boekenlijst bevat. Deze boekenlijst bevat de titels van de boeken erin. [cd-rom]:\Examples\Module V – XML\1 Algemeen\Example 02\example02.xml
De Schaduwman Heilstaat Strafkamp Code Snippit 89
Figuur 78:
1.4. Case Sensitive In tegenstelling tot HTML zijn XML tags wel case sensitive of hoofdlettergevoelig. Indien in de broncode van Code Snippit 89 één van de
tags met hoofdletter wordt ingegeven, dan zal de webbrowser aangeven dat het XML bestand niet geldig is. Figuur 79 toont de informatie die Internet Explorer geeft in zo'n geval.
Stefan Flipkens - Cursus: Internet - Intranet (2004-2005)
V–3
[cd-rom]:\Examples\Module V – XML\1 Algemeen\Example 03\example03.xml De Schaduwman Heilstaat Strafkamp Code Snippit 90
Figuur 79:
2. Een XML bestand maken 2.1. De meest eenvoudige vorm Code Snippit 90 is een voorbeeld van de meest eenvoudige vorm van een XML bestand. Een XML bestand kunnen we gemakkelijk vergelijken met een tabel in een gegevensbank. Het is eigenlijk niet meer dan een lijst met gegevens van dezelfde soort. Om een XML bestand te maken volstaat het om goede namen te kiezen voor de tags die rond de gegevens staan. Met behulp van zo'n goed gekozen naam, zien we dan direct welke gegevens in de tag zitten als we het XML. Voorbeeld: We hebben een lijst van de volgende artiesten, die we in een XML bestand willen gieten: o Axelle Red o Nanci Griffith o Status Quo Om aan te geven dat de naam Axelle Red een artiest voorstelt, kunnen we als naam voor de omsluitende tag bijvoorbeeld artiest of artist gebruiken. Naargelang de keuze van de naam voor de tag krijgen we dan een vergelijkbaar resultaat als in Code Snippit 91. Om aan te geven dat het bestand een lijst bevat van artiesten kunnen we als omsluitende tag voor alle artiesten de naam artiestenlijst of artistlist gebruiken. Het uiteindelijke XML bestand ziet er dan uit zoals in Code Snippit 92.
<artiest>Axelle Red <artiest>Nanci Griffith <artiest>Status Quo Code Snippit 91
Stefan Flipkens - Cursus: Internet - Intranet (2004-2005)
V–4
[cd-rom]:\Examples\Module V – XML\2 Een XML bestand maken\Example 01\example01.xml <artiestenlijst> <artiest>Axelle Red <artiest>Nanci Griffith <artiest>Status Quo Code Snippit 92
Figuur 80:
Wanneer we het XML bestand uit Code Snippit 92 bekijken in een webbrowser, dan merken we op dat voor de <artiestenlijst> tag in het begin van de lijst een min teken (-) staat. Wanneer we op dit teken klikken dan klapt de lijst dicht en verandert het min teken in een plus teken (+) (zie ). Door op het plus teken te klikken klapt de lijst opnieuw open. Bij grotere XML bestanden is dit een handig hulpmiddel om de gegroepeerde gegevens gemakkelijker te kunnen bekijken.
Figuur 81: De dichtgeklapte lijst.
2.2. Een gedetailleerder XML bestand Wanneer we onze boekenlijst willen uitbreiden met de naam van de auteur en de isbn nummer, dan kunnen we het XML bestand uit Code Snippit 90 wijzigen naar de versie van . [cd-rom]:\Examples\Module V – XML\2 Een XML bestand maken\Example 02\example02.xml De Schaduwman John Katzenbach
Stefan Flipkens - Cursus: Internet - Intranet (2004-2005)
V–5
90-449-2709-4 Heilstaat John Katzenbach 90-449-2767-1 Strafkamp John Katzenbach 90-449-2853-8 Code Snippit 93
Figuur 82:
Diegene die ons XML bestand bekijkt, kan direct ziet dat het gaat om een boekenlijst, die een aantal boeken bevat. De boeken op hun beurt hebben een titel, een auteur en een isbn nummer. De betekenis van de gegevens in het XML bestand is duidelijk. Net zoals een HTML bestand wordt een XML bestand geïnterpreteerd of geparst. Bij een HTML bestand worden de tags tijdens het parsen omgevormd tot een visueel geheel. Bij XML dient het parsen om te controleren of het bestand voldoet aan de vastgelegde eisen. In de broncode van de nieuwe boekenlijst hebben we ook al de regel toegevoegd. Deze regel vertelt de XML parser dat het XML bestand voldoet aan de standaarden vastgelegd voor XML versie 1.0. Regels die beginnen met en eindigen met ?> worden door de XML parser geïnterpreteerd als commando regels, ze vertellen iets over het XML bestand.
3. De lay-out van een XML bestand aanpassen Wanneer we XML bestanden gebruiken in onze webpagina, dan willen we ze natuurlijk niet weergeven zoals we ze tot nu toe in de screenshots hebben gezien. We willen een mooie lay-out geven aan de gegevens. Dit kunne we op verschillende manieren: Door een CSS bestand te koppelen aan het XML bestand Door een XSL bestand te koppelen aan het XML bestand. Door het XML bestand te koppelen aan of op te nemen in een HTML bestand.
Stefan Flipkens - Cursus: Internet - Intranet (2004-2005)
V–6
3.1. Een CSS bestand koppelen aan een XML bestand In één van de vorige modules hebben we gesproken over het gebruik van Cascading Style Sheets bij webpagina's. Het is eveneens mogelijk om een CSS bestand te koppelen aan een XML bestand. Gezien de kennis die we hebben opgemaakt over CSS is het een koud kunstje om een CSS bestand aan te maken en dit te koppelen aan ons XML bestand. De broncode van het Cascading Style Sheet kan er uitzien zoals in Code Snippit 94. [cd-rom]:\Examples\Module V – XML\3 De lay-out van een XML bestand aanpassen\Example 01\example01.css boek {display:block;} titel {display:inline; font-weight:bolder;} auteur {display:inline; font-style:italic;} isbn {display:inline; text-decoration:underline;} Code Snippit 94
We merken op dat de namen van onze stijlen overeenkomen met de namen van de tags in het XML bestand. Het enige dat we nu nog moeten doen is de XML parser vertellen dat hij het CSS bestand example01.css moet gebruiken om een lay-out te geven aan het XML bestand. Dit doen we door de regel code uit Code Snippit 95 toe te voegen aan ons XML bestand zoals in Code Snippit 96. Code Snippit 95
Deze regel vertelt de XML parser dat er een CSS bestand met als naam example01.css gekoppeld is aan het XML bestand. [cd-rom]:\Examples\Module V – XML\3 De lay-out van een XML bestand aanpassen \Example 01\example01.xml De Schaduwman John Katzenbach 90-449-2709-4 Heilstaat John Katzenbach 90-449-2767-1 Strafkamp John Katzenbach 90-449-2853-8 Code Snippit 96
Stefan Flipkens - Cursus: Internet - Intranet (2004-2005)
V–7
Figuur 83:
3.2. Een XSL bestand koppelen aan een XML bestand [cd-rom]:\Examples\Module V – XML\3 De lay-out van een XML bestand aanpassen \Example 02\example02.xsl <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:for-each select="boekenlijst/boek"> <xsl:value-of select="titel" /> <xsl:value-of select="auteur" /> <xsl:value-of select="isbn" />
Code Snippit 97 [cd-rom]:\Examples\Module V – XML\3 De lay-out van een XML bestand aanpassen \Example 02\example02.xml De Schaduwman John Katzenbach 90-449-2709-4 Heilstaat John Katzenbach 90-449-2767-1 Strafkamp John Katzenbach 90-449-2853-8 Code Snippit 98
Stefan Flipkens - Cursus: Internet - Intranet (2004-2005)
V–8
Figuur 84:
3.3. Een XML bestand opnemen in een HTML bestand [cd-rom]:\Examples\Module V – XML\3 De lay-out van een XML bestand aanpassen \Example 03\example03.html <xml id="boeken"> De Schaduwman John Katzenbach 90-449-2709-4 Heilstaat John Katzenbach 90-449-2767-1 Strafkamp John Katzenbach 90-449-2853-8 Module V - XML: De lay-out van een XML bestand aanpassen - Example 3 Code Snippit 99
Stefan Flipkens - Cursus: Internet - Intranet (2004-2005)
V–9
Figuur 85:
3.4. Een XML bestand linken aan een HTML bestand [cd-rom]:\Examples\Module V – XML\3 De lay-out van een XML bestand aanpassen \Example 04\example04.xsl <xml id="boeken" src="example04.xml"> Voorbeeld xml-document rechtstreeks in html Code Snippit 100 [cd-rom]:\Examples\Module V – XML\3 De lay-out van een XML bestand aanpassen \Example 04\example04.xml De Schaduwman John Katzenbach 90-449-2709-4 Heilstaat John Katzenbach 90-449-2767-1 Strafkamp John Katzenbach 90-449-2853-8 Code Snippit 101
Stefan Flipkens - Cursus: Internet - Intranet (2004-2005)
V–10
Figuur 86:
4. Regels toepassen op de datastructuur van een XML bestand Voorbeeld: We hebben een bedrijf en we willen klanten toelaten om bestellingen door te geven via XML bestanden. Als iedere klant, dan zomaar zijn eigen veldnamen gaat kiezen, dan is het voor ons veel te omslachtig om de bestellingen (XML bestanden) automatisch en snel te verwerken.
We kunnen de structuur vastleggen waaraan de doorgestuurde XML bestanden moeten voldoen. Zo'n structuur noemen we een XML schema. Deze schema's worden in een apart bestand opgeslagen, eveneens met de .xml extensie. Een XML schema is bedoeld om beperkingen op te leggen aan een XML bestand. De XML parser kan dan voor de verwerking van het XML bestand controleren of het bestand al dan niet geldig is. Code Snippit 102 is een voorbeeld van hoe we het XML bestand van onze boekenlijst aan banden kunnen leggen. [cd-rom]: \Examples\Module V - XML\4 Regels toepassen\Example 01\schema.xml <Schema name="BoekenlijstSchema" xmlns="urn:schemas-microsoftcom:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="titel"/> <ElementType name="auteur"/> <ElementType name="isbn"/> <ElementType name="boek" content="eltOnly" order="seq"> <element type="titel"/> <element type="auteur"/> <element type="isbn"/> <ElementType name="boekenlijst" content="eltOnly"> <element type="boek" minOccurs="1" maxOccurs="*"/> Code Snippit 102
De tweede tot en met de vierde regel van ons XML schema vertellen de XML parser dat in ons XML bestand een elementtype titel, auteur en isbn kan voorkomen. De vijfde tot en met de negende regel vertellen de XML parser dat het XML bestand een elementtype boek heeft, dat elementen kan bevatten van het type titel, auteur en/of isbn.
Stefan Flipkens - Cursus: Internet - Intranet (2004-2005)
V–11
In regel tien tot en met twaalf ten slotte vertellen we de XML parser dat ons bestand een elementtype boekenlijst bevat, dat op zijn beurt elementen van het type boek kan bevatten. Opmerking: Er is een verschil tussen elementtype en elementen van een bepaald elementtype.
Bij het elementtype boek (zie Code Snippit 103) zien we de attributen content="eltOnly" en order="seq". Dit wil zeggen dat een boek alleen elementen kan bevatten en geen elementtypes, en dat de volgorde sequentieel is. <ElementType name="boek" content="eltOnly" order="seq"> Code Snippit 103
De regel uit Code Snippit 104 in het elementtype boekenlijst, betekent dat onze boekenlijst minimum 1 element van het type boek moet bevatten en dat er oneindig veel boeken in onze lijst mogen zitten. <ElementType name="boekenlijst" content="eltOnly"> <element type="boek" minOccurs="1" maxOccurs="*"> Code Snippit 104
Om het XML schema te koppelen aan ons XML bestand moeten we de regel met de boekenlijst tag aanpassen zoals in Code Snippit 105 [cd-rom]: \Examples\Module V - XML\4 Regels toepassen\Example 01\example01.xml De Schaduwman John Katzenbach 90-449-2709-4 Heilstaat John Katzenbach 90-449-2767-1 Strafkamp John Katzenbach 90-449-2853-8 Code Snippit 105
Stefan Flipkens - Cursus: Internet - Intranet (2004-2005)
V–12