XSLT
Børre Stenseth

XSLT

Det finnes en rekke teknologier for å manipulere XML-dokumenter. De fleste programmeringsspråk har velutstyrte biblioteker for å gjøre dette (Java, C#, C++, Python, JavaScript). det betyr at vi som programmerere kan lage funksjoner for alt vi måtte ønske oss når det gjelder manipulasjon av XML. Disse bibliotekene er bygd på et begrepsapparat og et sette med basisteknologier som er rimelig veldefinerte: XPath, XQuery og XSLT (eXtensible Stylesheet Language Transformations). I dette materialet skal vi sette fokus på XSLT og XPath.

XPath ble opprinnelig definert som en del av XSLT, men er løftet ut som en definisjon i seg selv. Du finner alle nødvendige formalia og versjonsbeskrivelser hos W3C [1] . XSLT finnes i to versjoner. Vi skal i hovedsak holde oss til XSLT1. XSLT2 er rikere på muligheter, men prinsippene er de samme og foreløpig er XSLT1 tilgjenglig i flere omgivelser.

Vi skal bruke XSLT på den måten at vi definerer XSLT-transformasjoner som kan kjøres mot XML-filer for å produsere ulike typer resultat. Transformasjonene, XSLT-filene, beskriver vi i et eget XML-språk. Fordelene med dette er i hvert fall tre:

  • For et stort sett av problemer er det mye lettere å lage transformasjoner enn å håndprogrammere de ønskete operasjonene i et vanlig programmeringsspråk.
  • Vi kan teste transformasjonen i kontrollerte omgivelser.
  • Når vi først har laget transformasjonen er den flyttbar til andre omgivelser, f.eks. mellom tjener og klient, eller fra Python-omgivelser til Java eller C#.
xsl1
basis operasjon

Vi trenger et program (F) som leser XML-filer og XSLT-filer og produserer et resultat. Resultatet kan være en XML-fil, en HTML-fil eller en tekst-tfil. Tekst kan da være ren tekst, CSV, JSON, RTF, SQL eller i prinsipp hva som helst.

Når vi skal gjøre denne jobben trenger vi altså å kjøre et program, F, og vi kan parameterstyre transformasjonen. I dette materialet vi F være et Javascript på klienten (nettleseren) eller et Python-script på tjeneren. I andre settinger vil vi kunne gjøre jobben fra andre programmeringsomgivelser (Java, C#,...).

Noen typiske situasjoner

xsl2
XML og transformasjon på tjeneren

Vi har XML som råmateriale, enten fordi vi har lagret det selv eller fordi vi har importert det fra en eller annen kilde. Vi vet hva vi skal ha ut på klienten og fikser det med en transformasjon. Hva vi sender tilbake til tjeneren er avhengig av hvor stor fleksibilitet vi ønsker på klienten. JSON gir oss stor, og enkel, handlefrihet i Javascriptet, mens ferdige HTML-fragmenter krever kanskje bare en linje JS-kode på klienten. Det finnes standardtransformasjoner for å produsere JSON fra XML.

xsl3
Database og transformasjon på tjeneren

Hvis vi har datakilden vår på en database, blir resonnementet som over. Det er verdt å merke seg at vi trolig vil se en utvikling der databasemotorene i økende grad leverer ferdig både XML og JSON. I skrivende stund leverer mMySQL XML-format.

xsl4
Transformasjon på klienten

De siste nettlesergenerasjonene tillater transformasjoner på klienten. Dette har den fordelen at vi kan velge å laste opp "rådata" og la brukeren velge hvilke data han/hun vil se og hvordan de skal vises, uten at vi må kontakte tjeneren.

Vi har også muligheter for å laste opp en XML-fil i nettleseren som transformeres, typisk til HTML, "on-the-fly".

Vi skal se på alle disse scenariene, og noen fler, i dette materialet.

Noen verktøy

Python

Tjenersiden i dette materialet er i hovedsak betjent av Python. Python trenger et bibliotek for å kjøre XSLT-transformasjoner. Jeg bruker lxml [2] . Dette biblioteket inneholder en god del mer en rene XSLT-transfomasjoner.

XMLSpy

XMLSpy [3] er et nyttig verktøy for å eksperimentere med XSL-transformasjoner. Vi kan teste ut forskjellige transformasjonsmotorer og vi har en komplett omgivelse for å editere og teste. XMLSpy er i motsetning til de aller fleste verktøy som er nevnt i dette materialet lisensbelagt med en gratis testperiode på 1 måned. Vi greier oss fint uten XMLSpy, men det er et godt laboratorium for utvikling og testing av XSLT. Støtter XSLT2.

Saxonica

Saxonica [4] er et interessant firma utviklet av Michael Kay som er en veteran i XSLT-sammenheng. Se også SourceForge [5] . Støtter XSLT2.

Referanser
  1. The Extensible Stylesheet Language Family W3C www.w3.org/Style/XSL/ 14-12-2015
  1. lxml - XML and HTML with Python lxml.de/ 03-03-2014
  1. XML Spy Altova www.xmlspy.com 01-03-2014
  1. XSLT AND XQUERY PROCESSING SAXONICA www.saxonica.com/welcome/welcome.xml 21-02-2014
  1. Saxon XSLT and XQuery Processor Sourceforge sourceforge.net/projects/saxon/ 21-02-2014