Vad är XLink XLink/XPointer/XSLT-FO XMLs motsvarighet till HTMLs <a>-länkar fast med mycket större funktionalitet. Simple Links motsvarar ungefär vanliga länkar Extended links kan länka till grupper av resurser 2D1525 Programmering för interaktiva medier http://www.nada.kth.se/kurser/kth/2d1525/ 2001-10-02 Björn Hedin, NADA/KTH 2001 1 2001-10-02 Björn Hedin, NADA/KTH 2001 2 Namespace Simple Links Namespacen för Xlink är http://www.w3.org/1999/xlink Prefixet som oftast används är xlink: Xlink består av ett antal attribut som kan kopplas till vilket egendefinierat element som helst i en DTD eller motsvarande. Precis som vanligt kan bindningen av ett prefix till dess namespace ske i elementet där det först används eller något av dess förfäder-element. En simple link motsvarar ungefär en <a>-länk i html fast med fler möjligheter. En envägsförbindelse mellan två resurser. Käll-resursen måste vara ett XML-element, mål-resursen en URI (t.ex. något annat än en fil). Exempel på Simple Link <foo xmlns:xlink= http://www.w3.org/1999/xlink xlink:type= simple xlink:href= http://www.kth.se/ > <bar/> <foobar xlink:type= simple xlink:href= urn:isbn:0-596-00058-8 /> </foo> 2001-10-02 Björn Hedin, NADA/KTH 2001 3 2001-10-02 Björn Hedin, NADA/KTH 2001 4
URI/URL/URN URL URI = Uniform Resource Identifier. Samlingsnamnet för URL + URN + eventuella framtida URxxx URL = Uniform Resource Locator. URN = Uniform Resource Name. URL URI URN URL är det man oftast stöter på i internetsammanhang. En URLs scheme är lika med dess primära åtkomstsätt, t.ex. http, ftp, file Ett scheme är, enkelt uttryckt, det före kolon i en uri. http://www.kth.se/ file:///a.txt ftp://ftp.kth.se/ Scheme för en URL 2001-10-02 Björn Hedin, NADA/KTH 2001 5 2001-10-02 Björn Hedin, NADA/KTH 2001 6 URN xlink:show URN används än så länge sällan i internetsammanhang. Pekar inte på någon fysisk resurs som en URL gör, utan kan peka på mer abstrakta resurser. Typexemplet är ISBNnummer. 8 URN-namespaces är officiellt registrerade, otaliga inofficiella. urn:isbn:0-777-222-3 isbn är en av de 8 idag registrerade namespaces som finns för URN Scheme för en URN är just strängen urn Det som hittills beskrivits är inget nytt jämfört med vanliga html-länkar Xlink:show är ett attribut som kan läggas till en xlink för att ge en browser vägledning om vad som ska hända när en länk träffas på xlink:show= replace - Ersätter nuvarande innehåll med resursen på målsidan. Jfr <a href= xlink:show= embed - Bäddar in målresursen i dokumentet. Jfr <img src= xlink:show= new - Öppnar ett nytt fönster med målresursen. Jfr <a href= _BLANK xlink:show= other - Gör något annat än replace, embed och new. Bestäms förmodligen på något annat sätt. xlink:show= none - Inget beteende. 2001-10-02 Björn Hedin, NADA/KTH 2001 7 2001-10-02 Björn Hedin, NADA/KTH 2001 8
xlink:actuate xlink:title Xlink:actuate ger vägledning om när en länk ska aktiveras. xlink:actuate= onload - Länken aktiveras så fort dokumentet länken befinner sig i laddas. Jfr onload i javascript. xlink:actuate= onrequest - Länken aktiveras när någon aktivt begär länken, t.ex. genom att klicka på den. xlink:title kan ges ett värde som med fritext beskriver resursen som länken pekar på. <foo xlink= simple href= http://www.kth.se title= The main KTH-page /> xlink:actuate= other - Något annat aktiveringskriterium. xlink:actuate= none - Inget beteende, t.ex. när det inte finns någon meningsfull tolkning av vad som ska hända vid en aktivering (t.ex. en länk till ett isbnnummer). 2001-10-02 Björn Hedin, NADA/KTH 2001 9 2001-10-02 Björn Hedin, NADA/KTH 2001 10 xlink:role Extended Links xlink:role är ungefär som xlink:title fast istället för att ha ett fritextinnehåll har attributet en uri-referens som pekar på en djupare beskrivning av objektet. <foo xlink= simple href= http://www.kth.se title= The main KTH-page role= http://www.foo.org/ > En extended link kan till skillnad från en simple link beskriva en riktad graf, där dokumenten är noder och där länkarna mellan noderna utgörs av något som kallas arcs. Svårare att hitta en enkel metafor för vad en extended link betyder än för en simple link. 2001-10-02 Björn Hedin, NADA/KTH 2001 11 2001-10-02 Björn Hedin, NADA/KTH 2001 12
Lokala vs externa resurser En extern resurs anges med en xlink med attributet xlink:type= locator, xlink:href= någon-uri och xlink:label= en-id. En intern resurs anges med en xlink med attributet xlink:type= resource och en xlink:label= en-id. Dessa resurser kan sedan bindas ihop med arcs där de labels som valts för resurserna används som identifierare. Arcs Arcs används i extended links för att göra en riktad länk mellan två resurser (interna eller externa). En arc är en ett element med attributen xlink:type= arc, xlink:from= from-label och xlink:to= to-label. From-label och to-label är två labels som tidigare getts externa eller interna resurser. En arc kan även ha ett attribut xlink:arcrole som fungerar som xlink:role fast för en arc. 2001-10-02 Björn Hedin, NADA/KTH 2001 13 2001-10-02 Björn Hedin, NADA/KTH 2001 14 Extended link:exempel Exempel på Extended Link för kursplanering <?xml version= 1.0?> <courseplan xmlns:xlink= http://www.w3.org/1999/xlink xlink:type= extended > Extended links:specialfall Om en arc saknar xlink:from eller xlink:to så antar det attributet värdet samtliga resources i extended-elementet. Om flera resurser har samma label är arcs som pekar på denna label pekande på samtliga dessa resurser. <course xlink:type= resource xlink:label= Course2D1525 /> <course xlink:type= resource xlink:label= Course2D1522 /> <course xlink:type= locator xlink:label= Course2D1010 xlink:href= http://www.nada.kth.se/kurser/kth/2d1010/ /> <prerequisite xlink:type= arc xlink:from= Course2D1010 xlink:to= Course2D1522 /> <prerequisite xlink:type= arc xlink:from= Course2D1522 xlink:to= Course2D1525 /> </courseplan> 2001-10-02 Björn Hedin, NADA/KTH 2001 15 2001-10-02 Björn Hedin, NADA/KTH 2001 16
XPointer XPointer: exempel Xpointer är ett sätt att lokalisera punkter eller mängder i xmldokument. Kan kopplas till en URI i en Xlink genom att lägga till en Xpointer på slutet av URIn Inte XML-baserad men opererar på XML-strukturer. Till stora delar samma som Xpath men med vissa utvidgningar Xpointers är i princip Xpathuttryck inneslutna i xpointer() Exempel på XPointer xpointer(/) Xpointer(//PERSONAE/PERSONA) Xpointer(//teacher[@email= bjornh@kth.se]) URI + Xpointer http://www.kth.se/test.xml#xpointer(//name[ position()=1]) 2001-10-02 Björn Hedin, NADA/KTH 2001 17 2001-10-02 Björn Hedin, NADA/KTH 2001 18 Implementationer XLink/XPointer Få implementationer finns av Xlink/Xpointer. Stöd för simple-links i Mozilla och Amaya (webbläsare). Mer komplett stöd i ett programpaket av Fujitsu som kan hittas på http://www.labs.fujitsu.com/free/xlip/en/index.html And now for something completely different: XSL-FO XSL-FO är en XML-vokabulär för att på detaljnivå kunna skapa sid-layout, idag främst för papper men på sikt även för bildskärmar. Till skillnad från CSS är XSL-FO helt XML-baserat. Kan göra samma saker som CSS + mycket till. W3C proposed recommendation sedan 2001-08-28 2001-10-02 Björn Hedin, NADA/KTH 2001 19 2001-10-02 Björn Hedin, NADA/KTH 2001 20
Implementationer XML+XSLT ->XSL-FO Idag finns ett fåtal implementationer av delar av XSL-FO-specifikationen, t.ex. FOP från Apaches Cocoonprojekt. Inga program kan idag rendrera XSL-FO-dokument direkt. Istället sker en transformation till något annat format såsom pdf. XSL-FO FOP pdf Vanligtvis skapar man inte XSL-FO-dokument direkt. Istället transformeras vanligen en XML-struktur till XSL-FO via XSLT-transformer. XML XSLT XSLTprocessor XSL-FO FOP pdf 2001-10-02 Björn Hedin, NADA/KTH 2001 21 2001-10-02 Björn Hedin, NADA/KTH 2001 22 XSL-FO:Syntax Namespacen för XSL-FO är http://www.w3.org/1999/x SL/Format Prefixet brukar vara fo: Root-elementet är <fo:root> <fo:root> innehåller två underelement; <fo:layoutmaster-set> och <fo:pagesequence> Exempel på XSL-FO <?xml version= 1.0?> <fo:root xmlns:fo= http://www.w3.org/1999/format > <!-- info om marginaler, sidformat etc--> </fo:layout-master-set> <fo:page-sequence> <!-- Själva innehållet --> </fo:page-sequence> </fo:root> innehåller information ett eller flera element <fo:simple-page-master> Dessa innehåller information om sidstorlek och marginaler, samt har ett attribut mastername för att kunna refereras till. fo:layout-master-set <fo:simple-page-master> margin-right= 3cm margin-left= 3cm margin-bottom= 4cm margin-top= 2cm page-width= 20cm page-height= 27.7cm master-name= foobar </fo:simple-page-master> </fo:layout-master-set> 2001-10-02 Björn Hedin, NADA/KTH 2001 23 2001-10-02 Björn Hedin, NADA/KTH 2001 24
Det finns dessutom 5 regioner: before, after, start, end och body. Alla utom body kan tilldelas ett attribut extent Regioner fo:layout-master-set <fo:simple-page-master master-name= foo > <fo:region-before extent= 1cm /> <fo:region-before extent= 1cm /> <fo:region-after extent= 1cm /> <fo:region-start extent= 1cm /> <fo:region-end extent= 1cm /> <fo:region-body/> </fo:simple-page-master> </fo:layout-master-set> 2001-10-02 Björn Hedin, NADA/KTH 2001 25 Marginaler, region-before etc relaterar till den färdiga sidan enligt figuren till höger. Observera att detta gäller för västerländskt skrivsätt från vänster till höger. För exempelvis hebreiska byter region-start och region-end plats. Sidmodell margin-left region-start region-body region-after margin-bottom margin-top margin-right region-before region-end Macbeth... When shall we three meet again In thunder, lightning or in rain... 2001-10-02 Björn Hedin, NADA/KTH 2001 26 1. Att flöda innehåll på en sida Properties I en <fo:page-sequence> stoppas själva innehållet. En <fo:page-sequence> binds till en simple-page-master via attributet master-name <fo:page-sequence> innehåller ett element <fo:flow> som i sin tur kan innehålla ett antal <fo:block> där slutligen innehållet finns. Sidflöde <fo:page-sequence master-name= banan > <fo:flow> <fo:block> En banan </fo:block> <fo:block> En tomat </fo:block> </fo:flow> </fo:page-sequence> De flesta properties som kan sättas i CSS kan även sättas på ungefär motsvarande sätt i XSL-FO. Exempel sid 217 CSS dish { display:block; font-family: Helvetica, Arial, sans-serif; font-size: 20pt; font-weight: bold; text-align: center } XSL-FO <xsl:template match= dish > <fo:block font-family= Helvetica, Arial, sans-serif font-size= 20pt fontweight= bold text-align= center > <xsl:apply-templates/> </fo:block> </xsl:template> 2001-10-02 Björn Hedin, NADA/KTH 2001 27 2001-10-02 Björn Hedin, NADA/KTH 2001 28
Listor Tabeller Vissa properties från CSS matchas mot element istället för attribut, t.ex. listor. Listor <fo:list-block> <fo:list-item> <fo:list-item-label> </fo:list-item-label> <fo:list-item-body> En banan </fo:list-item-body> </fo:list-item> </fo:list-block> Tabeller liknar htmltabeller Tabeller <fo:table> <fo:table-column column-width= 120pt /> <fo:table-column column-width= 90pt /> <fo:table-body> <fo:table-row> <fo:table-cell> <fo:block>hej</fo:block> </fo:table-cell> <fo:table-cell> <fo:block>hopp</fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> 2001-10-02 Björn Hedin, NADA/KTH 2001 29 2001-10-02 Björn Hedin, NADA/KTH 2001 30 Ofta vill man ha olika sidlayout på högersidor, vänstersidor och förstasidor. Detta kan lösas genom elemetet fo:sequencespecification som är ett barnelement till fo:pagesequence Olika sidlayouter Ett dokument, olika sidlayouter <fo:page-sequence> <fo:sequence-specification> <fo:sequence-specifier-alternating page-master-first= banan page-master-first= tomat page-master-first= gurka /> </fo:sequence-specification> </fo:page-sequence> Där banan, tomat och gurka tidigare har specificerats som fo:simple-page-master Exempel xslt->xsl-fo Fo-exempel.xsl <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:fo="http://www.w3.org/1999/xsl/format"> <xsl:template match="/"> <fo:root> <fo:simple-page-master margin-right="1in" master-name="first"> <fo:region-body/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-name="first"> <fo:flow><xsl:apply-templates/></fo:flow> </fo:page-sequence> </fo:root> </xsl:template> <!-- m.fl. templates som genererar XSL-FO-märkning --> </xsl:stylesheet> 2001-10-02 Björn Hedin, NADA/KTH 2001 31 2001-10-02 Björn Hedin, NADA/KTH 2001 32
Mer information XSL-FO är en omfattande specifikation, av vilken vi bara skummat på ytan. Specifikationen finns på http://www.w3.org/style/xsl/ Kapitlet om XSL-FO från XML Bible finns på http://www.ibiblio.org/xml/books/bible2/chapters/ch18.html En trevlig tutorial med exempel finns på http://www.ibiblio.org/xml/books/bible2/chapters/ch18.html 2001-10-02 Björn Hedin, NADA/KTH 2001 33