XSL(T): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Regel 37: Regel 37:
 
<?xml version="1.0" encoding="UTF-8"?>
 
<?xml version="1.0" encoding="UTF-8"?>
  
<xsl:stylesheet version="1.0"
+
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
  
 
<xsl:template match="/">
 
<xsl:template match="/">

Versie van 14 apr 2018 19:43

XSL Staat voor eXtensible Stylesheet Language. Het is een verzameling programmeertalen om XML-documenten te manipuleren. Oorspronkelijk was het bedacht als tegenhanger van CSS. Dus een taal die uitlegt hoe je een bepaald type XML-documenten weergeeft. Die functie heeft het nog steeds, naast andere toepassingen.

XSL bestaat uit een aantal onderdelen:

  • XSLT - Zie hieronder
  • XPath - The XML Path Language: Een expressietaal voor oa. XSLT om onderdelen van XML-documenten te benaderen, ontwikkeld door de W3C XQuery en XSLT Working Groups
  • XSL-FO - XSL Formatting Objects: Een taal om XML-documenten op te maken. In 2013 opgevolgd door CSS3
  • XQuery - Een taal om XML-documenten te querien (zegt [1]).

XSLT oftewel XSL Tranformations Language (afgekort XSLT, niet XSLTL) is een taal om XML-documenten om te fietsen naar andere XML-documenten:

  • XSLT pas je toe in zogenaamde style sheets
  • XSLT transformeert niet zozeer elementen naar andere elementen, maar source trees naar result trees
  • XSLT processors passen style sheets toe op een source tree. Alle gebruikelijke programmeertalen beschikken over bibliotheken die dit doen

Style sheet declaration

De root van een XML style sheet (=XSLT-bestand) is een xsl:stylesheet- of xsl:transform-element (deze twee termen zijn synoniem [2]). De correctie declaratie van een XSL style sheet is

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

of

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Om toegang te krijgen tot XSLT elementen, attributen en functionaliteiten, moet je een XSLT namespace declareren aan het begin van het document. De declaratie

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

verwijst naar de officiële W3C XSLT namespace.

Voorbeeld: Gebruik voor opmaak

Voorbeeld van XSLT als opmaaktaal voor een XML-document:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
  <h2>My CD Collection</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th>Title</th>
      <th>Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd">
    <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

De XML-velden zijn hier geïncorporeerd in een groter geheel, dat uit HTML bestaat.

Dit is hoe je vanuit zo'n XML-document kunt verwijzen naar een bijbehorend XSL stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
.
.
</catalog>

Als je dit XML-bestand opent in een browser, kun je het resultaat zien.

Templates

  • Templates lijken de basis-bouwstenen van XSL(T) te zijn. Een template-element bestaat uit één of meer regels om een template te genereren: Een boom met elementen
  • Het match-attribuut zorgt voor de selectie van elementen uit de bron. De waarde van een match-attribuut is een XPath-expressie.

Voorbeeld van een template-element met '/'-match, waarmee het hele document wordt geselecteerd:

<xsl:template match="/">

Hiero ben ik gebleven: https://www.w3schools.com/xml/xsl_templates.asp

Template rules

Template rules zoals xsl:template zijn voorbeelden van transformaties: Source-trees die voldoen aan het gegeven match-attribute, worden overgenomen in de result-tree.

In dit voorbeeld wordt input zonder transformatie doorgezet naar output, met één hele handige uitzondering: De intendation wordt bijgewerkt:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*" />

<xsl:template match="@*|node()">
 <xsl:copy>
  <xsl:apply-templates select="@*|node()"/>
 </xsl:copy>
</xsl:template>

</xsl:stylesheet>

Bronnen