}w!"#$%&'()+,-./012345<ya

Podobné dokumenty
Rozhraní SAX, SAX vs. SAX2. Jaroslav Ciml

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

API pro práci s XML. Jirka Kosek. Poslední modifikace: $Date: 2014/12/17 17:15:28 $ Copyright Jiří Kosek

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

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

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

MBI - technologická realizace modelu

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

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

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

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

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

PHP framework Nette. Kapitola Úvod. 1.2 Architektura Nette

Tvorba informačních systémů

Semestrální práce 2 znakový strom

Michal Krátký, Miroslav Beneš

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

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

NSWI096 - INTERNET JavaScript

Semináˇr Java X J2EE Semináˇr Java X p.1/23

Požadavky pro výběrová řízení TerraBus ESB/G2x

Jemný úvod do spracovania XML

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

Sdílení dat mezi podprogramy

RESTful API TAMZ 1. Cvičení 11

Tvorba informačních systémů

Alena Malovaná, MAL305

Národní elektronický nástroj. Import profilu zadavatele do NEN

PRG036 Technologie XML

2015 GEOVAP, spol. s r. o. Všechna práva vyhrazena.

Další XML technologie

typová konverze typová inference

XML terminologie a charakteristiky. Roman Malo

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

Zpráva o zhotoveném plnění

Oracle XML DB. Tomáš Nykodým

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

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.

1. Webový server, instalace PHP a MySQL 13

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.

Komprese a dotazování nad XML dokumenty

1. Webové služby. K čemu slouží? 2. RPC Web Service. 3. SOA Web Service. 4. RESTful Web services

1 Webový server, instalace PHP a MySQL 13

Úvod do programovacích jazyků (Java)

UJO Framework. revoluční architektura beans. verze

Reranking založený na metadatech

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

Algoritmizace prostorových úloh

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

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

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

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

Programátorská příručka

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Komponentový návrh SW

Systém souborů (file system, FS)

Příklad buňka tabulky

ČESKÉ VYSOKÉ UČENÍ TECHNIKÉ Fakulta elektrotechnická. Microsoft Sharepoint 2007 Workflows Průmyslové informační systémy

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

UNIVERZITA PARDUBICE Fakulta elektrotechniky a informatiky Katedra softwarových technologií

(Enterprise) JavaBeans. Lekce 7

Základy datových vazeb Silverlightu. Funkce Silverlightu 2. Podpora jazyků a technologie.net Framework

TÉMATICKÝ OKRUH TZD, DIS a TIS

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

Student s Life. Návrhová dokumentace (Design) Lukáš Barák, Jakub Ječmínek, Jaroslav Brchel, Jiří Zmeškal

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Implementace systémů HIPS: historie a současnost. Martin Dráb

UNIVERZITA PARDUBICE. Fakulta elektrotechniky a informatiky. Programový generátor trendů Václav Bárta

1/1 ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE PROVOZNĚ EKONOMICKÁ FAKULTA PŘIJÍMACÍ ŘÍZENÍ 2017/2018

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

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

Architektury informačních systémů

Úvod do Web Services

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

Specifikace softwarového díla & Časový plán implementace. pro. MEF Editor

Elektronická podpora výuky předmětu Komprese dat

POPIS TECHNICKÉHO ŘEŠENÍ INFORMAČNÍHO SYSTÉMU PRO SBĚR DAT V PROJEKTU SLEDOVÁNÍ DEKUBITŮ JAKO INDIKÁTORU KVALITY OŠETŘOVATELSKÉ PÉČE NA NÁRODNÍ ÚROVNI

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

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Experimentální systém pro WEB IR

Artlingua Translation API

Analýza dat a modelování. Speciální struktury

Nastavení složek systému Atollon Server Platform

Vyřešené teoretické otázky do OOP ( )

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

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Popis B2B rozhraní pro elektronickou neschopenku

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

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

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

Microsoft Office 2003 Souhrnný technický dokument white paper

Synchronizace CRM ESO9 a MS Exchange

Software602 Form Designer

7.5 Diagram tříd pokročilé techniky

Tvorba informačních systémů

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

1. Dědičnost a polymorfismus

PRG036 Technologie XML

Transkript:

MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY }w!"#$%&'()+,-./012345<ya Aplikační rozhraní pro práci s XML v jazyce Java BAKALÁŘSKÁ PRÁCE Zdeněk Zikán Brno, jaro 2006

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 ii

Poděkování Rád bych poděkoval svému vedoucímu za dobré vedení této práce a užitečné rady, své rodině a přátelům za podporu a své přítelkyni za dostatek trpělivosti se mnou. iii

Klíčová slova XML, indexování XML dokumentů, Java, API, aplikační rozhraní, XIQE, XML databáze, JAXP, XML:DB iv

Úvod XML je jazyk, který je v současnosti velice populární pro svou flexibilitu a používaný v nejrůznějších oblastech. Jedná se o jazyk pro sloužící pro značkování dat a je vhodný hlavně tehdy, když mají data hierarchickou strukturu. Pro potřeby ověření různých metod indexování XML dat a zjištění jejich efektivity vznikl projekt XIQE (XML Indexing and Querying Engine). Více informací o XIQE je možné nalézt v diplomové práci jeho autorky [1]. Účelem této práce je umožnit použití XIQE nejen jako experimentálního systému, ale také jako XML databáze a navrhnout tedy rozhraní pro použití systému z vnějšku, tak, aby uživatel mohl systém využívat bez znalosti jeho fungování a architektury. v

Obsah 1 Existující aplikační rozhraní pro práci s XML v jazyce Java............. 1 1.1 Java API for XML Processing (JAXP)........................ 1 1.1.1 javax.xml*................................... 1 1.1.1.1 javax.xml.............................. 1 1.1.1.2 javax.xml.datatypes........................ 1 1.1.1.3 javax.xml.namespaces....................... 2 1.1.1.4 javax.xml.parsers......................... 2 1.1.1.5 javax.xml.transform........................ 2 1.1.1.6 javax.xml.transform.dom..................... 3 1.1.1.7 javax.xml.transform.sax...................... 3 1.1.1.8 javax.xml.transform.stream.................... 4 1.1.1.9 javax.xml.validation........................ 4 1.1.1.10 javax.xml.xpath.......................... 5 1.1.2 W3C DOM (org.w3c.dom*)......................... 6 1.1.2.1 org.w3c.dom............................ 6 1.1.2.2 org.w3c.dom.bootstrap...................... 9 1.1.2.3 org.w3c.dom.events........................ 9 1.1.2.4 org.w3c.dom.ls........................... 10 1.1.3 SAX (org.xml.sax*).............................. 11 1.1.3.1 org.xml.sax............................. 11 1.1.3.2 org.xml.sax.helpers........................ 12 1.1.3.3 org.xml.sax.ext........................... 13 1.2 XML:DB API...................................... 14 1.2.1 org.xmldb.api................................. 14 1.2.2 org.xmldb.api.base.............................. 14 1.2.3 org.xmldb.api.modules........................... 15 1.3 Dom4j.......................................... 16 1.4 JDOM.......................................... 16 1.5 Xerces Native Interface................................ 16 1.6 StAX.......................................... 17 1.7 XMLPULL....................................... 17 1.8 JAXB (Java Architecture for XML Binding).................... 17 1.9 Castor XML...................................... 18 2 Požadavky uživatele.................................... 19 3 Současný stav XIQE a návrh změn............................ 20 3.1 XML:DB API...................................... 20 3.2 JAXP.......................................... 21 3.3 Rozhraní org.xiqe................................... 22 4 Závěr............................................. 24 A Obsah přiloženého CD.................................. 25 vi

Literatura............................................. 26 Rejstřík.............................................. 27 vii

Kapitola 1 Existující aplikační rozhraní pro práci s XML v jazyce Java 1.1 Java API for XML Processing (JAXP) Java API for XML Processing je sada několika API vybraných jako základní a nejdůležitějších API pro zpracování XML v Javě. Od verze Javy 1.5 je JAXP 1.3 součástí Java Core API. Z tohoto důvodu zde uvádím přehled a stručný popis tříd, které jsou součástí JAXP. 1.1.1 javax.xml* 1.1.1.1 javax.xml Balík javax.xml obsahuje jedinou třídu a to XMLConstants, která definuje pouze konstanty (statické finální atributy typu String), často používané v XML dokumentech, například URI různých často používaných jmenných prostorů (XMLSchema, RelaxNG, XMLNS) či prefixy definované specifikací XML. 1.1.1.2 javax.xml.datatypes Poskytuje mapování typů vyjadřujících datum v Javě a XML. Obsahuje třídy: DatatypeConstants obsahuje konstanty používané v operacích s datem. DatatypeConstants.Field typově bezpečná výčtová třída reprezentující šest polí třídy Duration (viz dále). DatatypeFactory tovární třída umožnující vytvářet instance tříd Duration a XMLGregorianCalendar (viz dále). Duration třída reprezentující časové intervaly podle W3C XML Schema 1.0 a implementující různé operace nad nimi (např. porovnávání, sčítání). XMLGregorianCalendar třída reprezentující kalendář; umožňuje nastavit datum a čas a z nich získat bud XML reprezentaci, nebo instanci třídy java.util. GregorianCalendar, umožňující pokročilejší práci s datem a časem. Výjimku DatatypeConfigurationException. 1

1.1. JAVA API FOR XML PROCESSING (JAXP) 1.1.1.3 javax.xml.namespaces Umožňuje práci s jmennými prostory XML. Obsahuje rozhraní NamespaceContext sloužící k získání prefixu (resp. prefixů) daného URI nebo URI daného prefixu a třídu QName reprezentující tzv. kvalifikované jméno elementu, tj. identifikátor, skládající se ze jména, prefixu a URI. 1.1.1.4 javax.xml.parsers Poskytuje třídy umožňující analýzu (parsing) XML dokumentů. DocumentBuilder slouží k převedení řetězcové reprezentace XML dokumentu na DOM reprezentaci (instanci třídy org.w3c.dom.document). DocumentBuilderFactory tovární třída pro vytváření parserů (instancí třídy DocumentBuilder) s různým nastavením lze určit, jestli má být parser validující, má brát v potaz komentáře, jmenné prostory, má ignorovat ignorovatelná bílá místa apod. SAXParser abstraktní třída definující API, které obaluje třídy implementující org.xml.sax.xmlreader. SAXParserFactory abstraktní třída definující API pro získání pro konfiguraci a vytvoření objektu typu SAXParser. Třídu výjimky ParserConfigurationException a chybovou třídu Factory- ConfigurationError. 1.1.1.5 javax.xml.transform Definuje obecná API pro zpracování transformačních instrukcí a transformaci. Obsahuje rozhraní: ErrorListener umožňuje vytvořit vlastní ošetření chyb při transformaci. Instanci třídy implementující toto rozhraní je možné zaregistrovat pomocí metody seterrorlistener třídy Transformer. Result objekt implementující toto rozhraní obsahuje informace potřebné pro vytvoření stromu výsledku transformace. Toto rozhraní je implementováno (v Java Core API) třídami DOMResult, SAXResult a StreamResult. Source objekt implementující toto rozhraní obsahuje informace potřebné pro jeho použití pro vstup (XML soubor nebo transformační instrukce). Toto rozhraní je implementováno (v Java Core API) třídami DOMSource, SAXSource a Stream- Source. 2

1.1. JAVA API FOR XML PROCESSING (JAXP) SourceLocator slouží především pro účely označení místa (v XML souboru nebo transformačních instrukcích), kde došlo k chybě. Toto rozhraní je implementováno (v Java Core API) třídou DOMLocator. Templates objekt implementující toto rozhraní je běhovou (runtime) reprezentací zpracovaných transformačních instrukcí. Pomocí metody newtransformer se pak vytvoří objekt Transformer (viz dále). URIResolver objekt implementující toto rozhraní může být zavolán transformačním procesorem k získání objektu Source odpovídající danému URI (použitém v document(), xsl:import nebo xsl:include). Třídy: OutputKeys poskytuje řetězcové konstanty pro nastavení výstupních vlastností objektu Transformer, nebo získání výstupních vlastností objektu Transformer nebo Template. Transformer abstraktní třída. Instance její podtřídy provádí transformaci zdrojového stromu na cílový. Transformer může být použit opakovaně a jeho nastavení se mezi jednotlivými transformacemi zachovává (pokud ho nepřenastavíme). Objekt typu Transformer by se neměl používat ve více souběžně spuštěných vláknech najednou. Různé instance typu Transformer však ve více souběžných vláknech použity být mohou. TransformerFactory tovární třída pro vytváření objektů typu Transformer a Templates. Výjimky TransformerConfigurationException a TransformerException a chybovou třídu TransformerFactoryConfigurationError. 1.1.1.6 javax.xml.transform.dom Implementuje API specifické pro DOM. Obsahuje rozhraní DOMLocator, třídy DOMResult a DOMSource, jejichž funkce je zřejmá (viz jim příslušná rozhraní SourceLocator, Result a Source v balíku javax.xml.transform). 1.1.1.7 javax.xml.transform.sax Implementuje API specifické pro SAX2. Obsahuje rozhraní: TemplatesHandler umožňuje vytvoření objektů typu Templates z událostí SAX2. Je potomkem org.xml.sax.contenthandler a může být tedy použit na jeho místě. Poté, co přijdou všechny SAX události, objekt Templates může být vytvořen pomocí metody gettemplates(). 3

1.1. JAVA API FOR XML PROCESSING (JAXP) TransformerHandler rozšiřuje rozhraní org.xml.sax.contenthandler, org.xml.sax.dtdhandler a org.xml.sax.ext.lexicalhandler. Třídy: SAXTransformerFactory abstraktní třída rozšiřující TransformerFactory a poskytující tovární metody specifické pro SAX. Umí vytvářet objekty TransformerHandler a TemplatesHandler (obojí potomky ContentHandler) a XMLFilter. SAXResult verze Result specifická pro SAX. Pokud je mu předán Content- Handler, je nastaven pro příjem SAX2 událostí z transformace. SAXSource verze Source specifická pro SAX. Umožňuje nastavit vstupní zdroj InputSource a XMLReader, který jej bude číst. (Obojí viz org.xml.sax.) 1.1.1.8 javax.xml.transform.stream Implementuje API specifické pro streamy a URI. Jedná se o třídy: StreamResult reprezentuje výsledek transformace (XML, čistý text, HTML, nebo jiný značkovaný text). StreamSource reprezentuje zdroj transformace. 1.1.1.9 javax.xml.validation Poskytuje API pro validaci XML dokumentů, tedy ověření toho, že daný XML dokument je instancí daného XML schématu. Toto API umožňuje odděluje validaci XML dokumentu od jeho parsování, díky čemuž je možné použít různá schémata pro validaci (DTD, W3C XML Schema, RelaxNG) a jednoduše spolu za běhu párovat XML dokumenty a schémata. Třídy: Schema reprezentuje schéma, tedy gramatiku, sadu omezení, na která je XML dokument testován. Třída je neměnitelná a vláknově bezpečná. Instance se vytváří obvykle pomocí SchemaFactory, odvozené podtřídy však mohou používat i konstruktor (protected). SchemaFactory tovární třída pro vytváření Schema objektů. Jedná se o kompilátor schémat, který přečte externí reprezentaci schématu a převede ji do podoby použitelné pro validaci. Po načtení schématu je pomocí URI jeho jmenného prostoru určeno, o jaký se jedná jazyk. SchemaFactory není vláknově bezpečná a reentrantní, tzn. nesmí být použita z více než jednoho vlákna najednou a pokud běží metoda newschema, nesmí být znovu rekurzivně volána. 4

1.1. JAVA API FOR XML PROCESSING (JAXP) SchemaFactoryLoader tovární třída pro vytváření objektů SchemaFactory. Tato třída je určená pro použití validačními API. TypeInfoProvider poskytuje přístup k informacím o typech elementů a atributů tak, jak je zjišt uje ValidatorHandler. Implementaci získáme pomocí ValidatorHandler.getTypeInfoProvider(). Metody getelementtype- Info a getattributetypeinfo pak vrací objekt implementující org.w3c. dom.typeinfo, který nese informace o typu. Validator procesor pro porovnání XML dokumentu s daným XML schématem. Třída není vláknově bezpečná a reentrantní, tzn. nesmí být použita z více než jednoho vlákna najednou a pokud běží metoda validate, nesmí být znovu rekurzivně volána. Metoda validate sice má parametry typu Source a Result, ale přijímá pouze SAXSource a DOMSource resp. SAXResult a DOMResult. ValidatorHandler validátor pro SAX proudy. Třída implementuje rozhraní org.xml.sax.contenthandler, není vláknově bezpečná ani reentrantní. ValidatorHandler kontroluje, jestli SAX události odpovídají omezením popsaným v Schema a případně modifikuje SAX události (např. přidává implicitní hodnoty, pokud nejsou uvedeny). 1.1.1.10 javax.xml.xpath Poskytuje API pro vyhodnocování XPath dotazů, které je nezávislé na objektovém modelu dokumentu. Rozhraní: XPath poskytuje přístup k prostředí vyhodnocování XPath dotazů umožňuje zjišt ovat a nastavovat třídu pro zpracování proměnných a funkcí (XPathVariableResolver, XPathFunctionResolver), kompilovat a provádět XPath dotazy. XPathExpression reprezentuje zkompilovaný XPath dotaz, který tak lze vícekrát provádět na různých vstupních datech. XPathFunction reprezentuje XPath funkci. Obsahuje jedinou metodu Object evaluate(list args). XPathFunctionResolver poskytuje přístup k množině uživatelem definovaných proměnných metoda resolvefunction je volána kvalifikovaným jménem funkce a její aritou a vrací XPathFunction. XPathFunctionResolver není třeba pro vestavěné funkce XPath a nelze jej použít na jejich přepsání. Lze jej použít pouze na funkce v jiném jmenném prostoru. 5

1.1. JAVA API FOR XML PROCESSING (JAXP) XPathVariableResolver poskytuje přístup k množině uživatelem definovaných proměnných metoda resolvevariable převede kvalifikované jméno proměnné na její hodnotu (tedy Object jí odpovídající). Třídy: XPathConstants nabízí konstanty reprezentující datové typy XPath 1.0 a URI pro objektový model DOM. XPathFactory tovární třída pro objekty XPath. Výjimky XPathException, XPathExpressionException, XPathFactoryConfigurationException, XPathFunctionException. 1.1.2 W3C DOM (org.w3c.dom*) W3C DOM je objektový model dokumentu budovaný jako strom. Stromové modely dokumentu jsou vhodné pro reprezentaci XML dokumentu v paměti a snadnou práci s ním. Jejich nevýhoda je právě nutnost reprezentovat dokument (resp. uzel) celý v paměti a tedy vyšší pamět ová režie, což je činí nevhodnými pro zpracování velkých XML dokumentů. Obrázek 1.1: Schéma použití DOM v JAXP 1.1.2.1 org.w3c.dom Poskytuje rozhraní na práci s DOM (Document Object Model). Toto API umožňuje číst a upravovat obsah a strukturu dokumentu. Obsahuje rozhraní: 6

1.1. JAVA API FOR XML PROCESSING (JAXP) Node je hlavním rozhraním tohoto balíku a reprezentuje uzel ve stromu XML dokumentu. Je možné pracovat se strukturou podstromu (např. odebírat, přidávat a zjišt ovat informace o dceřinný a sourozeneckých uzlech, zjišt ovat informace o rodičích). Potomky tohoto rozhraní jsou Attr, CDATASection, CharacterData, Comment, Document, DocumentFragment, DocumentType, Element, Entity, EntityReference, Notation, ProcessingInstruction a Text. Některé z nich se liší svými možnostmi, např. Text neumožňuje mít dceřinné uzly (přestože rozhraní Node má metodu appendchild) a přidání takového uzlu vyvolá výjimku. Informace o uzlu je možné získat i bez jeho přetypování a to pomocí getnodetype, getnodename a getnodevalue. Attr reprezentuje atribut XML elementu. Přestože implementuje rozhraní Node, atributy nejsou potomkem žádného elementu a proto nejsou považovány za součást DOM stromu dokumentu. Pokud atribut není v dokumentu uveden, ale má schématem nastavenou implicitní hodnotu, bude vytvořen s příznakem specified nastaveným na false. CharacterData poskytuje metody pro přístup k řetězcovým datům v DOM. CDATASection je potomkem CharacterData a reprezentuje CDATA sekci, tj. sekci, která obsahuje znaky, které by jinak byly považovány za značkování (tj. např. znaky <, >, &). Comment je potomkem CharacterData a reprezentuje obsah komentáře bez jeho okrajů <!-- a -->. Text je potomkem CharacterData a reprezentuje textový obsah elementu nebo atributu. Po parsování by měl odpovídat jeden objekt Text jednomu textovému bloku bez značkování. Uživatel pak může vytvářet další, sousední Text uzly, aniž by ovlivnil značkování. Toto oddělení více částí textu ale nelze reprezentovat v XML, takže toto rozdělení nebude zachováno mezi jednotlivými instancemi DOM. Document reprezentuje celý XML dokument, tedy kořenový element. Jelikož elementy, textové uzly, komentáře atd. nemohou existovat vně dokumentu, rozhraní Document obsahuje tovární metody na jejich tvorbu. DocumentFragment slouží jako odlehčená verze Document pro případy, kdy by implementace Document byla příliš náročná a těžkopádná, např. pokud je třeba dokument rozdělit na více částí a ty pak opět spojit v jeden dokument. Pro to má navíc tu výhodu, že DocumentFragment nemusí splňovat všechny podmínky pro dobře utvořený XML dokument (např. může obsahovat pouze textový uzel a žádný kořenový element). DocumentType každý Document má atribut doctype typu DocumentType. Ten reprezentuje typ dokumentu, tzn. jméno DTD, jeho veřejný a systémový identifikátor a sadu entit, které DTD definuje. 7

Element reprezentuje XML element. 1.1. JAVA API FOR XML PROCESSING (JAXP) Entity reprezentuje XML entitu (at už parsovanou nebo neparsovanou). Nemá žádného rodiče a její potomek (pokud nějakého má) je obsah, kterým se má nahradit EntityReference ve stromu dokumentu. EntityReference reprezentuje odkaz na XML entitu ve stromu dokumentu. Notation reprezentuje notaci použitou v DTD (poskytuje přístup pouze pro čtení, neumožňuje notaci měnit). ProcessingInstruction reprezentuje procesní instrukci. DOMConfiguration reprezentuje konfiguraci dokumentu a tabulku rozpoznaných parametrů. Konfigurovat lze např. to, zda se dokument bude validovat oproti schématu, jaké schéma bude použito, jestli mají být ve stromu dokumentu i komentáře, jak se má zacházet s bílým místem, odkazy na entity apod. DOMError popisuje vzniklé chyby (řetězec, popisující chybu, typ chyby, závažnost, umístění a data, kterých se chyba týká). DOMErrorHandler slouží pro ošetření vzniklých chyb obsahuje jedinou metodu boolean handleerror(domerror). DOMImplementation poskytuje metody pro provádění operací nezávislých na konkrétní instanci DOM stromu. Umožňuje vytvořit dokument požadovaného typu a zjišt ovat a využívat vlastnosti konkrétní implementace DOM. DOMImplementationList reprezentuje uspořádanou kolekci implementací DOM (DOMImplementation). DOMImplementationSource umožňuje poskytovat jednu nebo více implementací DOM na základě vlastností a verzí, které uživatel od implementace požaduje. DOMLocator popisuje umístění v dokumentu (použitelné např. pro identifikaci místa, kde vznikla chyba). DOMStringList reprezentuje uspořádanou kolekci hodnot DOMString (reprezentovaných jako String). NamedNodeMap reprezentuje kolekci uzlů, ke kterým je možné přistupovat podle jména. (Uzly jsou uspořádány a může k nim tak být přistupováno i podle indexu, ale toto uspořádání není definováno, slouží pouze k umožnění přístupu ke kolekci i jako k výčtu.) NameList reprezentuje uspořádanou kolekci dvojic jméno a jmenný prostor (jmenný prostor může být i null). 8

1.1. JAVA API FOR XML PROCESSING (JAXP) NodeList reprezentuje uspořádanou kolekci uzlů (Node). TypeInfo reprezentuje typ (tj. dvojici jméno typu a URI jmenného prostoru) odkazovaný uzlem typu Element nebo Attr specifikovaný ve schématu přiřazeném k dokumentu. UserDataHandler s každým uzlem (Node) je možné asociovat dvojice klíč a libovolný objekt uživatelská data (pomocí metody setuserdata). Ke každé dvojici je možné přiřadit UserDataHandler, který je zavolán, když je uzel (ke kterému jsou data přiřazena) klonován, importován, adoptován (tj. přesouván z jednoho dokumentu do druhého), přejmenováván nebo mazán. Dále obsahuje výjimku DOMException vyhazovanou v případě, že nějakou operaci nelze provést. 1.1.2.2 org.w3c.dom.bootstrap Obsahuje třídu DOMImplementationRegistry tovární třídu pro získávání implementací DOMImplementation. Implementace DOM můžou tuto třídu upravit, aby dodržely nové bezpečnostní standardy nebo k dodatečnému upravení chování některých tříd DOM- ImplementationSource. 1.1.2.3 org.w3c.dom.events Balík definuje způsob zpracování událostí podle DOM2 Events Specification. Obsahuje výjimku EventException a rozhraní: Event reprezentuje událost a poskytuje informace o kontextu události objektu, který události ošetřuje. Potomky tohoto rozhraní jsou: LSLoadEvent a LSProgressEvent z balíku org.w3c.dom.ls a dále: UIEvent poskytuje navíc kontextové informace specifické pro události vyvolané uživatelským rozhraním. MouseEvent je potomkem UIEvent a poskytuje navíc kontextové informace specifické pro události vyvolané myší. MutationEvent poskytuje navíc kontextové informace specifické pro události vyvolané přidáním, změnou nebo odebráním atributu. EventTarget toto rozhraní by měly implementovat všechny uzly (Node) v DOM implementaci, která podporuje DOM Event Model. (A tedy je možné získat objekt tohoto typu přetypováním jakéhokoliv objektu Node.) Toto rozhraní umožňuje zaregistrovat EventListener a pomocí něj vyřizovat události zasílané objektu typu EventTarget. 9

1.1. JAVA API FOR XML PROCESSING (JAXP) EventListener hlavní způsob zpracování událostí. Uživatel implementuje EventListener a zaregistruje ho na uzlu (který implementuje EventTarget). DocumentEvent slouží k vytváření událostí typů podporovaných implementací DOM. Používá se tehdy, když je nevhodné nebo zbytečné, aby uživatel vytvářel událost sám. Pokud nedostačují události z implementace DOM, uživatel může vytvořit vlastní. 1.1.2.4 org.w3c.dom.ls Balík obsahuje rozhraní umožňující načtení dat ze vstupního proudu a vytvoření DOM stromu, resp. uložení DOM stromu do výstupního proudu. DOMImplementationLS obsahuje tovární metody pro vytváření objektů LSInput, LSOutput, LSParser. LSInput reprezentuje vstupní zdroj dat. Umožňuje aplikaci zapouzdřit informace o vstupních datech (veřejný a systémový identifikátor, URI, znakový a/nebo bytový proud) do jediného objektu. LSOutput reprezentuje informace o výstupu. Umožňuje aplikaci zapouzdřit informace o výstupních datech (systémový identifikátor, URI, znakový a/nebo bytový proud) do jediného objektu. LSParser implementující objekt je schopen vytvořit nebo rozšířit existující DOM strom ze zdroje LSInput. LSSerializer poskytuje API pro serializaci, tedy převod DOM stromu do XML dat (LSOutput). Serializace nijak neovlivňuje původní DOM strom. LSParserFilter pokud je objekt tohoto typu zaregistrován u parseru (LSParser), jsou jeho metody volány během tvorby stromu a je možné tak upravovat nebo odebírat uzly, případně i předčasně ukončit tvorbu stromu. LSSerializerFilter pokud je objekt tohoto typu zaregistrován u objektu LSSerializer, jsou jeho metody volány během serializace určit, které uzly budou serializovány. LSLoadEvent reprezentuje událost značící dokončení načítání dokumentu. Je potomkem výše zmiňované org.w3c.dom.events.event. LSProgressEvent reprezentuje událost značící průběh načítání dokumentu, která upozorňuje aplikaci na pokrok v průběhu načítání dokumentu. LSResourceResolver slouží pro přesměrování odkazů na externí zdroje, např. při tvorbě XML dokumentu z databáze. 10

1.1. JAVA API FOR XML PROCESSING (JAXP) 1.1.3 SAX (org.xml.sax*) SAX [10] (Simple API for XML) je API sloužící k vytváření reprezentace XML dokumentu na základě událostí zasílaných XML parserem. Výhodou SAXu (a obecně API založených na událostech) oproti DOMu je hlavně to, že není nutné uchovávat celý dokument v paměti, což je činí vhodnými pro zpracování i velkých XML dokumentů. Pro představu uvádím příklad zpracování XML dokumentu SAX parserem. Následující dokument: <?xml version="1.0"?> <korenovy_element> <jiny_element>nějaký text</jiny_element> </korenovy_element> by měl vygenerovat následující posloupnost událostí: start document start element: korenovy_element start element: jiny_element characters: nějaký text end element: jiny_element end element: korenovy_element end document Obrázek 1.2: Schéma použití SAX v JAXP 1.1.3.1 org.xml.sax Poskytuje základní SAX API. Obsahuje rozhraní: Attributes reprezentuje seznam XML atributů, ke kterým je možno přistupovat pomocí indexu, jména kvalifikovaného jmenným prostorem nebo jména kvalifikovaného prefixem. 11

1.1. JAVA API FOR XML PROCESSING (JAXP) ContentHandler hlavní rozhraní, které většina SAX aplikací implementuje. Dostává informace o logickém obsahu dokumentu. Aplikace, která potřebuje být informována o SAX událostech implementuje ContentHandler a zaregistruje ho u SAX parseru (metoda setcontenthandler). DTDHandler dostává informace o základních událostech souvisejících s DTD notacích a neparsovaných entitách. ErrorHandler pokud aplikace potřebuje sama ošetřovat chyby, implementuje ErrorHandler a zaregistruje ho u XMLReader (seterrorhandler). Hlášení chyb tímto způsobem má mít přednost před vyhazováním výjimek. EntityResolver pokud chce aplikace implementovat vlastní zacházení se vstupními zdroji, implementuje EntityResolver a zaregistruje ho u XMLReader (setentityresolver). EntityResolver pak umožňuje převádět veřejné a systémové identifikátory na zdroje InputSource. Toho lze využít např. pokud XML dokument generujeme z databáze nebo jiných specializovaných vstupních zdrojů nebo naše aplikace používá URI místo URL. XMLReader základní rozhraní pro implementaci SAX2. Umožňuje nastavovat vlastnosti, registrovat objekty na zpracování obsahu, DTD, chyb a spustit analýzu (parsing) dokumentu. XMLFilter potomek XMLReader, který se chová stejně jako XMLReader, ale umožňuje zpracovávat události z jiných XMLReaderů a řetězit tak zpracování. Locator slouží k zjištění místa dokumentu, kde došlo k události. Objekt implementující toto rozhraní se předá pomocí metody setdocumentlocator objektu ContentHandler. Třída: InputSource zapouzdřuje informace o vstupním zdroji. Dále balík obsahuje výjimku SAXException a její potomky SAXNotRecognizedException (nerozeznaný identifikátor), SAXNotSupportedException (nepodporovaná operace), SAXParseException (chyba během parsování nebo varování). 1.1.3.2 org.xml.sax.helpers Obsahuje pomocné třídy jako např. základní implementace některých rozhraní. AttributesImpl základní implementace rozhraní Attributes, která obsahuje navíc metody pro úpravu, aby list mohl být upravován a znovu používán. 12

1.1. JAVA API FOR XML PROCESSING (JAXP) DefaultHandler základní třída pro SAX2 aplikace, která poskytuje implementaci rozhraní EntityResolver, DTDHandler, ContentHandler, ErrorHandler. LocatorImpl poskytuje běžnou implementaci rozhraní Locator. XMLFilterImpl základní třída pro odvozování XML filtrů. Nedělá nic, pouze předává požadavky XMLReaderu a události jejím příslušným zpracovatelům a podtřídy můžou podle potřeby jednotlivé metody překrývat. Adaptéry ParserAdapter (obaluje starší rozhraní Parser ze SAX1 a reprezentuje ho jako XMLReader) a XMLReaderAdapter (dělá opak). XMLReaderFactory tovární třída na vytváření objektů XMLReader. NamespaceSupport zapouzdřuje logiku pro práci s jmennými prostory XML. 1.1.3.3 org.xml.sax.ext Obsahuje rozšíření rozhraní SAX2, které SAX2 ovladače nemusí nutně podporovat. Jsou nezávislá na jádru SAX2. Obsahuje rozhraní: Attributes2 potomek rozhraní Attributes. Poskytuje dodatečné informace o atributech (jestli je atribut deklarovaný v DTD a jestli byla dosazena jeho implicitní hodnota podle DTD). DeclHandler zpracovává události týkající se DTD deklarací (deklarace atributu, elementu, interní a externí entity). EntityResolver2 potomek rozhraní EntityResolver. Rozšiřuje toto rozhraní o nové mapování odkazů na externí entity na vstupní zdroje (InputSource). LexicalHandler slouží ke zpracování lexikálních informací (komentáře, hranice CDATA sekcí, entit a DTD deklarací). Locator2 potomek rozhraní Locator. Rozšiřuje informace poskytované tímto rozhraním o kódování a verzi XML dané entity. Třídy: Attributes2Impl rozšíření rodičovského AttributesImpl o funkce, které jsou navíc v rozhraní Attributes2. DefaultHandler2 rozšíření rodičovského DefaultHandler implementující navíc rozhraní LexicalHandler, DeclHandler, EntityResolver2. Locator2Impl rozšíření rodičovského LocatorImpl o dodatečné informace o entitách (kódování a verze XML). 13

1.2. XML:DB API 1.2 XML:DB API XML:DB API je projekt XML:DB Initiative na vytvoření aplikačního rozhraní sloužícího pro sjednocení přístupu k různým nativním XML databázím. Jedná se o jakousi obdobu ODBC nebo JDBC u relačních databází. XML:DB API v současnosti implementují například databáze exist nebo Apache Xindice (dříve dbxml). Za základ XML:DB API by se daly označit: Ovladače každá databáze implementující XML:DB API poskytuje ovladač, který zapouzdřuje přístup k databázi. Jedná se o implementaci rozhraní Database a jsou spravovány třídou DatabaseManager. Kolekce kontejnery pro uchovávání XML dokumentů (obvykle stejného nebo podobného typu). Jedná se o jakousi obdobu tabulek v relačních databázích. Služby implementují různou funkčnost. Každá databáze může nabízet různé služby. Některé z nich jsou jsou definovány v XML:DB API (implementace XPath dotazů, XUpdate, správu kolekcí, transakce, apod.), další může definovat konkrétní databáze. Zdroje reprezentuje různé typy dat (XML, binární data). Jedná se o rozhraní Resource. Úrovně API (API Core Levels) jelikož XML:DB API má být modulární, je nutné pro zjednodušení práce vývojářů s různými databázemi vlastnosti shlukovat (např. podle důležitosti). XML:DB API definuje dvě úrovně 0, kterou musí implementovat každá databáze implementující XML:DB API a 1, která tuto rozšiřuje o rozhraní XPathQueryService. Základní jednoduché případy použití XML:DB ukazuje např. [13]. 1.2.1 org.xmldb.api Obsahuje pouze třídu DatabaseManager, která je vstupním bodem celého API. Umožňuje pracovat s implementacemi databází, zjišt ovat API Core Levels a získávat kolekce. 1.2.2 org.xmldb.api.base Poskytuje základní rozhraní: Database zapouzdřuje funkcionalitu ovladače databáze (rozhodnutí, zda umí zpracovat dané URI, jaké API Core Level databáze implementuje a získání kolekce). Každá XML databáze toto rozhraní musí implementovat. Instance je pak zaregistrována u DatabaseManager a uživatel by měl dále přistupovat pouze k němu (s výjimkou inicializace třídy Database). 14

1.2. XML:DB API Collection reprezentuje kolekci zdrojů dat (Resource) uloženou v XML databázi. Mezi kolekcemi může (ale nemusí) být stromová hierarchie. Kolekce poskytuje přístup ke zdrojům (Resource) a službám (Service), které nad kolekcemi a zdroji v nich mohou operovat. Resource kontejner pro data uložená v databázi. Jelikož tato data mohou být různých typů, je nutné zjistit před jejich použitím typ (getresourcetype()) a podle toho data (Object getcontent()) přetypovat. XML:DB API definuje dvě odvozená rozhraní BinaryResource a XMLResource. Service poskytují různá rozšíření ke kolekcím a práci s nimi. Některé služby jsou definovány už v XML:DB API CollectionManagementService, TransactionService, XPathQueryService, XUpdateQueryService. Samotné rozhraní Service neobsahuje žádné speciální metody, je na uživateli, aby si obdrženou Service přetypoval na příslušný podtyp. ResourceIterator iterátor přes zdroje (Resources). I přes název se nejedná o potomka java.util.iterator. ResourceSet množina zdrojů Resource, obvykle získaná jako výsledek dotazu. Configurable poskytuje metody pro nastavení a zjištění vlastností objektu. Potomky tohoto rozhraní jsou Collection, Database, Service a dále z balíku org.xmldb.api.modules rozhraní CollectionManagementService, TransactionService, XPathQueryService a XUpdateQueryService. Dále třídu ErrorCodes obsahující konstanty s chybovými kódy a výjimku XMLDBException vyhazovanou všemi chybami v XML:DB API (typ chyby je rozlišován právě přes konstanty v ErrorCodes). 1.2.3 org.xmldb.api.modules Obsahuje některé specializace rozhraní Resource a Service: BinaryResource reprezentuje binární data uložená v databázi. XMLResource reprezentuje XML data uložená v databázi. Umožňuje je získat prostřednictvím uzlu DOM stromu nebo pomocí SAX (přes org.xml.sax.contenthandler). CollectionManagementService umožňuje základní manipulacemi s kolekcemi uvnitř databáze (přidání a odstranění). Pokročilejší správa se u různých databází liší, proto ji toto rozhraní neřeší. TransactionService umožňuje spojit operace nad kolekcemi do transakcí. 15

1.3. DOM4J XPathQueryService umožňuje provedení XPath dotazů nad kolekcí nebo zdrojem v kolekci. XUpdateQueryService umožňuje provedení XUpdate dotazů nad kolekcí nebo zdrojem v kolekci. 1.3 Dom4j Rozhraní a implementace pro práci s XML DOM. Je psáno a optimalizováno přímo pro použití v Javě. Ve srovnání s ním je W3C DOM navržený nezávisle na jazyce (i když jako referenční implementaci W3C uvádí právě implementaci v Javě a ECMA Scriptu). Navíc je toto rozhraní rychlé a pamět ově efektivní (ovšem stále zde je zachována nutnost držet si v paměti celý strom). 1.4 JDOM Nástroj pro práci s XML DOM (podobně jako dom4j). Slouží jako reprezentace XML dokumentu. K jeho vytvoření používá XML parser (který sám neimplementuje). JDOM je optimalizované pro Javu (podobně jako dom4j) a má za cíl být co nejsnadněji použitelné. Jelikož ale není stavěné na rozhraních, ale na třídách, je jeho použití v XIQE nevhodné a proto se jím dále nebudu zabývat. Zmiňuji jej především proto, že patří ke známým nástrojům pro práci s DOM. [5] 1.5 Xerces Native Interface Xerces Native Interface je rozhraní, které mohou implementovat XML parsery (implementuje jej např. Xerces2 parser). Je postaveno na stejných principech jako SAX (tj. zasílá informace o toku dokumentu), ale s několika rozdíly: XNI se snaží poskytovat všechny informace o dokumentu, beze ztráty. SAX například nepředává takové informace jako kódování externích entit. XNI umožňuje vytvořit řetěz komponent parseru, kde mohou být informace o dokumentu plně modifikovány. SAX umožňuje pouze malé možnosti takovéto modifikace při čtení XML dokumentu. Toho lze využít například pro vytvoření DOM nebo SAX parseru HTML dokumentu, vložení dokumentů odkazovaných přes XInclude tak, aby to bylo transparentní vůči validátoru apod. XNI obsahuje sadu rozhraní, pomocí kterých je možné definovat komponenty a konfiguraci parseru. 16

1.6. STAX 1.6 StAX StAX (Streaming API for XML) je API založené stejně jako SAX nebo XNI na proudovém zpracování XML dokumentu. Na rozdíl od SAX a XNI nepracuje jako push (tj. parser zasílá události klientovi v průběhu zpracování XML dokumentu), ale pull API (tj. klient ovládá chod parseru). Díky proudovému zpracování zachovává výhody SAX a XNI (malou pamět ovou režii oproti rozhraním založených na vytváření stromu v paměti, jako je DOM, schopnost zpracovávat rozsáhlé XML dokumenty). Důvod, proč vznikla pull API je ten, že tento přístup je většině programátorů bližší a vzniklé aplikace bývají jednodušší. StAX oproti SAX a XNI umožňuje snadněji vytvářet XML dokumenty. Další výhodou je to, že lze zpracovávat více XML dokumentů najednou v jednom vlákně. (To je způsobené tím, že zpracování řídí klient.) 1.7 XMLPULL Jedná se o starší pull rozhraní než StAX. Důvod, proč se mu nebudu podrobněji věnovat je ten, že v něm byly dělány kompromisy v návrhu určené k minimalizaci spotřeby paměti (především je upřednostňován procedurální přístup před objektovým), aby mohlo být používáno v zařízeních s malou pamětí v prostředí J2ME a nehodí se příliš pro použití v prostředí desktopových nebo serverových aplikací. 1.8 JAXB (Java Architecture for XML Binding) Framework JAXB umožňuje vázat XML schémata na Java objekty a jejich prostřednictvím pak zpracovávat XML dokumenty. Poskytuje rozhraní pro načtení XML dokumentu jako stromu Java objektů (unmarshalling) a jeho opětovné uložení do XML (marshalling). Umožňuje pracovat s XML dokumenty bez znalosti modelů pro zpracování XML jako DOM, SAX, apod. Třídy v Javě by pak měly reprezentovat pouze vztahy definované v XML schématu. Ke zpracování pomocí JAXB dochází takto: Pro XML data, která se budou zpracovávat je k dispozici nějaké schéma (např. XML Schema). Na základě schématu je kompilátorem vazeb vytvořena sada tříd jazyka Java založených na daném schématu. Vygenerované třídy jsou obvyklým způsobem zkompilovány do bytekódu. XML dokument (v podobě souboru na disku, DOM stromu, SAX zdroje, řetězce v paměti apod.) splňující dané schéma je načten a zpracován. Z dříve připravených tříd je vygenerován strom reprezentující strukturu a obsah XML dokumentu. Součástí tohoto kroku může být i validace. 17

1.9. CASTOR XML Prostřednictvím vytvořeného stromu a rozhraní vygenerovaných tříd je možné reprezentaci dokumentu upravovat. Během těchto úprav nemusí být validní vůči zadanému schématu (i když je možné validaci explicitně vyvolat). Výsledek se pak opět převede na jeden nebo více XML dokumentů. Součástí tohoto kroku může být i validace. Obrázek 1.3: Schéma fungování JAXB 1.9 Castor XML Castor XML je framework, který umožňuje definovat vztah mezi XML daty a objekty, které je reprezentují a tyto dvě reprezentace mezi sebou převádět. Castor využívá sadu popisovačů (ClassDescriptor a FieldDescriptor) k tomu, aby objekt v Javě převedl na jeho XML reprezentaci a naopak. 18

Kapitola 2 Požadavky uživatele Pro navržení vhodného rozhraní je potřeba stanovit požadavky uživatele na systém. Dokumenty jsou v systému XIQE, stejně jako v jiných XML databázích, tříděny do kolekcí. Některé XML databáze podporují hierarchickou strukturu kolekcí. Bez ohledu na současný stav projektu XIQE byl určen seznam důležitých operací, které by systém měl v budoucnu podporovat. Uživatel by tedy měl mít možnost: založit kolekci dokumentů vrátit kolekci dokumentů na základě názvu smazat kolekci dokumentů přejmenovat, resp. přesunout kolekci dokumentů vložit dokument (v podobě objektu File, String, DOM stromu, SAX nebo StAX zdroje) do kolekce s kolekcí dokumentů: vyhledat v ní dokument podle názvu provést nad ní XPath dotaz provést nad ní XQuery dotaz provést nad ní XUpdate s dokumentem: provést nad ním XPath dotaz převést jej na DOM (Document), SAX (SAXResult), StAX (XMLEventReader) s výsledkem XPath dotazu: převést jej na DOM (Document), SAX (SAXResult), StAX (XMLEventReader) 19

Kapitola 3 Současný stav XIQE a návrh změn Vzhledem ke svému zaměření systém XIQE má podporu pro různé způsoby ukládání XML dat umožňuje tak ověřit různé způsoby indexace a efektivního uchovávání a vyhledávání v datech. Uživatel by však měl dostat k dispozici pohodlný nástroj se sadou předpřipravených ukládacích struktur, mezi kterými si může snadno vybrat. Systém XIQE nemá žádnou podporu pro snadnou manipulaci s kolekcemi. Dále nepodporuje hierarchické struktury kolekcí o tomto však bylo rozhodnuto, že se nyní nebude implementovat, jelikož uživatel si může hierarchické kolekce simulovat pomocí prostředků souborového systému (pomocí struktury adresářů). Momentálně je k dispozici podpora pouze pro ukládání kolekcí na lokálním souborovém systému a v paměti. Zvažuje se možná budoucí podpora klient-server architektury a komunikace prostřednictvím počítačové sítě. Pozdější implementace už by hierarchické kolekce mohly podporovat, pravděpodobně prostřednictvím XML:DB API, kde již pro hierarchické kolekce podpora je. 3.1 XML:DB API Jako základní rozhraní, které bude systém XIQE podporovat bylo vybráno XML:DB API. Obsahuje podporu pro vše, co je potřeba, a uživateli může být známé je použito v několika různých XML databázových systémech. Jeho implementace byla započata, třídy jsou v balíku org.xiqe.xmldb. Tyto třídy budou používat org.xiqe, které již slouží jako nativní rozhraní XIQE. Některé třídy byly implementovány za použití tříd XML:DB API SDK tyto poskytují některé základní metody a naše třídy je pak rozšiřují. Pravděpodobně však bude od použití SDK upuštěno z důvodů jeho závislosti na nástroji Xerces [14] a z licenčních důvodů (pokud bychom chtěli SDK upravit, museli bychom zachovat jeho licenci, a některé části XIQE by pak museli používat XML:DB Initiative Software License). Jedná se o třídy: DatabaseImpl ovladač databáze. Tato třída je využívána database managerem z XML:DB API (org.xmldb.api.databasemanager) a jedná se tedy o vstupní bod tohoto API (z hlediska XML:DB; sám uživatel s těmito třídami do styku nepřijde vyjma služeb services). CollectionImpl kolekce dokumentů. 20

3.2. JAXP ResourceSetImpl množina zdrojů, získaná např. XPath dotazem. ResourceIteratorImpl iterátor přes zdroje v ResourceSet. XMLResourceImpl XML zdroj. Jiné zdroje (např. binární data) jsme se rozhodli v současnosti nepodporovat. CollectionManagementServiceImpl služba správy kolekcí. Momentálně podporuje pouze vytvoření a smazání kolekce. Do budoucna se uvažuje o podpoře hierarchických kolekcí. XPathQueryServiceImpl služba pro provádění XPath dotazů. Do budoucna se počítá s rozšířením o podporu XQuery, XUpdate a transakčního zpracování. V tom případě se budou tato rozšíření řešit prostřednictvím dalších služeb. Pro tyto tři služby již je v XML:DB API definováno rozhraní. Je ale možné prostřednictvím služeb implementovat i další funkčnost, se kterou XML:DB API nepočítá (ostatně to je cílem služeb). Další věc, kterou je třeba zmínit je podpora různých typů kolekcí (různých úložišt a indexačních metod). Typ úložiště např. lokální disk, pamět, sít ový server si uživatel zvolí prostřednictvím URI. URI kolekce je tvaru xmldb:xiqe:protokol:parametry_ protokolu, kde protokol je např. file, memory, http,... Parametry protokolu budou v případě dále strukturovaného URI začínat na //, tedy URI kolekce v paměti může být xmldb:xiqe:memory:moje_kolekce, zatímco URI kolekce na lokálním disku může být xmldb:xiqe:file:///home/xzikan/moje_kolekce v případě cesty podle UNIXové hierarchie souborového systému, v případě systému s MS Windows např. xmldb:xiqe: file://d:\muj_adresar\moje_kolekce. V případě připojení na vzdálený server se bude jednat o xmldb:xiqe:protokol://server:port/adresa/na/serveru. Pokud si bude chtít uživatel zvolit indexační metodu, před vytvářením nové kolekce pomocí CollectionManagementService nastaví službě vlastnost collection_storage_type. (Toto bude implementováno ve chvíli, kdy bude k dispozici podpora v balíku interních rozhraní org.xiqe.) 3.2 JAXP Jako další rozhraní, které bude podporováno bylo pro svou velkou rozšířenost vybráno JAXP. Podpora pro model dokumentu W3C DOM již v současnosti v XIQE je podporováno jako jeden z modelů dokumentu (druhý, který je momentálně podporován je Dom4j). Podpora pro SAX byla odložena jako úkol s nižší prioritou. Podpora pro transformační API z JAXP je záležitostí, která je na straně uživatele, proto ji XIQE podporovat nebude. Ve spolupráci s Bc. Petrem Vlčkem byla navržena podpora pro XPath pomocí JAXP a na její implementaci pracuje v rámci své diplomové práce. Jedná se o balík org.xiqe.xpath.jaxp, konkrétně třídy XPathFactoryImpl, XPathImpl a XPathExpressionImpl. Vstupní třída tohoto rozhraní je XPathFactoryImpl, kterou bude používat uživatel, ostatní třídy 21

3.3. ROZHRANÍ ORG.XIQE jsou touto vytvářené. Další rozhraní z javax.xml.xpath (XPathFunction, XPath- FunctionResolver, XPathVariableResolver) nejsou třeba implementovat, může si je implementovat a použít uživatel. Implementace vyhodnocování XPath dotazů pomocí JAXP bude pro jednoduchost svého API pravděpodobně použita jako backend pro vyhodnocování XPath dotazů přes XML:DB API (případně další API, pokud by o jejich implementaci bylo rozhodnuto). 3.3 Rozhraní org.xiqe Rozhraní a třídy v tomto balíku byly původně určeny jako vnější rozhraní, zatím je však nikdo neimplementoval. Jelikož XML:DB API nabízí vše, co je třeba, bude určeno jako primární rozhraní pro uživatele s tím, že, org.xiqe bude sloužit jako rozhraní, které bude využíváno rozhraním org.xiqe.xmldb, které k němu bude tvořit jakýsi wrapper a umožňovat co nejtransparentnější manipulaci s různými typy kolekcí tj. aby uživatel mohl pracovat úplně stejným způsobem s kolekcí v paměti, na lokálním disku i na vzdáleném serveru. Rozhraní org.xiqe by pak mohlo být využito v případě, že bychom v budoucnu narazili na něco, co by nebylo možné pomocí XML:DB API snadno vyřešit. Dále je uživatel bude moci využívat v případě, že mu nevadí nepřenositelnost jeho softwaru na jinou XML databázi. (V případě používání XML:DB API by uživateli při přechodu k jiné XML databázi, která nabízí nadmnožinu toho, co umí XIQE, mělo stačit změnit URI, pomocí kterých přistupuje ke kolekcím.) V současnosti se toto rozhraní může měnit a proto není jeho použití koncovým uživatelem vhodné. Rozhraní org.xiqe obsahuje třídy: DocumentCollectionFactory tovární třída (viz [9]) pro vytváření nových a otevírání existujících kolekcí XML dokumentů. Jedná se o vstupní bod tohoto balíku. Je implementována jako abstraktní třída s potomky MemoryDocument- CollectionFactory a FileDocumentCollectionFactory. V budoucnu je možné rozšířit tyto o další, jako například plánovanou NetworkDocumentCollectionFactory. DocumentCollection rozhraní reprezentující kolekci XML dokumentů. Umožňuje kolekci přejmenovat, smazat, přidat nebo odebrat z ní dokument a vrátit všechny dokumenty, případně konkrétní dokument na základě jeho názvu. DocumentCollectionImpl implementace rozhraní DocumentCollection. Document rozhraní reprezentující dokument. Umožňuje získat zpětně kolekci, ve které je dokument uložen, jméno a ID dokumentu a vrátit dokument reprezentovaný jako DOM (org.w3c.dom.document), SAX (ContentHandler) nebo InputSource. DocumentImpl implementace rozhraní Document. 22

3.3. ROZHRANÍ ORG.XIQE XiqeConstants obsahuje konstanty, použitelné na více místech XIQE nebo užitečné pro uživatele (např. URI). XiqeException výjimka. 23

Kapitola 4 Závěr Cílem této práce bylo zmapovat důležitá existující rozhraní pro práci s XML v jazyce Java a na základě nich navrhnout funkcionalitu a vnější rozhraní, která by měl systém XIQE poskytovat. Dalším úkolem bylo tato rozhraní implementovat s využitím stávajících funkcí systému XIQE. Protože systém nepodporuje všechny operace nutné k úplné implementaci těchto rozhraní, bylo nutné také definovat množinu operací, které systém XIQE musí poskytnout aby mohla být implementace vnějších rozhraní kompletní. Na základě získaných informací se jeví jako vhodná podpora rozhraní XML:DB API jako primárního vnějšího rozhraní systému XIQE, které by mělo pohodlným způsobem poskytovat uživateli funkcionalitu systému a zároveň ho dostatečně odstínit od implementačních záležitostí. Dále bylo rozhodnuto o podpoře části rozhraní JAXP pro vyhodnocování XPath dotazů. Dále jsem upravil rozhraní org.xiqe, které by mělo sloužit především jako vnitřní rozhraní systému XIQE a poskytovat společně s JAXP funkcionalitu potřebnou pro rozhraní XML:DB API. Dále bylo shledáno vhodným podporovat přístup k datům prostřednictvím různých modelů dokumentu. Jako nejvhodnější se jeví W3C DOM a Dom4j. Na jejich implementaci v rámci svých bakalářských prací pracují Josef Šustáček a Michal Krčál. Na implementaci rozhraní org.xiqe.xpath.jaxp pracuje v rámci své diplomové práce Bc. Petr Vlček. Na balíku org.xiqe.xmldb implementujícím rozhraní XML:DB API a částech org.xiqe jsem pracoval já. Pro rozhraní XML:DB API (org.xiqe.xmldb) jsem vytvořil sadu testovacích tříd pomocí nástroje JUnit. Funkcionalita požadovaná rozhraním XML:DB API v balíku vnitřních rozhraní org.xiqe je dostatečně definovaná dokumentací balíku org.xiqe. Pro využití výsledků této práce bude tedy jako další krok třeba dokončit implementaci všech metod tohoto vnitřního rozhraní. Vytvořená implementace XML:DB API zatím podporuje služby pro správu kolekcí dokumentů a vyhodnocování XPath dotazů. Flexibilita XML:DB API však umožňuje snadno dodávat do systému další služby. Pro některé z nich jsou v XML:DB API již definována rozhraní služby pro XQuery, XUpdate a transakční zpracování. Nepovažujeme však za nutné začínat s implementací těchto rozhraní, když pro ně systém zatím nemá žádnou podporu. Jejich dodání do systému pak nepotřebuje žádnou úpravu rozhraní, stačí pouze přidat novou třídu se službou a případně upravit implementaci třídy Collection. 24

Příloha A Obsah přiloženého CD Součástí práce je i přiložené CD, kde jsou k dispozici: zdrojový kód této práce ve formátu XML (DocBook) tato práce ve formátech L A TEX, PDF a XHTML, vygenerovaná pomocí šablony fithesis a nástroje XSLT2 Mgr. Jana Pavloviče aktuální revize ze Subversion repository projektu XIQE JavaDoc dokumentace k popisovaným rozhraním 25

Literatura [1] Adámková, Š.: Systém pro indexování XML dokumentů, diplomová práce, Masarykova Univerzita, 2005. (document) [2] Enhydra Zeus project website <http://zeus.objectweb.org/>, ObjectWeb Consortium. [3] Harold, E.: An Introduction to StAX <http://www.xml.com/pub/a/2003/09/ 17/stax.html>, 17. 10. 2003. [4] Harold, E.: The XMLPULL API <http://www.xml.com/pub/a/2002/08/14/ xmlpull.html>, 14. 9. 2002. [5] JDOM Project <http://www.jdom.org/>. 1.4 [6] The Java Web Services Tutorial <http://java.sun.com/webservices/docs/1. 6/tutorial/doc/index.html>, Sun Microsystems. [7] Kawaguchi, K.: The JAXB API <http://www.xml.com/pub/a/2003/01/08/ jaxb-api.html>, 8. 1. 2003. [8] Ogbuji, U.: Manage XML collections with XAPI <http://www-128.ibm.com/ developerworks/library/x-xapi.html>, 11. 1. 2005. [9] Gamma, E. a Helm, R. a Johnson, R. a Vlissides, J.: Návrh programů pomocí vzorů, Grada Publishing, 2003. 3.3 [10] SAX Project <http://www.saxproject.org/>. 1.1.3 [11] Staken, K.: Introduction to dbxml <http://www.xml.com/pub/a/2001/11/28/ dbxml.html>. [12] Staken, K.: An Introduction to the XML:DB API <http://www.xml.com/pub/a/ 2002/01/09/xmldb_api.html>, 9. 1. 2002. [13] Staken, K.: API Use Cases <http://xmldb-org.sourceforge.net/xapi/ UseCases.html>, Members of the XML:DB API Mailing List, 20. 9. 2001. 1.2 [14] Xerces project website <http://xerces.apache.org/>, The Apache Software Foundation. 3.1 26

Rejstřík Apache Xindice, 14 dbxml, 14 DOM, 3 exist, 14 Java API for XML Processing, 1, 21 JAXP, 1, 21 JDBC, 14 ODBC, 14 SAX, 3, 11 Simple API for XML, 3, 11 transformace, 2 URI, 21 W3C DOM, 6, 21 Xindice, 14 XIQE, v XML:DB API, 14, 20 kolekce, 14 ovladač, 14 služba, 14, 20 zdroj, 14 XPath, 5 27