Publicatie:XML-transformaties

Uit Meemoo Kennisbank
(Doorverwezen vanaf Publicatie:XML-transformaties)
Naar navigatie springen Naar zoeken springen

XML-transformaties worden mogelijk gemaakt door middel van EXtensible Stylesheet Language (Standaard:XSL), een XML-gebaseerde opmaaktaal speciaal ontwikkeld voor de opmaak en transformatie van XML-documenten. XSL bestaat uit drie onderdelen:

  • XSLT (XSL Transformations): een programmeertaal gebruikt voor de transformatie van XML-documenten.
  • XPath (XML Path Language): een taal die gebruikt wordt om te navigeren in XML-documenten.
  • XML-FO (XML Formatting Objects): een vocabularium waarmee termen/definities worden vastgelegd.

Het transformeren van XML-documenten gebeurt door middel van XSLT. XSLT brengt geen wijzigingen aan in het originele document, maar creëert een nieuw document op basis van de inhoud van het origineel. Eigen aan XSLT is dat je het formaat van de output zelf kan kiezen. Zo kan het nieuwe document ook een XML-document zijn, maar je kan er ook voor kiezen om XSLT je bron(XML)document te laten transformeren naar bijvoorbeeld een Standaard:HTML- of een Standaard:XHTML-document.

XSLT laat je toe elementen en attributen uit XML-documenten te verwijderen, of er net nieuwe aan toe te voegen. Bovendien kan je XSLT ook gebruiken om bestaande elementen van plaats te veranderen, of te verbergen, zodat ze bijvoorbeeld niet getoond worden in een browser.

XSLT maakt gebruik van XPath om gericht op zoek te gaan naar specifieke elementen en attributen uit je XML-document. XPath gaat op zoek naar die stukken van het XML-brondocument die overeen komen met een vooraf gedefinieerde XSL Style Sheet. Wanneer een match gevonden is, zorgt XSLT ervoor dat het stuk van het brondocument dat overeenkomt met de stylesheet, getransformeerd wordt naar het resultaatdocument. De transformatie van het ene XML-document naar een ander heet een mapping.

In wat volgt, worden de basisprincipes van XSLT en XPath duidelijk gemaakt aan de hand van een concreet voorbeeld: we mappen de XML-voorbeeldcatalogus uit deze handleiding door middel van een XSL Style Sheet naar het Dublin Core metadataschema. Wie op zoek is naar een volledige uitleg van alle functionaliteiten van XSLT en XPath, raadpleegt best de XSLT Tutorial van het W3C.

De stylesheet die ervoor zorgt dat de XML-catalogus gemapt wordt naar het Dublin Core metadataschema, ziet er als volgt uit:

XML TRANSFORM.jpg

Op zich kan je de stylesheet lezen zoals elk ander XML-document. De stylesheet gaat van start met een XSL Style Sheetverklaring: een XML-verklaring, gevolgd door het root element van de stylesheet, <xsl:stylesheet>. De begintag van dat element bevat drie attributen: version, een link naar de XSL-namespace (xmlns:xsl) en – omdat we een mapping maken naar het Dublin Core metadataschema – een link naar de Dublin Core namespace (xmlns:dc).

Ingebed in het stylesheetelement, zit <xsl:template>. Dat element bepaalt hoe het uiteindelijke resultaatdocument er zal uitzien. De begintag van het template-element bevat één attribuut: match. De waarde van dat attribuut is "/", wat ervoor zorgt dat de template wordt gelinkt aan de root van het brondocument: <catalogus>.

Het template-element is een mengeling van vertrouwde XML, aangevuld met een aantal typische XSL-elementen die gebruik maken van XPath . Het resultaatdocument zal – analoog aan het brondocument - uiteindelijk de volgende structuur hebben:

XML TRANSFORM 2.jpg

Daarboven bestaat onze stylesheet uit een aantal typische XSL-elementen, die gebruik maken van XPath:

  • <xsl:value-of select=”…”>: extraheert een bepaalde waarde uit het brondocument, en voegt die toe aan het resultaatdocument. XPath zorgt ervoor dat de waarde van “titel” terecht komt in het “dc:title”-element, de waarde van “auteur” in het “dc:creator”-element, de waarde van “jaar” in het “dc:date”-element en de waarde van het attribuut “categorie” in het “dc:subject”-element. Opgelet, om de waarde gekoppeld aan een attribuut te extraheren, laat je de naam van het attribuut vooraf gaan door “@”.
  • <xsl:for-each select=”catalogus/boek”>: zorgt ervoor dat XPath de bovenstaande bewerkingen uitvoert voor elk boek van de catalogus uit het brondocument. Merk op hoe dat element het “boek”-element omsluit.

Om de stylesheet te gebruiken en het brondocument te transformeren, heb je een XML-editor nodig. Het resultaat van de transformatie ziet er als volgt uit:

XML TRANSFORM 3.jpg