Implementace XML signatur



Podobné dokumenty
PRG036 Technologie XML

XML databáze. Přednáška pro kurz PB138 Moderní značkovací jazyky Ing. Petr Adámek

Využití XML v DB aplikacích

Tvorba informačních systémů

Ukládání a vyhledávání XML dat

Relační DB struktury sloužící k optimalizaci dotazů - indexy, clustery, indexem organizované tabulky

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.

Algoritmizace prostorových úloh

Rozhraní pro práci s XML dokumenty. Roman Malo

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

Systém souborů (file system, FS)

Distanční opora předmětu: Databázové systémy Tématický blok č. 5: Dotazovací jazyk XPath Autor: RNDr. Jan Lánský, Ph.D.

MBI - technologická realizace modelu

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

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

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

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

Algoritmizace prostorových úloh

XQuery. Jirka Kosek. Visual FoxPro DevCon června Praha. Copyright 2005 Jiří Kosek

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

Semestrální práce 2 znakový strom

PRODUKTY. Tovek Tools

PRODUKTY. Tovek Tools

Stručně o XML (výhody, nevýhody) Proč komprimovat XML? Metody komprese XML XMill. Optimalizace komprese XML. Závěr

Jazyky pro popis dat

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

Vývoj moderních technologií při vyhledávání. Patrik Plachý SEFIRA spol. s.r.o.

Základní datové struktury

Algoritmy a datové struktury

1 Webový server, instalace PHP a MySQL 13

Komprese a dotazování nad XML dokumenty

Experimentální systém pro WEB IR

XML terminologie a charakteristiky. Roman Malo

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

NOVÁ STROMOVÁ STRUKTURA VE VÝROBĚ

PHP framework Nette. Kapitola Úvod. 1.2 Architektura Nette

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Datové typy a struktury

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

Úvod do programovacích jazyků (Java)

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

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

Kolekce, cyklus foreach

Zpráva o zhotoveném plnění

Oracle XML DB. Tomáš Nykodým

Dolování v objektových datech. Ivana Rudolfová

Software602 Form Designer

Instalace a konfigurace web serveru. WA1 Martin Klíma

1. Webový server, instalace PHP a MySQL 13

Základy algoritmizace. Pattern matching

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

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

Metody tvorby ontologií a sémantický web. Martin Malčík, Rostislav Miarka

Tovek Tools. Tovek Tools jsou standardně dodávány ve dvou variantách: Tovek Tools Search Pack Tovek Tools Analyst Pack. Připojené informační zdroje

Správnost XML dokumentu

8.2 Používání a tvorba databází

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

Datové struktury 2: Rozptylovací tabulky

Výčtový typ strana 67

1. Dědičnost a polymorfismus

Dotazování nad XML daty a jazyk XPath

Tvorba informačních systémů

Lineární datové struktury

Dotazování nad stromem abstraktní syntaxe

Dynamické datové struktury IV.

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

Další XML technologie

Autor. Potřeba aplikací sdílet a udržovat informace o službách, uživatelích nebo jiných objektech

Java a XML. 10/26/09 1/7 Java a XML

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Kapitola 1: Úvod. Systém pro správu databáze (Database Management Systém DBMS) Účel databázových systémů

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Základy algoritmizace. Hašování

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

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

Výměnný formát XML DTM DMVS PK

Vyhledávač datových referencí. Dokumentace

Obsah. 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody

VYTVÁŘENÍ DATABÁZÍ, VKLÁDÁNÍ ÚDAJŮ

Windows Server 2003 Active Directory

Pole a kolekce. v C#, Javě a C++

MINISTERSTVO PRO MÍSTNÍ ROZVOJ Č.j. 7022/ R O Z H O D N U T Í č. 19/2016. ministryně pro místní rozvoj. ze dne

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

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Knihovna RecDBXLib ZÁZNAMY V DATABOXU TXV

13. blok Práce s XML dokumenty v databázi Oracle

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky. Dokumentace k programu MMDoc

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320 M A T U R I T N Í T É M A T A P Ř E D M Ě T U

O Apache Derby detailněji. Hynek Mlnařík

ADT/ADS = abstraktní datové typy / struktury

APLIKACE XML PRO INTERNET

Programovací jazyk Pascal

Stromové struktury v relační databázi

Algoritmizace a programování

Modely datové. Další úrovní je logická úroveň Databázové modely Relační, Síťový, Hierarchický. Na fyzické úrovni se jedná o množinu souborů.

Maturitní projekt do IVT Pavel Doleček

IS pro podporu BOZP na FIT ČVUT

Transkript:

MASARYKOVA UNIVERZITA V BRNĚ FAKULTA INFORMATIKY #ris m p Implementace XML signatur BAKALÁŘSKÁ PRÁCE Petr Neděla Brno, podzim 2005

Prohlášení Prohlašuji, že tato bakalářská práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Vedoucí práce: Ing. Petr Adámek 11

Poděkování Děkuji svému vedoucímu bakalářské práce Ing. Petrovi Adámkovi za četné konzultace, cenné rady a připomínky. Také bych chtěl poděkovat Šárce Grigarčíkové za gramatickou a stylistyckou korekturu. m

Shrnutí K ukládání a výměně informací se často využívá jazyk XML. Dokument v XML jazyku tvoří stromovou strukturu uzlů. Při některých způsobech vyhledávání je třeba tuto strukturu zohlednit. Signatury stromu jsou jednou z metod indexování struktury XML dokumentu, umožňující okamžitě vyhodnocovat strukturální vztahy mezi uzly stromu. Cílem práce je implementovat standardní a rozšířené signatury v systému XIQE a porovnat jejich vzájemnou efektivitu. IV

Klíčová slova XML, XML Tree Signatures, standardní signatury, rozšířené signatury, indexování, Dietzovo schéma, XIQE v

Obsah 1 Úvod 1 2 Standardy rodiny XML 2 2.1 Jazyk XML 2 2.1.1 Historie jazyka XML 2 2.1.2 Syntaxe dokumentu XML 2 2.1.3 Well formed dokument 3 2.2 Model XML dokumentu 4 2.3 Navigace ve stromu XML dokumentu 5 2.3.1 Syntaxe jazyka XPath 5 2.4 Rozhraní přístupu ke XML dokumentu 6 2.4.1 Rozhraní SAX 6 2.4.2 Rozhraní DOM 7 2.4.3 Přístup ke XML databázím 7 3 Indexování struktury XML dokumentu 8 3.1 Dietzovo kódovací schéma 8 3.2 Signatury XML stromu 9 3.2.1 Standardní signatury 10 3.2.1.1 Osa ancestor 11 3.2.1.2 Osa preceding 11 3.2.1.3 Osa descendant 11 3.2.1.4 Osa following 11 3.2.1.5 Osa parent 12 3.2.1.6 Osa child 12 3.2.1.7 Osa preceding-sibling 12 3.2.1.8 Osa following-sibling 12 3.2.1.9 Osa self 12 3.2.1.10 Osa ancestor-or-self 13 3.2.1.11 Osa descendant-or-self 13 3.2.2 Rozšířené signatury 13 3.2.2.1 Osa ancestor 13 3.2.2.2 Osa preceding 13 3.2.2.3 Osa descendant 14 3.2.2.4 Osa following 14 3.2.2.5 Osa parent 14 3.2.2.6 Osa child 14 3.2.2.7 Osa preceding-sibling 14 3.2.2.8 Osa following-sibling 14 3.2.2.9 Osy self, ancestor-or-self a descendant-or-self 15 3.3 Editace signatur 15 3.3.1 Standardní signatury 15 vi

3.3.1.1 Přidání přímého potomka 15 3.3.1.2 Přidání před kontextový uzel 16 3.3.1.3 Odebrání uzlu 16 3.3.2 Rozšířené signatury 16 3.3.2.1 Přidání přímého potomka 16 3.3.2.2 Přidání před kontextový uzel 17 3.3.2.3 Odebrání uzlu 17 3.4 Dynamické signatury 17 4 Implementace 18 4.1 Použité technologie 18 4.1.1 Programovací jazyk JAVA 18 4.1.2 Balíkjava.nio 18 4.1.3 Subversion 18 4.1.4 Maven 19 4.1.5 Jakarta Commons 19 4.1.6 JUnit 19 4.2 Systém XIQE 19 4.2.1 Struktura systému 20 4.2.2 Fungování systému 21 4.2.3 Důležité třídy a rozhraní 21 4.3 Třídy signatur XML stromu 21 4.3.1 Funkční rozhraní signatur 21 4.3.2 Struktura signatury 22 4.3.3 Generování signatury 23 4.3.4 Použití signatur 23 5 Testování efektivity 24 5.1 Způsob testování 24 5.1.1 XMark 24 5.1.2 XPathMark 24 5.2 Systém ExEx 25 5.3 Experimenty 25 5.3.1 Testovací konfigurace 25 5.3.2 Prováděné experimenty 25 5.3.3 Výsledky testů 25 5.3.4 Vyhodnocení experimentů 27 6 Závěr 28 Bibliografie 29 vii

Kapitola 1 Úvod Nasazování nových výpočetních systémů a propojení počítačových sítí díky internetu způsobuje, že množství dat, které jsou zpracovávány a vyměňovány elektronicky, neustále roste. Hojně rozšířeným formátem pro ukládání a výměnu informací je také jazyk XML. Tento formát je oblíben zejména pro jeho otevřenost, rozšiřitelnost a snadné zpracování. Jazyk XML přidává k datům sémantiku a hierarchicky rozčleňuje dokument. S rostoucím objemem dat uložených v XML roste i potřeba efektivního vyhledávání v těchto datech, ale i v struktuře XML dokumentu. K tomuto účelu jsou využívány různé indexační metody, které kompaktně zachycují strukturu XML dokumentu a efektivně vyhodnocují strukturální vztahy mezi uzly XML dokumentu. Tato práce se zabývá indexováním XML dokumentů pomocí signatur XML stromu. Nejprve je představen jazyk XML a jsou zmíněny jeho hlavní rysy s ohledem na indexování. Dále jsou popsány signatury XML stromu, jejich struktura a princip fungování. Také je prezentován systém XIQE (XML Indexing and Querying Engine) vyvíjený na fakultě informatiky, který má za cíl porovnávat různé indexační metody. Cílem práce je popsat indexování XML dokumentu pomocí standardních a rozšířených signatur XML stromu, implementovat tuto metodu indexování v systému XIQE a zhodnotit efektivitu signatur pomocí vhodné sady experimentů. 1

Kapitola 2 Standardy rodiny XML Tato kapitola je zaměřena na základní popis jazyka XML a to především na strukturální vztahy uzlů. Popisuje model XML dokumentu jako strukturu uspořádaného stromu. Nastiňuje problém adresace jednotlivých uzlů dokumentu a seznamuje se syntaxí navigačního jazyka XPath. 2.1 Jazyk XML XML je hojně používaným značkovacím standardem. Používá se zejména v prostředí internetu jako vhodný formát pro výměnu informací. XML je populární hlavně pro možnost definování vlastních značek a pro oddělení sémantiky dat od jejich vizuální podoby v různých prostředích. 2.1.1 Historie jazyka XML XML (Extensible Markup Language) neboli rozšiřitelný značkovací jazyk, je metajazyk, který říká, jak vytvářet značkovací jazyky vhodné pro tvorbu dokumentů obsahujících strukturovaná data. Jedná se o standard konsorcia W3C, který se vyvinul z jazyka SGML (Standard Generalized Markup Language) jako jeho omezení a zjednodušení. Využívá se jako vhodný formát pro ukládání a výměnu informací, zejména pro jeho dobrou čitelnost pro člověka a snadné strojové zpracování. 2.1.2 Syntaxe dokumentu XML Dokumenty jazyka XML mají textový formát, jsou tvořeny textovými daty a značkami (tags). Značky přidávají k dokumentu dodatečné informace, hierarchicky člení dokument a určují sémantiku dat. Jsou pro ně rezervovány znaky lomených závorek, do kterých jsou uzavřeny. Nejpoužívanější typy značek jsou: komentáře: <! text komentáře > - umožňují vkládat do textu vlastní poznámky, které nejsou dále interpretovány; instrukce pro zpracování: <?identif ikator data? >-přidává k dokumentu informace pro aplikace, například analyzátory, XSLT procesory atd.; 2

2.1. JAZYK XML počáteční a koncová značka elementu: < jmenoelementu> a </jmenoelementu> - párová značka, nejdůležitější značka, dává sémantiku obsahu vyskytujícímu se mezi těmito značkami, vytváří strukturu; prázdný element: < jmenoelementu/> - jedná se jen o zkrácený zápis elementu, který neobsahuje žádný element ani textový uzel. Počáteční značka elementu může obsahovat i definici atributů, které přidávají k elementu dále nestrukturované informace. Atribut je řetězec tvaru nazevatributu="hodnota", například: <auto objemmotoru="l, 9" barva="modrá">. XML klade na strukturu a syntaxi dokumentu mnohé požadavky. Například koncové značce elementu musí předcházet koncová značka vnořeného elementu. XML určuje i znaky, které se smí vyskytovat v názvu elementu. 2.1.3 Well formed dokument Dokument splňující všechna obecná pravidla XML se označuje jako well formed. Ukázku well formed dokumentu je možno vidět v příkladu 2.1.1. Podle pravidel jazyka XML lze vytvářet obrovské množství dokumentů. Pro aplikace je však vhodné tuto množinu omezit a zpracovávat dokumenty jen určitých typů, u kterých aplikace ví, jak data interpretovat. K tomuto účelu se používá DTD (Document Type Definition), která svými pravidly umožňuje omezit množinu názvů elementů, kontext jejich výskytu, či určit přípustné hodnoty atributů. Použití DTD v XML dokumentu se deklaruje značkou <!DOCTYPE jmenoelementu ID-ExternihoDTD [InterniDTD]>. Řetězec jmenoelementu je názvem elementu na nejvyšší úrovni. Tento element se nazývá kořenový (root element) a musí být v dokumentu jediný. ID-ExternihoDTD je jméno souboru obsahující pravidla DTD. InterniDTD jsou pravidla vepsaná přímo do značky DTD. Ve značce nemusí být interní nebo externí část obsažena. Dokument splňující DTD se nazývá valid. <?xml version="l.0"?> <adresa> <ulice>mlýnská</ulice> <cislopopisne>2 9K/cislopopisne> <obec>velké Hoštice</obec> <psc>7473k/psc> </adresa> <! Nějaký komentář > Příklad 2.1.1: Ukázka well formed XML dokumentu 3

2.2. MODEL XML DOKUMENTU 2.2 Model XML dokumentu Na well formed dokumenty lze z logického hlediska pohlížet jako na uspořádané stromy, které jsou tvořeny několika typy uzlů. Kořenem tohoto stromu je abstraktní uzel označo vaný jako uzel dokumentu. Přímo na uzlu dokumentu je zavěšen kořenový element a uzly hlavičky dokumentu. Ukázku stromu XML dokumentuje možno vidět na obrázku 2.1. <^Nějaký komentář^ Obrázek 2.1: Model XML dokumentu Ve stromech se převážně vyskytují uzly těchto typů: elementy (elements); atributy (attributs); instrukce pro zpracování (processing instructions); komentáře (comments); textové uzly (text nodes); entity (entities); CDATA. Nejdůležitějším typem uzlů jsou elementy, které jako jediné mohou obsahovat další uzly a tvořit tak hierarchickou strukturu. Ostatní typy uzlů tvoří ve stromě listy. 4

2.3 Navigace ve stromu XML dokumentu 2.3. NAVIGACE VE STROMU XML DOKUMENTU Při práci s XML dokumenty je potřeba vybírat části dokumentu, odkazovat na jednotlivé uzly, zpracovávat některé atributy. Pro adresování uzlů dokumentu je určen jazyk XPath. XPath není plnohodnotným dotazovacím jazykem, neboť není schopen vybírat uzly z více dokumentů nebo je dále zpracovávat. Jedná se však o mocný nástroj k navigaci XML dokumentem, a proto se využívá i v mnoha dalších jazycích, jako jsou XQuery, XPoitner, XSLT, Schematron. 2.3.1 Syntaxe jazyka XPath XPath výraz se skládá z jednotlivých kroků. Kroky jsou tvořeny osou, testem uzlu a predikátem. Obecně se zapisují: osa: : testuz lu [predikát ]. Osa specifikuje množinu, ve které se bude uzel vyhledávat. TestUzlu určuje jméno nebo typ uzlu, který má být vybrán a predikát umožňuje zúžit výběr uzlů pomocí testu na některou vlastnost. Například výraz: child: : auto [@barva= "modrá" ], vybere elementy se jménem auto, které mají atribut barva s hodnotou rovnající se řetězci modrá. Jednotlivé kroky se dají skládat dohromady, jako oddělovač kroků slouží znak lomítko. Jednotlivé kroky se vyhodnocují zleva doprava a aplikují se na již dříve vybranou množinu uzlů. Výraz začínající lomítkem je absolutní a vyhodnocuje se vzhledem k uzlu dokumentu. Pokud úvodní lomítko chybí, začíná se s vyhodnocováním od kontextového uzlu. Ve výrazech jazyka XPath je možno setkat se s použitím dvou lomítek za sebou. Znamená to, že při vyhledávání odpovídajících uzlů lze přeskočit libovolné množství úrovní směrem do hloubky stromu dokumentu. To má však stejný význam, jako by se hledalo na ose descendant Pro tvorbu XPath výrazů je možné používat tyto osy: child - množina přímých potomků kontextového uzlu; descendant - množina všech potomků kontextového uzlu; descendant-or-self - množina všech potomků kontextového uzlu plus kontextový uzel; parent - množina obsahující rodiče kontextového uzlu; ancestor - množina všech předků kontextového uzlu; ancestor-or-self - množina všech předků kontextového uzlu plus kontextový uzel; selí- množina obsahující kontextový uzel; following - množina všech uzlů nacházejících se za kontextovým uzlem; following-sibling - množina všech sourozeneckých uzlů nacházejících se za kontextovým uzlem; 5

2.4. ROZHRANÍ PŘÍSTUPU KE XML DOKUMENTU preceding - množina všech uzlů nacházejících se před kontextovým uzlem mimo předků kontextového uzlu; preceding-sibling - množina všech sourozeneckých uzlů nacházejících se před kontextovým uzlem; attribute - množina atributů kontextového uzlu; namespace - množina uzlů jmenných prostorů deklarovaných pro daný uzel. Výchozí osou je osa child. Pokud se tedy v definici kroku osa vynechá, použije se osa child. Zpracování XPath výrazu po výběru množiny uzlů podle specifikované osy dále pokračuje vyhodnocením testu uzlu. Výběr uzlu lze omezit těmito funkcemi: * - vybere všechny uzly základního typu dané osy 1 ; nodeq - vybere všechny uzly dané předchozím výběrem; textq - vybere jen textové uzly; jmenoelementu - vybere elementy se zadaným jménem; commentq - vybere komentáře. Posledním omezením na výběr uzlů, které lze v jednotlivém kroku uplatnit, je predikát. Jedná se o libovolný výraz jazyka XPath, jehož vyhodnocením se získá pravdivostní hodnota. Tato hodnota určuje, zdali bude testovaný uzel zahrnut do výběru, či nikoliv. Predikát je uzavřen v hranatých závorkách. V XPath výrazech je možné narazit i na predikáty navracející přirozené číslo. V takovémto případě se jedná o test na pořadí uzlů, který se interpretuje jako position () = hodnotavyrazu. Například dojde-li k vyhodnocení výrazu /kniha/kapitola [5], bude navrácen uzel páté kapitoly knihy. 2.4 Rozhraní přístupu ke XML dokumentu Pro zpracovávání XML dokumentů aplikacemi existují dvě základní rozhraní nazývané SAX (Simple Api to XML) a DOM (Document Object Model). Jsou velice užitečná a každé má své výhody i nevýhody. 2.4.1 Rozhraní SAX SAX funguje na principu procházení souboru dokumentu a jeho analyzování. Pokaždé, když SAX rozpozná v dokumentu některý z uzlů dokumentu, zašle aplikaci zprávu o rozpoznaném uzlu a jeho hodnotě. Aplikace pak může vhodně reagovat a jednotlivé uzly zpracovávat. 1. Na ose attribute vybere atributy, na ose namespace vybere jmenné prostory. Na ostatních osách vybere elementy. 6

2.4. ROZHRANÍ PŘÍSTUPU KE XML DOKUMENTU Výhodou SAX je hlavně jeho rychlost a jednoduchost, avšak klade větší nároky na samotnou aplikaci, která si musí pamatovat hodnoty jednotlivých uzlů a určovat závislosti mezi uzly. 2.4.2 Rozhraní DOM Naproti tomu stojí rozhraní DOM, to vytvoří podle dokumentu objektový model a předá ho aplikaci. Pro sestavování stromu dokumentu využívá DOM události generované SAX analyzátorem. Jedná se tedy o jakousi nadstavbu rozhraní SAX. Vytvářením objektové struktury celého dokumentu roste paměťová náročnost, zato však DOM poskytuje příjemnější práci s XML dokumentem. 2.4.3 Přístup ke XML databázím Rozhraní SAX a DOM jsou však využitelná spíše k přístupu k jednotlivým souborům. Při práci s kolekcemi dokumentů nebo v oblasti nativních XML databází, se jeví značně neefektivní procházet celý dokument a vytvářet objektové modely při každé operaci nad dokumentem. V těchto případech je vhodné dokumenty zpracovat jen jednou a to při vkládání do databáze nebo kolekce a rozdělit je na data a strukturu. Data lze uložit zvlášť za pomocí standardních metod užívaných v relačních databázích. Pro strukturu je důležité zvolit některou indexační metodu, strukturu dokumentu indexovat a vhodně uložit. Pak je možné dotazy efektivně vyhodnocovat nad daným indexem a přistupovat jen k uzlům, které je nezbytně nutné zpracovat. 7

Kapitola 3 Indexování struktury XML dokumentu Procházení objektové struktury stromu při vyhledávání v XML dokumentech se nejeví moc efektivní. Proto se hledají metody, jak vhodně a kompaktně zachytit stromovou strukturu a urychlit tím vyhledávání v XML dokumentech. Existuje více způsobů, jak vhodně strukturu dokumentu zakódovat. Například lze využít invertovaný index cest, kódovací schéma UID, SCIF, či prvočíselné číslovací schéma. Tyto metody jsou popsány v [ ]. Efektivním způsobem zachycení strukturálních vztahů jsou i signatury XML stromu. Tato kapitola ukazuje způsob indexování a popisuje vyhledávání pomocí signatur XML stromu. Při tvorbě této kapitoly bylo čerpáno převážně z [1] a [6]. 3.1 Dietzovo kódovací schéma Princip signatur je založen na Dietzově kódovacím schématu, které na určení strukturálních vztahů využívá sekvencí preorder a postorder. Obě tyto sekvence lze získat tak, že při průchodu stromem dokumentu do hloubky dochází k postupnému zařazování uzlů do sekvence. V případě preorder se zařazují při vstoupení do uzlu, který se v sekvenci ještě nevyskytuje. U sekvence postorder se uzly umisťují do sekvence až při jejich opouštění, tedy poté co dojde k zpracování všech potomků daného uzlu. Preorder tak odpovídá množině počátečních značek elementů a postorder je tvořen množinou koncových značek elementů, a to ve stejném pořadí v jakém se vyskytují v dokumentu. Na základě těchto sekvencí se přiřadí každému uzlu ve stromu elementů dokumentu dvojice čísel, která vyjadřují pozici uzlu v sekvenci preorder a v sekvenci postorder. Získá se tak indexovaný strom, ten je vidět na obrázku 3.1. Z takto indexovaného stromu lze již lehce určovat vzájemnou pozici dvou libovolných uzlů a to za využití vlastností sekvencí preorder a postorder. Nechť pozice uzlu a v sekvenci preorder je označena jako pre(a) a pozice uzlu a v sekvenci postorder jako post(a). Dále nechť k je kontextovým uzlem, tedy uzlem, ke kterému je vyhodnocení vztaženo. Pak při porovnání pozic v sekvencích dochází k následujícím situacím: pre(a) < pre(k): uzel a předkem nebo předchůdcem kontextového uzlu Je; pre(a) > pre(k): uzel a potomkem nebo následníkem kontextového uzlu Je; post(a) < post(k): uzel a předchůdcem nebo potomkem kontextového uzlu Je; 8

3.2. SIGNATURY XML STROMU Obrázek 3.1: Strom indexovaný Dietzovým kódovacím schématem post(a) > post(k): uzel a předkem nebo následníkem kontextového uzlu k. Je tedy zřejmé, že současné porovnání pozic v sekvenci preorder a postorder kontextového uzlu k a libovolného uzlu a daného stromu, jednoznačně určí základní osu jazyka XPath na které se uzel a, vzhledem ke kontextovému uzlu k, nachází. Příslušnost uzlu a k osám kontextového uzlu k je dána následujícími vztahy: pre(a) < pre(k) & post(a) < post(k): uzel a je prvkem osy preceding kontextového uzlu k; pre(a) < pre(k) & post(a) > post(k): uzel a je prvkem osy ancestor kontextového uzlu k) pre(a) > pre(k) & post(a) < post(k): uzel a je prvkem osy descendant kontextového uzlu k; pre(a) > pre(k) & post(a) > post(k): uzel a je prvkem osy following kontextového uzlu k. Tyto vlastnosti lze jednoduše zachytit v grafu, viz obrázek 3.2. Na jedné ose je vyneseno pořadí v sekvenci preorder, na druhé pak pořadí v sekvenci postorder. Rovnoběžky s osami, které jsou vedeny přes kontextový uzel, rozdělí graf na sektory uzlů základních os. Pro názornost byly do grafu vyneseny uzly ze stromu z obrázku 3.1. Jako kontextový uzel byl zvolen uzel e. 3.2 Signatury XML stromu Strom XML dokumentu opatřený Dietzovým kódovacím schématem je vhodnou strukturou pro vyhodnocování vztahů dvou uzlů stromu, ale neumožňuje již tak snadno určit všechny 9

3.2. SIGNATURY XML STROMU postorder f Předci Následníci Předchůdci Potomci 0 preorder Obrázek 3.2: Sektory základních os kontextového uzlu e uzly dané osy vzhledem ke kontextovému uzlu. Tuto vlastnost však mají signatury stromu (XML Tree Signatures), které vhodně linearizují stromovou strukturu Dietzova stromu a tím získávají informaci, kde uzly dané osy hledat. Nejedná se o jedinou přínosnou vlastnost sig natur. Signatury se dají použít i k efektivnímu vyhledávání vzorů ve struktuře dokumentu. Touto problematikou se důkladně zabývá [6]. 3.2.1 Standardní signatury Struktura standardní signatury je tvořena polem dvojic (jmenouzlu, postorder), kde jmenouzlu udává název uzlu a postorder je pozice uzlu v sekvenci postorder. Tyto dvojice jsou v poli uspořádány podle pozice uzlu v sekvenci preorder (dále označována jako hodnota preorder). Pro ilustraci struktury signatury je na obrázku 3.3 zachycena signatura k Dietzově stromu z obrázku 3.1. K identifikaci jednotlivých uzlů v signatuře se používá přímo hodnota preorder. a:lo b;3 C!1 d!2 e;7 f!4 g!5 h!6 i 9 j 8 Obrázek 3.3: Struktura signatury Uspořádání uzlů podle hodnoty preorder se jeví jako velice vhodné. Z pozice kontex tového uzlu lze totiž predikovat, kde se nacházejí uzly jednotlivých os. Toto uspořádání způsobuje, že před libovolným uzlem se mohou vyskytovat pouze jeho předci nebo před chůdci a za uzlem se nacházejí nejdříve všechny uzly potomků a za nimi uzly následníků daného uzlu. Základní osy názorně ilustruje obrázek 3.4. K získání všech uzlů dané osy tak stačí procházet signaturu od kontextového uzlu da ným směrem a řídit se pravidly, které jsou uvedeny v následujících odstavcích. 10

3.2. SIGNATURY XML STROMU Předci Potomci k Předchůdci Kontextový uzel Následníci Obrázek 3.4: Poloha os v signatuře 3.2.1.1 Osa ancestor Uzly předků se nacházejí před kontextovým uzlem. Mezi nimi se však mohou vyskytovat uzly předchůdců. Uzly předků a předchůdců se od sebe navzájem odlišují hodnotou postorder, která je u předků vyšší než postorder kontextového uzlu a u předchůdců je nižší než postorder kontextového uzlu. Celá osa ancestor se tedy získá procházením signatury od kontextového uzlu k počátku signatury a vybráním jen těch uzlů splňujících podmínku: post(a) > post(k), kde a je právě testovaný uzel a k je kontextový uzel. Tímto postupem je získána celá osa ancestor ve vhodném uspořádání. 3.2.1.2 Osa preceding Stejně jako u osy ancestor se uzly osy preceding nalézají před kontextovým uzlem. Je třeba projít všechny uzly před kontextovým uzlem a vybrat jen ty, které splňují opačnou pod mínku než u osy ancestor. Pro předchůdce tedy platí post(a) < post(k). Procházení je zapo čato v uzlu, který předchází kontextovému uzlu a končí v uzlu kořenového elementu. Ten již není třeba testovat, protože leží na ose ancestor. 3.2.1.3 Osa descendant Všechny uzly osy descendant jsou umístěny v souvislém bloku, který začíná bezprostředně za kontextovým uzlem. Všechny uzly osy descendatje tak možno získat průchodem signa turou od kontextového uzlu směrem ke konci signatury. Vyberou se všechny uzly, dokud se nenarazí na prvního následníka nebo na konec signatury. Tedy dokud bude platit podmínka post(a) <post(k). 3.2.1 A Osa following Uzly této osy se také nacházejí za kontextovým uzlem a to v souvislé oblasti od posledního potomka do konce signatury. Takže je nejdříve nutné nalézt uzel prvního následníka. Tento uzel lze najít procházením od kontextového uzlu směrem ke konci signatury a testováním uzlů na podmínku post(a) > post(k). První uzel, který tuto podmínku splní, je hledaným uz lem prvního následníka. Dalšími uzly osy following jsou všechny uzly následující za tímto uzlem až do konce signatury. 11

3.2. SIGNATURY XML STROMU Druhou možností, jak tuto osu získat, je procházení signatury od konce signatury po uzel posledního potomka. Do výběru patří všechny uzly splňující podmínku post(a) > post(k). Tento způsob výběru je obecně efektivnější, neboť nedochází k procházení potomků. Získaná osa však má obrácené pořadí uzlů. 3.2.1.5 Osa parent Tato osa obsahuje vždy pouze jediný uzel. Jediná výjimka nastává, pokud je kontextovým uzlem kořenový element. To jest v případě pre(k) = 1. Tento uzel nemá žádného předka a osa zůstává prázdná. V ostatních případech se hledaný uzel odhalí procházením signatury od kontextového uzlu k počátku. První uzel, který vyhovuje podmínce post(a) > post(k), je hledaným uzlem. 3.2.1.6 Osa child Osa child je podmnožinou osy descendant Prohledávaná oblast je ohraničena kontextovým uzlem a uzlem prvního následníka. Prvním uzlem na ose child je uzel bezprostředně za kontextovým uzlem. Musí ale splňovat podmínku post(a) < post(k), jinak nemá kontextový uzel žádné potomky. Zbylé uzly osy chlid vyhovují podmínce post(a) > post(ch), kde post(a) je postorder právě testovaného uzlu a post(ch)je postorder posledního nalezeného uzlu osy child. 3.2.1.7 Osa preceding-sibling Jedná se o podmnožinu osy preceding. V signatuře se uzly této osy vyskytují mezi kontextovým uzlem a uzlem jeho předka. Pro stanovení této osy je třeba nejdříve nalézt předka p kontextového uzlu k. Od uzlu p se postupuje ke kontextovému uzlu k. Používá se přitom metoda získání osy child pro uzel p. Prohledávání končí při dosažení uzlu k. Z vymezené oblasti je tedy vybrán uzel bezprostředně za uzlem p a dále všechny uzly a splňující podmínku post(a) > post(ps), kde ps je poslední získaný uzel osy preceding-sibling. 3.2.1.8 Osa following-sibling U této osy je také potřeba nejdříve nalézt předka p kontextového uzlu k. Poté se postupuje od uzlu k až po prvního následníka uzlu p. Tedy dokud platí post(a) < post(p). Jako první uzel osy following-sibling je vybrán uzel a, pro který platí post(a) > post(k). Pro zbylé uzly osy following-sibling platí post(a) > post(fs), kde fs je poslední získaný uzel osy followingsibling. 3.2.1.9 Osa self Získání této osy je triviální. Jedná se o jednoprvkovou osu obsahující kontextový uzel k. 12

3.2. SIGNATURY XML STROMU 3.2.1.10 Osa ancestor-or-self Nejdříve se vybere kontextový uzel Je. Zbylé uzly této osy se získají jako u osy ancestor. 3.2.1.11 Osa descendant-or-self Počátečním uzlem této osy je kontextový uzel. Za ním následují všechny uzly získané pomocí algoritmu pro osu descendant. 3.2.2 Rozšířené signatury Při procházení standardních signatur je často potřeba vyhledávat rodičovský uzel a vyhledat rozhraní mezi potomky a následníky. Pro zrychlení vyhledání jednotlivých os byly navrženy rozšířené signatury (extended signatures). Struktura rozšířené signatury je tvořena, podobně jako u standardních signatur, polem uzlů uspořádaných podle preorder, avšak uzly signatury jsou již tvořeny čtveřicí (jmenouzlu, postorder, first following, first ancestor). Atributy jmenouzlu a postorder mají stejný význam jako u standardních signatur. Atribut first following je ukazatelem na prvního následníka a first ancestor ukazuje na rodičovský uzel kontextového uzlu. Hodnota first following pro uzel kořenového elementu je definována jako 0. Uzly nemající následníky, mají hodnotu ukazatele na prvního následníka nastavenu na: first ancestor = length + 1, kde proměnná length obsahuje počet uzlů v signatuře. Přidání dvou nových ukazatelů výrazně urychluje určování uzlů jednotlivých os. Toto zrychlení je však vykoupeno větší paměťovou náročností, kdy každý uzel signatury zabírá dvojnásobné místo. Rozšíření signatur o nové ukazatele mění i způsob určování os jazyka XPath. Nové algoritmy jsou popsány v následujících odstavcích. 3.2.2.1 Osa ancestor V případě této osy bude urychlení velice výrazné. Ukazatel first ancestor totiž odkazuje přímo na rodiče uzlu. Jako první uzel osy ancestor je vybrán 1 uzel na pozici preorder = first ancestor. Dále je vždy vybrán uzel, na který odkazuje first ancestor posledně vybraného uzlu. Takto se postupuje, dokud se nenarazí na uzel kořenového elementu, který je vždy posledním uzlem na ose ancestor. 3.2.2.2 Osa preceding Nejdříve jsou vybrány všechny uzly od kontextového uzlu po uzel rodiče kontextového uzlu. Pak jsou postupně vybrány všechny uzly, které se nacházejí mezi sousedními předky kontextového uzlu. 1. Pokud kontextovým uzelem není kořenový element. 13

3.2. SIGNATURY XML STROMU 3.2.2.3 Osa descendant Ukazatel first following shora ohraničuje oblast, ve které se vyskytují všechny uzly potomků. Získání osy descendant tedy spočívá ve vybrání všech uzlů od kontextového uzlu k prvnímu následníkovi. Uzel následníka a kontextový uzel se do výběru samozřejmě nezahrnují. 3.2.2.4 Osa following Pokud kontextový uzel má nějaké následníky, tedy platí first following < length, pak je jako první vybrán uzel, na který odkazuje first following. Poté jsou vybrány všechny následující uzly až do konce signatury. 3.2.2.5 Osa parent Je-li kontextový uzel zároveň i kořenovým elementem, je tato osa prázdná. Jinak obsahuje jediný uzel a to uzel, na který odkazuje first ancestor. 3.2.2.6 Osa child Osa child ke kontextovému uzlu je prázdná, pokud first following odkazuje na uzel následující ihned za kontextovým uzlem. Jinak je prvním uzlem osy child uzel bezprostředně za kontextovým uzlem. Na další uzel osy child odkazuje vždy ukazatel first following posledně vybraného uzlu. Posledním uzlem této osy je uzel a, pro který platí ffoll(a) = ffoll(k), ffoll(a) je označení pro ukazatel first following uzlu a. 3.2.2.7 Osa preceding-sibling Tato osa je získána procházením oblasti od kontextového uzlu až k rodiči kontextového uzlu. Vybrány jsou jen uzly, pro které platí fanc(a) = fanc(k). Kde fanc(a) je rodič uzlu a. V některých případech je efektivnější získávání této osy v reverzním směru. Prvním uzlem této osy je uzel bezprostředně následující za uzlem rodiče kontextového uzlu. Na další uzel vždy odkazuje ukazatel first following posledně vybraného uzlu dokud ffoll(a) < k. 3.2.2.8 Osa following-sibling Nejdříve se získají rodiče kontextového uzlu, protože jeho ukazatel first following uzavírá oblast, kde se mohou uzly osy following-sibling vyskytovat. Prvním uzlem je uzel, na který odkazuje ukazatel first following kontextového uzlu. Na další uzel vždy odkazuje ukazatel first following posledně vybraného uzlu dokud ffoll(a) < ffoll(fanc(v)). 14

3.3. EDITACE SIGNATUR 3.2.2.9 Osy self, ancestor-or-self a descendant-or-self U osy self nedochází k žádné změně. Osy ancestor-or-self a descendant-or-self jsou osy získané pomocí postupu pro osu ancestor respektive descendant, na jejichž počátek je přidán kontextový uzel. 3.3 Editace signatur XML databáze nejsou jen statické systémy, které zodpovídají dotazy nad množinou dokumentů, ale většina z nich také poskytuje funkce pro úpravu dokumentů. Umožňují do jednotlivých dokumentů vkládat uzly, či je z nich korektně odebírat. Nebylo by vhodné při každé takové změně, znovu generovat indexační strukturu pro daný dokument, proto je vhodné, aby i indexační metoda byla schopna editace. Signatury XML stromu jsou schopny přidávat a odebírat jednotlivé uzly XML dokumentu. V Následujících odstavcích jsou popisovány způsoby vkládání a odebírání uzlů a změny, které v signatuře nastanou. Pro editaci signatur jsou definovány tři základní operace. Jedná se o vložení nového uzlu před kontextový uzel, dále o vložení nového uzlu jako posledního přímého potomka kontextového uzlu a nakonec o odebrání kontextového uzlu. Aby nedošlo k narušení stromové struktury dokumentu, není dovoleno vkládat nový uzel před uzel kořenového elementu. Při odstraňování uzlu se odstraní i všechny uzly jeho potomků. 3.3.1 Standardní signatury Při editaci standardních signatur je potřeba opravit preorder a postorder některých uzlů. Pořadí preorder se mění odsunutím bloku uzlů. Změna postorder je řešena přičtením nebo odečtením celého čísla vyjadřujícího počet přidaných nebo odebraných uzlů ke všem měněným uzlům. 3.3.1.1 Přidání přímého potomka Přidání nového uzlu x, jako posledního přímého potomka kontextového uzlu Je, se děje následujícím způsobem. Nejdříve je potřeba určit pozici nového uzlu v signatuře, tedy pre(x). Pozice nového uzlu bude odpovídat poloze prvního následníka kontextového uzlu ve staré signatuře. První následník kontextového uzlu se nalezne při procházení signatury od kontextového uzlu směrem ke konci signatury. První uzel a, který splňuje post(a) > post(k), je hledaným prvním následníkem. Jako hodnota postorder nového uzlu bude použita hodnota post(k). Na pozici prvního následníka se vloží nový uzel (post(k),x), přičemž uzel na této pozici a uzly za ním následující jsou odsunuty o jednu pozici vpravo. Předchozí úpravy však nevytvoří správnou signaturu. Aby byla signatura korektní a odpovídala provedené operaci, je potřeba opravit postorder všech předků a následníků nového uzlu. K postorder těchto uzlů musí být přičtena hodnota 1. V situaci kdy kontextový uzel nemá následníky, bude nový uzel přidán na konec signatury. Jako hodnota postorder nového uzlu bude také použita hodnota post(k). Po přidání 15