1 / 33

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: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.

leigh-silva
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. Techniky zpracování XML dat • Podle použitého specifikačního jazyka • Podle úrovně abstrakce

  3. 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

  4. 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ů).

  5. 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

  6. 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)

  7. 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>

  8. 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>

  9. 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

  10. 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ů

  11. Vývojové nástroje • XSLT Procesory • Integrovaná vývojová prostředí • XSLT Debuggery • Preprocesory • další nástroje

  12. 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:

  13. 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

  14. 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í.

  15. 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)

  16. 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

  17. 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)

  18. 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

  19. Metodika modelování stylů • Nová disciplína SI, není zatím nijak propracovaná, obvykle sestává z • ad hoczí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ě.

  20. Ú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.

  21. Ú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ů.

  22. Ú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>

  23. Ú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>

  24. Ú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>

  25. Ú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)

  26. Ú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.

  27. Optimalizace • Při návrhu • Aplikace • Stylu • Při provádění transformací

  28. 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

  29. 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.

  30. 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í

  31. 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)

  32. 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!)

  33. 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.

More Related