transformace xml dat: standardy, nástroje, metodika, optimalizace

33
Transformace XML dat: standardy, nástroje, metodika, optimalizace RNDr. Tomáš Pitner, Dr. Masarykova univerzita v Brně, Fakulta informatiky mailto:[email protected] http://www.fi.muni.cz/~tomp

Upload: leigh-silva

Post on 01-Jan-2016

20 views

Category:

Documents


1 download

DESCRIPTION

Transformace XML dat: standardy, nástroje, metodika, optimalizace. RNDr. Tomáš Pitner, Dr. Masarykova univerzita v Brně, Fakulta informatiky mailto:tomp @ fi.muni.cz http://www.fi.muni.cz/ ~tomp. Techniky zpracování XML dat. Podle použitého specifikačního jazyka Podle úrovně abstrakce. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Transformace XML dat: standardy, nástroje, metodika, optimalizace

RNDr. Tomáš Pitner, Dr.Masarykova univerzita v Brně, Fakulta informatiky

mailto:[email protected] http://www.fi.muni.cz/~tomp

Page 2: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Techniky zpracování XML dat

Podle použitého specifikačního jazyka

Podle úrovně abstrakce

Page 3: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Nízkoúrovňový přístup

Založen na manipulaci se semistrukturovanými (stromově organizovanými) daty, buďto:

1. Data aktuálně v operační paměti jako: DOM (Document Object Model, W3C) a srovnatelné modely: JDOM (Lutris Technology, http://jdom.org) nejrůznější XML-Java (C++,...)-binding modely: Quick, Zeus, XML

Beans ... Výhody:

obvykle snadnější použitelnost než u (2.) model může být persistentní možná virtualizace DOM-like modelů (paměťová úspora)

2. Data dostupná jako proud událostí: SAX1,2 rozhraní (SAX2 - novinkou je zejm. podpora Namespaces) paměťově obecně méně náročné, ale větší nároky na aplikačního

programátora

Page 4: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Nízkoúrovňový přístup (2)

Obecné nevýhody nízkoúrovňového přístupu: nutnost kompletního "ručního kódování" transformací; horší znovupoužitelnost jednou naprogramovaných

transformačních postupů v jiném prostředí (jazyce), často nepoužitelnost pro jinou třídu vstupních

dokumentů obtížná rozšiřitelnost (nemožnost snadného přidání

dalšího transformačního pravidla).

Výhodou může být naopak rychlost a možnost optimalizace (často pro pevně

fixovanou třídu vstupních dokumentů).

Page 5: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Speciální jazyky pro XML/SGML transformace

Příklady speciálních jazyků XML/SGML transformací:

XFA (XML For All) TranSID Metamorphosis jazyky součástí kompletních aplikačních prostředí (aplikačních

serverů), speciálně publikačních serverů např. Apache Cocoon

u aplikačních serverů: často speciální proprietární API OmniMark

Page 6: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Cíl: univerzální deklarativní jazyk pro specifikace transformací

Historicky: především z prostředí orientované na semistrukturovanost XML dat - z oblasti webového publikování pro HTML prezentační formátovací kaskádové styly (CSS),

http://www.w3.org/Style/CSS). umožňovaly přiřazení formátovacích objektů a atributů (např.

pozicování, barva) prvkům HTML kódu, neumožňovaly transformaci, tj. změnu struktury tohoto kódu.

Skutečné transformace struktury dokumentů: prostřednictvím DSSSL (Document Style Semantics and Specification Language)

Jazyk DSSSL však platil za komplikovaný, hůře implementovatelný a použitelný stylový jazyk

Razantní změnu představoval XSL (FO), XSLT (transformace)

Page 7: Transformace XML dat: standardy, nástroje, metodika, optimalizace

XSL Transformations, příklady stylu (1)

<?xml version="1.0" encoding="iso-8859-1"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">

<html><head>

<title>Today's greeting</title></head><body>

<p><xsl:value-of select="greeting"/></p></body></html>

</xsl:template></xsl:stylesheet>

Page 8: Transformace XML dat: standardy, nástroje, metodika, optimalizace

XSL Transformations, příklady stylu (2)

<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><head> <title>Today's greeting</title></head><body> <p><xsl:value-of select="greeting"/></p></body></html>

Page 9: Transformace XML dat: standardy, nástroje, metodika, optimalizace

XSLT standardy – současnost a perspektiva

XSLT 1.0 W3C Recommendation XPath 1.0

poměrně mocný jazyk pro navigaci a dotazování ve stromové struktuře XML dokumentu(ů)

základ pro specifikace transformačních XSLT stylů je na něm založeno (nebo jej využívá) několik dotazovacích jazyků mechanizmem je specifikace lokace v XML dokumentu: určit v XML

dokumentu množinu uzlů, jež splňují (match) uvedený XPath výraz.

nabízí řadu (agregačních) funkcí aplikovatelných na množiny uzlů, booleovské hodnoty, číselné hodnoty, řetězce atd.

je možné XPath použít jako jiný programovací jazyk k převodům, agregacím, rozhodování, atd.

XSLT 1.1 - vývoj zastaven, orientace na novou verzi: XSLT 2.0

Page 10: Transformace XML dat: standardy, nástroje, metodika, optimalizace

XSLT standardy – současnost a perspektiva (2)

XSLT 2.0 - poměrně zásadním rozšířením původního jazyka, nyní ve fázi shromažďování a analýzy požadavků, http://www.w3.org/TR/xslt20req. Přinese zejména: vazbu transformací na typ (XML Schema) transformovaného dokumentu, rozšíří možnosti transformací i nestrukturovaného (non-XML) vstupu a zjednoduší použití XSLT konstrukcí

Pro integraci heterogenních zdrojů přináší lepší podporu národních abeced (i celých "locales"), možnost vkládání externích zdrojových dokumentů, na něž budou

aplikovány jejich "lokální" styly atd. Podpora optimalizací při transformacích

Revolučním rozšířením je/bude obohacení XPath o funkce vyšších řádů

Page 11: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Vývojové nástroje

XSLT Procesory Integrovaná vývojová prostředí XSLT Debuggery Preprocesory další nástroje

Page 12: Transformace XML dat: standardy, nástroje, metodika, optimalizace

XSLT procesory

XSLT procesor je stroj, jenž dokáže na základě předloženého stylu (tedy kolekce šablon), parametrů tohoto stylu a dalších nastavení transformovat předložený vstupní XML dokument (nebo

dokumenty) podle pravidel daných šablonami na jeden či více výstupních

dokumentů. Výstupní dokumenty, na rozdíl od vstupních, ani nemusejí být

dobře utvořenými (well-formed) XML dokumenty - běžně se používá např. výstup do formátů klasického (non-XML) HTML kódu, do čistého nestrukturovaného textu atd. Při volbě procesoru je třeba si všímat:

Page 13: Transformace XML dat: standardy, nástroje, metodika, optimalizace

XSLT procesory (2)

Referenčními procesory jsou: XT (James Clark) SAXON (Michael Kay) Xalan (IBM, nyní Apache Software Foundation). též dodávány jako integrální součást databázových systémů s

podporou XML: např. Oracle XML Developer's Kit, nejrychlejší open-source procesor, součást Gnome XML C

knihovny libxml/libxslt

Page 14: Transformace XML dat: standardy, nástroje, metodika, optimalizace

XSLT procesory (3)

Kritéria pro volbu vhodného XSLT procesoru zda a jak procesor podporuje požadovanou verzi XSLT

standardu; zdali použitý XML parser podporuje požadovaná kódování

národních znaků; zda parser podporuje moderní rozhraní SAX2, DOM2; na jakém operačním systému/JVM běží; zda je k dispozici jako open-source; zda provádí optimalizace; jaká je diagnostika (vč. ladicích možností) při práci procesoru; jaké rozšiřující funkce/elementy atd. sám má a zda

podporuje uživatelská rozšíření.

Page 15: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Vývojová prostředí

XSLT je ze syntaktického hlediska aplikací XML, je tedy možné použít na zápis stylu v XML libovolný XML editor či editor čistého textu.

Kompletní vývojová prostředí pro XML, např. XML Spy podporují uživatelsky příjemnější tvorbu stylů s vyznačením specifické syntaxe XSLT, s automatizovaným nabízením a doplňováním přípustných konstrukcí atd.

Podobné funkce nabízí i komplexní nástroj z dílny IBM Alphaworks, XML & Web Services Development Environment nebo volně dostupné:

CookBook 2.0 XMLE (XML editor)

Page 16: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Preprocesory

Obvykle jednodušší jednoúčelové nástroje:

např. speciální skriptovací jazyk XSLScript (redukuje "syntaktický cukr" XSLT a ex post zkompiluje zdrojový text do XSLT

XPP (XML PreProcessor), dělá v zásadě totéž, je jednodušší, quick & dirty

Page 17: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Debuggery

Syntaktická neúspornost XSLT jazyka nepřímo implikuje množství chyb:

chyby XML nebo XSLT syntaxe (pomůže odstranit validující XML parser, XML-, XSLT- editor)

chyby v logice XSLT stylu (možné použít speciální debuggery XSLT, např. open source nástroj tbug)

Page 18: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Volně dostupné knihovny XSLT kódu Dosud ani zdaleka tolik jako jiného open-source softwaru. Lze rozlišovat:

knihovny jednotlivých šablon (využíváme pomocí include, import) celých stylů (využíváme beze změny) možnost parametrizace

Ucelené styly použijeme tam, kde transformujeme do nebo z nějakého rozšířeného a obecně používaného formátu (DocBook, XHTML, samotné XSLT, MathML RosettaNet, BizTalk, ebXML a další), např. pro DocBook existuje knihovna o cca 1000 šablonách

nebo tam, kde styl specifikuje nějakou velmi obecně použitelnou transformaci, (téměř) nezávislou na vstupním formátu dat - odstranění komentářů (<!-comment -->), processing instructions, ignorable whitespaces, spojování dvou dokumentů se stejným modelem, generování (jednoho z možných) XML Schematu z jedné jeho instance atp.

„hříčky“ v budoucnu metastyly

Page 19: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Metodika modelování stylů

Nová disciplína SI, není zatím nijak propracovaná, obvykle sestává z ad hoc získaných zkušeností (často z práce s jednou

implementací XSLT transformačního stroje) a z obecně platných zásad funkcionálního

programování.

Proces návrhu a implementace XSLT stylů rozdělíme na čtyři úrovně.

Page 20: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Úroveň aplikace

Zde řešíme otázky:

co vše řešit s pomocí XSLT

nad jakými daty (jakého vstupního modelu)

co požadujeme transformacemi získat (výstupní model)

Obvykle jsou to požadavky na různé pohledy na data podle výstupního média.

Dále specifikujeme konceptuální rozdělení transformačních fází mezi jednotlivé styly,

určujeme jejich konceptuální strukturu,

identifikujeme společné prvky (šablony) jednotlivých stylů pro jejich znovupoužitelnost.

Page 21: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Úroveň stylu

Z pohledu logické struktury se styl skládá z množiny explicitně a implicitně uvedených šablon.

Zde rozhodujeme, jakou techniku má transformace příslušným stylem používat: přístup "push", kdy je transformace řízená vstupními daty, přístup "pull", kdy je v centru pozornosti výstupní dokument,

Na této úrovni také rozhodujeme o použití módů zpracování a podmíněného zpracování podle hodnot parametrů.

Styl lze (ortogonálně vzhledem k logickému členění) rozdělit na více souborů a tyto dílčí kolekce šablon vkládat (xsl:include) nebo zahrnovat (xsl:import) do jiných stylů.

Page 22: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Úroveň stylu (vzor „fill-in-blank“)

<html xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.0"><head> <title>Management Structure</title></head><body> <h1>Management Structure</h1> <p>The following responsibilies were announced on <xsl:value-of select="/orgchart/@date"/>:</p> <table border="2" cellpadding="5"> <tr> <th>Name</th><th>Role</th><th>Reporting to</th> </tr> <xsl:for-each select="//person"> <tr> <td><xsl:value-of select="name"/></td> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="ancestor::person[1]/name"/></td> </tr> </xsl:for-each> </table> <hr/></body></html>

Page 23: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Úroveň stylu (vzor „navigational“)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:key name="pub" match="book" use="publisher"/><xsl:variable name="publishers"

select="//publisher[not(.=preceding::publisher)]"/><xsl:template match="/"><html><head> <title>Sales volume by publisher</title></head><body><h1>Sales volume by publisher</h1> <table> <tr> <th>Publisher</th><th>Total Sales Value</th> </tr> <xsl:for-each select="$publishers"> <tr> <td><xsl:value-of select="."/></td> <td><xsl:call-template name="total-sales"/></td></tr> </xsl:for-each> </table></body></html></xsl:template><xsl:template name="total-sales"> <xsl:value-of select="sum(key('pub',string(.))/sales)"/></xsl:template></xsl:stylesheet>

Page 24: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Úroveň stylu (vzor „rule-based“)<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform“

version="1.0"><xsl:variable name="backcolor" select="'#FFFFCC'" /><xsl:template match="SCENE|PROLOGUE|EPILOGUE"><HTML><HEAD><TITLE><xsl:value-of select="TITLE"/></TITLE></HEAD> <BODY BGCOLOR='{$backcolor}'> <xsl:apply-templates/> </BODY> </HTML></xsl:template><xsl:template match="SPEECH"> <TABLE><TR> <TD WIDTH="160" VALIGN="TOP">

<xsl:apply-templates select="SPEAKER"/> </TD> <TD VALIGN="TOP"> <xsl:apply-templates select="STAGEDIR|LINE"/> </TD>

</TR></TABLE></xsl:template>

Page 25: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Úroveň šablony

Vyvažujeme případnou nerovnováhu "optimalita vs. přehlednost a verifikovatelnost šablony",

Na této úrovni zvažujeme použití konstrukcí, jež mohou negativně ovlivnit efektivitu transformací, např. generování automatického číslování <xsl:number>.

Snažíme se, aby struktura šablon pokud možno odpovídala hierarchii elementů ve zdrojovém, případně cílovém dokumentu

Obvykle preferujeme rekurzi před iterací. Využíváme režimy zpracování (processing modes)

Page 26: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Úroveň XPath vzorku

Optimalita použitého XPath výrazu např. vyskytují se zde "nepříjemné" (pod)výrazy vyžadující

opakované procházení velkých podstromů zdrojového dokumentu (např. konstrukce //* apod.).

Lze doporučit použití klíčů (key() a id()) dočasných pomocných struktur (fragmentů),

proměnných, použití uživatelských funkcí psaných v "rychlejším", tj. jiném než XSLT jazyce atd.

Na této úrovni je třeba neopomenout odlišnosti datového modelu XPath stromů od vnitřní reprezentace typu DOM - jazykem XPath se např. nelze standardně dotazovat na sekce CDATA nebo entity.

Page 27: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Optimalizace

Při návrhu Aplikace Stylu

Při provádění transformací

Page 28: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Optimalizace návrhu aplikace

Zaměřujeme se na místa, kde se provádí: často opakované transformace (např. u webových publikačních

systémů) optimalizovat rychlost i na úkor přehlednosti a modularity

stylu zvážit, zdali je XSLT vůbec vhodnou technikou (není lepší pouhé filtrování SAX proudu událostí?)

transformace nad velkými dokumenty: problémy se správou paměti při vytváření stromové

reprezentace před a po transformaci opomíjení možnosti znovupoužít výsledky dílčích transformací

Někdy lze transformace objemných dokumentů zcela eliminovat

Page 29: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Optimalizace návrhu aplikace (2)

Tam, kde se provádí řetězově ("pipeline") více transformací po sobě nebo kde dokonce používáme složitější síť navazujících transformací:

lze zredukovat počet zřetězených transformací? u zřetězených transformací je klíčová efektivita vnitřní reprezentace Některé transformační stroje (např. SAXON) dokážou na základě uvedení

speciálních rozšiřujících atributů u stylu samy transformace efektivním způsobem řetězit.

Máme-li možnost zasahovat do vstupu/výstupu transformací na nižší úrovni, tj. např. na úrovni SAX událostí produkovaných XSLT procesorem, můžeme některé jednodušší transformace (např. sloučení dvou množin XML uzlů) realizovat nikoli prostřednictvím XSLT, ale např. "nasměrováním" obou SAX proudů do jednoho výsledného dokumentu;

Aplikace, kde se používá přístup ke klasickým (non-XML) a nativním XML databázím -- optimalizujeme raději přístup k databázi než ex post transformaci.

Page 30: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Optimalizace návrhu stylu

Často zde bojujeme s požadavkem na zachování přehlednosti a modularity stylu, v některých směrech si ale tato kritéria neprotiřečí. Základní zásady:

rozdělit knihovny šablon do menších souborů, zavádět jen potřebné

nahradit prezentační šablony, které se starají pouze o vizuální podobu výstupního dokumentu, speciálními prototypy (kostrami) výstupního dokumentu, do nějž procesor při transformaci pouze dosazuje hodnoty ze vstupu

logicky rozdělit logickou a prezentační vrstvu - nejlépe mezi styly nebo mezi šablony s různým mode nebo různým jmenným prostorem u XPath výrazu atributu match

rozdělit i prezentační vrstvu na dvě úrovně - abstraktní a konkrétní

Page 31: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Optimalizace návrhu XPath výrazů

Bráníme se neefektivním konstrukcím - např. s O(n2) složitostí

Využíváme proměnné (variable), indexy (key()) Využíváme rozšiřující funkce (v jiném než XSLT jazyce)

preferujeme standardní rozšíření exslt (http://exslt.org) případně rozšíření závislá na procesoru (např. SAXON)

Page 32: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Optimalizace provádění transformací

Kvalitní XSLT procesory provádění implicitně řadu optimalizací vedoucích zejména ke zrychlení a často také k paměťové úspoře.

Jednou z možných optimalizací na nejnižší úrovni je kompilace stylu do jiného programovacího jazyka a následné přímého provádění kódu v tomto jazyce nebo implicitní kompilace do objektů javax.transform.Templates.

Výsledek: zrychlení kódu (až o 200 % u Sun XSLTC) nižší paměťová náročnost

V budoucnu: paralelizace transformací (protože chybí vedlejší efekty!)

Page 33: Transformace XML dat: standardy, nástroje, metodika, optimalizace

Shrnutí

XSLT je standardizovaným a perspektivním jazykem pro deklarativní specifikaci transformací XML dat. Poměrně silný podpůrný dotazovací jazyk XPath jej posouvá z jednoúčelového prostředku až na pomezí univerzálních programovacích jazyků. Zvládnutí efektivního návrhu XSLT aplikací se proto v XML světě stává nezbytnou dovedností každého vývojáře.

Tento příspěvek ve stručnosti ukázal podstatné aspekty vývoje XSLT aplikací, představil dostupné nástroje, nastínil metodiku jejich návrhu a možnosti optimalizace na jednotlivých úrovních návrhu.