XML transformeren m.b.v. XSLT

Wat is XMLTV?
XML – Extensible Markup Language is een (tekst)bestand met een speciale opmaak. Het lijkt erg veel op HTML-code en wordt gebruikt om gegevens over te brengen tussen verschillende (type) computersystemen om documenten te maken of om databases te vullen. Wij gebruiken een XML-bestand genaamd ‘xmltv.xml’ om een electronische TV-gids (EPG) te voorzien van gegevens over TV uitzendingen.

Voor deze toepassing kan DVBLogic software het xmltv-bestand inlezen en de EPG van Windows Mediacenter voorzien van data.

De inhoud van het xmltv.xml bestand bestaat uit XML-tags waartussen de informatie staat. Bijvoorbeeld de TV-kanalen:

<tv>
  <channel id="1">
    <display-name lang="nl">NPO 1</display-name>
  </channel>
  <channel id="2">
    <display-name lang="nl">NPO 2</display-name>
  </channel>
  <channel id="3">
    <display-name lang="nl">NPO 3</display-name>
  </channel>
</tv>
...

Hierbij is het element <channel> het kanaalnummer dat als attribuut ‘id’ is aangeduid en het child-element ‘<display-name>’ de naam van de zender. (met hierin wederom een attribuut genaamd ‘lang’ voor de taal.)

Schema’s
Een schema is een XML-bestand met regels voor items die wel en niet kunnen worden opgenomen in een XML-gegevensbestand.
Met schema’s kunnen programma’s de gegevens uit een xml-bestand valideren. Als een gebruiker bijvoorbeeld ongeldige gegevens invoert, zoals tekst in een datumveld, wordt de gebruiker gevraagd de juiste gegevens in te voeren. Zolang de gegevens in een XML-bestand aan de regels van een bepaald schema voldoen, kan een programma dat ondersteuning biedt voor XML dat schema gebruiken om de gegevens te lezen, interpreteren en verwerken.

Een voorbeeldschema voor de TV-kanalen uit bovenstaand xml-voorbeeld waarbij wordt aangegeven dat de display-name van de zender tekst is (string): (tvkanalen.xsd)

<xsd:element name="tv">  
  <xsd:complexType>  
    <xsd:sequence>
      <xsd:element name="display-name" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

Transformaties
Extensible Stylesheet Language Transformation (XSLT) zijn bestanden die gebruikt worden om XML-bestanden om te zetten naar bijvoorbeeld andere XML-bestanden of naar HTML-pagina’s of naar PDF-documenten. Om het XML-bestand met de TV-kanalen als tabel te kunnen weergeven in een html-document kan de volgende code gebruikt worden: (tvkanalen.xslt)

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>
  <xsl:template match="/">
    <html>
      <body>
        <b>TV kanalen</b>
        <table border="1">
          <tr bgcolor="grey">
            <th>Kanaal</th>
            <th>Naam</th>
          </tr>
          <xsl:for-each select="tv/channel">
            <tr>
              <td>
                <xsl:value-of select="./@id"/>
              </td>
              <td>
                <xsl:value-of select="display-name"/>
              </td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Uitleg:
Voor elk tv/channel element zoeken we de waarde op van het attribuut ‘id’ (aangegeven d.m.v. een @-teken) en plaatsen dat in een cel. Vervolgens zoeken we de waarde van het child-element genaamd ‘display-name’ en zetten die ook in een cel. De cellen worden in een tabel weergegeven door middel van html-code hetgeen we als output-method hebben gedefinieerd bovenaan het xslt-bestand.

Voor Windows biedt Microsoft een utility om een XML-bestand te transformeren via een xslt-bestand met de: Command Line Transformation Utility (msxsl.exe) De syntax voor bovenstaande voorbeeld-bestanden is dan:

msxsl.exe http://xmltv.windows-mediacenter.nl/xmltv/xmltv.xml http://xmltv.windows-mediacenter.nl/tvkanalen.xslt -o tvkanalen.html

En dit geeft een html-pagina als output voor de TV-kanalen uit het XML-bestand.