Presentation laddar. Vänta.

Presentation laddar. Vänta.

2002-10-25 © Björn Hedin, NADA/KTH 2002 1 XML/XSLT 2D1553 Medieproduktion

Liknande presentationer


En presentation över ämnet: "2002-10-25 © Björn Hedin, NADA/KTH 2002 1 XML/XSLT 2D1553 Medieproduktion"— Presentationens avskrift:

1 2002-10-25 © Björn Hedin, NADA/KTH 2002 1 XML/XSLT 2D1553 Medieproduktion http://www.nada.kth.se/kurser/kth/2D1553/

2 2002-10-25 © Björn Hedin, NADA/KTH 2002 2 Dagens föreläsning Syfte –Visa hur XML kan användas för att strukturera information och hur XSLT kan användas för att transformera XML-baserad information, vilket är mycket användbart inom publiceringsbranschen Mål –Lära ut hur man skriver DTD:er (tillräckligt för att klara laborationen) –I mån av tid förklara hur XSLT fungerar (tillräckligt för att klara den frivilliga extralaborationen). –Obs! Även XSLT-delen kan förekomma på tentan.

3 2002-10-25 © Björn Hedin, NADA/KTH 2002 3 Vad är XML Ett meta-märkspråk med vilket man kan bygga märkspråk som xhtml, wml, smil etc. Inget exekverande programspråk, endast för att strukturera data. Rekommendation förvaltad av W3C. XML-familjen = XML + relaterade rekommendationer som xslt, xpath, xlink mm.

4 2002-10-25 © Björn Hedin, NADA/KTH 2002 4 Varför XML Vanligaste formatet att lagra data och/eller strukturera informationi filer idag (dock ej binärdata som bilder och video) Standardiserat sätt att beskriva olika typer av innehåll –Enkelt för utvecklare att sätta sig in i andras kod –Man behöver inte uppfinna hjulet på nytt Tillgång till stora mängder mjukvara som förenklar utvecklingsarbete

5 2002-10-25 © Björn Hedin, NADA/KTH 2002 5 Exempel - XHTML Personlig webbsida för Förnamn Efternamn

6 2002-10-25 © Björn Hedin, NADA/KTH 2002 6 Exempel - SMIL

7 2002-10-25 © Björn Hedin, NADA/KTH 2002 7 Element Ett element är den grundläggande informationsenheten i en xml-applikation. Ett element har en start- tag, ett innehåll och en slut-tag. Exempel XML Lecture Start-tag Innehåll Slut-tag

8 2002-10-25 © Björn Hedin, NADA/KTH 2002 8 Simple-, Complex- eller Empty content Simple content - En tag innehåller endast text. Complext content - En tag innehåller en eller flera andra tags och eventuellt text. Empty content - En tag innehåller inget. Exempel XML Lecture har Complex Content har Simple Content har Empty Content Kortversion av

9 2002-10-25 © Björn Hedin, NADA/KTH 2002 9 Attribut Attribut innehåller extra information om ett element T.ex. width på bilder, href på länkar Skrivs på formen <elementnamn attributnamn1=”värde1” attributnamn2=”värde2”> Exempel Link Observera att det går att innesluta attributvärdet antingen ”värde” eller ’värde’, men inte ”värde’ eller ’värde”.

10 2002-10-25 © Björn Hedin, NADA/KTH 2002 10 Attribut eller element? Då man själv gör ett märkspråk ställs man ofta inför valet att koda något som ett attribut eller ett element. Valet är huvudsakligen en smakfråga. Exempel Eller 2s b.jpg

11 2002-10-25 © Björn Hedin, NADA/KTH 2002 11 Föräldrar, barn, syskon Element som innehåller andra element kallas dessa elements förälder. Omvänd relation kallas barn. Element på samma nivå kallas syskon. Exempel HTML XML Lecture html headbody title XML Lecture

12 2002-10-25 © Björn Hedin, NADA/KTH 2002 12 Reserverade tecken Vissa tecken är reserverade då de har speciell betydelse i XML. De kodas som ”entitetsreferenser”. Även svenska tecken kodas oftast som entitetsreferenser Exempel << (less than) >>(greater than> &&(ampersand) ”"(quotation) ’&apos;(apostrophe) ÅÅ ÄÄ ÖÖ å å ä ä ö ö

13 2002-10-25 © Björn Hedin, NADA/KTH 2002 13 CDATA och PCDATA PCDATA = Parsed Character Data. Parsern ersätter entitetsreferenser med deras värde. CDATA = Character Data. Entitetsreferenser tolkas ej. Exempel Om man har många ”konstiga” tecken som man av lathet eller något annat skäl vill skriva in utan entitetsreferenser kan man innesluta tecknen i en CDATA-sektion. Den inleds med strängen &, ’ och ” är alla reserverade tecken ]]>

14 2002-10-25 © Björn Hedin, NADA/KTH 2002 14 Namngivning Namn på tags och attribut måste inledas med en bokstav eller ”_” Därefter bokstäver och/eller siffror. Svenska tecken OK men bör undvikas i praktiken ”xml” reserverat som inledning Godkända exempel Felaktiga exempel

15 2002-10-25 © Björn Hedin, NADA/KTH 2002 15 Well-formed Ett xml-dokument är ”well formed” om det uppfyller ett antal kriterier. Alla xml- dokument måste vara well-formed. Exempel Varje start-tag måste ha en motsvarande slut-tag ( ) Elementen måste bilda en trädstruktur (t.ex. men EJ ) Attributvärden måste omslutas av citat- tecken eller apostrofer. Observera att många html-editorer inte uppfyller något av ovanstående krav. Fullständig lista i kapitel 18 av XML in a nutshell, något mer lättbegripligt på sid 23 i samma bok.

16 2002-10-25 © Björn Hedin, NADA/KTH 2002 16 Processinstruktioner Processinstruktioner kan användas för att skicka vidare information till applikationer. Många applikationer har tidigare använt kommentarer i samma syfte, vilket är dåligt. Exempel <?xml-stylesheet type=”text/xml” href=”my-stylesheet.xsl”?> Denna processinstruktion kan sedan plockas upp exempelvis av en webserver som kan använda informationen till att styra sitt beteende. Processinstruktioner inleds med

17 2002-10-25 © Björn Hedin, NADA/KTH 2002 17 Dokumenttypdeklaration XML-dokument kan även innehålla en Document Type Declaration som anger en eventuell DTD. Exempel imf är i ovanstående fall root-elementet SYSTEM används om det inte är en ”officiell” DTD, annars används PUBLIC URLen är urlen till DTDn Kan även innehålla en så kallad ”public ID”, t.ex. ”-//W3C//DTD XHTML 1.0 Transitional//EN"

18 2002-10-25 © Björn Hedin, NADA/KTH 2002 18 Tag-set Tags och deras attribut för ett visst område kallas ”tag-set”, ”xml application” eller ”xml vocabulary”. Exempel ingår i den tag-set som finns för xhtml men inte för SVG ingår i den tag-set som finns för xsl men inte för xhtml ingår i både xhtml’s tag-set och wml’s tag-set.

19 2002-10-25 © Björn Hedin, NADA/KTH 2002 19 DTD I en Document Type Definition (DTD) definierar man en tag- set och de inbördes relationer som ska gälla. Samma sak kan idag göras med t.ex. XML Schemas. Exempel, och är alla definierade i DTDn för XHTML. I den DTDn anges att ett - element ska innehålla exakt et - element följt av exakt ett element. Detta uttrycks genom följande rad i DTDn

20 2002-10-25 © Björn Hedin, NADA/KTH 2002 20 Valid Om ett XML-dokument är well-formed och uppfyller alla de begränsningar som ges av dess DTD är det ”valid”. Processen att kontrollera detta kallas ”validering” Exempel xhtml-dokument kan valideras på http://validator.w3.org/ En generell valideringstjänst som klarar andra vokabulärer än xhtml finns på http://www.stg.brown.edu/service/xmlvalid XML Schemas kan valideras på http://www.w3.org/2001/03/webdata/xsv

21 2002-10-25 © Björn Hedin, NADA/KTH 2002 21 DTD - Element Element definieras enligt syntaxen Sekvenser separeras med kommatecken Teckendata skrivs #PCDATA Exempel

22 2002-10-25 © Björn Hedin, NADA/KTH 2002 22 DTD - Repeterande element Default är att ett element förekommer exakt en gång. Vill man ange något annat finns *, + och ? OBS!! Fel på sidan 35 i boken, korrekt till höger. Exempel * betyder 0, 1 eller flera gånger + betyder 1 eller flera gånger ? betyder 0 eller 1 gång Definition Instansdokument hej

23 2002-10-25 © Björn Hedin, NADA/KTH 2002 23 DTD - Grupperingar Parenteser kan användas för att gruppera element. Sedan kan *, + och ? appliceras på hela parentesen som en grupp. Exempel

24 2002-10-25 © Björn Hedin, NADA/KTH 2002 24 DTD - Val För att ange valmöjlighet mellan en mängd element kan operatorn | användas. Exempel

25 2002-10-25 © Björn Hedin, NADA/KTH 2002 25 DTD - Tomma element Tomma element, alltså element utan innehåll deklareras med EMPTY Exempel

26 2002-10-25 © Björn Hedin, NADA/KTH 2002 26 DTD - Blandat innehåll I vissa fall är det önsvärt att kunna blanda teckendata med element. Typexemplet är web. #PCDATA måste vara först i en val-lista. Exempel Deklaration Instansdokument hej hopp tjoho

27 2002-10-25 © Björn Hedin, NADA/KTH 2002 27 DTD - Godtyckligt innehåll Ibland (mycket sällan) är det önskvärt att deklarera ett element som kan ha godtyckligt innehåll. Det görs med ANY. Exempel Elementet everything kan nu innehålla godtycklig well-formed xml och text blandat.

28 2002-10-25 © Björn Hedin, NADA/KTH 2002 28 DTD - Attribut Ett eller flera attribut kan associeras med ett element. Ett attributnamn kan förekomma i flera element, men ett element kan inte ha två attribut med samma namn Exempel <!ATTLIST img src CDATA #REQUIRED width CDATA #REQUIRED heigth CDATA #IMPLIED> img är elementet attributen ska associeras med. src, width, heigth är attributnamn CDATA är attributens datatyp #REQUIRED betyder att attributet måste finnas med, #IMPLIED att det kan finnas med

29 2002-10-25 © Björn Hedin, NADA/KTH 2002 29 Attribut - Datatyper Mycket begränsade ”datatyper” finns. De viktigaste är: CDATA NMTOKEN NMTOKENS ENUMERATIONS ID IDREF IDREFS CDATA - Minst begränsade datatypen. NMTOKEN - Alfanumeriska tecken, _, -,. och :. Inte mellanslag. NMTOKENS - En eller flera NMTOKEN separerade av mellanslag (whitespace) Enumerations - Endast ett av en enumerering värden kan antagas. Definieras exempelvis ID - Unika värden inom XML-dokumentet. Som NMTOKEN men kan inte inledas med en siffra IDREF - Används för interna länkar till attribut av ID-typ. Måste alltså antaga ett värde som ett ID-attribut har. IDREFS - En eller flera IDREF

30 2002-10-25 © Björn Hedin, NADA/KTH 2002 30 Entitetsdeklartioner Entitetsdeklarationer kan användas för att ”skapa alias” för långa eller svåra strängar. Deklareras i en DTD, används i instansdokumenten. Exempel I en DTD I ett instansdokument som använder den DTDn Kursen ges av &mtgp; Slutresultat Kursen ges av Medieteknik och Grafisk Produktion I #PCDATA-sektioner går parsern igenom texten och ersätter entiteter med dess värden.

31 2002-10-25 © Björn Hedin, NADA/KTH 2002 31 Parameterentiteter Entitetsdeklarationer skrivs i en DTD och används i instansdokument. Parameterdeklarationer både skrivs och används i DTDer. Exempel Istället kan man deklarera en parameterentitet

32 2002-10-25 © Björn Hedin, NADA/KTH 2002 32 Interna/Externa DTDer Vanligtvis ligger DTD- deklarationerna i en extern fil. Exempel extern DTD Filen student.dtd Filen student.xml (instansdokumentet) Bjorn Hedin

33 2002-10-25 © Björn Hedin, NADA/KTH 2002 33 Interna/Externa DTDer Det går dock även att inkludera deklarationerna i själva instansdokumentet. Exempel intern DTD <!DOCTYPE student [ ]> Bjorn Hedin

34 2002-10-25 © Björn Hedin, NADA/KTH 2002 34 Problem med DTDer Begränsade datatyper (inga int, long, date…) Begränsade repetitionsalternativ (endast ?, * och +) Endast en betydelse för ett element per DTD DTDer är själva inte XML-dokument. Inga möjligheter till ”arvsmekanismer”. Försök till lösning med XML Schemas, men mer om det nästa gång.

35 2002-10-25 © Björn Hedin, NADA/KTH 2002 35 XSLT eXtensible Stylesheet Language Transformations

36 2002-10-25 © Björn Hedin, NADA/KTH 2002 36 XSLT-exempel. Kurssidan

37 2002-10-25 © Björn Hedin, NADA/KTH 2002 37 Vad är XSLT Ett transformationsspråk som transformerar ett XML- dokument 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.

38 2002-10-25 © Björn Hedin, NADA/KTH 2002 38 XSLT-processor XSLT är en rekommendation, inte ett program. Det finns däremot program som kan utföra XSLT- transformationer, sk XSLT- processorer. Xalan och SAXON är vanliga XSLT-processorer. Exempel xml- dokument xslt- dokument xslt- processor Output, t.ex. xhtml

39 2002-10-25 © Björn Hedin, NADA/KTH 2002 39 XSLT vs CSS Precis som för CSS letar man efter mönster (patterns) i en XML- struktur, 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 XML- trä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.

40 2002-10-25 © Björn Hedin, NADA/KTH 2002 40 Templates Mönstermatchningen görs i elementet tar ett obligatoriskt attribut match som innehåller ett Xpath- uttryck. Elementinnehållet är ett eller flera ”instruction element”, s.k. ”action” Exempel på XSLT-stylesheet [action] [action]

41 2002-10-25 © Björn Hedin, NADA/KTH 2002 41 instruction elements (actions) 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. Exempel på XSLT-stylesheet

42 2002-10-25 © Björn Hedin, NADA/KTH 2002 42 används för att applicera templates på barn-element till det aktuella elementet i input- trädet. Det har ett frivilligt ”select”- attribut som innehåller en XPath relativt det aktuella elementet. Exempel på XSLT-stylesheet

43 2002-10-25 © Björn Hedin, NADA/KTH 2002 43 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 xml- dokumentet 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 Amphiox Gasque 2001-09-08 18.00 03.00

44 2002-10-25 © Björn Hedin, NADA/KTH 2002 44 Komplett exempel Party.xsl Party.xml Amphiox Gasque 2001-09-08 18.00 03.00 output Amphiox Gasque

45 2002-10-25 © Björn Hedin, NADA/KTH 2002 45 Kokboksmetod - 1 Här följer en kokboksmetod för hur man skapar ett stylesheet givet ett visst xml- dokument, t.ex. party.xml. Figurerna till höger kommer användas. Dokumentrooten Processinstruktioner Dokumenttypdeklarationer Element Textnoder

46 2002-10-25 © Björn Hedin, NADA/KTH 2002 46 Kokboksmetod - 1 Party.xml Amphiox Gasque 2001-09-08 18.00 03.00 <?xml... <?xsl...<!DOC... Amphiox2001...18.0003.00

47 2002-10-25 © Björn Hedin, NADA/KTH 2002 47 Kokboksmetod - 2 Skapa en template för varje typ av elementnod i trädet (dvs om elementet förekommer fler än en gång i inputdokumentet ska ändå endast en template skapas). Låt ”action” vara Party.xsl

48 2002-10-25 © Björn Hedin, NADA/KTH 2002 48 Kokboksmetod - 3 Tag bort apply-templates från de regler som ska returnera tomt resultat och ta bort eventuella templates som därigenom aldrig blir åtkomliga. Party.xsl

49 2002-10-25 © Björn Hedin, NADA/KTH 2002 49 Kokboksmetod - 4 Lägg till och modifiera action-delen på återstående templates. Exempelvis lägga till och till root-elementets action ifall output ska vara html. Party.xsl

50 2002-10-25 © Björn Hedin, NADA/KTH 2002 50 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 Felaktig template

51 2002-10-25 © Björn Hedin, NADA/KTH 2002 51 Mer om XPath 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 W3C- rekommendation Det finns 7 olika nod-typer i XML-dokument som kan kommas åt via XPath-uttryck. –Root-noden –Elementnoder –Textnoder –Attributnoder –Kommentarnoder –Processinstruktionsnoder –Namespacenoder

52 2002-10-25 © Björn Hedin, NADA/KTH 2002 52 XPath: Root-noden 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

53 2002-10-25 © Björn Hedin, NADA/KTH 2002 53 XPath: Elementnoder Elementnoder matchas med sitt namn. Det går att matcha flera element i samma template genom att separera elementnamnen med ”|” Elementnoder i XPath Exempel med flera matchningar i samma template

54 2002-10-25 © Björn Hedin, NADA/KTH 2002 54 XPath: Attributnoder 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 Matchar alla food-element som har ett type- attribut med ett värde som är ”dairy”.

55 2002-10-25 © Björn Hedin, NADA/KTH 2002 55 XPath: Kommentarer processinstruktioner, text Det går även att matcha kommentarnoder, processinstruktionsnoder och textnoder genom speciella XPath- funktioner. Exempel Kommentarer Processinstruktioner Textnoder

56 2002-10-25 © Björn Hedin, NADA/KTH 2002 56 XPath: Hierarkier och wildcards Det går att matcha noder relativt deras position gentemot andra noder. ”Samtliga noder” uttrycks med * Exempel Title-element som är barn till party-element Title-element som är ättlingar till party-element Alla element som är barn till party-element

57 2002-10-25 © Björn Hedin, NADA/KTH 2002 57 XPath: Positionsmatchning Element kan även matchas via sin position. Exempel Det första b-elementet Det sista b-elementet Alla b-element utom det sista Dessutom last-of-any() first-of-any()

58 2002-10-25 © Björn Hedin, NADA/KTH 2002 58 Med går det att plocka ut ”värdet” av ett element eller ett attribut. har ett attribut, ”select”, vilket har ett XPath-värde. Sökvägen utgår från noden där matchningen görs. Exempel

59 2002-10-25 © Björn Hedin, NADA/KTH 2002 59 : ”.” och ”..” ”.” matchar den nod i input-trädet i vilken matchningen görs. ”..” matchar noden ovanför. Jfr unix och dos. Exempel Fest mellan -

60 2002-10-25 © Björn Hedin, NADA/KTH 2002 60 Villkor: XSLT stöder även vissa typer av villkor har ett attribut ”test” som evalueras till sant eller falskt. Om sant så utföres innehållet i tagen, annars inte Exempel

61 2002-10-25 © Björn Hedin, NADA/KTH 2002 61 Villkor: används för if- then-else-konstruktioner. För ”if”-delen används För ”else”-delen används Exempel

62 2002-10-25 © Björn Hedin, NADA/KTH 2002 62 och Ibland kan det vara önskvärt att använda en speciell xslt- konstruktion 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 Exempel

63 2002-10-25 © Björn Hedin, NADA/KTH 2002 63 Attribute Value Templates 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. Exempel FEL (<> får ej finnas i ett attribut) ”>gurka RÄTT gurka

64 2002-10-25 © Björn Hedin, NADA/KTH 2002 64 Med kan man iterera över noder som väljs med ett select- attribut. Exempel

65 2002-10-25 © Björn Hedin, NADA/KTH 2002 65 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. Exempel

66 2002-10-25 © Björn Hedin, NADA/KTH 2002 66 kopierar ett trädfragment från input-trädet till resultatträdet. Trädfragmentet lokaliseras med ett select-attribut. Till skillnad från kopieras även attribut, barnelement och ättlingar. Exempel

67 2002-10-25 © Björn Hedin, NADA/KTH 2002 67 kan användas för att placera text i resultat- trä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. Exempel Hejhopp < >

68 2002-10-25 © Björn Hedin, NADA/KTH 2002 68, och kan användas för att skapa numreringar. opererar på resultat-trädet Default är att alla noder av samma nodtyp och med samma nodnamn som den aktuella noden räknas. Exempel Foo-element nummer

69 2002-10-25 © Björn Hedin, NADA/KTH 2002 69 generate-id() Funktionen generate-id() används för att skapa en unik identifierare för ett element i källträdet. För varje gång funktionen anropas för ett visst element kommer samma identifierare skapas. Om/när funktionen anropas för ett annat element skapas en annan unik identifierare. Exempel

70 2002-10-25 © Björn Hedin, NADA/KTH 2002 70 Default-templates Om inga templates explicit anges för ett visst mönster finns ett antal default-templates. Attribut- och textnoder Root- och elementnoder Processinstruktion- och kommentarnoder

71 2002-10-25 © Björn Hedin, NADA/KTH 2002 71 Var sker transformerna? 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., eller orionserver som är en egen webserver. –På klienten, i dagsläget IE6 och Mozilla >=1.0. Vilka för- och nackdelar finns med respektive alternativ?

72 2002-10-25 © Björn Hedin, NADA/KTH 2002 72 Mer information 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


Ladda ner ppt "2002-10-25 © Björn Hedin, NADA/KTH 2002 1 XML/XSLT 2D1553 Medieproduktion"

Liknande presentationer


Google-annonser