XSLT - XSLT
Paradigme | Erklærende |
---|---|
Udvikler | World Wide Web Consortium (W3C) |
Først dukkede op | 1998 |
Stabil frigivelse | 3.0 / 8. juni 2017
|
Filnavneudvidelser | .xslt |
Internet side | www |
Større implementeringer | |
libxslt , saksisk , Xalan | |
Påvirket af | |
DSSSL |
XSLT ( Extensible Stylesheet Language Transformations ) er et sprog til omdannelse af XML- dokumenter til andre XML-dokumenter eller andre formater såsom HTML til websider , almindelig tekst eller XSL-formateringsobjekter , som efterfølgende kan konverteres til andre formater, såsom PDF , PostScript og PNG . XSLT 1.0 understøttes bredt i moderne webbrowsere.
Det originale dokument ændres ikke; snarere oprettes et nyt dokument baseret på indholdet af et eksisterende. Typisk er inputdokumenter XML-filer, men alt, hvorfra processoren kan bygge en XQuery og XPath-datamodel, kan bruges, såsom relationsdatabasetabeller eller geografiske informationssystemer .
Selvom XSLT er designet som et specielt sprog til XML-transformation, er sproget Turing-komplet , hvilket gør det teoretisk i stand til vilkårlige beregninger.
Historie
XSLT er påvirket af funktionelle sprog og af tekstbaseret mønster, der matcher sprog som SNOBOL og AWK . Dens mest direkte forgænger er DSSSL , som gjorde for SGML, hvad XSLT gør for XML.
- XSLT 1.0: XSLT var en del af World Wide Web Consortium (W3C) s eXtensible Stylesheet Language (XSL) udviklingsindsats fra 1998-1999, et projekt der også producerede XSL-FO og XPath . Nogle medlemmer af standardudvalget, der udviklede XSLT, inklusive redaktøren James Clark , havde tidligere arbejdet på DSSSL. XSLT 1.0 blev offentliggjort som en W3C-anbefaling i november 1999. På trods af sin alder er XSLT 1.0 stadig meget udbredt (fra og med 2018), da senere versioner ikke understøttes indbygget i webbrowsere eller i miljøer som LAMP .
- XSLT 2.0: efter et abortforsøg på at oprette en version 1.1 i 2001 gik XSL-arbejdsgruppen sammen med XQuery- arbejdsgruppen for at oprette XPath 2.0 med en rigere datamodel og typesystem baseret på XML-skema . På baggrund af dette er XSLT 2.0, udviklet under redaktion af Michael Kay , som nåede status som anbefaling i januar 2007. De vigtigste innovationer i XSLT 2.0 inkluderer:
- Strengmanipulation ved hjælp af regulære udtryk
- Funktioner og operatører til manipulation af datoer, tidspunkter og varigheder
- Flere outputdokumenter
- Gruppering (oprettelse af hierarkisk struktur ud fra flade input-sekvenser)
- Et rigere system og stærkere typekontrol
- XSLT 3.0: blev en W3C-anbefaling den 8. juni 2017. De vigtigste nye funktioner er:
- Streamingstransformationer : I tidligere versioner måtte hele inputdokumentet læses i hukommelsen, før det kunne behandles, og output kunne ikke skrives, før behandlingen var afsluttet. XSLT 3.0 tillader XML-streaming, som er nyttig til behandling af dokumenter, der er for store til at passe i hukommelsen, eller når transformationer er lænket i XML-rørledninger .
- Pakker for at forbedre modulopbygningen af store typografiark.
- Forbedret håndtering af dynamiske fejl med for eksempel en xsl: prøv instruktion.
- Understøttelse af kort og arrays, der gør det muligt for XSLT at håndtere JSON såvel som XML.
- Funktioner kan nu være argumenter for andre funktioner (højere orden).
Design og forarbejdningsmodel
XSLT-processoren tager et eller flere XML-kildedokumenter plus et eller flere XSLT-stilark og behandler dem til at producere et outputdokument. I modsætning til vidt implementerede tvingende programmeringssprog som C er XSLT deklarativ . Det grundlæggende behandlingsparadigme er mønstermatchning. I stedet for at angive en bydende rækkefølge af handlinger, der skal udføres i et statefult miljø, definerer skabelonregler kun, hvordan man skal håndtere en node, der matcher et bestemt XPath-lignende mønster, hvis processoren tilfældigvis støder på en, og indholdet af skabelonerne effektivt omfatter funktionel udtryk, der direkte repræsenterer deres evaluerede form: resultattræet, som er grundlaget for processorens output.
En typisk processor opfører sig som følger. For det første, forudsat at et stylesheet allerede er blevet læst og klargjort, bygger processoren et kildetræ fra input XML-dokumentet. Derefter behandler kildetræets rodnode, finder den bedst matchende skabelon til den node i stilarket og evaluerer skabelonens indhold. Instruktioner i hver skabelon leder generelt processoren til enten at oprette noder i resultattræet eller til at behandle flere noder i kildetræet på samme måde som rodnoden. Endelig bliver resultattræet serieliseret som XML- eller HTML-tekst.
XPath
XSLT bruger XPath til at identificere undersæt af kildedokumenttræet og udføre beregninger. XPath tilbyder også en række funktioner , som XSLT selv supplerer yderligere.
XSLT 1.0 bruger XPath 1.0, mens XSLT 2.0 bruger XPath 2.0. XSLT 3.0 fungerer med enten XPath 3.0 eller 3.1. I tilfælde af 1.0 og 2.0 blev XSLT- og XPath-specifikationerne offentliggjort den samme dato. Med 3.0 blev de imidlertid ikke længere synkroniseret; XPath 3.0 blev en anbefaling i april 2014 efterfulgt af XPath 3.1 i februar 2017; XSLT 3.0 fulgte i juni 2017.
XQuery sammenlignet
XSLT-funktionaliteter overlapper dem med XQuery , som oprindeligt blev tænkt som et forespørgselssprog for store samlinger af XML-dokumenter.
XSLT 2.0- og XQuery 1.0-standarderne blev udviklet af separate arbejdsgrupper inden for W3C og arbejdede sammen for at sikre en fælles tilgang, hvor det var relevant. De deler den samme datamodel, typesystem og funktionsbibliotek, og begge inkluderer XPath 2.0 som et under sprog.
De to sprog er dog rodfæstet i forskellige traditioner og tjener forskellige samfunds behov. XSLT blev primært opfattet som et typografisprog, hvis primære mål var at gengive XML til den menneskelige læser på skærmen, på nettet (som et webskabelonsprog ) eller på papir. XQuery blev primært tænkt som et databaseforespørgselssprog i traditionen med SQL .
Fordi de to sprog stammer fra forskellige samfund, er XSLT stærkere i sin håndtering af fortællende dokumenter med mere fleksibel struktur, mens XQuery er stærkere i sin datahåndtering, for eksempel når man udfører relationelle sammenføjninger.
Medietyper
Det <output>
element kan eventuelt tage attributten media-type
, som gør det muligt at indstille typen medier (eller MIME type) til den resulterende output, for eksempel: <xsl:output output="xml" media-type="application/xml"/>
. XSLT 1.0-anbefalingen anbefaler de mere generelle attributtyper, text/xml
og application/xml
da der i lang tid ikke var nogen registreret medietype til XSLT. I løbet af denne tid text/xsl
blev de facto-standarden. I XSLT 1.0 blev det ikke specificeret, hvordan media-type
værdierne skulle bruges.
Med frigivelsen af XSLT 2.0 anbefalede W3C registrering af MIME-medietypen, application/xslt+xml
og den blev senere registreret hos Internet Assigned Numbers Authority .
Pre-1.0 arbejdsudkast af XSLT, der blev brugt text/xsl
i deres indlejringseksempler, og denne type blev implementeret og bliver fortsat markedsført af Microsoft i Internet Explorer og MSXML. Det er også bredt anerkendt i xml-stylesheet
behandlingsinstruktionen af andre browsere. I praksis er derfor brugere, der ønsker at kontrollere transformation i browseren ved hjælp af denne behandlingsinstruktion, forpligtet til at bruge denne uregistrerede medietype.
Eksempler
Disse eksempler bruger følgende indgående XML-dokument
<?xml version="1.0" ?>
<persons>
<person username="JS1">
<name>John</name>
<family-name>Smith</family-name>
</person>
<person username="MI1">
<name>Morka</name>
<family-name>Ismincius</family-name>
</person>
</persons>
Eksempel 1 (omdannelse af XML til XML)
Dette XSLT-typografiark indeholder skabeloner til transformation af XML-dokumentet:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/persons">
<root>
<xsl:apply-templates select="person"/>
</root>
</xsl:template>
<xsl:template match="person">
<name username="{@username}">
<xsl:value-of select="name" />
</name>
</xsl:template>
</xsl:stylesheet>
Evalueringen resulterer i et nyt XML-dokument med en anden struktur:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<name username="JS1">John</name>
<name username="MI1">Morka</name>
</root>
Eksempel 2 (omdannelse af XML til XHTML)
Behandling af følgende eksempel XSLT-fil
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/persons">
<html>
<head> <title>Testing XML Example</title> </head>
<body>
<h1>Persons</h1>
<ul>
<xsl:apply-templates select="person">
<xsl:sort select="family-name" />
</xsl:apply-templates>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="person">
<li>
<xsl:value-of select="family-name"/><xsl:text>, </xsl:text><xsl:value-of select="name"/>
</li>
</xsl:template>
</xsl:stylesheet>
med XML-inputfilen vist ovenfor resulterer i følgende XHTML ( hvidt mellemrum er blevet justeret her for klarhed):
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head> <title>Testing XML Example</title> </head>
<body>
<h1>Persons</h1>
<ul>
<li>Ismincius, Morka</li>
<li>Smith, John</li>
</ul>
</body>
</html>
Denne XHTML genererer output nedenfor, når det gengives i en webbrowser.
For at en webbrowser skal kunne anvende en XSL-transformation til et XML-dokument, der vises, kan en XML-stilarkbehandlingsinstruktion indsættes i XML. Så hvis f.eks. Stilarket i eksempel 2 ovenfor var tilgængeligt som "eksempel2.xsl", kunne følgende instruktion føjes til den oprindelige indgående XML:
<?xml-stylesheet href="example2.xsl" type="text/xsl" ?>
I dette eksempel text/xsl
er det teknisk forkert i henhold til W3C-specifikationerne (som siger, at typen skal være application/xslt+xml
), men det er den eneste medietype, der er bredt understøttet på tværs af browsere fra 2009, og situationen er uændret i 2021.
Processorimplementeringer
- RaptorXML fra Altova er en XSLT 3.0-processor, der er tilgængelig i XMLSpy-udviklingsværktøjssættet og som en fritstående serverimplementering, påberåbt ved hjælp af en REST-grænseflade.
- IBM tilbyder XSLT-behandling indlejret i et specialudstyr til hardware under mærket Datapower .
-
libxslt er et gratis bibliotek frigivet under MIT-licensen, der kan genbruges i kommercielle applikationer. Det er baseret på libxml og implementeret i C for hastighed og bærbarhed. Det understøtter XSLT 1.0 og EXSLT udvidelser.
- Det kan bruges på kommandolinjen via xsltproc, som er inkluderet i macOS og mange Linux-distributioner , og kan bruges på Windows via Cygwin .
- Den WebKit og Blink layout motorer, der anvendes for eksempel i Safari og Chrome webbrowsere henholdsvis bruger libxslt biblioteket til at gøre XSL transformationer.
- Der findes bindinger til Python , Perl , Ruby , PHP , Common Lisp , Tcl og C ++ .
-
Microsoft leverer to XSLT-processorer (kun begge XSLT 1.0). Den tidligere processor MSXML leverer COM-grænseflader; fra MSXML 4.0 inkluderer det også kommandolinjeværktøjet
msxsl.exe
. .NET runtime inkluderer en separat indbygget XSLT-processor iSystem.Xml.Xsl
biblioteket. - Saxon er en XSLT 3.0 og XQuery 3.1 processor med open source og proprietære versioner til stand-alone drift og til Java , JavaScript og .NET. Et separat produkt Saxon-JS tilbyder XSLT 3.0-behandling på Node.js og i browseren.
- Xalan er en open source XSLT 1.0-processor fra Apache Software Foundation, der er tilgængelig til Java og C ++. En variant af Xalan-processoren er inkluderet som standard XSLT-processor i den almindelige Java-distribution fra Oracle.
- Webbrowsere: Safari, Chrome, Firefox, Opera og Internet Explorer understøtter alle XSLT 1.0 (kun). Browsere kan udføre on-the-fly transformationer af XML-filer og vise transformationsoutputtet i browservinduet. Dette gøres enten ved at integrere XSL i XML-dokumentet eller ved at henvise til en fil, der indeholder XSL-instruktioner fra XML-dokumentet. Sidstnævnte fungerer muligvis ikke med Chrome på filer fra lokalt filsystem på grund af dets sikkerhedsmodel.
Ydeevne
De fleste tidlige XSLT-processorer var tolke. For nylig er kodegenerering mere og mere almindelig ved hjælp af bærbare mellemliggende sprog (såsom Java bytecode eller .NET Common Intermediate Language ) som mål. Selv de fortolkende produkter tilbyder dog generelt separate analyse- og eksekveringsfaser, så et optimeret ekspressionstræ kan oprettes i hukommelsen og genbruges til at udføre flere transformationer. Dette giver betydelige ydelsesfordele i onlineudgivelsesapplikationer, hvor den samme transformation anvendes mange gange i sekundet til forskellige kildedokumenter. Denne adskillelse afspejles i designet af XSLT-behandlings-API'er (såsom JAXP ).
Tidlige XSLT-processorer havde meget få optimeringer. Stilarkdokumenter blev læst i dokumentobjektmodeller, og processoren ville reagere direkte på dem. XPath- motorer blev heller ikke optimeret. Imidlertid bruger XSLT-processorer i stigende grad optimeringsteknikker, der findes i funktionelle programmeringssprog og databaseforespørgssprog, såsom statisk omskrivning af et ekspressionstræ (f.eks. For at flytte beregninger ud af sløjfer) og doven pipelined evaluering for at reducere hukommelsesfodaftrykket af mellemliggende resultater (og tillad "tidlig afslutning", når processoren kan evaluere et udtryk som following-sibling::*[1]
uden en komplet evaluering af alle underudtryk). Mange processorer bruger også trærepræsentationer, der er betydeligt mere effektive (i både tid og rum) end DOM-implementeringer til generelle formål.
I juni 2014 introducerede Debbie Lockett og Michael Kay en open source benchmarking-ramme for XSLT-processorer kaldet XT-Speedo.
Se også
- XSLT-elementer - en liste over nogle almindeligt anvendte XSLT-strukturer.
- Muenchian gruppering - en dialektforskel mellem XSLT1 og XSLT2 +.
- eXtensible Stylesheet Language - en familie af sprog, som XSLT er medlem af
- XQuery og XSLT sammenlignet
- XSL-formateringsobjekter eller XSL-FO - Et XML-baseret sprog til dokumenter, normalt genereret ved at transformere kildedokumenter med XSLT, bestående af objekter, der bruges til at oprette formateret output
- Identitetstransform - et udgangspunkt for filterkæder, der tilføjer eller fjerner dataelementer fra XML-træer i en transformationsrørledning
- Apache Cocoon - en Java- baseret ramme til behandling af data med XSLT og andre transformere.
Referencer
Yderligere læsning
- XSLT af Doug Tidwell, udgivet af O'Reilly ( ISBN 0-596-00053-7 )
- XSLT-kogebog af Sal Mangano, udgivet af O'Reilly ( ISBN 0-596-00974-7 )
- XSLT 2.0 programmørreference af Michael Kay ( ISBN 0-764-56909-0 )
- XSLT 2.0 og XPath 2.0 programmørreference af Michael Kay ( ISBN 978-0-470-19274-0 )
- XSLT 2.0 Webudvikling af Dmitry Kirsanov ( ISBN 0-13-140635-3 )
- XSL Companion, 2. udgave af Neil Bradley, udgivet af Addison-Wesley ( ISBN 0-201-77083-0 )
- XSLT og XPath on the Edge (Unlimited Edition) af Jeni Tennison , udgivet af Hungry Minds Inc, USA ( ISBN 0-7645-4776-3 )
- XSLT & XPath, en guide til XML-transformation af John Robert Gardner og Zarella Rendon, udgivet af Prentice-Hall ( ISBN 0-13-040446-2 )
- XSL-FO af Dave Pawson, udgivet af O'Reilly ( ISBN 978-0-596-00355-5 )
eksterne links
- Dokumentation
- XSLT 1.0 W3C-anbefaling
- XSLT 2.0 W3C-anbefaling
- XSLT 3.0 W3C-anbefaling
- XSLT - MDC Docs af Mozilla Developer Network
- XSLT Reference (MSDN)
- XSLT Elements (saksisk)
- XSLT introduktion og reference
- XSLT-kodebiblioteker
- EXSLT er et udbredt fællesskabsinitiativ til at levere udvidelser til XSLT.
- FXSL er et bibliotek, der implementerer support til funktioner i højere ordre i XSLT. FXSL er skrevet i selve XSLT.
- XSLT Standard Library xsltsl giver XSLT-udvikleren et sæt XSLT-skabeloner til almindeligt anvendte funktioner. Disse er implementeret udelukkende i XSLT, det vil sige, at de ikke bruger nogen udvidelser. xsltsl er et SourceForge-projekt.
- Kernow En GUI til saksisk, der giver et peg-og-klik-interface til at køre transformationer.
- xslt.js - Transformer XML med XSLT JavaScript-bibliotek, der omdanner XML med XSLT i browseren.