JavaScript en XML

XML

XML is belangrijk en eenvoudig aan te leren.

Een voorbeeld:

<?xml version="1.0" encoding="utf-8"?>
<nota>
  <voor>Tania</voor>
  <van>Jan</van>
  <titel>Geheugensteun</titel>
  <bericht>Stuur je me een verslag van de vergadering.</bericht>
</nota>

Introductie

Wat is XML?

XML staat voor eXtensible Markup Language.

XML is een markup taal zoals HTML.

XML is ontworpen om gegevens uit te wisselen en op te slaan.

XML tags zijn niet voorgedefinieerd. Je moet ze zelf definiëren.

XML is zelf beschrijvend.

XML is software- en hardware onafhankelijk.

XML wordt sedert 10 februari 1998 door W3C aanbevolen.

De verschillen tussen XML en HTML

XML en HTML hebben elk hun eigen functie:

HTML toont informatie, XML transporteert informatie.

XML doet niets

XML is ontworpen om informatie te structureren, op te slaan en te transporteren.

De nota in het voorbeeld is zelf beschrijvend. Het heeft een afzender (van), een bestemming (voor), een titel en een tekstbericht.

M.a.w. dit XML document doet helemaal niets. Het wordt enkel gebruikt om informatie in tags op te slaan. Er zijn dus programma's nodig om XML te verzenden, te ontvangen en weer te geven.

In XML gebruik je eigen tags

De tags in het voorbeeld (zoals <voor> en <van>) maken geen deel uit van de XML standaard. Deze tags zijn verzonnen door de auteur van het XML document.

De XML standaard bevat dus geen voorgedefinieerde tags.

De tags die in HTML gebruikt worden, zijn voorgedefinieerd en maken deel uit van de HTML standaard.

De auteur van een XML document definieert zijn eigen tags en documentstructuur.

XML is overal

XML is vandaag even belangrijk voor het web als HTML bij het ontstaan van het web.

XML is de meest gebruikte manier om informatie tussen toepassingen uit te wisselen.

Waar en hoe wordt XML gebruikt?

XML wordt meestal gebruikt om de opslag en het delen van gegevens op het web te vereenvoudigen.

XML scheidt de gegevens van HTML

Om dynamisch gegevens in een HTML document weer te geven, moet je niet telkens het HTML document aanpassen.

De gegevens worden opgeslagen in afzonderlijke XML bestanden. De HTML/CSS tandem zorgt dus enkel voor het weergeven en de lay-out, waardoor de onderliggende gegevens geen invloed meer hebben op de HTML en CSS code.

Met behulp van JavaScript wordt een extern XML bestand geladen en wordt de inhoud van de webpagina met de geladen gegevens uitgebreid en/of aangepast.

XML vereenvoudigd het delen van gegevens

Computersystemen en databases bevatten gegevens in niet compatibele formaten.

XML gebruikt het platte tekst formaat. Deze methode is een software- en hardware onafhankelijke manier om gegevens op te slaan.

Dit maakt het veel eenvoudiger om gegevens die door verschillende toepassingen gebruikt worden op te slaan.

XML vereenvoudigd het gegevenstransport

Eén van de meest tijdrovende uitdagingen voor ontwikkelaars is het uitwisselen van gegevens tussen niet compatibele systemen.

Gegevens uitwisselen in het XML formaat is een welkome vereenvoudiging.

XML vereenvoudigd platform migraties

Upgraden naar nieuwe systemen (hardware of software platforms) is steeds tijdrovend. Grote hoeveelheden gegevens moeten daarbij omgezet worden waarbij niet compatibele gegevens dikwijls verloren gaan.

XML gegevens zijn in tekstformaat opgeslagen. Dit maakt het veel eenvoudiger om zonder verlies aan gegevens over te stappen naar een ander besturingssysteem, andere toepassingen of een andere browser.

XML zorgt voor een betere beschikbaarheid

Verschillende toepassingen kunnen de gegevens raadplegen, niet enkel HTML pagina's maar ook diverse andere toepassingen.

XML maakt uw gegevens beschikbaar voor verschillende apparaten (van draagbare computers, spraakcomputers, nieuwslezers – feeds, enz.), ook voor apparaten en software voor blinden en andersvaliden.

XML vormt de basis van nieuwe Internet talen

De volgende Internet talen gebruiken XML als basis:

De toekomst

Indien XML de standaard wordt om gegevens tussen toepassingen uit te wisselen, komen er in de nabije toekomst tekstverwerkers, rekenbladen en databanken die zonder conversie gegevens onderling kunnen uitwisselen.

XML boom

XML documenten gebruiken een boomstructuur die bij de “stam” start en zich tot aan de “bladeren” vertakt.

Het voorbeeld:

<?xml version="1.0" encoding="utf-8"?>
<nota>
  <voor>Tania</voor>
  <van>Jan</van>
  <titel>Geheugensteun</titel>
  <bericht>Stuur je me een verslag van de vergadering.</bericht>
</nota>

De eerste regel is de XML declaratie. Het definieert de gebruikte XML versie (1.0) en de karakterset (utf-8).

De volgende regel beschrijft de stam (root element) van het document (dit document is een nota).

De volgende vier regels beschrijven vier bladeren (child elementen) van de root (voor, van, titel en bericht).

De laatste regel sluit het root element af.

Je kunt er dus vanuit gaan dat dit XML document een nota van Jan voor Tania bevat.

Dit is wat we bedoelen met zelf beschijvend.

XML documenten bestaan uit een boomstructuur

XML documenten moeten een root element bevatten. Dit element is de ouder (parent) van alle andere elementen.

De elementen in een XML document vormen een documentboom. De boom start bij de root en vertakt zich verder tot het laatste niveau van de boom.

Alle elementen kunnen subelementen bevatten (child elementen):

<root>
  <child>
    <subchild>.....</subchild>
  </child>
</root>

De termen parent, child en sibling worden gebruikt om de relaties tussen elementen te beschrijven. Parent elementen hebben children. Children in hetzelfde niveau noemen we siblings (broers en zussen).

Alle elementen kunnen zoals bij HTML tekst en kenmerken (attributes) bevatten.

De afbeelding hierboven is een grafische voorstelling van onderstaand XML document:

<?xml version="1.0" encoding="utf-8"?>
<boekenwinkel>
  <boek categorie="KOKEN">
    <titel taal="nl">Italiaans koken</titel>
    <auteur>Gina De Lauw</auteur>
    <jaar>2005</jaar>
    <prijs>30.00</prijs>
  </boek>
  <boek categorie="KINDEREN">
    <titel taal="nl">Harry Potter</titel>
    <auteur>J K. Rowling</auteur>
    <jaar>2005</jaar>
    <prijs>29.99</prijs>
  </boek>
  <boek categorie="WEB">
    <titel taal="en">Learning XML</titel>
    <auteur>Erik T. Ray</auteur>
    <jaar>2003</jaar>
    <prijs>39.95</prijs>
  </boek>
</boekenwinkel>

Het root element in het voorbeeld is <boekenwinkel>. Alle <boek> elementen staan binnen het <boekenwinkel> root element.

XML Syntaxis

De syntaxis regels van XML zijn eenvoudig en logisch.

Alle XML elementen moeten worden afgesloten

In HTML hebben sommige elementen geen afsluitende tag.

In XML moet elke tag afgesloten worden.

XML tags zijn hoofdlettergevoelig

XML tags zijn hoofdlettergevoelig. De tag <boek> is niet hetzelfde als de tag <Boek>.

Openende (start) en afsluitende (eind) tags moeten dezelfde letters gebruiken:

<prijs>39.95</prijs>

XML tags moeten correct genest worden

Met correct genest bedoelen we dat een tag die binnen een andere tag wordt geopend, ook binnen dezelfde tag wordt gesloten.

<boek categorie="WEB">
  <titel taal="en">Learning XML</titel>
  <auteur>Erik T. Ray</auteur>
  <jaar>2003</jaar>
  <prijs>39.95</prijs>
</boek>

XML documenten bevatten een root element

XML documenten bevatten een tag waarin alle andere elementen staan.

XML attributen gebruiken steeds aanhalingstekens

<titel taal="en">Learning XML</titel>

Entity References

Sommige tekens hebben in XML een speciale betekenis.

Bij het gebruik van het teken “<” binnen een XML element krijg je een fout. De XML verwerker ziet dit namelijk als het begin van een nieuw element.

Dit veroorzaakt een fout:

<bericht>Lonen < 1000 krijgen</bericht>

Om een fout te vermijden, vervang je het “<” teken door een entity reference:

<bericht>Lonen &lt; 1000 krijgen</bericht>

XML kent vijf voorgedefinieerde entity references:

&lt;

<

Kleiner dan

&gt;

>

Groter dan

&amp;

&

Ampersand

&apos;

'

apostrof

&quot;

"

Aanhalingsteken

XML commentaar

De syntaxis voor XML commentaar is dezelfde als in HTML.

<!-- Dit is commentaar -->

XML respecteert witruimte

HTML herleidt meerdere opeenvolgende witruimte karakters tot één spatie.

Bij XML zijn alle opeenvolgende witruimte karakters van betekenis.

XML slaat een nieuwe regel op als LF

Windows toepassingen slaan een nieuwe regel meestal op met twee tekens: carriage return (CR) en line feed (LF). OS X en Unix toepassingen slaan een nieuwe regel meestal op als een LF teken.

XML slaat een nieuwe regel op als een LF teken.

XML elementen

Een XML element is alles vanaf en inclusief de start tag tot en met de eind tag van een element.

Een element bevat:

<?xml version="1.0" encoding="utf-8"?>
<boekenwinkel>
  <boek categorie="KINDEREN">
    <titel taal="nl">Harry Potter</titel>
    <auteur>J K. Rowling</auteur>
    <jaar>2005</jaar>
    <prijs>29.99</prijs>
  </boek>
  <boek categorie="WEB">
    <titel taal="en">Learning XML</titel>
    <auteur>Erik T. Ray</auteur>
    <jaar>2003</jaar>
    <prijs>39.95</prijs>
  </boek>
</boekenwinkel>

In bovenstaand voorbeeld bevatten de elementen <boekenwinkel> en <boek> andere elementen. <boek> bevat daarnaast een attribuut (categorie = "KINDEREN"). <titel>, <auteur>, <jaar> en <prijs> bevatten tekst.

XML namen

Namen van XML elementen voldoen aan de volgende regels:

Goede naamgeving

Zorg voor beschrijvende namen. Namen met een underscore worden aangeraden: <naam_auteur>.

Zorg voor korte namen: <boek_titel>.

Gebruik geen – tekens, komma's, dubbele punten.

XML documenten hebben vaak een overeenkomstige database. Gebruik dezelfde namen in het XML document en de database.

Speciale tekens zoals éóà zijn toegelaten in XML, test de XML verwerker grondig met zulke tekens, niet alle XML verwerkers ondersteunen deze speciale tekens.

XML elementen zijn uitbreidbaar

XML elementen kan je uitbreiden met extra informatie.

<boek categorie="WEB">
  <titel taal="en">Learning XML</titel>
  <auteur>Erik T. Ray</auteur>
  <prijs>39.95</prijs>
</boek>

Laten we veronderstellen dat je een toepassing hebt geschreven waarbij je de elementen <titel>, <auteur> en <prijs> gebruikt.

De auteur van het XML voegt achteraf een element met extra informatie toe:

<boek categorie="WEB">
  <titel taal="en">Learning XML</titel>
  <auteur>Erik T. Ray</auteur>
  <jaar>2003</jaar>
  <prijs>39.95</prijs>
</boek>

Uw toepassing zal nog steeds werken. M.a.w. XML documenten kunnen uitgebreid worden zonder de werking van een toepassing te storen.

XML Attributen

De attributen verschaffen aanvullende informatie over een element.

Attributen bevatten informatie dat geen deel uitmaakt van de gegevens. Een voorbeeld: het bestandsformaat is geen deel van het gegeven, maar is belangrijk voor de software die het element moet behandelen:

<bestand type="gif">computer.gif</bestand>

XML attributen staan steeds tussen aanhalingstekens

Attributen staan steeds tussen enkele of dubbele aanhalingstekens:

<persoon geslacht="vrouw">
<persoon geslacht='vrouw'>

Indien een attribuutwaarde zelf aanhalingstekens bevat gebruik je enkele aanhalingstekens of entity references:

<gangster naam='Patrick "Le grand blond" Haemers'>
<gangster naam="Patrick &quot; Le grand blond&quot; Haemers'>

XML elementen versus attributen

<persoon geslacht="vrouw">
  <voornaam>Ann</voornaam>
  <naam>Saelens</naam>
</persoon>

<persoon>
  <geslacht>vrouw</geslacht>
  <voornaam>Ann</voornaam>
  <naam>Saelens</naam>
</persoon>

In het eerste voorbeeld is het geslacht een attribuut, in het tweede voorbeeld een element. Beide voorbeelden leveren dezelfde informatie.

Er zijn geen regels over wanneer je een attribuut of een element gebruikt. Mij lijkt het eenvoudiger om attributen te vermijden en steeds elementen te gebruiken.

Vermijdt attributen

Attributen hebben de volgende nadelen:

Attributen zijn daarenboven moeilijker te lezen en te onderhouden. Gebruik elementen voor gegevens, attributen voor informatie die niet relevant is voor de gegevens.

Mijn favoriete manier van werken:

<nota>
  <datum>
    <dag>10</dag>
    <maand>01</maand>
    <jaar>2012</jaar>
  </datum>
  <voor>Tania</voor>
  <van>Jan</van>
  <titel>Geheugensteun</titel>
  <bericht>Stuur je me een verslag van de vergadering.</bericht>
</nota>

XML attributen voor metadata

Soms worden ID referenties toegekend aan elementen. Deze ID's worden gebruikt om XML elementen te identificeren (juist zoals HTML ID's):

<berichten>
  <nota id="501">
    <voor>Tania</voor>
    <van>Jan</van>
    <titel>Geheugensteun</titel>
    <bericht>Stuur je me een verslag van de vergadering.</bericht>
  </nota>
  <nota id="502">
    <voor>Jan</voor>
    <van>Tania</van>
    <titel>Re: Geheugensteun</titel>
    <bericht>Doe ik.</bericht>
  </nota>
</berichten>

Het id attribuut wordt gebruikt om de verschillende nota's te identificeren. Het is geen deel van de nota zelf.

Metadata (data over de data) sla je op als attributen, de data zelf als elementen.

XML Validatie

Well Formed XML documenten

Well Formed XML documenten hebben een correcte XML systaxis:

<nota>
  <voor>Tania</voor>
  <van>Jan</van>
  <titel>Geheugensteun</titel>
  <bericht>Stuur je me een verslag van de vergadering.</bericht>
</nota>

Valid XML documenten

Een Valid XML document is een Well Formed XML document die de regels van een Document Type Definition (DTD) volgt:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE nota SYSTEM "nota.dtd">
<nota>
  <voor>Tania</voor>
  <van>Jan</van>
  <titel>Geheugensteun</titel>
  <bericht>Stuur je me een verslag van de vergadering.</bericht>
</nota>

De DOCTYPE declaratie is een referentie naar een extern DTD bestand.

XML DTD

Het doel van een DTD is de structuur van een XML document vast te leggen. Het definieert een structuur aan de hand van toegelaten elementen:

<!DOCTYPE nota
[
  <!ELEMENT nota (voor,van,titel,bericht)>
  <!ELEMENT voor (#PCDATA)>
  <!ELEMENT van (#PCDATA)>
  <!ELEMENT titel (#PCDATA)>
  <!ELEMENT bericht (#PCDATA)>
]>

XML Schema

W3C ondersteunt een op XML gebaseerd alternatief voor DTD: XML Schema:

<xs:element name="nota">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="voor" type="xs:string"/>
      <xs:element name="van" type="xs:string"/>
      <xs:element name="titel" type="xs:string"/>
      <xs:element name="bericht" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

XML XSLT

Met XSLT kan je een XML document omzetten naar HTML.

XSLT is de stijlpagina taal voor XML

XSLT (eXtensible Stylesheet Language Transformations) is veel geavanceerder dan CSS.

XSLT kan gebruikt worden om XML naar HTML om te zetten, voor het in de browser wordt weergeven.