Vad är XSLT XSLT extensible Stylesheet Language Transformations

Relevanta dokument
XSLT. Extensible Stylesheet Language Transformations

Introduktion till XSLT

<sid nr="1" av="2" /> Stackenföreläsning: XML & XSLT: Intro. XML och XSLT

Vad är XML XML. Exempel - SMIL. Exempel - XHTML. extensible Markup Language

Vad är XLink. XLink/XPointer/XSLT-FO. Namespace. Simple Links

Kompletterande exempel till XSLT

CSS- Cascading Stylesheets

XML. Dagens föreläsning. Vad är XML extencible Markup Language. Exempel - XHTML

Dagens föreläsning. Vad är XML. Exempel - XHTML. extencible Markup Language

XML. Extensible Markup Language

Föreläsning 3 i kursen: Monica Langerth Zetterman Uppsala universitet. Extensible Style Language (XSL) är en språkfamilj

Extensible Stylesheet Language Transformations (XSLT) och XML Path Language (XPath)

Informationsmodellering och e-infrastrukturer

Laboration 1 XML, XPath, XSLT och JSON

Konstruktion av datorspråk

En snabb titt på XML LEKTION 6

Uppmärkningsspråk. TDP007 Konstruktion av datorspråk Föreläsning 4. Peter Dalenius Institutionen för datavetenskap


XML och C#.NET Att hantera XML-dokument

emopluppen Användning av "Ant" Niklas Backlund Version: 1.4 ( 2002/04/26 07:27:52 UTC)

XML. XML is a method for putting structured data in a text file

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

BEHANDLINGSREGLER. för. e-tullräkning

Vad är XML Schemas. XML Schemas. Varför XML Schmas. Namespace

Programmering II (ID1019) :00-17:00

HTML och CSS. Eric Elfving Institutionen för Datavetenskap (IDA)

Kursledare och övriga föreläsare och övningsassistenter. Antal undervisningstimmar uppdelat på föreläsningar, övningar och andra undervisningsformer

TDDC74 Lab 04 Muterbara strukturer, omgivningar

HTML och CSS. Eric Elfving Institutionen för datavetenskap. 18 augusti 2015

Programmering II (ID1019) :00-11:00

extensible Markup Language

EDA095 HTML. Per Andersson. April 26, Lund University Innehåll: HTML, CSS, DOM, JavaScript

Uppmärkningsspråk. TDP007 Konstruktion av datorspråk Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Användarberoende vyer av XML-data (HS-IDA-EA )

Web (html+xhtml), CSS. Dagens föreläsning. Web - grundprinciper. Syfte Ge er grunderna för att skapa och publicera websidor.

Lektion 8 Del 1 XML, Kapitel 20

DP7 Kompletterande information

Tillämpad Programmering (ID1218) :00-13:00

Introduktion HTML och PHP 732G16 Databaser design och programmering

XML - Vad är det? Hur vet jag vad som är vad - End Note? Publikationsreferens. XML för bibliotekarier. Anders Ardö.

Strukturering med XML och DTD

Metaspråket XML Mika Suonvieri

ITK:P2 F1. Hemsidor med HTML HTML. FTP, HTTP, HTML, XML och XHTML

Tentamen Nätverksprogrammering Lösningsförslag

Anvisningar för ifyllning av Excelark för databaser (xml-filer)

*:96 Overheads. Nested distribution lists. Part 3d: Mailing lists. Modes of distribution to many recipients

Heldag om FGS FGS:er och deras tekniska regelverk. Karin Bredenberg, FGS funktionen. Standarder. FGS:er och deras tekniska regelverk 1

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

Uppmärkningsspråk. TDP007 Konstruktion av datorspråk Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Institutionen för datavetenskap

WEBBUTVECKLING Kursplanering

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Programmeringteknik. Planering MÅL LABB: MOMENT LAB4 HTML - EXEMPEL HTML. Webbdelen

Tentamen Nätverksprogrammering Lösningsförslag

Användarhandledning Version 1.2

Databasbaserad publicering ME105A Laboration 9 1 (5)

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Hantera informationspaket i system för bevarande

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

Objektorienterad Programkonstruktion

JHS 193 Unik identifierare för geografisk information Bilaga 2. Exempel på teknisk realisering av URI-tjänst hos dataleverantör

Testautomatisering. HTML, Dev Tools, Watir

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Tentamen i. TDDC67 Funktionell programmering och Lisp

Webbaserade informationssystem med PHP och databaser

SKÖRDNING AV LOKALA DATAKÄLLOR I XML. Marika Lundqvist Umeå universitetsbibliotek

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

ÖrebroCupen. Institutionen för Ekonomi, Statistik och Informatik, ESI Informatik, Klientprogrammering för webbsystem, 5 poäng

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Övningsuppgift. En array baklänges. Steg 1. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Tove Carlsund Systemutvecklare

Webbsidor och webbservrar

Karusell med länkade omslagsbilder

Objektorienterad Programkonstruktion. Föreläsning 10 7 dec 2015

Att skriva dokumentation i DocBook för Proview

Programmering II (ID1019) :00-12:00

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

Innehåll Introduktion... 3 InteractiveScene.config... 3 Scener <scenes>... 3 Typsnitt <fonts>... 3 Övergångar <transitions>...

Du kan själv följa med i denna steg-för-steg guide i din texteditor.

Rekursiva algoritmer sortering sökning mönstermatchning

Uniform Resource Locator (URL) JavaServer Pages - JSP. Webbklienter. Webbserver. Hypertext Transfer Protocol (HTTP) HTTP Request

UC API Teknisk referens för UC:s svenska personinformation

Avancerade Webbteknologier

Översikt. Mer om XML & TEI Kurstillfälle 2. Grundläggande principer 1. Grundläggande principer 2. Hierarkisk dokumentmodell. XML & flexibilitet

Föreläsning 4: Kombinatorisk sökning

Generering av Universella Editorer

Programmering II (ID1019) :00-12:00

Skapandet av en databas, produktkatalog och hemsida

Innehåll. Dokumentet gäller från och med version

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

WWW. Exempel på klientsidan. Överföring av en html-fil. Snyggare variant. Verkligt format. Meddelandeformat för begäran HTTP

TDDC74 Lab 02 Listor, sammansatta strukturer

E12 "Evil is going on"

JAVASCRIPT. Beteende

Laboration: Whitebox- och blackboxtesting

Föreläsning 4 Datastrukturer (DAT037)

Schematransformation SLU

Programbeskrivning. Chaos på Web. Version

Transkript:

Vad är XSLT XSLT extensible Stylesheet Language Transformations 2D1525 Programmering för interaktiva medier http://www.nada.kth.se/kurser/kth/2d1525/ Ett transformationsspråk som transformerar ett XMLdokument till ett annat XML- eller textdokument. Kan t.ex. användas för att transformera en XML-struktur till XHTML och WML. En del av XSL som förutom XSLT inkluderar XSL-FO. Rekommendation från W3C. 2001-09-18 Björn Hedin, NADA/KTH 2001 1 2001-09-18 Björn Hedin, NADA/KTH 2001 2 XSLT-processor XSLT vs CSS XSLT är en rekommendation, inte ett program. Det finns däremot program som kan utföra XSLTtransformationer, sk XSLTprocessorer. Xalan och SAXON är vanliga XSLT-processorer. xmldokument xsltdokument xsltprocessor Output, t.ex. xhtml Precis som för CSS letar man efter mönster (patterns) i en XMLstruktur, och när dessa hittas utförs åtgärder (instruction elementss) Till skillnad från CSS är syftet med XSLT att förändra ett XMLträds struktur, inte dess visuella representation. XSLT kan skapa helt nya element, byta ordning på element, välja ut delar av innehållet osv, vilket inte CSS kan. XML-strukturen som är indata kallas input-träd och utdata kallas resultat-träd. CSS har inga resultat-träd. 2001-09-18 Björn Hedin, NADA/KTH 2001 3 2001-09-18 Björn Hedin, NADA/KTH 2001 4

Namespace för XSLT Templates Den namespace som används för version 1.0 av XSLT är http://www.w3.org/1999/xsl/transform Den brukar bindas till prefixet xsl Root-elementet är <xsl:stylesheet> eller <xsl:transform> vilka är ekvivalenta. Ett XSLT-dokument brukar alltså se ut så här: <xsl:stylesheet version= 1.0 xmlns:xsl= http://www.w3.org/1999/xsl/transform > <!-- innehåll --> Mönstermatchningen görs i elementet <xsl:template> <xsl:template> tar ett obligatoriskt attribut match som innehåller ett Xpathuttryck. Elementinnehållet är ett eller flera instruction element, s.k. action på XSLT-stylesheet <xsl:template match= / > [action] [action] 2001-09-18 Björn Hedin, NADA/KTH 2001 5 2001-09-18 Björn Hedin, NADA/KTH 2001 6 instruction elements (actions) <xsl:apply-templates> En action är ett uttryck som bestämmer vad som ska sättas in i resultatträdet när ett visst mönster påträffas. Några vanliga actions är Sätt in XML-element, attribut och textnoder. Utför eventuella template-regler för barnelement. Sätt inte in något alls. på XSLT-stylesheet <xsl:template match= / > <xsl:apply-templates> används för att applicera templates på barn-element till det aktuella elementet i inputträdet. Det har ett frivilligt select - attribut som innehåller en XPath relativt det aktuella elementet. på XSLT-stylesheet <xsl:template match= / > <xsl:apply-templates select= date /> <xsl:apply-templates select= title /> 2001-09-18 Björn Hedin, NADA/KTH 2001 7 2001-09-18 Björn Hedin, NADA/KTH 2001 8

Binda XSLT-stylesheets till XML-dokument Det enklaste sättet att binda ett xslt-stylesheet med ett xml-dokument är att ange båda som inparametrar vid anropet av xslt-processorn. Det andra sättet är att ange en processinstruktion i xmldokumentet med en href till xslt-dokumentet. Vid anrop av XSLT-processorn >java org.apache.xalan.xslt.process -IN Party.xml -XSL Party.xsl Genom processinstruktion <?xml version="1.0"?> <?xsl-stylesheet type= text/xsl href= Party.xsl?> <!DOCTYPE party SYSTEM "party.dtd"> <party> <title>amphiox Gasque</title> <date>2001-09-08</date> <starttime>18.00</starttime> <endtime>03.00</endtime> </party> Party.xml <?xml version="1.0"?> <?xsl-stylesheet type= text/xsl href= Party.xsl?> <!DOCTYPE party SYSTEM "party.dtd"> <party> <title>amphiox Gasque</title> <date>2001-09-08</date> <starttime>18.00</starttime> <endtime>03.00</endtime> </party> output <?xml version="1.0"?> Amphiox Gasque </title></head> Komplett exempel Party.xsl <xsl:apply-templates> </title></head> <xsl:template match= date /> <xsl:template match= starttime /> <xsl:template match= endtime /> 2001-09-18 Björn Hedin, NADA/KTH 2001 9 2001-09-18 Björn Hedin, NADA/KTH 2001 10 Kokboksmetod - 1 Kokboksmetod - 1 Här följer en kokboksmetod för hur man skapar ett stylesheet givet ett visst xmldokument, t.ex. party.xml. Figurerna till höger kommer användas. Dokumentrooten Processinstruktioner Dokumenttypdeklarationer Element Party.xml <?xml version="1.0"?> <?xsl-stylesheet type= text/xsl href= Party.xsl?> <!DOCTYPE party SYSTEM "party.dtd"> <party> <title>amphiox Gasque</title> <date>2001-09-08</date> <starttime>18.00</starttime> <endtime>03.00</endtime> </party> <?xml... <?xsl... <!DOC... <party> <title> <date> <starttime> <endtime> Textnoder Amphiox 2001... 18.00 03.00 2001-09-18 Björn Hedin, NADA/KTH 2001 11 2001-09-18 Björn Hedin, NADA/KTH 2001 12

Kokboksmetod - 2 Skapa en template för varje typ av elementnod i trädet (dvs om elementet <guest> förekommer fler än en gång i inputdokumentet ska ändå endast en template skapas). Låt action vara Party.xsl <xsl:template match= date > <xsl:template match= starttime > <xsl:template match= endtime > 2001-09-18 Björn Hedin, NADA/KTH 2001 13 Kokboksmetod - 3 Tag bort apply-templates från de regler som ska returnera tomt resultat och ta eventuella templates som därigenom aldrig blir åtkomliga. Party.xsl <xsl:template match= date /> <xsl:template match= starttime /> <xsl:template match= endtime /> 2001-09-18 Björn Hedin, NADA/KTH 2001 14 Kokboksmetod - 4 Lägg till och modifiera action-delen på återstående templates. vis lägga till och till rootelementets action ifall output ska vara html. Party.xsl </title></head> <xsl:template match= date /> <xsl:template match= starttime /> <xsl:template match= endtime /> XSLT-dokument är även XML-dokument Ett XSLT-dokument är ett fullständigt XML-dokument. Det betyder att det måste vara well-formed, dvs exempelvis att alla starttags måste ha motsvarande sluttags på rätt plats. Korrekt template </title></head> Felaktig template 2001-09-18 Björn Hedin, NADA/KTH 2001 15 2001-09-18 Björn Hedin, NADA/KTH 2001 16

Mer om XPath XPath: Root-noden Mönstren i ett match-attribut till ett xsl:template-element är XPath-mönster. De används huvudsakligen för att identifiera en eller flera delar (element, attribut mm) i ett XML-dokument. XPath är en W3Crekommendation Det finns 7 olika nod-typer i XML-dokument som kan kommas åt via XPath-uttryck. Root-noden Elementnoder Textnoder Attributnoder Kommentarnoder Processinstruktionsnoder Namespacenoder Uttrycket i XPath som matchar root-noden (dvs dokumentet) är /. Jämför filsystemet i Unix eller absoluta sökvägar i URLar. Rootnoden i XPath <xsl:template match= / > 2001-09-18 Björn Hedin, NADA/KTH 2001 17 2001-09-18 Björn Hedin, NADA/KTH 2001 18 XPath: Elementnoder XPath: Attributnoder Elementnoder matchas med sitt namn. Det går att matcha flera element i samma template genom att separera elementnamnen med Elementnoder i XPath med flera matchningar i samma template <xsl:template match= date title endtime > Attribut kan matchas genom @attributnamn. Vad gäller templates är man oftast intresserad av om ett visst element har ett visst attribut och ibland också vad detta attribut har för värde. Attribut i XPath Matchar alla food-element som har ett type-attribut <xsl:template match= food[@type] /> Matchar alla food-element som har ett type-attribut med ett värde som är dairy. <xsl:template match= food[@type= dairy ] /> 2001-09-18 Björn Hedin, NADA/KTH 2001 19 2001-09-18 Björn Hedin, NADA/KTH 2001 20

XPath: Kommentarer processinstruktioner, text XPath: Hierarkier och wildcards Det går även att matcha kommentarnoder, processinstruktionsnoder och textnoder genom speciella XPath-funktioner. Kommentarer <xsl:template match= comment() /> Processinstruktioner <xsl:template match= processinginstruction() /> Det går att matcha noder relativt deras position gentemot andra noder. Samtliga noder uttrycks med * Title-element som är barn till party-element <xsl:template match= party/title /> Title-element som är ättlingar till party-element <xsl:template match= party//title /> Alla element som är barn till party-element <xsl:template match= party/* /> Textnoder <xsl:template match= text() /> 2001-09-18 Björn Hedin, NADA/KTH 2001 21 2001-09-18 Björn Hedin, NADA/KTH 2001 22 XPath: Positionsmatchning <xsl:value-of> Element kan även matchas via sin position. Det första b-elementet <xsl:template match= b[first-of-type()] /> Det sista b-elementet <xsl:template match= b[last-of-type()] /> Alla b-element utom det sista <xsl:template match= b[not(last-oftype())] /> Dessutom last-of-any() first-of-any() Med <xsl:value-of> går det att plocka ut värdet av ett element eller ett attribut. <xsl:value-of> har ett attribut, select, vilket har ett XPath-värde. Sökvägen utgår från noden där matchningen görs. <xsl:value-of select= title /> </title></head> 2001-09-18 Björn Hedin, NADA/KTH 2001 23 2001-09-18 Björn Hedin, NADA/KTH 2001 24

<xsl:value-of>:. och.. Villkor:<xsl:if>. matchar den nod i inputträdet i vilken matchningen görs... matchar noden ovanför. Jfr unix och dos. <xsl:template match= starttime > Fest mellan <xsl:value-of select=. /> - <xsl:value-of select=../endtime /> XSLT stöder även vissa typer av villkor <xsl:if> har ett attribut test som evalueras till sant eller falskt. Om sant så utföres innehållet i tagen, annars inte <xsl:if test=.[@type= dairy ] > </xsl:if> 2001-09-18 Björn Hedin, NADA/KTH 2001 25 2001-09-18 Björn Hedin, NADA/KTH 2001 26 Villkor:<xsl:choose> <xsl:element> och <xsl:attribute> <xsl:choose> används för ifthen-else-konstruktioner. För if -delen används <xsl:when> För else -delen används <xsl:otherwise> <xsl:choose> <xsl:when test=.[@type= dairy ] > <xsl:value-of select= foo /> </xsl:when> <xsl:when test=.[@type= meat ] > <xsl:apply-templates select= bar /> </xsl:when> <xsl:otherwise > </xsl:otherwise> </xsl:choose> Ibland kan det vara önskvärt att använda en speciell xsltkonstruktion för att sätta in ett element i resultat-trädet. T.ex. om man vill sätta in ett attribut vars värde måste evalueras. Detta kan göras med <xsl:attribute> <xsl:element name= a > <xsl:attribute name= href > <xsl:value-of select= gurka /> </xsl:attribute> </xsl:element> 2001-09-18 Björn Hedin, NADA/KTH 2001 27 2001-09-18 Björn Hedin, NADA/KTH 2001 28

Attribute Value Templates <xsl:for-each> Ett smidigt sätt att inkludera värdet härledda värden i ett attribut i resultatträdet utan att använda xsl:attribute är att stoppa in en XPath inom {}. I resultatträdet evalueras värdet inom klamrarna. FEL (<> får ej finnas i ett attribut) <xsl:template match= foo > <a href= <xsl:value-of select= gurka /> >gurka </a> RÄTT <xsl:template match= foo > <a href= {gurka} >gurka</a> Med <xsl:for-each> kan man iterera över noder som väljs med ett select-attribut. <xsl:template match= foo > <xsl:for-each select= bar /> <xsl:value-of select= gurka /> </xsl:for-each> 2001-09-18 Björn Hedin, NADA/KTH 2001 29 2001-09-18 Björn Hedin, NADA/KTH 2001 30 <xsl:copy> <xsl:copy-of> <xsl:copy> kopierar den aktuella noden till resultatträdet. Barn-element eller attribut följer inte med. Om noden är en elementnod eller root-nod kan noden ges ett innehåll med en template. <xsl:template match= foo bar > <xsl:copy select= gurka /> <xsl:copy-of> kopierar ett trädfragment från input-trädet till resultatträdet. Trädfragmentet lokaliseras med ett select-attribut. Till skillnad från <xsl-copy> kopieras även attribut, barnelement och ättlingar. <xsl:template match= foo bar > <xsl:copy-of select= gurka /> 2001-09-18 Björn Hedin, NADA/KTH 2001 31 2001-09-18 Björn Hedin, NADA/KTH 2001 32

<xsl:text> <xsl:output> <xsl:text> kan användas för att placera text i resultatträdet. Skillnaden är att man kan få in exempelvis & och < i resultatträdet istället för deras entitetsreferenser vilka annars hamnar i resultatträdet. <xsl:template match= foo > <xsl:text> Hejhopp < > </xsl:text> Med <xsl:output> som är barnelement till <xsl:stylesheet> kan man styra sådant som doctype, kodning, indrag och outputmetod för resultatträdet. <xsl:output> method= html standalone= no doctype-system= party.dtd indent= yes media-type= text/html /> 2001-09-18 Björn Hedin, NADA/KTH 2001 33 2001-09-18 Björn Hedin, NADA/KTH 2001 34 <xsl:number>, <xsl:counter> Default-templates <xsl:number> och <xsl:counter> kan användas för att skapa numreringar. <xsl:number opererar på inputträdet medan <xsl:counter> opererar på resultat-trädet Default är att alla noder av samma nodtyp och med samma nodnamn som den aktuella noden räknas. <xsl:template match= foo > Foo-element nummer <xsl:number/> Om inga templates explicit anges för ett visst mönster finns ett antal defaulttemplates. Attribut- och textnoder <xsl:template match= text() @*> <xsl:value-of select=. /> Root- och elementnoder <xsl:template match= / * > Processinstruktion- och kommentarnoder <xsl:template match= processinginstruction() comment() /> 2001-09-18 Björn Hedin, NADA/KTH 2001 35 2001-09-18 Björn Hedin, NADA/KTH 2001 36

Var sker transformerna? Mer information I en web-miljö finns tre alternativ för var och när transformerna ska ske. När dokumentet skapas på servern. T.ex. med Xalan vid en kommandoprompt. På servern precis när dokumentet ska skickas till klienten. T.ex. med Cocoon, en servlet som kan användas i t.ex. Apache-webservern. På klienten, i dagsläget främst IE6 men även i Mozilla. Vilka för- och nackdelar finns med respektive alternativ? Xpath innehåller mycket mer, bland annat en hel del aritmetiska operationer. I kapitel 19 i XML in a nutshell finns en referensmanual. XSLT innehåller ett antal ytterligare element + många trixigheter och features man måste labba med för att upptäcka. Bra källa till kunskap är kapitel 20 i XML in a Nutshell 2001-09-18 Björn Hedin, NADA/KTH 2001 37 2001-09-18 Björn Hedin, NADA/KTH 2001 38