Introduktion till XSLT Vad är XSLT? • Extensible Style Language (XSL) är en språkfamilj Består av tre delar: 1. eXtensible Stylesheet Language for Transformations (XSLT) för att transformera xml-dokument 2. XSL FO är ett XML vokabulär för att specificera formattering (XSL Formatting Objects) 3. XPath språk som används av XSLT för åtkomst eller för att referera till delar av XML dokument. • Se http://www.w3.org/Style/XSL/ för W3C:s specifikationer av XSL-familjen. Introduktion till XSL 2 Varför transformera? Konvertera ett schema till ett annat jag säger p, du säger para Arrangera om data för t ex formatering T ex välja var noterna skall placeras Välja eller projicera delar av dokument visa de stycken som handlar om Kant Bearbeta data i en ny miljö t ex i en xml-databasmiljö, eller i en relationsdatabas Introduktion till XSL 3 En input flera output html pdf xml txt xml databas excel Introduktion till XSL 4 XSL FO Används för att beskriva formatering av XML dokument. W3C rekommendation 2001. Formateringsinstruktioner kan appliceras i resultatträdet W3 schools beskriver processen http://www.w3schools.com/xslfo/xslfo_intro.asp Introduktion till XSL 5 XSLT - Transformeringens delar Ett källdokument, dvs xml-fil Ett resultatträd i form av xml | html | txt | Själva transformeringen görs genom olika metoder: DOM (Document Object Model) se http://www.w3.org/DOM/ SAX ( Simple API for XML) se http://sax.sourceforge.net/ Introduktion till XSL 6 Träd & Noder Med XSLT tänker man inte i termer av dokument Ett träd representeras av data i dokumentet som noder Noder är element, attribut, kommentarer mm i en hierarki Introduktion till XSL 7 Typ av noder Rot: starten av dokumentet OBS! inte samma som rotelementet i en xml-fil Attributnoder Kommentarnoder Namnrymder PI:s ( t ex xml deklarationen) (Processing Instructions) textnoder Introduktion till XSL 8 XPath En standard för identifikation och specifikation av plats och områden i XML-dokument genom ID:n och XML:s hierarkiska struktur. Utformad för XSL/XSLT, XPointer, XQL och vilka andra specifikationer som behöver identifiera märkning i XML-dokument Adresserar specifika delar av XML dokumentet för att sedan tillåta transformering av dem Manipulering av textsträngar, Booelska uttryck, nummer Introduktion till XSL 9 XPath grundläggande syntax . aktuell nod // var som helst i dokumentet / Roten .. Föräldranoden @ attribut [1] position /steg/steg/steg = absolut referens steg/steg/steg = relativ referens Se http://www.w3.org/TR/xpath#section-Location-Steps Se: http://www.w3schools.com/xpath/xpath_syntax.asp Introduktion till XSL 10 Stilmallar Stilmallar byggs upp av ”templates” Templates innehåller XSL element & XPath uttryck suffix = .xsl måldokumentet måste vara välformad XML XSLT har en uppsättning fördefinierade element (funktioner) som utför vissa bestämda transformationer Se: http://www.w3schools.com/xsl/xsl_w3celementref.asp Introduktion till XSL 11 Repetition TEI är endast ett märkningsschema i XML. Det är inte specificerat hur de olika TEI-elementen presenteras i html eller i pdf-formatet. Alla webbläsare har stöd för (X)HTML och en möjlig lösning är att transformera TEI-kodningen till (X)HTML. En sådan presentationen är då ett derivat av originalet (TEI-källan). XSLT och XSL-FO är tekniker för att transformera och presentera XML-dokument. Åtkomst av XML-strukturen Rotelement X X1 X1 X2 Y X3 1) x1, x2, x3 är barn (child) till X 2) X är förälder (parent) till x1, x2, x3 3) x1, x2, x3 är syskon (sibling) 4) x1 är “äldre” syskon (precedingsibling) till x2 5) Rotelementet är förfader (ancestor) till x1, x2, x3 6) x1, x2, x3 är ättlingar (desendant) till Rotelementet och till X XPath i kombination med XSLT gör det möjligt att precisera vad i xmlträdet som skall bearbetas, dvs vilka noder som det skall hända något med. Som regel vill man att ett visst XPath-uttryck tillsammans med ett xslt-element antingen 1) ’grabba’ tag i en uppsättning noder, och/eller 2) generera innehåll utifrån källdokumentet. Exempel från bibl.xml som används i xsltövning Dokumentträd bibliography bibl bibl title author title author m title Micael lastname firstname Hocke y Susan bibl author w lastname firstname Kay bibl title author m lastname Aarset h firstname Espen bibl, title, author = elementnoder m & w = attributnoder (<author type=”m”>), OBS! attributnoder ingår inte i själva dokument hierarkin utan betecknar egenskaper som ett visst element besitter Författarnamnen = textnoder w lastname Ide firstname Nancy Traversering • XSL förutsätter en xml-processor eller ”tolk” (MSXML, XALAN, Saxon etc) – ett program som kan traversera xml-trädet och göra något med de noder det stöter på, exempelvis omvandla ett tei-element till ett html-element. • Dessa tolkar finns inbyggda i Oxygen och där kopplar man ihop xmldokumentet med en stilmall i t ex XSLT för att transformera texten (se särskild handledning i Studentportalen för att koppla en stilmall till ditt xml dokument: ”xslt-övning.zip”) • Givetvis måste detta ske i en speciell ordningsföljd: xml-processorn gör en på-djupet-först (depth-first) sökning med t ex DOM (Document Object Model) • En XML DOM används för att komma åt och uppdatera innehållet, formatet och strukturen i XML-dokument via ett gränssnitt. • Gränssnittet har formen av en objektmodell som består av objekt, egenskaper, metoder och händelser som kan representera och ändra komponenterna i ett XML-dokument. • En DOM lagrar data för ett XML-dokument i en hierarkisk trädstruktur som efterliknar strukturen i dokumentet. Traversering av dokumentträd 1 2 bibl title author m 4 3 5 lastname firstname bibliography bibl title bibl author title author w lastname firstname bibl title author m lastname firstname w lastname firstname 6 Kay Micael Hocke y Susan Aarset h Espen Ide Nancy 7 • Vid traversering av dokumentträdet ”läser” ett gränssnitt in innehållet i en DOM (Document Object Model) • Med en DOM kan man komma åt alla komponenter i ett XML-dokument, inklusive dokumentets element, attribut, textnoder, bearbetningsinstruktioner, kommentarer och enhetsdeklarationer (t ex &auml; [ä]). • Alla XML-dokument kan läsas in i en DOM. • När ett XML-dokument läses in i en DOM läses det från början till slut och lagras i DOM:en som en logisk modell av noder. • Läs mer vid: http://www.w3schools.com/dom/default.asp Operatorer Se: http://www.w3schools.com/xpath/ xpath_operators.asp Introduktion till XSL 17 Nodfunktioner Se: http://www.w3schools.com/xsl/ xsl_functions.asp Vanliga element Observera att man alltid skriver xsl:[namn på elementet], t ex <xsl:template match="div”> Läs mer vid: http://www.w3schools.com/xsl/ xsl_w3celementref.asp där finns alla vanliga element listade,klicka på dem, läs exemplen och testa i din egen browser Men hur går det till då? Vi har en xml-fil <recipe> <title>Pasta för nybörjare</title> <ingredients> <item>Pasta</item> <item>Riven ost</item> </ingredients> <cook>Koka pastan and blanda med osten</ cook> </recipe> Vi vill att det ska se bli så här i html: <html><body> <h1>Pasta för nybörjare</h1> <p>Ingredienser: Pasta , riven ost</p> < p>Koka pastan and blanda med osten </p> </body></html> Exemplen finns på Studentportalen (pasta.xml & pasta.xsl) Stilmall Då använder vi en stilmall som greppar tag i elementen och sedan skriver ut deras innehåll (texten) <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/ Transform"> <xsl:template match="recipe"> <html><body> <h1><xsl:value-of select="title"/></h1> <p>Ingredients: <xsl:apply-templates select = "ingredients/item"/> </p> <p><xsl:value-of select="cook"/></p> </body></html> </xsl:template> </xsl:stylesheet> Testa output och ändra i stilmallen! Exemplen finns på Studentportalen (pasta.xml & pasta.xsl) Där finns även flera andra stilmallar som du kan använda som exempel och för att testning Tre metoder för att tillämpa XSL 1. on-the-fly – xsl-mallen appliceras på xml-dokument i samma stund som en webbläsare läser in xml-dokumentet. (fungerar bäst i Internet Explorer som har inbyggd processor MSXML 3.0 el 4.0) 2. batch – xsl-mallen associeras med och appliceras på ett xmldokument via en fristående xsl-processor (t ex Xalan m fl i Oxygen). 3. En server hämtar xml-fil och xsl-fil och genererar utdata till en webbläsare (Cocoon) Ni kommer att använda metod 1 och 2. Hur man associerar ett xslt-skript (stilmall) till ett xml-dokument i Oxygen visas i särskild handledning Hur man associerar en xslt till xml-dokumentet visas på nästa slide. XSL-FO ska ni läser och övar själva vid: http://www.w3schools.com/xslfo/default.asp Associera stillmallen on-the-fly I en html-fil associerar man en stillmall ( till exempel en cssmall) i <head> så här: <link rel="stylesheet" type="text/css" ref=”minmall.css"> I en xml-fil placerar man referensen till xsl-mallen direkt efter xml-deklarationen: <?xml version="1.0" encoding="ISO-8859-1"?> <?xml:stylesheet type="text/xsl" href=”minmall.xsl"?> OBS! Tänk på att om du inte har mallen i samma katalog som xml-filen/html-filen måste du även ange sökväg till den katalog (mapp) där stilmallen/mallarna finns. T ex: href=”./mallar/minmall.xsl" Inlämningsuppgift 3 Utgå från ”din bild” det vill säga den bild du xml-märkt Gör en stilmall (XSLT) som visar: brödtext rubriker en lista över gamla ord (efter brödtexten) överkurs: en lista med de gamla orden och deras moderna stavning Instruktioner finns på Studentportalen. Exempel på stilmallar finns också på Studentportalen. Introduktion till XSL 24