13. blok
Práce s XML dokumenty v databázi Oracle
Studijní cíl Tento blok je věnován práci s XML dokumenty, možnostmi jejich uložení a práce s nimi v databázi Oracle a datovému typu XMLType.
Doba nutná k nastudování
2 - 3 hodiny
Průvodce studiem Při studiu tohoto bloku se předpokládá, že čtenář je obeznámen se strukturou XML dokumentů a DDL a DML příkazy jazyka SQL.
1. XML v databázi Oracle a XMLType V dnešní informační době, ve které existují požadavky na kvalitní výměnu informací, značně vzrostl tlak na jednotný komunikační prostředek. Tento prostředek by měl umožňovat komunikaci nezávislou na platformě, databázovém prostředí či operačním systému. V dnešní době se za číslo jedna mezi těmito nástroji považuje XML, a proto se Oracle rozhodl pro jeho komplexní implementaci v rámci svého databázového systému. Databáze společnosti Oracle nejenom že umí zpracovávat databázové dotazy, jejichž výsledkem jsou XML dokumenty, ale rovněž umožňuje celé XML dokumenty do databáze ukládat a to dokonce i v rámci jednotlivých sloupců. V této kapitole bude popsáno velmi stručně, co to je XML a jaká je jeho základní syntaxe. Dále zde bude probrána podpora XML v databázi Oracle a na konec zde bude trochu podrobněji popsán datový typ XMLType. 2. XML XML (z anglického Extensible Markup Languge) je tzv. značkovací jazyk, který vznikl pod hlavičkou konsorcia W3C zjednodušením staršího jazyka SGML. Standard v podstatě definuje obecnou syntaxi, ve kterou jsou námi zasílaná data označovaná pomoci srozumitelných značek. Jazyk XML je neskutečně flexibilní a lze ho využít v nejrůznějších oblastech. Od webových stránek přes elektronické obchodování, vektorovou grafiku či serializaci objektů. Tomáš Váňa, David Žák IDAS2/13 – Práce s XML dokumenty v databázi Oracle
1
Podstatné na jazyku XML je to, že se jedná o meta-značkovací jazyk. To znamená, že není definována žádná pevně daná množina značek. XML dává vývojářům volnou ruku v definici elementů a atributů jazyka, takže si lze jazyk libovolně rozšiřovat, tak aby plně vyhovoval mnoha různým potřebám. Na druhou stranu je důležité zmínit, že jak je jazyk volný k definování vlastních elementů, tak je na druhou stranu velmi striktní v jejich zápisu. XML definuje tzv. gramatiku jazyka, jenž přesně definuje umístění, kde se dané elementy a jejich atributy mohou objevit. Gramatika je důležitá vzhledem k vývoji analyzátorů XML dokumentů. Bez této gramatiky by byl vývoj analyzátorů velmi složitý. Každý XML dokument, jenž vyhoví gramatice jazyka, se považuje za správně formulovaný. Pokud je dokument správně formulovaný, znamená to, že projde analyzátorem bez problému. Ovšem správně formulovaný dokument nezaručuje platnost dokumentu, čili zda má dokument vhodnou strukturu pro naši aplikaci. Proto jazyk XML umožňuje vytvořit definici typu dokumentu (DTD), jenž určuje, kde a jak mohou být jednotlivé značky v rámci dokumentu použity. Dokument, jenž vyhoví DTD, je označen za platný. Platnost či neplatnost dokumentu vždy závisí na definici DTD, se kterým ho porovnáváme. DTD je však nepovinné. Nyní malá ukázka XML dokumentu:
Gambardella, Matthew XML Developer's Guide Computer <price>44.95 2000-10-01 <description>An in-depth look at creating applications with XML. Ralls, Kim Midnight Rain Fantasy <price>5.95 2000-12-16 <description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.
Tomáš Váňa, David Žák IDAS2/13 – Práce s XML dokumenty v databázi Oracle
2
3. Oracle XML DB Oracle začal s podporou XML přímo v databázi již v roce 1998, a to konkrétně ve verzi 8i. Se zvyšujícím se číslem verze nejenom že rostly možnosti databáze pracovat s XML formátem, zároveň rostl i celkový výkon databáze při práci s XML formátem. Oracle souhrnně nazývá balík podpory pro práci s XML zjednodušeně XML DB [2]. Ve své podstatě se jedná o množinu technologií, zaměřených na vyhledávání a ukládání XML dokumentů v rámci databáze. Všechny tyto technologie jsou nativně implementovány přímo v databázi, proto můžeme využívat výhody provádění XML dotazů nad daty uloženými v rámci relační databáze, a zároveň můžeme provádět běžné SQL operace nad XML daty. Následující obrázek velmi stručně shrnuje výhody využití XML DB.
Obr. 1 - Výhody využití Oracle XML DB. Zdroj: Oracle.
Tomáš Váňa, David Žák IDAS2/13 – Práce s XML dokumenty v databázi Oracle
3
Základem architektury celé XML DB jsou:
Tabulky a pohledy využívající XMLType o
S XMLType získáváme možnost přirozeně uložit XML (například jako sloupec v tabulce) s možností nám běžně známého dotazování pomocí SQL.
Oracle XML DB Repository o
Repositář XML umožňuje jednotlivé XML dokumenty třídit do složek a řídit k nim přístup, využívat správu verzí, atd…
Následující obrázek obsahuje nákres architektury XML DB:
Obr. 2 - Architektura XML DB. Zdroj: Oracle.
Tomáš Váňa, David Žák IDAS2/13 – Práce s XML dokumenty v databázi Oracle
4
4. Oracle XML Repository Pokud to řekneme velmi jednoduše, XML je Repositář úložiště XML dokumentů, jejich sklad, který umožňuje přístup k těmto dokumentům. Pro přístup k dokumentům můžeme zvolit různé protokoly (HTTP, FTP, WebDAV). V tomto „skladu“ můžeme spravovat různá přístupová práva, spravovat adresáře. XML Repositář se skládá z těchto základních komponent [4]:
Seznam a správa přístupových oprávnění (ACL) Správa složek WebDAV a FTP protokol pro přístup ke složkám. SQL vyhledávání v XML Repositářích. API pro práci s XML Repositáři. Přístup pomocí Java servletu – manipulace s objekty.
Do Oracle XML repositáře v podstatě existují dvě přístupové cesty [3]:
Přístup založený na cestě (navigační přístup). Při tomto přístupu se využívá hierarchického indexu ukazujícího na jednotlivé zdroje a objekty v repositáři. Každý zdroj v repositáři má jednu nebo více unikátních cest, jež odráží jeho umístění v hierarchii. Těmito přístupovými cestami můžeme referencovat libovolný XMLType objekt v databázi, bez ohledu na jeho umístění v tabulkových prostorách. Přístup do repositáře za využití SQL skrze speciální pohledy, které jsou schopné mapovat prostor repositáře do Oracle XML DB schématu. Pro přístup do repositáře slouží dva pohledy a to konkrétně PATH_VIEW a RESOURCE_VIEW. PATH_VIEW obsahuje jeden řádek pro každou unikátní cestu v repositáři. Naproti tomu RESOURCE_VIEW je vytvářen stylem co jeden zdroj, to jeden řádek. Řádky v těchto pohledech jsou datového typu XMLType. Nad těmito pohledy je možné provádět DML operace, které vkládají, přejmenovávají, mažou či aktualizují obsah zdroje. Pro ostatní operace (jako vytvoření zdroje) je nutné využít služeb API.
Tomáš Váňa, David Žák IDAS2/13 – Práce s XML dokumenty v databázi Oracle
5
5. Datový typ XMLType V této podkapitole se dostaneme ke druhému způsobu ukládání XML dat do databáze. A to pomocí datového typu XMLType. Tento typ umožňuje uložit XML dokument do databázové tabulky. Pokud se podíváme trochu hlouběji do historie XML v databázi Oracle, zjistíme, že datový typ XMLType se poprvé objevil ve verzi 9 pro usnadnění práce s daty v XML uvnitř databáze. Abychom byli úplně přesní, tak XMLType je objektový datový typ, což znamená, že tento datový typ obsahuje i některé členské funkce. Příkladem takové členské funkce může být funkce, jež zkonvertuje textový řetězec obsahující XML dokument do datového typu XMLType. A co nám tedy použití XMLType umožňuje:
XMLType může reprezentovat libovolný XML dokument uložený v databázi. Díky tomu, že je uložen v databázové tabulce, je přístupný přes SQL příkazy. Tím nám zůstávají zachovaný základní výhody relačního přístupu, a zároveň však zůstávají zachovány všechny výhody XML formátu. XMLType je využitelný v PL/SQL, a proto jej můžeme využít jako vstupní parametr, proměnnou či návratovou hodnotu uložené procedury. XMLType obsahuje členské funkce. Tyto funkce umožňují provádět různé operace nad dokumentem uloženým v databázi. Můžeme například z daného dokumentu extrahovat pouze některé části. (členská funkce extract())
Nyní když známe možnosti datového typu XMLType, můžeme se podívat na jednoduché ukázky toho, jak typem XMLType pracovat. Nejprve bude předvedeno založení tabulky obsahující XMLType a vkládání hodnot do této tabulky. Dále bude uveden příklad na využití některých členských funkcí typu XMLType v rámci SQL. V závěru bude uveden příklad na vytvoření typu XMLType nad obyčejnou relační tabulkou. Definovat tabulku, obsahující sloupec datového typu XMLType je velmi jednoduché. CREATE TABLE xml_tab ( id number(10), xml XMLType NOT NULL );
Tomáš Váňa, David Žák IDAS2/13 – Práce s XML dokumenty v databázi Oracle
6
Vložení nových řádků do tabulky obsahující XMLType je stejně jednoduché. INSERT INTO xml_tab(id,xml) VALUES ( 1, XMLType( '
<jmeno>Tomas <prijmeni>Vana 100000 ' ) ); INSERT INTO xml_tab(id,xml) VALUES ( 2, XMLType( '
<jmeno>Petra <prijmeni>Barakova 70000 ' ) );
Při dotazování nad sloupci s XMLType se nejčastěji využívá funkcí extract a existNode. Následující příklad demonstruje využití funkce existNode v klauzuli WHERE: SELECT x.xml.getClobval() AS poXML FROM xml_tab x WHERE x.xml.existsNode('/zamestnanec[plat > 80000 ]') = 1;
Zápis '/zamestnanec[plat > 80000 ]' předávaný funkci existNode říká, že se hledají jen ty zaměstnanci, jejichž plat je vyšší než 80000. Funkce extract se využívá k extrakci určitých uzlů z XML Dokumentu. Viz následující příklad: SELECT EXTRACT(xml,'/zamestnanec/jmeno/text()').getStringVal() || ' ' || EXTRACT(xml,'/zamestnanec/prijmeni/text()').getStringVal () AS cele_jmeno, EXTRACT(xml,'/zamestnanec/plat/text()').getNumberVal() AS plat FROM xml_tab;
Tomáš Váňa, David Žák IDAS2/13 – Práce s XML dokumenty v databázi Oracle
7
Dává následující výstup:
Obr. 3 - Výstup funkce extract().
Jak je vidět, pomocí funkce extract() lze vytvořit z jednoho sloupce datového typu XMLType více sloupců odpovídajících jednotlivým uzlům XML dokumentu. Takto můžeme nad XMLType sloupci vytvářet pohledy, které budou vytvářet zdání klasické tabulky. Nyní bude představen opačný přístup, kdy z klasické tabulky čítající mnoho sloupců (bez XMLType) vytvoříme jeden XMLType sloupec, který bude mít v každém řádku XML dokument, jehož obsah bude korespondovat s odpovídajícím řádkem původní tabulky. Máme tedy tabulku:
Obr. 4 - Zdrojová data pro XMLELEMNT.
Nyní nad touto tabulkou spustíme následující dotaz: SELECT XMLELEMENT("KLIENT", XMLAttributes(cli_id AS id), XMLElement("JMENO",cli_name), XMLElement("PRIJMENI",cli_surname), XMLElement("DATUM_NAR",cli_birthday), XMLElement("NARODNOST",cli_nationality) , XMLElement("MOBIL",cli_mobile), XMLElement("EMAIL",cli_email) )KLIENTI FROM clients;
Tomáš Váňa, David Žák IDAS2/13 – Práce s XML dokumenty v databázi Oracle
8
Dotaz vygeneruje následující výstup:
Obr. 1 - Výsledek volání funkce XMLELEMENT.
Pojmy k zapamatování Příkazy a funkce:
EXTRACT, XMLELEMENT, XMLType
Problém: práce s XML dokumenty v prostředí databázového serveru, konverze dat mezi klasickými tabulky či výstupu běžných SQL dotazů a XML dokumenty Shrnutí Využití XML v rámci databáze Oracle je velice jednoduché a poskytuje velmi široké možnosti využití. Díky nativní podpoře XML přímo v databázi můžeme nad XML dokumenty provádět standardní XML dotazy a naopak můžeme nad běžnými tabulkami spouštět dotazy, jejichž výsledkem je XML dokument založený na datech obsažených v tabulce. Možnost vytvářet XML dokumenty přímo v databázi značně urychluje vývoj aplikací, neboť není nutné zavádět další vrstvu, která by obhospodařovala tvorbu XML dokumentů. Navíc je generování dokumentů v rámci databáze velmi rychlé a vytvoření samotného dokumentu je poměrně jednoduché.
Otázky na procvičení 1. 2. 3. 4. 5.
Popište architekturu XML DB. Co je Oracle XML Repository? Charakterizujte možnosti práce s datovým typem XMLType? Jmenujte některé funkce pro práci s XML dokumenty? Jakým způsobem lze vytvořit XML dokument z výstupu běžného SQL dotazu?
Tomáš Váňa, David Žák IDAS2/13 – Práce s XML dokumenty v databázi Oracle
9
Odkazy a další studijní prameny [1] Wikipedia [online]. 2011-02-23 [cit. 2011-04-27]. XML. Dostupné z WWW:
. [2] DRAKE, Mark. Oracle [online]. 2008 [cit. 2011-04-20]. Oracle Database 11g XML DB. Dostupné z WWW: [3] Oracle [online]. 2005 [cit. 2011-04-15]. Introduction to Oracle XML DB. Dostupné z WWW: [4] KRYL, Milan. Milan Kryl web [online]. 2010 [cit. 2011-04-20]. XML a Oracle9i. Dostupné z WWW: . [5] Oracle [online]. 2008 [cit. 2011-04-21]. XMLType Operations. Dostupné z WWW: .
Odkazy a další studijní prameny
LACKO, L. Oracle, správa, programování a použití databázového systému. Praha: Computer Press, 2007. ISBN 80-251-1490-2.
Tomáš Váňa, David Žák IDAS2/13 – Práce s XML dokumenty v databázi Oracle
10