xsltAan de slag met xslt


Opmerkingen

XSLT (XSL Transformations, Extensible Stylesheet Language Transformations) is een programmeertaal die is gebaseerd op XML en die tot doel heeft XML te manipuleren en te transformeren. Het is een functionele programmeertaal en een W3C-standaard. Met XSLT kunt u een of meer XML-documenten omzetten in een resultaat met verschillende uitvoerindelingen (XML, HTML, tekst).

Om XSLT te begrijpen, is het het beste om een goede kennis van zaken te hebben over:

  1. XML
  2. XPath

Zonder deze twee onderliggende concepten zou je moeite hebben met het leren van XSLT. Ten eerste omdat een XSLT-document een XML-document is. En ten tweede maken XSLT-documenten gebruik van XPath om het XML-document dat wordt getransformeerd op te vragen.

Aanbevolen literatuur: https://en.wikipedia.org/wiki/XSLT

versies

Versie Specificatie Toestand Publicatiedatum
XSLT 1.0 https://www.w3.org/TR/xslt Aanbeveling 1998/08/18
XSLT 2.0 https://www.w3.org/TR/xslt20 Aanbeveling 2007-01-23
XSLT 3.0 https://www.w3.org/TR/xslt-30 Aanbeveling van de kandidaat 2015/11/19

Installatie of instellingen

XSLT is een programmeertaal voor speciale doeleinden; het wordt veel gebruikt voor het transformeren van XML-documenten in een ander XML-formaat, in HTML of in op tekst gebaseerde formaten.

Er zijn twee hoofdversies van XSLT in gebruik: XSLT 1.0 en XSLT 2.0. XSLT 1.0 is breder geïmplementeerd maar heeft veel beperkingen en beperkingen in vergelijking met XSLT 2.0; u moet beslissen welke versie u wilt gebruiken. Als een XSLT 2.0-processor beschikbaar is voor de door u gekozen omgeving, is dit bijna altijd de betere keuze.

(XSLT 1.0 kwam uit in november 1999 en veel implementaties verschenen binnen een jaar of twee, beide van reguliere leveranciers zoals Microsoft, IBM, Sun en Oracle, en van individuele enthousiastelingen die in hun vrije tijd werkten. XSLT 2.0 kwam uit in januari 2007, en veel van de originele 1.0-processors zijn nooit geüpgraded, omdat hun ontwikkelaars hun interesse hadden verloren. De meest gebruikte XSLT 2.0-processor is Saxon, maar deze heeft niets voor zichzelf: andere vrijstaande producten omvatten RaptorXML (van Altova ), XmlPrime (van CBCL) en Exselt en 2.0-processors zijn ook beschikbaar ingebed in IBM WebLogic, in MarkLogic's XML-databaseserver en in Intel's XML Accelerator.)

De specificatie van XSLT 3.0 is technisch compleet (voorgestelde aanbeveling in april 2017), maar wordt voorlopig het best beschouwd als bloederig: beschouw het alleen als u dringend behoefte hebt aan nieuwe functies, zoals streaming, pakketten, JSON-ondersteuning , of probeer / vangst. Er zijn drie bekende implementaties: Saxon, Exselt en RaptorXML.

Om aan de slag te gaan met XSLT heeft u verschillende opties:

  • Gebruik een online XSLT-tool. Er zijn er meerdere beschikbaar (zoeken naar "online XSLT-tool"), een zeer betrouwbare online IDE is http://xsltransform.net/ . Dit is een goede manier om een eerste gevoel voor de taal te krijgen, maar je zult niet op deze manier willen doorgaan als je je echt ontwikkelt.

  • Gebruik de XSLT-engine die in elke browser is ingebouwd. Net als bij online tools hebben deze het voordeel dat u niets hoeft te installeren; maar de browsers ondersteunen alleen XSLT 1.0, ze ondersteunen alleen XML-naar-HTML-conversie en ze hebben zeer zwakke ondersteuning voor foutopsporing. Een zeer recente - maar nog steeds experimentele - ontwikkeling is Saxon-JS, waarmee XSLT 2.0 (en delen van XSLT 3.0) in de browser kunnen worden uitgevoerd.

  • Installeer een XSLT-processor (zoals Saxon of xsltproc). De meeste van deze producten kunnen worden opgeroepen met behulp van de opdrachtregel van het besturingssysteem of met een API voor bepaalde programmeertalen zoals Java, C, C # of Python.

  • Installeer een XML-ontwikkelomgeving zoals Altova XML Spy, oXygen van SyncroSoft of Stylus Studio. Hoewel dit een duurdere optie is, biedt het veel rijkere ondersteuning voor ontwikkeling en foutopsporingsmogelijkheden.

Welke optie u ook kiest, u moet eerst beslissen of u XSLT 1.0 of XSLT 2.0 wilt gebruiken.

Eenvoudig XSLT-voorbeeld

Hier is een eenvoudig voorbeeld dat XSLT gebruikt om gegevens in een XML-bestand te converteren naar een tabel in een HTML-bestand. Je kunt het gebruiken om te experimenteren met eenvoudige XSLT-transformaties.

Voorwaarde: installeer een Java Runtime Environment en voeg de locatie van de JRE toe aan uw PATH-variabele. (In Windows voegen de meeste installatieprogramma's Java toe aan uw pad.) Als dit werkt, moet u een opdrachtregelvenster kunnen openen en de opdracht java -version en een afdruk van informatie over uw JRE krijgen.

  1. Download hier de Saxon-HE XSLT-processor voor Java: saxon.sourceforge.net en pak deze uit op elke willekeurige plek op uw computer.
  2. Maak in een teksteditor een bestand met de naam pets.xml met de volgende code:
  <pets>
  <petType name="Dogs">
    <pet id="123" name="Sparky" vaccineStatus="vaccinated" healthStatus="healthy"/>
    <pet id="234" name="Sadie" vaccineStatus="unvaccinated" healthStatus="sick"/>
    <pet id="345" name="Herman" vaccineStatus="unvaccinated" healthStatus="unknown"/>
  </petType>
  <petType name="Cats">
    <pet id="456" name="Cleo" vaccineStatus="vaccinated" healthStatus="healthy"/>
    <pet id="567" name="Janet" vaccineStatus="unvaccinated" healthStatus="healthy"/>
    <pet id="678" name="Furry" vaccineStatus="vaccinated" healthStatus="sick"/>
  </petType>
</pets>
  1. Maak in een teksteditor een bestand met de naam petTransform.xsl met de volgende code:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0">

<!-- handle the root XML element -->
<xsl:template match="/">
<html><head>
  <title>Pets that are available for adoption</title>
</head>
<body>
  <xsl:apply-templates/>
</body>
</html>
</xsl:template>

<xsl:template match="pets">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="petType">
<h2><xsl:value-of select="@name"/></h2>
<table id="{@name}">
   <tr>
     <th colname="id">ID</th>
     <th colname="name">Name</th>
     <th colname="vaccinated">Vaccine status</th>
     <th colname="health">Health status</th>
   </tr>
   <tbody>
     <!-- add a row for each pet in this category -->
     <xsl:for-each select="pet">
       <tr>
         <td colname="id"><xsl:value-of select="@id"/></td>
         <td colname="name"><xsl:value-of select="@name"/></td>
         <td colname="vaccinated"><xsl:value-of select="@vaccineStatus"/></td>
         <td colname="health"><xsl:value-of select="@healthStatus"/></td>
       </tr>
     </xsl:for-each>
   </tbody>
 </table>
</xsl:template>

<!-- ignore the content of other tags because we processed them elsewhere -->
<xsl:template match="*">
<!-- do nothing -->
</xsl:template>

</xsl:stylesheet>
  1. Open een opdrachtregelvenster en ga naar de map met de XML- en XSLT-bestanden.
  2. Voer de volgende opdracht uit, waarbij path_to_saxon.jar het volledige pad is naar het bestand saxon9he.jar :
java -jar "path_to_saxon.jar" -o
petOutput.html -s:pets.xml -xsl:pettransform.xslt
 

Bijvoorbeeld:

java -jar "C:\Program Files\SaxonHE9-7-0-7J\saxon9he.jar" -o
petOutput.html -s:pets.xml -xsl:pettransform.xslt
 

Zorg ervoor dat u deze opdracht op een enkele regel uitvoert.

  1. Open het uitvoerbestand petOutput.html in een teksteditor. Het zou er zo uit moeten zien:
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Pets that are available for adoption</title>
   </head>
   <body>
      
      <h2>Dogs</h2>
      <table id="Dogs">
         <tr>
            <th colname="id">ID</th>
            <th colname="name">Name</th>
            <th colname="vaccinated">Vaccine status</th>
            <th colname="health">Health status</th>
         </tr>
         <tbody>
            <tr>
               <td colname="id">123</td>
               <td colname="name">Sparky</td>
               <td colname="vaccinated">vaccinated</td>
               <td colname="health">healthy</td>
            </tr>
            <tr>
               <td colname="id">234</td>
               <td colname="name">Sadie</td>
               <td colname="vaccinated">unvaccinated</td>
               <td colname="health">sick</td>
            </tr>
            <tr>
               <td colname="id">345</td>
               <td colname="name">Herman</td>
               <td colname="vaccinated">unvaccinated</td>
               <td colname="health">unknown</td>
            </tr>
         </tbody>
      </table>
      
      <h2>Cats</h2>
      <table id="Cats">
         <tr>
            <th colname="id">ID</th>
            <th colname="name">Name</th>
            <th colname="vaccinated">Vaccine status</th>
            <th colname="health">Health status</th>
         </tr>
         <tbody>
            <tr>
               <td colname="id">456</td>
               <td colname="name">Cleo</td>
               <td colname="vaccinated">vaccinated</td>
               <td colname="health">healthy</td>
            </tr>
            <tr>
               <td colname="id">567</td>
               <td colname="name">Janet</td>
               <td colname="vaccinated">unvaccinated</td>
               <td colname="health">healthy</td>
            </tr>
            <tr>
               <td colname="id">678</td>
               <td colname="name">Furry</td>
               <td colname="vaccinated">vaccinated</td>
               <td colname="health">sick</td>
            </tr>
         </tbody>
      </table>
      
   </body>
</html>
 
  1. Open het uitvoerbestand petOutput.html in een webbrowser. De gegevens moeten in een eenvoudige tabel worden weergegeven.