XML a XSLT. Kapitola seznamuje s šablonami XSLT a jejich použití při transformaci z XML do HTML

Podobné dokumenty
<knihy:clanek xmlns:kniha=

Z n a č k o v a c í j a z y k y. XSL (extensible Stylesheet Language) XSLT (extensible Stylesheet Language Transformation) XPath

Prezentace XML. XML popisuje strukturu dat, neřeší vzhled definice vzhledu:

Jazyk XSL XPath XPath XML. Jazyk XSL - rychlá transformace dokumentů. PhDr. Milan Novák, Ph.D. KIN PF JU České Budějovice. 9.

XPath je jazyk, který slouží k

XSLT a jmenné prostory

24. XML. Aby se dokument XML vůbec zobrazil musí být well-formed (správně strukturovaný). To znamená, že splňuje formální požadavky specifikace XML.

Dotazování nad XML daty a jazyk XPath

XSLT extensible Stylesheet Language Transformation

APLIKACE XML PRO INTERNET

Pokročilé techniky tvorby sestav v Caché. ZENové Reporty

TRANSFORMACE XML DOKUMENTŮ POMOCÍ JAZYKA XSLT

XSLT pomocí JavaScriptu v Mozille (... Opeře a Safari)

Pravidla dokumentace

Příklad buňka tabulky

Předmluva k druhému vydání 13. Úvod 17. ČÁST 2 Vytváření dokumentů XML 65

X36DSV 3. cvičení. XML (extensible Markup Language) JavaScript. AJAX (Asynchronous JavaScript and XML) X36DSV. 2007/10 ver.2.0 1

XML snadno a rychle Martin Kuba, ÚVT MU

PRG036 Technologie XML

Obsah přednášky. XML DOM SAX XPath XSL transformace 1/46

XSL. Jirka Kosek. Poslední modifikace: $Date: 2005/12/01 09:35:37 $ Copyright Jiří Kosek. XML teorie a praxe značkovacích jazyků (IZI238)

Základy XML struktura dokumentu (včetně testových otázek)

Tvorba informačních systémů

HTML Hypertext Markup Language

XML a DTD. <!DOCTYPE kořenový_element [deklarace definující vlastnosti jednotlivých elementů a atributů]> externí deklarace:

Budování banky úloh s parametrizovanými multimediálními objekty

13. Vytváření webových stránek

Tvorba WWW stránek. Mojmír Volf

Tvorba fotogalerie v HTML str.1

Úvod do XSLT 2.0. Jirka Kosek Copyright Jiří Kosek

HTML - Úvod. Zpracoval: Petr Lasák

MBI - technologická realizace modelu

NSWI096 - INTERNET JavaScript

Vysoká škola ekonomická v Praze

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Principy XQuery. funkcionální jazyk vše je výraz, jehož vyhodnocením vznikne určitá hodnota základní typy stejné jako v XML Schema:

Syntaxe XML XML teorie a praxe značkovacích jazyků (4IZ238)

ZŠ ÚnO, Bratří Čapků 1332

2 PŘÍKLAD IMPORTU ZATÍŽENÍ Z XML

Pracovní list č. 15 Microsoft Word 2010 reference II

(X)HTML, CSS a jquery

Škola: Gymnázium, Brno, Slovanské náměstí 7 III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Název projektu: Inovace výuky na GSN

Překladač XSL šablon

Tvorba informačních systémů

DATAMINING SEWEBAR CMS

KOMBINACE XML A TEXu PŘI SAZBĚ DIVADELNÍ HRY Zdeněk Wagner

Vývoj Internetových Aplikací

Maturitní otázky z předmětu PROGRAMOVÁNÍ

BIBLIOGRAFICKÉ CITACE V DOCBOOKU A JEJICH TRANSFORMACE POMOCÍ DOCBOOK XSL

Django Urls, views, templates

Oracle XML DB. Tomáš Nykodým

HROMADNÉ ÚPRAVY NAJÍT A NAHRADIT

Internet 1 vývoj, html, css

Bakalářská práce. Vladimír Mareš

TÉMATICKÝ OKRUH Softwarové inženýrství

Knihovna XmlLib TXV druhé vydání říjen 2012 změny vyhrazeny

Semestrální práce 2 znakový strom

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

AutoCAD definice bloku

DUM 06 téma: Tvorba makra pomocí VBA

Knihovna XmlLib TXV první vydání prosinec 2010 změny vyhrazeny

Správnost XML dokumentu

Add-on modul Microsoft Dynamics NAV. Doprava - základ. manuál

Tvorba stránek v HTML ve Wordu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

VYHLEDÁVACÍ BANNER PRO WEBOVÉ STRÁNKY

XML terminologie a charakteristiky. Roman Malo

Využití XML v DB aplikacích

Algoritmizace a programování

CSS Selektory tříd a ID, dědičnost, další vlastnosti. Formátování HTML dokumentu, které je více či méně oddělené od obsahu Způsoby implementace

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Microsoft Word základní

Dotazování nad stromem abstraktní syntaxe

Software602 Form Designer

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

1. Začínáme s FrontPage

Systém elektronického rádce v životních situacích portálu

Jazyky pro popis dat

NSWI096 - INTERNET. Úvod do HTML

8 Třídy, objekty, metody, předávání argumentů metod

Čtvrtek 11. dubna. Základy HTML. Obecná syntaxe HTML. Struktura HTML

Uspořádání klient-server. Standardy pro Web

E-learning a DocBook

3 MOŽNÉ PŘÍSTUPY K TVORBĚ APLIKACÍ NAD SVG DOKUMENTY

Manuál k editoru TinyMCE

ZŠ ÚnO, Bratří Čapků 1332

Web ČKR: návrh a realizace (2) Šárka Ocelková, ÚVT MU

Příručka uživatele systému Museion. Fulltext

SQL - trigger, Databázové modelování

XFORMS JAKO NÁHRADA WEBOVÝCH FORMULÁŘŮ XFORMS - WEB FORMS SUCCESSOR

PHP tutoriál (základy PHP snadno a rychle)

MODERNÍ WEB SNADNO A RYCHLE

CSS Stylování stránek. Zpracoval: Petr Lasák

Podpora XML v.net. Podpora XML v.net. nezávislý publicista. Jirka Kosek.

Mgr. Vlastislav Kučera přednáška č. 1

Uživatelský manuál aplikace. Dental MAXweb

Základy HTML. Autor: Palito

Tabulkový procesor. Základní rysy

Transkript:

XML a XSLT Kapitola seznamuje s šablonami XSLT a jejich použití při transformaci z XML do HTML Zdroje: M. ŽÁK: XML (začínáme programovat), Grada Publishing, 2005 I. MLÝNKOVÁ, M. NEČASKÝ, J. POKORNÝ, K. RICHTA, K. TOMAN, V. TOMAN: XML Technologie, Grada Publishing, a.s., Praha 2008 J. KOSEK: XML pro každého, Grada Publishing, 2010 Klíčové pojmy: XSLT, XPath, hrany, uzly. šablony, vestavěné šablony, instrukce, 1 Co to je XSLT XSLT = Extensible Stylesheet Language Transformations je spojen se styly, říká, jak data zobrazovat transformuje XML na HTML umožňuje data vybírat, upravovat, řadit, mít podmínky i cykly styly pomocí CSS souborů je aplikací XML do XML souboru přidáme hned za deklaraci odkaz na XSLT soubor, pomocí něhož chceme xml soubor zpracovávat: <?xml-stylesheet type="text/xsl" href="knihy.xsl"?> soubor XSLT (knihy.xsl) musí začínat stejně jako XML dokument: <xsl:stylesheet version="1.0" // obsah xmlns:xsl="http://www.w3.org/1999/xsl/transform"> </xsl:stylesheet> kořenovým elementem musí být stylesheet, xsl: deklaruje jmenný prostor 2 XPath XML soubor má stromovou strukturu s hranami a uzly XPath... jazyk pro pohyb ve stromové struktuře, vrací uzly odpovídající danému kritériu je 7 typů uzlů, uzlem je: kořenový uzel 2012-07-25 XML a XSLT 1/9

elementy atributy komentáře jmenné prostory, instrukce pro zpracování, text (i "bílá místa, znaky": mezery, konec řádku, posun řádku, tabulátor) zástupné znaky: / kořenový uzel (celý dokument XML = instrukce zpracování, komentář, kořenový element) * uzel typu element. aktuální uzel 3 Šablony <xsl:template> potomek elementu: xml-stylesheet určují výsledek celé transformace šablony odpovídají určitému uzlu nebo skupině uzlů zdrojového dokumentu šablona říká prohlížeči, jak zobrazit XML pomocí instrukcí pro transformaci komponent XML atributy šablony: match... jméno elementu, na nějž se aplikují příkazy uvnitř šablony name... uchovává jméno šablony pro další použití priority... určuje pořadí, když lze použít více šablon mode... pro skupinu uzlů a instrukci <xsl:apply-templates> budou použity jen šablony se stejnou hodnotou mode struktura šablony: <xsl:template match="lokace"> // tělo šablony v těle šablon mohou být: data typu PCDATA rozšiřovací elementy - definovány uživatelem nebo procesorem XCLT doslovné elementy - není ani instrukcí XSL ani rozšiřovacím elementem, kopírují se bez jakékoliv změny instrukce XSLT <xsl:apply-imports> <xsl:apply-templates> <xsl:attribute> <xsl:call-templates> <xsl:choose> <xsl:comment> <xsl:copy> <xsl:copy-of> <xsl:element> <xsl:fallback> 2012-07-25 XML a XSLT 2/9

<xsl:for-each> <xsl:if> <xsl:message> <xsl:number> <xsl:processing-instruction> <xsl:text> <xsl:value-of> <xsl:variable> 3.1 Instrukce <xsl:apply-templates/> umožňuje rekurzivní aplikování šablony, hledá rekurzivně další vnořené šablony a vypíše jejich obsah nepovinný atribut select... označuje jméno uzlu, který má být zpracován, jinak jsou zpracovány všechny následující uzly <xsl:apply-templates select="prvek"/> Příklad knihy.xml <?xml-stylesheet type="text/xsl" href="knihy.xsl"?> <seznam> <kniha> <nazev>povídky z jedné kapsy</nazev> <autor>karel Čapek</autor> <nakladatelstvi>melantrich</nakladatelstvi> <naklad jednotka="tis.">100</naklad> <rok zeme="(cz)">1968</rok> </kniha> <kniha> <nazev>světová revoluce</nazev> <autor>tomáš G. Masaryk</autor> <nakladatelstvi>orbis</nakladatelstvi> <naklad jednotka="tis.">50</naklad> <rok zeme="(cz)">1925</rok> </kniha> <kniha> <nazev>the Feynman lectures on physics</nazev> <autor>richard Feynman</autor> <nakladatelstvi>addison-wesley publishing Company</nakladatelstvi> <naklad jednotka="tis.">20</naklad> <rok zeme="(usa)">1966</rok> </kniha> <kniha> <nazev>java pro zelenáče</nazev> <autor>miroslav Virius</autor> <nakladatelstvi>neocortex</nakladatelstvi> <naklad jednotka="tis.">10</naklad> <rok zeme="(cz)">2005</rok> </kniha> </seznam> 2012-07-25 XML a XSLT 3/9

knihy.xsl <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <head></head> <body> <xsl:apply-templates/> </body> </html> </xsl:stylesheet> Prohlížeč začíná aplikovat šablonu (rekurzivně) na kořenový uzel XML (nebo nějaký další uzel): 1. hledá šablonu definující styl, který odpovídá uzlu 2. pokud najde odpovídající šablonu, vykoná instrukce obsažené v šabloně (spustí transformaci uzlu šablony) 3. pokud nenajde, použije vhodnou vestavěnou šablonu = šablona definovaná specifikací XSLT 3.2 Vestavěná šablona pro kořenový uzel XSLT aplikuje šablonu pro všechny potomky kořenového uzlu (pro každý uzel potomka provede kroky 1. -3.) pro uzel element aplikuje šablonu pro všechny potomky uzlu (pro každý uzel potomka provede kroky 1. -3.) pro uzel text zobrazí text, pro uzel atribut zobrazí hodnotu atributu, atribut není potomkem uzlu element pro uzel komentáře neudělá nic Pro náš případ se začne aplikovat šablona pro kořenová uzel, hledá šablony pro potomky uzlů a pak zase pro jejich potomky, nic nenajde, až dojde k textu, ten vypíše: Povídky z jedné kapsykarel ČapekMelantrich1001968Světová revolucetomáš G. MasarykOrbis501925The Feynman lectures on physicsrichard FeynmanAddison-Wesley publishing Company201966Java pro zelenáčemiroslav ViriusNeocortex102005 3.3 Instrukce <xsl:value-of select="prvek"/> text obsažený v daném uzlu vloží na výstup HTML, ten text zobrazí zobrazí i znaková data potomků knihy.xsl <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/seznam"> <html> <xsl:apply-templates/> </html> 2012-07-25 XML a XSLT 4/9

<p> <xsl:value-of select="autor"/> <xsl:value-of select="nazev"/> </p> </xsl:stylesheet> 1. pro uzel <seznam> začne aplikovat šablonu, hledá šablony pro uzly potomků 2. najde šablonu pro uzel-element <kniha> 3. šablona říká, že se má do odstavce vypsat text elementů <autor> a <název > zobrazení v prohlížeči: Karel ČapekPovídky z jedné kapsy Tomáš G. MasarykSvětová revoluce Richard FeynmanThe Feynman lectures on physics Miroslav ViriusJava pro zelenáče 3.4 Mohu se také pokusit o zobrazení dat v tabulce: <xsl:template match="/seznam"> <html> <head> <title>seznam knih</title> </head> <body> <h1>seznam knih</h1> <table border="1"> <tr> <th>název</th> <th>autor</th> <th>nakladatelství</th> <th>náklad</th> <th>rok</th> </tr> <xsl:apply-templates/> </table> </body> </html> <tr> <td><xsl:value-of select="nazev"/></td> <td><xsl:value-of select="autor"/></td> <td><xsl:value-of select="nakladatelstvi"/></td> <td><xsl:value-of select="naklad"/></td> <td><xsl:value-of select="rok"/></td> </tr> 2012-07-25 XML a XSLT 5/9

Seznam knih Název Autor Nakladatelství Náklad Rok Povídky z jedné kapsy Karel Čapek Melantrich 100 1968 Světová revoluce Tomáš G. Masaryk Orbis 50 1925 The Feynman lectures on physics Richard Feynman Addison-Wesley publishing Company 20 1966 Java pro zelenáče Miroslav Virius Neocortex 10 2005 3.5 Pokud budeme chtít vypsat i hodnoty atributů, můžeme použít instrukci: <xsl:apply-templates select="element"/> Vytvoříme pak pro dané elementy vlastní šablony: <xsl:template match="element"> <xsl:value-of select="."/> <xsl:text> </xsl:text> <xsl:value-of select="@jednotka"/> // šablona pro element // data aktuálního uzlu // zobrazení mezery // výpis hodnoty atributu se jménem jednotka clanek.xsl- doplnění: <tr> <td><xsl:value-of select="nazev"/></td> <td><xsl:value-of select="autor"/></td> <td><xsl:value-of select="nakladatelstvi"/></td> <td><xsl:apply-templates select="naklad"/></td> <td><xsl:apply-templates select="rok"/></td> </tr> <xsl:template match="naklad"> <xsl:value-of select="."/> <xsl:text> </xsl:text> <xsl:value-of select="@jednotka"/> <xsl:template match="rok"> <xsl:value-of select="."/> <xsl:text> </xsl:text> <xsl:value-of select="@zeme"/> u elementů nazev, autor a nakladatelstvi budeme uz jenom vypisovat obsah, proto použijeme instrukci <xsl:value-of select="nazev"/> u elementů naklad a rok chceme vypsat i hodnotu atributu, proto užijeme instrukci <xsl:apply-templates select="rok"/> a napíšeme pro ně vlastní šablonu Název Autor Nakladatelství Náklad Rok Povídky z jedné kapsy Karel Čapek Melantrich 100 tis. 1968 (CZ) Světová revoluce Tomáš G. Masaryk Orbis 50 tis. 1925 (CZ) The Feynman lectures on physics Richard Feynman Addison-Wesley publishing 20 tis. Company 1966 (USA) Java pro zelenáče Miroslav Virius Neocortex 10 tis. 2005 (CZ) 2012-07-25 XML a XSLT 6/9

3.6 Instrukce <xsl:text> s její pomocí můžeme vložit text 3.7 Instrukce <xsl:for-each> s její pomocí můžeme cyklicky procházet tělo šablony: <xsl:for-each select="kniha"> <p> <xsl:value-of select="nazev"/> </p> </xsl:for-each> 3.8 Instrukce <xsl:copy-of> kopírování ze zdrojového uzlu do výstupního stromu kopie obsahuje i atributy a potomky vhodné pro kopii z jednoho XML do druhého <xsl:template match="/"> <xsl:copy> <xsl:copy-of select="*"/> </xsl:copy> 3.8 Instrukce <xsl:if> podobně jako v programovacích jazycích <xsl:if test="naklad>10"> <p><xsl:value-of select="nazev"/></p> </xsl:if> 3.9 Predikáty = výsledek posouzení můžeme zjistit hodnotu elementu, atributu, zjistit potomky elementu,... pro manipulaci s uzly slouží funkce: last()... vrací pořadové číslo posledního uzlu position()... vrací pozici kontextového uzlu count(sada-uzlů)... vrací počet uzlů id(řetězec ID)... vrací sadu uzlů name(sada-uzlů)... vrací sadu uzlů Příklad: Pomocí position() můžeme vytvořit výčet elementů kniha číslovaný seznam: <p> <xsl:value-of select="position()"/> <xsl:text>. </xsl:text> <xsl:value-of select="nazev"/> </p> 2012-07-25 XML a XSLT 7/9

3.10 Jedna xml data tak mohu zobrazit vícekrát: <xsl:template match="/seznam"> <html> <head> <title>seznam knih</title> </head> <body> <h3>číslovaný seznam knih</h3> <xsl:for-each select="kniha"> <p> <xsl:value-of select="position()"/> <xsl:text>. </xsl:text> <xsl:value-of select="nazev"/> </p> </xsl:for-each> <h3>knihy s větším počtem výtisků</h3> <ul><xsl:apply-templates/></ul> </body> </html> <xsl:if test="naklad>10"> <li><xsl:value-of select="nazev"/></li> </xsl:if> <xsl:template match="kniha[autor!='karel Čapek']"> <li><xsl:value-of select="nazev"/></li> </xsl:stylesheet> 3.11 Seznam jako odkaz na záložku vytvoření atributu: Vložení odkazu na záložku - v kódu to vypadá takto: <a href="#jmeno_zalozky">text odkazu</a> Příklad: <xsl:for-each select="kapitola"> <a> <xsl:attribute name="href">#o <xsl:value-of select="position()"/> </xsl:attribute> <xsl:value-of select="position()"/><xsl:text>. </xsl:text> <xsl:value-of select="nadpis2"/> </a> </xsl:for-each> Záložka pak může vypadat třeba takto: <a name="jmeno_zalozky"></a> <h2 id="jmeno_zalozky">nadpis</h2> <span id=" jmeno_zalozky ">nějaká ukázka</span> Příklad: <h2> <xsl:attribute name="id">o<xsl:value-of select="position()"/> </xsl:attribute> <xsl:value-of select="position()"/><xsl:text>. </xsl:text> <xsl:value-of select="nadpis"/> </h2> 2012-07-25 XML a XSLT 8/9

4 Shrnutí přehled šablon a instrukcí 4.1 Kořenový element souboru XSLT <xsl:stylesheet>... </xsl:stylesheet> id... (nepovinný) version... (povinný)... obvykle "1.0" xmlns... xmlns:xsl="http://www.w3.org/1999/xsl/transform"... určení jmenného prostoru 4.2 Šablona XSL pro určitý uzel nebo skupinu uzlů <xsl:template>... match... (nepovinný)..."lokace" uzlu name... (nepovinný)... uchovává název šablony pro další její volání priority... (nepovinný)... číslo určující pořadí šablony mode... (nepovinný Pokud není element v těle šablony instrukcí nebo rozšiřovacím elementem, bude doslovně zkopírován do výsledku 4.3 Těla šablon instrukce XSLT <xsl:apply-templates /> vyhledá patřičný uzel a nahradí ho obsahem šablony select... (nepovinný)... označuje jméno uzlu, který má být zpracován, jinak jsou zpracovány všechny následující uzly hledá rekurzivně další vnořené šablony, když je nenajde, vypíše pouze obsah elem. <xsl:value-of /> text obsažený v daném uzlu vloží na výstup HTML, ten text zobrazí select... (nepovinný)... označuje jméno uzlu, který má být zpracován <xsl:text>... </xsl:text> vkládání doslovného textu <xsl:attribute>... </xsl:attribute> vytvoření atributu name... (povinný)... jméno atributu <xsl:for-each>... </xsl:for-each> select... (nepovinný)... označuje jméno uzlu, který má být zpracován 2012-07-25 XML a XSLT 9/9