Jazyk XSL - rychlá transformace dokumentů 9. prosince 2010
Osnova 1 Jazyk XSL Úvod Princip zpracování pomocí stylů Formátování dokumentu pomocí XSL FO
Osnova 1 Jazyk XSL Úvod Princip zpracování pomocí stylů Formátování dokumentu pomocí XSL FO 2 XPath Stromová struktura
Osnova 1 Jazyk XSL Úvod Princip zpracování pomocí stylů Formátování dokumentu pomocí XSL FO 2 XPath Stromová struktura 3 XPath
Úvod Příchod XSL V mnoha případech možnosti kaskádových stylů nestačí, rozšíření přináší jazyk XSL (extensible Stylesheet Language). Původně měl jazyk XSL umožňovat definovat vzhled jednotlivých elementů způsob jejich zarovnání, velikost a styl písma, barvy apod. Kromě toho jej šlo použít i k takovým věcem, jako je automatické generování obsahu, číslování obrázků, kapitol apod. Postupně se ukázalo, že XSL má sloužit ke dvěma poměrně odlišným věcem k transformaci dokumentů a k definici vzhledu jejich formátování. Během příprav standardu XSL z něj proto byla vyřazena jeho část sloužící k transformaci dokumentů, pro kterou se používá název XSLT (XSL Transformations). Pomocí XSLT lze vytvářet styly, které definují, jak se dokumenty mají převádět do formátu HTML, do dokumentů s jinou strukturou nebo do obyčejných textových souborů. XSL FO (formátovací objekty) pro přesný popis vzhledu dokumentu. Standard XSLT byl přijat jako standard konsorcia W3C. Pro práci s XSLT exisutje celá řada editorů - XT, Saxon a Xalan.
Princip zpracování pomocí stylů
Formátování dokumentu pomocí XSL FO
<?xml version="1.0" encoding="windows-1250"?> <!DOCTYPE citaty [ <!ELEMENT citaty (citat+)> <!ELEMENT citat (text, autor)> <!ELEMENT text (#PCDATA)> <!ELEMENT autor (#PCDATA)> ]> <citaty> <citat> <text>cizí vavříny nám nedají spát, na vlastních usínáme.</text> <autor>orientální PŘÍSLOVÍ</autor> </citat> <citat> <text>člověk musí často líbat ruce, které by nejraději uťal.</text> <autor>dánské PŘÍSLOVÍ</autor> </citat>... </citaty>
Soubor s XSLT stylem je sám o sobě dokument, protože používá syntaxi. V dokumentu se používají dva druhy značek řídící příkazy pro procesor a značky výsledného dokumentu (např. HTML tagy). Pro možnost kombinovat dvě sady značek, se používají jmenné prostory, tzn., že před jména všech elementů, které má XSLT procesor zpracovávat, se píše speciální prefix xsl:. Celý styl musí být uzavřen v elementu stylesheet. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> definice stylu </xsl:stylesheet> URL adresa http://www.w3.org/1999/xsl/transform, identifikuje jmenný prostor. XSLT procesor podle ní pozná, že dokument obsahuje styl. Pokud toto URL nebude uvedeno nebo bude nepřesně napsáno, procesor nebude instrukce ve stylu zpracovávat.
Samotný styl se skládá především z šablon, které definují, jak se jednotlivé části dokumentu budou převádět do tvaru výstupního dokumentu. Při výběru částí dokumentu se používá jednoduchý dotazovací jazyk XPath. Existuje několik přístupů k tvorbě stylů. Pro dokumenty se složitou hierarchickou strukturou se většinou používá přístup, kdy je ve stylu mnoho šablon, které jsou postupně volány pro odpovídající části vstupního dokumentu.
Formátování pomocí několika šablon <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="html" encoding="windows-1250"/> <xsl:template match="/"> <html> <head> <title>moudrá přísloví</title> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template>
<xsl:template match="citat"> <xsl:apply-templates/> <hr/> </xsl:template> <xsl:template match="text"> <p><xsl:apply-templates/></p> </xsl:template> <xsl:template match="autor"> <p align="right"> <em><xsl:apply-templates/></em></p> </xsl:template> </xsl:stylesheet>
Pro dozkoušení stylů, je několik možností. použít procesor ovládaný z příkazové řádky: saxon -o výstup dokument.xml styl.xsl xsltproc -o výstup styl.xsl dokument.xml msxsl -o výstup dokument.xml styl.xsl nxslt -o výstup dokument.xml styl.xsl xalan -o výstup dokument.xml styl.xsl xt dokument.xml styl.xsl výstup připojit styl přímo k dokumentu: Na začátek dokumentu (za deklaraci a před kořenový element) se umístí instrukce pro připojení stylu: <?xml-stylesheet href="prislovi1.xsl" type="text/xsl"?> Nyní lze dokument otevřít v prohlížeči s podporou XSLT. Další možností je použít XSLT procesor z příkazové řádky: saxon -a -o výstup dokument.xml xsltproc -o výstup dokument.xml msxsl -pi -o výstup dokument.xml nxslt -pi -o výstup dokument.xml xalan -o výstup dokument.xml
Formátování pomocí několika šablon První se začne provádět šablona platná pro kořen dokumentu match= /. Vygeneruje se kostra HTML stránky a pomocí příkazu <xsl:apply-templates/> umožní spuštění dalších šablon, které se aktivují pro jednotlivé části vstupního dokumentu. Další šablony určují, jak se mají do HTML převést jednotlivé citáty, jejich text a autoři. V tomto případě je vykonávání jednotlivých části XSLT stylu řízeno obsahem dokumentu jednotlivé elementy dokumentu aktivují provádění jednotlivých šablon. Lze použít i opačný přístup, kdy je ve stylu minimum šablon a uvnitř šablony se cíleně vybírají určité informace z dokumentu.
Formátování pomocí jedné šablony <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="html" encoding="windows-1250"/> <xsl:template match="/"> <html> <head> <title>moudrá přísloví</title> </head> <body> <xsl:for-each select="/citaty/citat"> <p><xsl:value-of select="text"/></p> <p align="right"> <em><xsl:value-of select="autor"/></em></p> <hr/> </xsl:for-each> </body> </html> </xsl:template>
Formátování pomocí jedné šablony Styl obsahuje jednu šablonu, která si sama pomocí příkazů <xsl:for-each> a <xsl:value-of> vybere potřebné části vstupního dokumentu. Tento přístup se většinou používá pro dokumenty, které nemají příliš složitou a variabilní strukturu. Pokud má styl jen jednu šablonu pro kořen dokumentu, lze použít zkrácenou syntaxi stylu, kdy jsou přímo do kostry výstupního dokumentu doplňovány potřebné instrukce pro XSLT procesor.
Zjednodušená syntaxe pro styly s jednou šablonou <?xml version="1.0" encoding="utf-8"?> <html xmlns:xsl="http://www.w3.org/1999/xsl/transform" xsl:version="1.0"> <head> <title>moudrá přísloví</title> </head> <body> <xsl:for-each select="/citaty/citat"> <p><xsl:value-of select="text"/></p> <p align="right"> <em><xsl:value-of select="autor"/></em></p> <hr/> </xsl:for-each> </body> </html>
XPath XPath ( Path Language) je samostatný standard W3C, který se používá v několika dalších jazycích včetně XSLT.
XPath XPath ( Path Language) je samostatný standard W3C, který se používá v několika dalších jazycích včetně XSLT. V XPathu lze zapisovat jednoduché výrazy, které vybírají části dokumentu.
XPath XPath ( Path Language) je samostatný standard W3C, který se používá v několika dalších jazycích včetně XSLT. V XPathu lze zapisovat jednoduché výrazy, které vybírají části dokumentu. dokument je přitom chápán jako stromová struktura, kde jsou jednotlivé elementy, atributy a text chápány jako uzly.
Stromová struktura
XPath Výrazy v XPath jsou podobné zápisu cest ve struktuře adresářů. Příklad: /faktura/polozka. Lomítko odděluje jednu úroveň ve stromu. Tzn., že položka musí být dítětem faktury. Pokud na hloubce vnoření nezáleží, použijí se dvě lomítka bezprostředně za sebou hledají se pak všichni potomci v libovolné úrovni stromu. Podobně jako v adresářové struktuře, se lze odvolávat na aktuální uzel stromu pomocí tečky a přejít na nadřazenou úroveň pomocí dvou teček. Odkaz na atribut, lez napsat před jeho jméno @. Výraz //@měna vybere všechny atributy měna kdekoliv v dokumentu. Za výraz lze do hranatých závorek zapisovat podmínku, která výběr zúží. Pokud se jako podmínku zapíše číslo, vybere se element s daným pořadím. Například /faktura/polozka[1] vybere první položku faktury. Poslední položka se vybrala s využitím speciální funkce last() /faktura/polozka[last()]. Vše lze navzájem kombinovat.