Mendlova zemědělská a lesnická univerzita Provozně ekonomická fakulta
Moderní přístupy v ukládání a vyhledávání informací v rámci informačních systémů
bakalářská práce
Vedoucí: Ing. Oldřich Trenz, Ph.D.
Autor: Jan Pagáč
Brno 2008
2
Za odborné vedení, cenné rady a podněty bych rád poděkoval vedoucímu mojí bakalářské práce, Ing. Oldřichu Trenzovi, Ph.D.
3
Prohlašuji, že jsem tuto bakalářskou práci vypracoval samostatně s použitím literatury a zdrojů uvedených v části Použitá literatura. ..................... Jan Pagáč
4
Abstract Pagáč, J. Modern technologies of storing and retrieving informations within information systems. Bachelor thesis. Brno, 2008. This text is oriented to many problems of XML and to figure out some suitable solution for implement modern XML technologies into programs processing variety of data. Theses are aimed to describing main trends in XML, basic rules for using, advantages, main drawbacks of XML on the present. There is shown and described an example of a web application using XML documents. XML, XML document, structured document, XML database, programming languages.
Abstrakt Pagáč, J. Moderní přístupy v ukládání a vyhledávání informací v rámci informačních systémů. Bakalářská práce. Brno, 2008. Práce se zabývá zmapováním a nalezením vhodného způsobu aplikace moderních XML technologií na různé typy dat. Popisuje hlavní směry v problematice XML, základní pravidla jejich užití, přínosy, nedostatky současnosti. Je zde popsán příklad vytvořené aplikace pro práci s XML dokumenty. XML, dokument XML, strukturovaný dokument, XML databáze, programovací jazyky.
5
6
Obsah 1
Úvod a cíl práce 9 1.1 Úvod do problematiky ............................................................................................. 9 1.2 Cíl .......................................................................................................................... 10
2
Metodická východiska práce 11 2.1 Přehled literatury ................................................................................................... 11 2.2 Východiska práce................................................................................................... 12 2.3 Metodika řešení ..................................................................................................... 14
3
Návrh řešení 15 3.1 Analýza a modelace problému............................................................................... 15 Možnosti uplatnění XML ...................................................................................... 15 3.2 Seznámení s XML ................................................................................................. 16 Syntaktické minimum jazyka XML....................................................................... 16 Definice typu dokumentu (DTD)........................................................................... 17 XML schémata....................................................................................................... 18 Ukázka XML dokumentu ...................................................................................... 19 Pěkný kabát pro dokumenty .................................................................................. 20 3.3 Výběr vhodného jazyka ......................................................................................... 20 Java ........................................................................................................................ 21 PHP 5 ..................................................................................................................... 22 ASP.NET ............................................................................................................... 22 Perl ......................................................................................................................... 23 Shrnutí.................................................................................................................... 24 3.4 Vhodné funkce XML ............................................................................................. 24 DOM v PHP ........................................................................................................... 24 Vznik nového XML dokumentu ............................................................................ 24 Starší funkce .......................................................................................................... 26 Frekventované a užitečné funkce........................................................................... 28 Generování nového dokumentu ............................................................................. 28 Shrnutí.................................................................................................................... 28 3.5 XML v databázích ................................................................................................. 29 Datové a dokumentové XML ................................................................................ 29 Databázové systémy s podporou XML.................................................................. 30 Sybase Adaptive Server Enterprise ....................................................................... 30 Microsoft SQL Server 2005................................................................................... 31 IBM DB 2 .............................................................................................................. 31 Oracle 10g a Oracle 11g ........................................................................................ 32 Shrnutí.................................................................................................................... 32 3.6 Ukládání XML v Oracle 10g ................................................................................. 33 Ukládání dat ........................................................................................................... 33 XML oproti SQL ................................................................................................... 34 XMLType .............................................................................................................. 35 Dbms_lob ............................................................................................................... 38 Shrnutí.................................................................................................................... 38
7
3.7
3.8
3.9
3.10 3.11 3.12
3.13
XML v souborech .................................................................................................. 38 Uložení XML dokumentů ...................................................................................... 39 Práce s dokumenty ................................................................................................. 39 Shrnutí.................................................................................................................... 39 Zákoutí jazyka XML.............................................................................................. 40 Kódování jazyka .................................................................................................... 40 Velikost ukládaných dat ........................................................................................ 40 Bezpečnost ............................................................................................................. 42 Nejvhodnější řešení při použití databází................................................................ 42 Malé objekty .......................................................................................................... 43 Rozsáhlé objekty .................................................................................................... 43 Shrnutí.................................................................................................................... 43 Nejvhodnější řešení mimo databázi ....................................................................... 44 Nevhodné použití XML ......................................................................................... 44 Praktické využití .................................................................................................... 45 Nastavení dokumentů ............................................................................................ 45 Vkládání dokumentu .............................................................................................. 45 Vyhledávání informací .......................................................................................... 45 Výpis nalezených informací .................................................................................. 47 Výpis dokumentů ................................................................................................... 47 Transformace XML ............................................................................................... 47 Jazyk XSL .............................................................................................................. 47 Struktura stylu ........................................................................................................ 48 Jazyk Xpath ........................................................................................................... 48 Transformace XML v ASP.NET ........................................................................... 49 Shrnutí.................................................................................................................... 50
4
Závěr
51
5
Literatura
52
6
Seznam ilustrací v práci 55 5.1 Obrázky.................................................................................................................. 55 5.2 Tabulky .................................................................................................................. 55
7
Seznam příloh
57
8
9
1 Úvod a cíl práce 1.1 Úvod do problematiky Vzhledem k tomu, že se v současné době často vedou rozsáhlé diskuse na téma nejlepšího způsobu uchováváni dat, bude se tato bakalářské práce zabývat jedním z takovýchto přístupů. Je ale zároveň nutné dodat, že námi řešená problematika je v této době žhavým tématem v nejen v prostředí informačních techologíí. Toutou metodou je vyžití XML1 dokumentů pro ukládání různorodých dat v rámci rozličných forem informačních systémů. XML je jednoduchý, velmi flexibilní textový formát odvozený z jazyka SGML2 (ISO 8879). Původně byl vyvinut, aby uspokojil poptávku po rozsáhlém elektronickém publikování, XML ale také hraje důležitou a stále rostoucí roli ve výměně široce rozmanitých dat na WWW3 a jinde. XML někteří nazývají revolucí. Jeho jednoduchost a zejména podpora velkými firmami z něho činí významnou technologii, která nachází stále větší uplatnění ve světě IS/ICT. Na využití XML lze narazit v mnoha oblastech informatiky. Jednou z takových částí je i implementace XML na rozsáhlé dokumenty stejné struktury ať už do databázových systémů čí do souborových systémů na discích uživatelů. XML je totiž především univerzálním formátem pro přenos dat a v žádném případě se neobejde bez navazujících technologií, které umožňují např. definovat schémata XML dokumentů či provádět s datovým obsahem XML dokumentu operace pomocí XML „databázových“ jazyků. Databázová schémata či databázové jazyky jsou ovšem pojmy, se kterými se setkáváme hlavně v souvislosti s databázemi a databázovými systémy. Všichni přisuzují XML velice slibnou budoucnost a mluví o něm jen v superlativech. Pravdou ovšem je, že přesnou představu o tom, co XML je, má jen velice málo počítačových odborníků. v této bakalářské práci rozptýlím mlhu, která XML zahaluje. Po jeho přečtení bude čtenář sám schopen posoudit, zda si XML pozornost zaslouží oprávněně.
1
Zkratka Extensible Markup Language. Zkratka Standard Generalized Markup Language. SGML je komplexní jazyk poskytující mnoho značkovacích syntaxí, ale jeho složitost brání většímu rozšíření. 3 Zkratka World Wide Web (WWW, také pouze zkráceně web), ve volném překladu „Celosvětová pavučina“, je označení pro aplikace internetového protokolu HTTP. Je tím myšlena soustava propojených hypertextových dokumentů. 2
10
1.2 Cíl Cílem této práce je nastínit jak po technologické stránce, tak v logickém celku možnosti uplatnění XML při práci s informacemi, souvislosti mezi XML dokumentem a jeho výstupnímy formáty, vlastnosti značkovacího jazyka XML zejména ve vztahu k databázovým systémům. Čtenář se seznámí s obecnou problematikou XML a posléze i s nejmodernějšími trendy v této oblasti. Čtenář také nalezne odpovědi kupříkladu na otázky: „Proč a zda vůbec ukládat data do XML dokumentů?“ „Co ukládání do XML přinese za výhody, jaké efekty je možno očekávat?“ „Kde je vhodné XML využít?“ „Za jakých podmínek je vhodné ukládat XML dokumenty do databází?“ „Kdy je vhodnější ukládat XML dokumenty mimo databází?“ „Jak podporují XML dnešní databázové systémy a skriptovací jazyky?“ „Jak by mohla vypadat blízká budoucnost pro XML a co se očekává?“ Dílčí kroky k naplnění hlavního cíle budou spočívat ve vysvětlení příslušných pojmů, technologií a principů spolu s praktickými ukázkami. Cenné budou pro čtenáře a případné zájemce také odkazy na literaturu, ze které bylo čerpáno. Jednotlivá probíraná témata nejsou pojata pouze teoreticky. Vzhledem k tématu a záměru práce je vlastní text často prokládán příklady použití, názornými obrázky a tabulkami přičemž některé obsáhlejší ukázky budou přesunuty do sekce příloh s přehledným seznamem.
11
2 Metodická východiska práce 2.1 Přehled literatury Sledujeme-li vývoj celé problematiky zpracování dokumentů pomocí XML, nejvíce informací bude nalezeno bezesporu na internetu. Poznatky z takovýchto zdrojů však většinou pomáhají při hledání různých řešení daného konkrétního problému a musím podotknout velmi dobře. Na druhou stranu, prohledávání nejrůznějších tuzemských a ve většíně případů zejména zahraničních serverů řešících tuto problematiku bývá velmi pracné a uživatel k takovému počínání potřebuje přinejmenším trpělivost a také znalost anglického jazyka (zejména odborné angličtiny z oblasti informatiky, programování, databází a webových aplikací). Z toho výplývá, že pokud bude mít čtenář zájem o celkovou problematiku jazyka XML a bude chtít nalézt nejenom kusé informace a řešení, ale i vlastní podstatu XML a s tím spojené další oblasti nutné pro využití a správnou implementaci XML do reálného fungování, je lepší nejprve prostudovat ucelené zdroje v podobě četných odborných i uživatelsky příjemnějších publikací zaměřených na základy XML. V případě, že by měl tedy čtenář snahu postupovat nejprve od základů, velmi dobře mu poslouží některá z ucelených publikací vydavatelství Grada Publishing, kupříkladu na základě osobních zkušeností mohu doporučit titul XML pro každého (Kosek, 2000 B). Dalším zdrojem, který je pro tuto práci velmi důležitý je oficiální stránka konzorcia W3C (Quin, 2008 A), kde nalezneme přehled XML aktivit W3C, tj. specifikace standardů, konference, odkazy na software, referenční nástroje a další užitečné odkazy obnovované cca jedenkrát týdně. Vzhledem k tomu, že řešená problematika v této práci vychází z předpokladů alespoň základních znalostí jazyka HTML4, kaskádových stylů a přinejmenším pokročilé úrovně programování skriptovacím jazykem php5, bude vhodné zmínit některé užitečné prameny v podobě skvěle zpracovaných internetových návodů a seriálů týkajících se právě této problematiky (Interval, 2008), (Zvon, 2008). Pro informace o problematice kaskádových stylů může čtenář sáhnout do útrob známého serveru Jak psát web (Janovský, 2008) či Tvorba webu (Grimmich, 2008). V této práci se také bude později dosaženo souvislostí s aplikací XML v databázích, což s sebou nese nutnost znalosti dotazovacího jazyka SQL a alespoň základní schopnosti pro práci s databází Oracle. Prameny pro tuto problematiku jsou v manuálech společnosti Oracle a např. v publikaci Mistrovství v Oracle Database 10g (Loney, 2006). Ke studiu lze doporučit také texty vznikající na jiných univerzitách, jejichž cílem jsou podobná (různě striktní) doporučení pro zpracování dokumentů XML (Mareš, 2004) či ukládání XML do databází (Vanický, 2004). V této souvislosti by bylo vhodné zmínit možnost, že se čtenář setká i s méně zdařilými zdroji, vzniklými často kompilací zastaralých materiálu, v nichž jsou bez korekce převzaty již evidentně neplatné nebo pro současné technické podmínky nepoužitelné pasáže. Skupinou pramenů, které jsou rovnež nezbytné pro rešení dané problematiky, je bezesporu soustava všech príruček, popisujících technické a uživatelské vlastnosti použitého počítačového programového systému. I v těchto příručkách (případně i učebnicích) však budou často nalezeny základní nesrovnalosti spojené především se způsobem aplikace. Spolehlivě je možné zjistit, jak se příslušná technologie ovládá (syntaxe programovacího jazyka, manuál dotazovacího jazyka), ovšem důvody, proč danou funkci použít, již vykazují 4
Zkratka Hypertext Multiple Language
12
závažné nedostatky. Vzhledem ke značnému rozsahu této skupiny pramenů zde nemužeme uvést výčet existujících titulů, které by si citaci zasloužily. Obecně však lze konstatovat, že je nutné příručky (a bohužel i knihy reprezentující kategorii učebnic) využívat zejména pro informace technického rázu, nikoliv pro informace charakteru aplikačního.
2.2 Východiska práce Lidé si už asi zvykli na překotný vývoj v oblasti informačních technologií. Vždyť kdo z nás znal před pár lety pojmy jako Java, MP3 nebo XML? Podrobnějším pátráním však bude zjištěno, že za všemi novinkami stojí dlouholetý vývoj. I přesto asi může překvapit, že historie XML je více jak třicetiletá. V šedesátých letech řešila firma IBM problém ukládání velkého množství právních dokumentů. Potřebovala vymyslet formát, který by měl dlouhou životnost, nebyl závislý na používaných programech atd. Výsledkem jejich snažení byl obecný značkovací jazyk, který se v praktickém nasazení osvědčil. Jazyk se postupně rozšiřoval, až se z něj v roce 1986 stal jazyk SGML (Standard Generalized Markup Language), který byl přijat za ISO normu s číslem 8879. SGML bylo velice flexibilní, aby vyhovělo různým požadavkům. To byla jeho velká přednost, ale zároveň i největší slabina. Vývoj aplikací, které by plně podporovaly SGML, byl velice nákladný. SGML se proto používalo převážně na velkých projektech jako byla dokumentace ke zbrojním systémům americké armády nebo například technická dokumentace letadel Boeing. První masově rozšířenou aplikací SGML byl jazyk HTML. Jazyk HTML byl zpočátku malou množinou tagů, které umožňovaly vytvářet hypertextové dokumenty. Výrobci prohlížečů postupně HTML rozšiřovali, aby se zavděčili uživatelům, kteří měli stále větší požadavky. Začaly tak vznikat problémy s kompatibilitou, které vyústily v nutnost vytvářet stránky v několika verzích pro různé verze prohlížečů. Konsorcium W3C se snažilo tomuto trendu zabránit tím, že by právě pomocí SGML přesně definovalo, které tagy a kde mohou webové stránky obsahovat. Vznikly tak postupně jazyky HTML 2.0, HTML 3.2 a HTML 4.0. Výrobci prohlížečů však stále přidávali nové tagy a působili tím značné komplikace především autorům stránek. Bylo jasné, že současný stav je neudržitelný a že web potřebuje novou technologii, která by byla mnohem flexibilnější než HTML. Výsledkem práce několika předních odborníků byl jazyk XML, jehož finální verze byla publikována v únoru 1998. Jazyk XML je zjednodušenou podmnožinou SGML. Byl tak odstraněn největší problém SGML a to přílišná složitost. Flexibilita však zůstala zachována, a tak XML narozdíl od HTML umožňuje tvorbu dokumentů s vlastními tagy a s možností validace dokumentů oproti DTD. Situace, která se vyvíjí okolo problematiky XML v současné době, hovoří o XML nejčastěji v souvislosti s WWW a považuje XML za nástupce dnes hojně používaného jazyka HTML. Pro řešení daného témata bakalářské práce budeme vycházet z předpokladu výhod XML, které spočívají v tom, že XML nezůstává pouze technologií určenou pro web. Využití se dá nalézt všude, kde je potřeba jedny informace prezentovat v několika formátech, v tištěné podobě na papíře, jako publikaci na CD-ROM a na webu. Výhoda XML spočívá také v tom, že kromě samotného textu nese i informaci o jeho významu. Konverze do libovolného formátu je pak snadná a může probíhat zcela automaticky. XML proto nalézá uplatnění při tvorbě technické dokumentace, což v některých oblastech průmyslu znamená práci s tisícistránkovými dokumenty, které je potřeba několikrát ročně aktualizovat a distribuovat uživatelům v různých formách. Příspěvky do různých vědeckých a odborných časopisů je dnes rovněž potřeba publikovat i elektronicky kromě tradiční papírové podoby. XML se nabízí jako otevřený standard pro uchovávání a výměnu tohoto typu dat.
13
Dalsí nespornou výhodou je to, že autor stránky může používat vlastní tagy, které dokáží mnohem přesněji označit význam prezentovaných informací. To má velký význam především pro vyhledávání informací. Dnešní web je informacemi přehlcen a nalézt konkrétní informaci je stále obtížnější a mnohdy i nemožné. Tento problém nevyřeší sebelepší prohledávací servery, pokud jim nepomohou autoři stránek, kteří pomocí XML uloží do stránek mnohem více metainformací.
Obr. 1: Množství energie nesoucí XML (Kosek, 2008 A) V jazyce HTML musí autor z větší části definovat, jak se má daný text zobrazit, a ne co znamená. Představme si nyní, že by část ceníku na webové stránce byla zapsána pomocí XML následujícím způsobem: Hifi věž SuperSound PX 5378356 <měna>Kč Nyní je vidět, jaký význam mají jednotlivé části stránky. "Hifi věž SuperSound PX 537" je název výrobku a stojí 8356 Kč. s těmito znalostmi není problém zadat vyhledávacímu serveru příkaz k nalezení všech stránek, které obsahují informace o dané hifi věži, a jejich seřazení podle ceny. Je vidět obrovský posun oproti HTML, v něm bylo nanejvýš možno hledat všechny stránky, které obsahují název hifi věže. Můžeme dokumenty nejen prohledávat, ale v konečné fázi i zobrazovat. v jazyce HTML je vše jednoduché. Jednotlivé tagy určují, jak se má daná část stránky zobrazit. v XML žádná podobná přímá vazba neexistuje, a proto je nutno způsob zobrazení jednotlivých elementů dokumentu definovat jiným způsobem, pomocí stylů. Ve stylu pak může programátor pro každý element určit, jak se má zobrazit (řez a velikost písma, barva, zarovnání, umístění apod.). Podle takového přání tak může programátor výše uvedenou část ceníku zobrazit třeba v přehledné tabulce. Velká výhoda stylů spočívá v tom, že jsou od samotného dokumentu odděleny a jsou v samostatném souboru. Jeden styl se může využívat v mnoha XML dokumentech a dosáhnout tak jednotného vzhledu mnoha stránek. Na druhou stranu, pokud bude potřeba
14
změnit design stránky, stačí drobně opravit styl a změna se promítne na všech stránkách, které styl používají. Kaskádové styly (CSS) bylo možné používat i v HTML. Jejich použití však bylo pouze doplňkem, kterým jsme mohli modifikovat vzhled některých elementů. Autoři stránek mohli zcela beztrestně "zneužívat" jednotlivé HTML tagy pro dosažení požadovaného vzhledu stránky. XML dokument bez stylu nelze zobrazit, autoři tak ztratí důvod pro vytváření špatně strukturovaných stránek, které však dosahují požadovaného vzhledu.
2.3 Metodika řešení Všech vytyčených cílů, které byly uvedeny na začátku této práce, bude dosaženo pomocí konkrétního modelového příkladu, díky kterému budou nastíněny světlé stránky práce s moderními XML nástroji. Čtenář se také seznámí s problémy a zákoutími, do kterých se při práci s XML může dostat. Tedy jako demonstrativní příklad bude zvolena situace, při níž bude nutné zhotovit webovou aplikaci, která bude svým způsobem informačním systémem spravující dokumenty pevně dané a neměnné struktury. Konkrétněji řečeno, bude se jednat o odborné dokumenty a texty, u kterých se předpokládá velký počet znaků (velký rozsah dokumentů) a struktura bude dána jednotlivými odstavci, které jsou opět předpokladem každé odborné práce, tedy mohou být uvedeny tyto části: • • • • • • • •
Název Abstrakt Úvod Stať Závěr Anotace Literatura Odkazy
Byl tedy jasně stanoven problém a k jeho splnění bude využito XML technologií. Bude se tedy muset nejprve zvolit programovací jazyk, pomocí nějž budou vytvořeny základy a struktura aplikace. Dalším důležitým krokem k úspěšnému dosažení cíle je správný výběr typu XML nástroje, které nabízí programovací jazyk. v souvislosti s tímto rozhodnutím je nezbytné shodnotit i fakt, jaké možnosti nabízí programátorovi databázový systém respektive jaké má uživatel možnosti při uchovávání dokumentů. Poté, co bude zvolena platforma i úložiště se už bude práce zabývat pouze rozmanitými funkcemi XML pro práci s těmito textovými dokumenty a na závěr bakalářské práce bude podáno rozumné a jasné řešení nastolené situace.
15
3 Návrh řešení 3.1 Analýza a modelace problému Na následujících řádcích se čtenář seznámí s možnostmi použití XML a v dalších kapitolách se práce pokusí objasnit oblasti, kde je vhodné XML nasadit a kde může použití XML přinést určité komplikace. v žádném případě však nepůjde o kompletní výčet. XML je nový jazyk, a tak dnes všechny jeho aplikace neznají ani ti největší vizionáři. Možnosti uplatnění XML O XML se nejčastěji hovoří jako o novém jazyku pro tvorbu webových stránek. Situace se dnes vyvíjí tak, že XML umožňuje rozšiřovat množinu elementů, které jsou při tvorbě stránek nabízeny prostřednictvím HTML. Stránky v XML jsou zároveň snažší pro čtení než ty současné v HTML, které obsahují mnoho chyb. To umožní vývoj nových jednoduchých prohlížečů určených zejména pro různá kapesní mobilní zařízení. Více informací o budoucnosti HTML čtenář nalezne v článku Budoucnost HTML se jmenuje XHTML (Václavovič, 2001). XML však nezůstává pouze technologií určenou pro Web. Využití nalezne všude, kde je potřeba jedny informace prezentovat v několika formátech, tj. v tištěné podobě na papíře, jako publikaci na CD-ROM a na Webu. Výhoda XML spočívá v tom, že kromě samotného textu nese i informaci o jeho významu. Konverze do libovolného formátu je pak snadná a může probíhat zcela automaticky. XML proto nalézá uplatnění při tvorbě technické dokumentace, což v některých oblastech průmyslu znamená práci s tisícistránkovými dokumenty, které je potřeba několikrát ročně aktualizovat a distribuovat uživatelům v různých formách. Příspěvky do různých vědeckých a odborných časopisů je dnes rovněž potřeba publikovat i elektronicky kromě tradiční papírové podoby. XML se nabízí jako otevřený standard pro uchovávání a výměnu tohoto typu dat. Využití XML může být výhodné i při klasickém publikování na papír. Pokud budou rukopisy odevzdávány v XML, bude jejich import a zalomení v nějakém sázecím systému mnohem jednodušší, než když import provedeme z textového editoru, kde může autor zcela neodborně měnit vzhled dokumentu. Práce se ušetří sazeči, který nemusí opravovat chyby autora, a autor se může soustředit na vlastní psaní textu, na jeho obsah a výslednou grafickou úpravu ponechá na odbornících. Hovoříme-li o XML dokumentech, může to vyvolat dojem, že se XML hodí pouze pro textové dokumenty, tj. webové stránky, dopisy, knihy apod. Opak je však pravdou. Největší objem dat, který bude v podobě XML přenášen, budou strukturovaná data, která se dnes ukládají do relačních databází. XML poslouží jako vhodný přenosový formát komunikaci mezi aplikacemi různých výrobců, mezi webovým serverem a při prohlížečem apod. Další oblastí, ve které se XML dnes používá, je pro přenos metadat. Všichni asi známe formát CDF, který slouží k definici kanálů pro prohlížeč Internet Explorer 4.0. Zcela obecně pak problém metadat řeší nový standard RDF (Resource Description Framework) konsorcia W3C. Z toho vyplývá, že pro zvolený demonstrativní příklad se technologie XML přímo nabízejí a z teoretického hlediska jsou každopádně nejlepší volbou. Z předchozích odstavců bylo zjištěno, že s pomocí XML se dají výborně zpracovávat velmi rozsáhlé dokumenty jako jsou technické dokumentace, což je prakticky i případ odborných textů.
16
Obr. 2: Třívrstvá webová aplikace, XML slouží jako formát pro výměnu dat (Kosek, 2008 A)
3.2 Seznámení s XML Syntaktické minimum jazyka XML V následující sekci bude čtenář stručně seznámen s úplnými základy jazyka XML, jednoduše kvůli tomu, aby čtenář vůbec dokázal pochopit jak celý proces vytváření XML dokumentu funguje a co takovýto proces může ovlivnit. Pro toho, kdo má nějaké zkušenosti s HTML nebo SGML, nebude práce s XML žádný problém. Nutno ovšem podotknout, že oproti HTML musí XML dokument splňovat mnohem přísnější pravidla. Pokud tato pravidla splňuje, říkáme, že dokument je správně strukturovaný (well-formed). Takovýto dokument pak mohou zpracovávat různé aplikace. Každá aplikace obsahuje tzv. parser, který XML dokument načte a pomocí předem daného rozhranní ho zpřístupní aplikaci k dalšímu zpracování. Základním požadavkem na správně strukturovaný XML dokument je, aby byl celý uzavřen v jednom elementu. Celý dokument tedy musí být uzavřen mezi nějaký počáteční a ukončovací tag: <dokument> ...tělo dokumentu... Pozn. v této ukázce je počátečním tagem tag <dokument> a koncovým uzavíracím tagem jest . Všechny tagy musí být párové, to znamená, že pro počáteční tag musí vždy existovat i ukončovací tag . Výjimku tvoří prázdné elementy, které nemají žádný obsah. Jim odpovídající tag však musí být ukončen znaky ‘/>‘ místo pouhého ‘>‘. To umožní parseru snadné rozpoznání prázdných elementů. Příkladem prázdného elementu může být například . V XML se mohou používat atributy podobně, jak je známo z HTML. Narozdíl od HTML však bude programátor muset vždy obsah atributu uzavřít do uvozovek nebo apostrofů: <para security="public"> ...veřejně přístupný text...
17
V XML jsou jména všech elementů a atributů citlivá na velikost písmen. Na to musí dávat čtenář dát pozor, zejména pokud dokumenty bude připravovat ručně. Zvykem bývá psát všechna jména malými písmeny, aby opadla nutnost pamatovat, kde je náhodou velké písmeno. Počítače nejsou dnes již jen záležitostí anglicky hovořících zemí, a tak bylo v XML hned od začátku pamatováno na potřeby ostatních jazyků. Jako standardní znaková sada se v XML dokumentu používá Unicode (ISO 10646), která obsahuje všechny dnes používané znaky. Zajímavostí je, že různé národní znaky můžeme používat i v názvech elementů a atributů. Nic tedy nebrání tomu, aby si Japonci své elementy pojmenovali v Japonštině. Standardně se předpokládá, že dokument bude uložen v kódování UTF-8, které má prvních 128 znaků shodných s ASCII. Pokud v dokumentu použijeme jiné kódování, musíme to uvést v XML deklaraci: <dokument> ... Pozn. Jak je vidět z ukázky, v hlavičce nového XML bylo určeno specifické unixové kódování ISO-8859-2. Toto kódování je známé zejména tuzemským čtenářům, kteří mají snahu zavést češtinu do svých dokumentů. Je nutné zmínit, že kódování musí být poté uvedeno u všech dalších dokumentů a musí se shodovat. Také je nutné si dávat pozor, jestli je takové kódování umožněno u poskytovatele serveru. Chybná jazyková sada totiž může způsobit nefunkčnosti při zobrazování dokumentů. Definice typu dokumentu (DTD) Použití DTD přináší mnoho výhod. Asi největší z nich je možnost automatické kontroly XML dokumentu oproti DTD. Pomocí parseru může čtenář velice snadno zjistit, zda v dokumentu něco nechybí nebo naopak nepřebývá. Pokud by se například do XML ukládaly fakturační údaje a existovalo by pro ně odpovídající DTD, může se zkontrolovat, zda faktura obsahuje všechny náležitosti, tj. dodavatele, odběratele, datum splatnosti apod. Další výhody přináší používání již existujících DTD. Pokud dokumenty používají DTD, které se běžně užívá, otevře se tak cesta k mnoha jednoúčelových nástrojů, které práci s dokumenty usnadní. Jako příklad může posloužit jazyk HTML, ten je definován také pomocí DTD (i když pro jazyk SGML a ne XML) a dnes je přímo podporován nepřebernými množstvími editorů, prohlížečů a dalších aplikací. Příkladem jak může vypadat takové DTD pro imaginární XML dokument faktura.xml (uchovávající fakturační data) uložený v souboru faktura.dtd:
18
(#PCDATA)> CDATA CDATA CDATA CDATA
#REQUIRED #REQUIRED #REQUIRED #IMPLIED>
CDATA "CZK">
Pozn. Poté stačí provázat DTD s XML souborem, tímto způsobem: XML schémata DTD umožňují definovat nové jazyky založené na XML. v mnoha směrech je však vidět, že DTD jsou poměrně zastaralá a nevyhovují dnešním potřebám. Jejich největším nedostatkem je nemožnost určení datových typů pro obsah atributů a elementů. Využití automatické kontroly dokumentů, které reprezentují „databázová“ data, je pak v aplikacích velmi omezené. Vzniklo proto několik jazyků pro popis schématu dokumentu. Většina kritiků vytýká DTD především dvě věci, slabou typovou kontrolu a nestandardní syntaxi. Obě dvě slabiny pocházejí ještě z jazyka SGML. Jeho standard vznikal v 80. letech. Tehdy se SGML používalo především pro textová data. Neexistoval tedy požadavek na možnost definice typů. Má-li se dnes XML používat pro výměnu dat v business-to-business aplikacích, musíme mít možnost definovat datové typy na té úrovní, kterou známe z dnešních databázových systémů (celé číslo, desetinné číslo, řetězec dané délky, datum apod.). Nestandardní syntaxe DTD vyžaduje nutnost učit se další jazyk (i když poměrně jednoduchý) pro popis struktury dokumentu. Syntaxe DTD je velice úsporná, což přesně odpovídá požadavkům doby, kdy vznikala. Dnes se zdá, že mnohem vhodnější by byl jazyk, založený na XML. Pro editaci schémat a jejich zpracování již může programátor využít nástroje, které dnes existují pro XML. Všechny nově vzniklé jazyky pro zápis schématu výše zmíněné nedostatky řeší. Kromě toho nabízejí další zajímavé rysy, které se mohou hodit v určitých aplikačních oblastech. Pokud dodržíme výše popsaná pravidla, můžeme vytvářet XML dokumenty. Velká výhoda XML však spočívá v tom, že u dokumentu můžeme určit jeho typ. Typ dokumentu může být např. webová stránka, dopis, kapitola knihy, databáze zákazníků apod. Typ dokumentu určíme v deklaraci typu dokumentu (DOCTYPE): Ozývá se však stále více hlasů, zejména z řad vývojářů programů pro práci s XML, že XML schémata jsou příliš složitá. Samotný standard se skládá ze dvou částí, každá z nich má velikost několika desítek stránek. První část popisuje možnost definice struktury dokumentů, druhá pak použití datových typů. XML schémata jsou příliš obecná a mají spoustu možností. Standard je proto hodně rozsáhlý. W3C konsorcium proto připravilo výtah, který obsahuje úvod do XML schémat a měl by být srozumitelnější. Místo jedné krátké a jasné specifikace se musejí vytvořit tři dlouhé dokumenty. To rozhodně nikoho, kdo chce XML schémata používat, nepotěší. Jak se XML schémata ujmou, bude moci posoudit až nějakou dobu po zveřejnění finální specifikace. Jistou zárukou může být paradoxně i Microsoft, který tvrdí, že ve svých produktech přejde z XDR na XML schémata po tom, co budou standardizována.
19
Ukázka XML dokumentu Společnost XX s.r.o.Za Výtopnou 7... ... <dodavatel> Společnost YY a.s.La Florenci 8... ... <polozka> <popis>Lějaký popis produktu 25899 ... <polozka> ... Pozn. Druhá řádka ukázkového XML dokumentu říká, že definice typu dokumentu Document Type Definition5 je uložena v souboru faktura.dtd. DTD definuje elementy (faktura, odberatel, dodavatel, ...)a atributy (mena, cislo, vystaveni, platnost), které se můžou v dokumentu daného typu použít. DTD pro zápis faktury definovalo, že se faktura skládá z informaci o odběrateli, dodavateli a z položek nákupu.. V DTD se definuje jaké jsou přípustné vzájemné kombinace elementů, které elementy nesmějí být vynechány (#REQUIRED), které se mohou opakovat (značka „+“) atd. Pokud je XML dokument spojen s nějakým DTD, je můžno snadno pomocí parseru zjistit, zda dokument splňuje požadavky definované v DTD. DTD je "malý hlídací pes", který donutí autora do dokumentu zadat všechny údaje, které musí daný typ dokumentu obsahovat. DTD tu slouží jako šablona, známá z dnešních textových editorů. Schopnosti DTD jsou však mnohem větší. Pokud bude XML dokument editován v editoru, který obsahuje parser a umí načíst DTD, editor nám neumožní vytvořit špatný dokument a dokonce napoví, které elementy se mohou v jednotlivých místech dokumentu použít. Pro efektivní výměnu a sdílení informací je potřeba, aby se používala standardizovaná DTD. Přehled nejčastěji používaných DTD naleznete v článku Lejběžnější DTD (Kosek, 2008 D).
5
Definice typu dokumentu, z angličtiny Document Type Definition, dále jen zkratkou DTD.
20
Pěkný kabát pro dokumenty V úvodu práce bylo naznačeno, že vzhled jednotlivých elementů a tím i celého dokumentu je potřeba definovat pomocí stylu. Pro definici vzhledu XML dokumentů se dnes používají tři stylové jazyky CSS (CSS 2), XSL a DSSSL. CSS (Cascading Style Sheets) není nic jiného než kaskádové styly používané v HTML. Kaskádové styly byly původně určeny pouze pro prezentování informací na obrazovce. Další parametry formátování, které je potřeba zadat pro tištěný výstup, byly přidány do nové verze kaskádových stylů CSS2. Pro potřeby XML byly do CSS2 přidána i další rozšíření, která umožňují konkrétní styl aplikovat i na základě hodnoty atributu. CSS1 umožňovalo styl aplikovat pouze na určitý element bez návaznosti na obsah jeho atributů. Protipólem k CSS je jazyk DSSSL (Document Style Semantics and Specification Language). DSSSL je rozsáhlý jazyk, který byl původně vyvinut pro použití s SGML. Jeho použití s XML však nic nebrání. DSSSL je tak komplexní jazyk, že jej zatím nepodporuje příliš mnoho aplikací. Pro potřebu elektronického publikování byla definována jeho podmnožina DSSSL-O, která se hodí pro méně náročné aplikace. Zlatou střední cestou mezi oběma jazyky je XSL (eXtensible Stylesheet Language). Tento jazyk má možnosti srovnatelné s DSSSL, jeho syntaxe je však mnohem jednodušší. Zajímavostí je, že XSL se zapisuje v jazyce XML. Pro tvorbu stylů se může tedy použít stejný editor, který je používán pro tvorbu dokumentů. Jednoduchá manipulace s dokumentem a jeho elementy může být v XSL prováděna přímo. Pokud máme nějaké náročnější požadavky, můžeme je vyřešit pomocí ECMAScriptu. ECMAScript je standardizovaná verze JavaScriptu a v XSL jej může programátor použít pro manipulaci s dokumentem (například může automaticky vygenerovat obsah dokumentu apod.).
3.3 Výběr vhodného jazyka Jak již napovídá nadpis této sekce, bude zde odpovězeno čtenáři na otázku, jaké má možnosti při výběru jazyka, pomocí kterého pak bude aplikovat funkce XML ať už v souborech nebo databázích. Odpověď však není jednoduchá, vzhledem k tomu, že nelze jasně konstatovat, které jazyk je lepší či horší, proto bude raději zvolena smírnější cesta, kdy bude zvoleno několik známých jazyků a nastíněno, jaké možnosti tyto jednotlivé jazyky nabízejí. Následný výběr konkrétního řešení už bude přenecháno na čtenáři, nicméně pro tuto práci bude zvolen konkrétní jazyk, ve kterém budu práci dále řešit a který bude demonstrovat příklad použití XML problematiky. v některých sekcích však bude zajímavé srovnat dané výsledky s výsledky, kterých bychom dosáhli za použití jiného jazyka. Nejprve by bylo vhodné vystvětlit, jak vlastně práce programovacího nebo skriptovacího jazyka probíhá, co se vlastně děje s daty. Prvním krokem ke zpracování XML dokumentu je jeho analýza, kontrola syntaxe, ověření, že dokument odpovídá danému DTD, popř. doplnění neuvedených hodnot atributů z DTD specifikace. Dokument je potom převeden na interní datovou reprezentaci, kterou je možno dále zpracovat. Veškerou tuto činnost (dále nazývanou parsování) zajistí XML parser. Parser si čtenář může představit jako program, který rozumí XML a umí k němu strukturovaně přistupovat. Parser rovněž ví, co má udělat, když v XML dokumentu narazí na určitou jeho část (třeba, když narazí na značku). V zásadě existují dva hlavní přístupy při parsování XML dokumentu. Přístup založený na stromové struktuře a přístup založený na událostech. Na základě načítaných dat je vytvořena stromová struktura objektů, které reprezentují původní dokument. Tato struktura pak slouží k dalšímu zpracování. Lze se v ní jednoduše
21
pohybovat z uzlu do uzlu, provádět výpočty, přidávat nebo rušit uzly a atributy. Naprostá většina parserů podporuje stromovou strukturu DOM. DOM (Document Object Model) je specifikace programového rozhraní W3C konsorcia, použitelná v mnoha prostředích a aplikacích. Definuje logickou strukturu dokumentu a způsob přístupu a manipulace s dokumentem. Java Značkovací jazyk XML se stal de facto standardem pro popis strukturovaných dat. Spolu s procedurálním, na platformě nezávislým programovacím jazykem Java (Armstrong, 2005) vytváří skvělou kombinaci pro tvorbu (nejen) internetových aplikací. Java je stále více používána v rámci aplikačních serverů, které jsou kompletně implementovány právě v tomto jazyce a v naprosté většině případů splňují specifikaci J2EE (Java 2 Enterprise Edition). I když firma SUN tak říkajíc trochu zaspala a J2EE v1.2 neobsahovala podporu XML, ve verzi 1.3 vše napravila. Jak již bylo řečeno, zpočátku SUN v oblasti XML nevyvíjel patřičnou koordinační snahu. Většina dostupných XML parserů v Javě sice používala DOM a SAX, přesto nebylo snadné zaměnit v aplikaci jednu implementaci parseru za jinou. Nakonec však vznikla specifikace Java API6 for XML Processing (JAXP) definující rozhraní pro parsování a manipulaci s XML dokumenty, zahrnující i rozhraní pro XSL transformace. Rozhraní pro parsování jsou definována v balíku javax.xml.parsers: DocumentBuilder je rozhraní, jímž lze získat DOM strukturu reprezentující původní XML dokument. DocumentBuilderFactory slouží k vytváření instancí tříd implementujících DocumentBuilder rozhraní s předem definovanými vlastnostmi. Vlastností může být například to, že je dokument v průběhu parsování kontrolován oproti DTD specifikaci. SAXParser a SAXParserFactory obdobně definují rozhraní pro zpracování dokumentů s použitím SAX API. Zdarma dostupné XML parsery pro Java: • Xerces je parser vyvíjený v rámci Apache XML projektu. • XP - autorem je James Clark, důraz je kladen především na rychlost. • Crimson je odvozen od Projekt X parseru firmy SUN, který je součástí referenční implementace JAXP specifikace. Ukazuje se, že implementace DOM v Javě není příliš intuitivní nebo snadno použitelná. Z tohoto důvodu vznikl někdy na začátku roku 2000 projekt JDOM, jehož cílem je vyvinout API pro manipulaci s XML dokumenty, určené pouze pro Javu. JDOM rozhraní, tak jako DOM, reprezentuje XML dokumenty stromovou strukturou objektů, mělo by však být rychlejší, méně paměťově náročné a hlavně mnohem snadněji použitelné. Následující fragment Java kódu vytvoří reprezentaci jednoduchého JDOM dokumentu, který je následně vypsán jako textový XML dokument: Document doc = new Document ( new Element("doc").addContent( new Element("h1"). setText("Ahoj") ) ); (new XMLOutputter()).output(doc,System.out); 6
API je zkratka anglických slov application programming interface, což znamená rozhraní pro programování aplikací.
22
Konstruovat XML dokument v Javě tímto způsobem je mnohem přirozenější než spojovat textové řetězce. Současně je zajištěno, že výsledný dokument bude korektní. JDOM je nyní ve stádiu Beta 7 a v rámci JCP (Java Community Process) by mělo být definováno JDOM 1.0 API. PHP 5 V případě, že má XML nějakou strukturu, nebude nutné k němu přistupovat „bajt po bajtu“ a „luštit“ jej pomocí funkcí sestavených v potu vlastní programátorské tváře (ačkoliv možné to samozřejmě je). v páté verzi PHP (Gutmans, 2005) existují již hotové knihovny pro práci s XML. PHP například používá Expat7. PHP, pokud není výslovně nezakázáno, má po instalaci podporu XML zapnutou, takže může programátor ihned začít využívat funkcí pro práci s XML. Nejdřív ale bude vysvětleno, co všechno musí skript zpracovávající soubor XML dělat: • •
•
Musí vytvořit instanci parseru. Musí zaregistrovat obslužné funkce. Tento výraz znamená to, že se definují funkce v PHP, které stanoví, co s danou věcí (značky, data) dělat poté, co se na ni v dokumentu narazí. a parseru se řekne, že má tyto funkce zavolat. Konečně, parseru se předá vlastní xml soubor a ten jej zpracuje a skončí8.
Naštěstí uvedený postup sice pomůže objasnit zpracování dokumentu XML PHP parserem, nicméně PHP zavádí zárověn modernější způsob práce s XML stejně jako konkurenční společnosti. Takovýmto zlehčením může být kupříkladu zavedení datového typu XMLType, o kterém se bude práce zmiňovat v dalších kapitolách. Pomocí tohoto datového typu totiž může programátor celou problematiku parsování elegantně „obejít“. Zvedení nového dokumentu a práce s ním poté vypadá velmi podobně s Javou a ostatně i s dalšími jazyky. Už díky tomu není nikterak složité přecházet v případě nutnosti z různých jazyků na jiné a mít přitom obavy z nové syntaxe. ASP.NET Ačkoliv je název ASP.NET (Bellinaso, 2008) odvozen od starší technologie pro vývoj webů ASP, obě technologie jsou velmi odlišné. ASP.NET je založen na CLR (Common Language Runtime), který je sdílen všemi aplikacemi postavenými na .NET Frameworku. Programátoři tak mohou realizovat své projekty v jakémkoliv jazyce podporujícím CLR, např. Visual Basic.NET, JScript.NET, C#, Managed C++, ale i mutace Perlu, Pythonu a další. Aplikace založené na ASP.NET jsou také rychlejší, neboť jsou předkompilovány do jednoho či několika málo DLL souborů, na rozdíl od ryze skriptovacích jazyků, kde jsou stránky při každém přístupu znovu a znovu parsovány. ASP.NET ulehčuje programátorům přechod od programování klasických aplikací pro Windows do prostředí webu. Stránky jsou poskládány z objektů, ovládacích prvků, které jsou protějškem ovládacích prvků ve Windows. Při tvorbě webových stránek je tedy možné používat ovládací prvky jako tlačítko, nápis a další. Těmto prvkům lze přiřazovat určité vlastnosti, zachytávat na nich události, atd. Tak, jako se ovládací prvky pro Windows samy kreslí do formulářů na obrazovku, webové ovládací prvky produkují HTML kód, který tvoří část výsledné stránky poslané do klientova prohlížeče. ASP.NET využívá pro práci s XML dokumenty technologii Data Islands (datových ostrůvků), kterou bohužel nepodporují alternativní prohlížeče (např. Netscape a Opera). Tyto prohlížeče chovají poněkud vlažný vztah k celé XML technologii a proto je potřeba XML 7
Expat patří do velké skupiny XML parserů. Pozn. Celá problematika je podána zjednodušenou, avšak lépe pochopitelnou formou. Například jsme nehovořili o zpracování chyb. 8
23
data zpracovávat dynamicky (na straně serveru) tak, aby byl prohlížečům vracen pouze čistý HTML kód. Na závěr se může čtenář podívat, jak může taková práce s XML vypadat v ASP.NET. Tento skript se postará o vyzvednutí souborů ze serveru a naformátování XML dat pomocí XSL šablony: <% SET xmlSoubor = Server.CreateObject("Microsoft.XMLDOM") SET xslSoubor = Server.CreateObject("Microsoft.XMLDOM") xmlSoubor.load(Server.MapPath("./faktura.xml")) xslSoubor.load(Server.MapPath("./faktura.xsl")) response.write(xmlSoubor.transformLode(xslSoubor)) SET xslSoubor = Lothing SET xmlSoubor = Lothing %> Pozn. Je patrné, že se do proměnné „xmlSoubor“ ukládá XML dokument „faktura.xml“ a naopak do proměnné „xslSoubor“ se ukládá šablona pro XML dokument, tedy „faktura.xsl“. Jedním příkazem se poté dostává na výstup celý formátovaný dokument. Významná je skutečnost, že je ASP.LET velmi výhodné při transformaci jednoho dokumentu do více formátů. v porovnání s PHP je v této oblasti propracovanější.. Perl Tento šikovný dynamický programovací jazyk nabízí velmi podobná řešení pro práci s XML dokumenty jako ostatní již zmíněné jazyky. Perl (Lemay, 2002) jako takový skýtá obrovské množství funkcí a metod pro práci a zpracovávání textů, tudíž se přímo nabízí k využití v oblasti zpracování rozsáhlých XML dokumentů, ovšem je dobré si uvědomit, že síla Perlu se významněji projeví až při spojení s databázemi. Tento programovací jazyk nabízí pomocí svých rozšíření DOM a v podobě dalších XML balíčků velmi snadný přístup k XML dokumentům a práci s nimi. Příklad syntaxe Perlu pro načtení XML dokumentu potom může vypadat například takto: #!/usr/bin/perl use XML::Parser; $xp = new XML::Parser(); $xp->setHandlers(Start => \&start, End => \&end, Char => \&cdata); $xp->parsefile("./faktura.xml"); Pozn. Prvním řádkem se pouze definuje, že se opravdu jedná o skript jazyka Perl, vloženy jsou další moduly (XML::Parser) a poté nastaveny ovládací prveky dokumentu a parsování může začít. Opět upozorňuji na to, že i v Perlu se dají využít daleko snazší postupy pro práci s XML (např. DOM a jiné).
24
Shrnutí Výše uvedené ukázky kódů názorně ukazují některé z možných cest jak pracovat s XML pomocí různých programovacích jazyků. Je ale jasné, že nutně musejí existovat i další cesty jak dosáhnout stejného výsledku, ke kteréme se čtenář dobere v předchozích ukázkách. Je dobré si uvědomit, že bez ohledu na to, v jakém jazyce se bude pracovat, lze naleznout u každé platformy různé metody pro dosažení stejného výsledku za použití odlišných postupů. Oněch cest existuje totiž celá řada, záleží na programátorovi, který zvolí některý ze způsobů, zřejmě na základě svých vlastních zkušeností z předešlých projektů apod. Pro demonstrativní příklad týkající se XML dokumentů bude vybráno programové rozšíření jakyka PHP 5 a nebude to nic jiné než-li DOM XML balíček. Takovýto výběr jsem zvolil na základě skutečností diskutovaných v předešlém odstavci a to tedy zejména na základě vlastních zkušeností a znalostí tohoto jazyka a také nemožností aplikovat funkce XML za pomocí ASP.NET, což je v mém případě spolu s Javou velký favorit co se týče komfortnosti a funkčosti v rámci XML technologií z důvodu absence tohoto software na serveru, kde bude práce zprovozněna. Proto mohu jen doporučit, aby si čtenář vyzkoušel práci s XML v jazyce ASP.NET, kupříkladu ASP.NET pomocí jazyka C# (Jícha, 2003).
3.4 Vhodné funkce XML DOM v PHP DOM (akronym anglického Document Object Model - objektový model dokumentu) je objektově orientovaná reprezentace XML nebo HTML dokumentu. DOM je API umožňující přístup či modifikaci obsahu, struktury, nebo stylu dokumentu, či jeho částí. Původně měl každý webový prohlížeč své vlastní specifické rozhraní k manipulaci s HTML elementy pomocí JavaScriptu. Vzájemná nekompatibilita těchto rozhraní však přivedla W3C k myšlence standardizace, a tak vznikl W3C Document Object Model (zkráceně W3C DOM). Tato specifikace je platformně a jazykově nezávislá. Předchozí specifická rozhraní byla nazvána Intermediate DOM (anglicky přechodný DOM). DOM umožňuje přístup k dokumentu jako ke stromu, což je zároveň datová struktura používaná ve většině XML parserů (Xerces, MSXML) a XSL procesorů (Xalan). Tato technologie, nazývaná grove (Graph Representation Of property ValuEs), vyžaduje nahrání celého parsovaného dokumentu do paměti, z čehož plyne, že její optimální použití je tam, kde je k jednotlivým elementům dokumentu přistupováno v náhodném pořadí nebo opakovaně. Existuje i alternativní technologie pro případ, že je potřeba postupná, nebo jednorázová úprava – sekvenční model SAX, který má v těchto případech výhodu rychlejšího zpracování a nižší paměťové náročnosti. V praktické části se bude práce zaobírat zejména ovládáním XML dokumentů skrze DOM API s PHP 5. Vznik nového XML dokumentu Nyní může být zaměřena pozornost i k praktické části práce, ve které se budou zpracovávat rozsáhlé XML dokumenty pomocí DOM XML. Je nezbytné objasnit, jak se takovéto XML dokumenty doslova „skládají“. Jelikož v této části bakalářské práce je čtenář plně seznámen s tím, jak takový zdrojový XML dokument může vypadat, nebude težké si představit, jak by mohl vypadat zdrojový dokument pro demonstrativní příklad. Pro představu bude nevržena ilustrativní situace, kdy čtenář je povoláním redaktor pro nějaké odborné tiskoviny a předmětem jeho práce je přispívání stále novými komentáři k aktuálním technologickým událostem ve světě. Dalším předpokladem je, že každý takový
25
komentář bude mít konkrétní název, také autor dospěje k nějakému závěru, diskusi a doloží, z jakých zdrojů informací pro článek čerpal. Situace tedy může být trošku zjednodušena, budeme předpokládat, že komentátor bude psát články stále se stejnou strukturou a to takovou, že každý nový článek bude mít, jak bylo zmíněno, název, také abstrakt, úvod, oddíly statě, oddíly diskusí, závěr, anotaci, užitečné odkazy a použitou literaturu. v tomto okamžiku již může takovýto pracovník svoji pracovní činnost značně zjednodušit tím, že si sám vytvoří a nebo někomu zadá k vytvoření jednoduchou aplikaci pro práci s oněmy komentáři. Taková aplikace mu později poslouží k velmi jednoduchému vložení nového článku, dalších úpravách a editacích článku, vyhledáváních článků a tisk článků do různých výstupů podle rozličných šablon. A přesně taková situace bude řešena právě z pozice programátora, který takovou zakázku mohl získat. Jak bylo čtenáři sděleno na začátku této práce, naše rozsáhlé XML dokumenty budou tedy možnými komentáři, struktura dokumentů je dána jasně, takže vzorový dokument může vypadat takto: <dokument> Vzorový XML dokumentText abstraktuText úvodu <stat> <s_podnadpis>Podnadpis statě <s_text>Text statě Podnadpis diskuseText diskuseText závěruText anotaceLázev tituluAutor tituluVydavatelství200880-7169-860-1www.zdrojinformaci.czwww.odkaz.czPopis odkazu
26
4 <prijmeni>Lovák <jmeno>Jan Pozn. La začátku dokumentu byly definovány textové tagy název, abstrakt, úvod, dále oddíl statě a diskuse, které jsou členěněny ještě na podnadpis a text oddílu. Toto bylo zavedeno z důvodů, o kterých se čtenář více dozví v dalsí sekci práce, kde budeme v takovýchto XML dokumentech vyhledávat informace. Dále je z kódu patrné, že dokument bude nést také informace o autorovi, použité literatuře a odkazech. Z přehledného zápisu je patrné že, XML dokument není nikterak složitý, je jednoduchý, intuitivní a hlavně rozumíme již zdrojovému obsahu a právě to je kouzlo XML zápisu. Nyní jsou známy všechny podstatné náležitosti k vytvoření vzorového dokumentu. Ještě před tím však bude uvedeno, jaké změny nastaly v rámci nové verze jazyka PHP, verzi páté, a DOM XML. Starší funkce Pátá verze PHP s sebou přinesla i v oblasti XML některé změny, které je nutno vzít v potaz a počítat s nimi. Kupříkladu se v nové verzi neobjevily některé funkce verze čtvrté a to z toho důvodu, že jednoduše nepasovali do standardu DOM a tak se vývojáři rozhodli dále takovéto funkce nepoužívat. Tyto funkce jsou uvedeny v níže uvedené tabulce. Také funkci DomLode_append_child() bylo pozměněno chování. Nyní přidává potomka a ne sourozence jako dříve. V případě, že by tyto změny ničily čtenářovy aplikace, může využít alternativních funkcí, nepatřících do standardu DOM funkcí DomLode_append_sibling(). Nejen proto, že bude možná nutné hledat při práci na aplikacích XML další alternativní řešení, bude níže uvedena přehledná tabulka (tab. 1), ve které čtenář nalezne výtažek z některých pozměněných funkcí z předchozí verze PHP 4. Jak je z tabulky patrné, některé funkce nahradily funkce nové, které jsou ale zároveň použity i jako další náhražky, z toho vyplývá, že vývojáři nové verze PHP 5 sledovali určíté zjednodušovaní a snižování obsáhlosti a počtu funkcí, splynutím více předchozích funkcí v jednu novou.
DomDocument_create_element() a poté DomNode_append_child() DomDocument_create_text_node() a poté DomNode_append_child() Obsah uzlu je pouze text a může být vytvořen pomocí DomNode_child_nodes() Obsah uzlu je pouze text a může být přidán pomocí DomNode_append_child()
28
Frekventované a užitečné funkce Programovací jazyk PHP 5 nabízí, stejně jako další platformy, v rámci rozšíření DOM XML spoustu více či méně užitečných funkcí pro práci s XML dokumenty. v tabulce (tab. 3) byly vybrány ty nejpoužívanější funkce pro práci s naším vzorovým XML dokumentem. Tabulku naleznete v příloze. Generování nového dokumentu Poslední fází v procesu vytváření nového XML dokumentu bude vlastní naprogramování skriptu pro nagenerování nového DOM dokumentu, všech tagů, které jsme popsali ve vzorovém XML dokumentu. Takovýto skript je velmi jednoduchý a díky objektovému XML DOM i velmi intuitivní a snáze pochopitelný. Celý kód může vypadat například takto: $dom = new DOMDocument('1.0'); $root = $dom->createElement("dokument"); $dom-> appendChild($root); $obs = $dom-> createElement("obsah"); $root-> appendChild($obs); $naz = $dom-> createElement("nazev"); $obs-> appendChild($naz); $text = $dom-> createTextLode("Testovací document"); $naz-> appendChild($text); $abs = $dom-> createElement("abstrakt"); $obs-> appendChild($abs); $text = $dom-> createTextLode("Text abstraktu"); $abs-> appendChild($text); $uv = $dom-> createElement("uvod"); $obs-> appendChild($uv); $text = $dom-> createTextLode("Text uvodu"); $uv-> appendChild($text); Pozn. v předcházející části skriptu byl úspěšně a s lehkostí vytvořen nový dokument uložený v proměnné $dom (prozatím jen s některými uzly), přičemž v textových uzlech budou namísto hodnot „Testovací dokument“, „Text abstraktu“ atd. opravdové hodnoty respektive texty odstavů, které uživatel zadá pomocí nějakého šikovného formuláře z webu např. vlastní řešení pro vzorovou aplikace na webu, v příloze a (obr. 4). Shrnutí Důležitým upozorněním je skutečnost, že vytvoření nové třídy typu DOMDocument verze 1.0 musí být provedeno na úplném začátku celého kódu, běžně se umisťuje na úvod celého skriptu, i když to není nezbytně nutné. Jak jistě vnímavý čtenář pochopil, funkce CreateElement() vytvoří nový prázdný element typu DOMElement, u kterého se poté očekává, že do něj bude buď přidána nějaká hodnota a nebo se stane rodičem, ostatně jako v předešlém případě, dalších nově vytvořených nyní již textových uzlů příkazem CreateTextLode(). Nakonec bude přídán nově vytvořený uzel k rodičovskému uzlu příkazem AppendChild() a úkol je splněn. Jednoduchým „nabalováním“ dalších a dalších tagů na kořenový a následně rodičovské tagy je tvořen daný vzorový XML dokument, doplněn je navíc o oddíly statí,
29
diskusí a další, úplně stejným postupem. Na konci toho je dokument sestaven a připraven pro další zpracování, uložení či vypsání na výstup za předpokladu, že již bude připravena funkční šablona pro transformaci (šablona XSL stylů). Jenom pro zajímavost by mohlo být uvedeno, jak by celý postup mohl vypadat, kdybychom preferovali méně příkazů, proměnných a také kratší kód. Vzhledem k tomu, že se s DOM XML dá vcelku dobře kouzlit, mohl by zápis vypadat i nějak takto: $dom = new DOMDocument ('1.0'); $root = $dom-> appendChild (new domElement('dokument')); $obs = $dokument-> appendChild (new domElement('obsah')); $nazev = $obs-> appendChild (new domElement('nazev', 'Testovací dokument')); $abstrakt = $obs-> appendChild (new domElement('abstrakt', 'Text abstraktu')); $uvod = $obs-> appendChild (new domElement('uvod', 'Text uvodu')); Pozn. Výše ukázaný postup je alternativou k předešlému zápisu. Jde jen o to, že se dají některé příkazy uvést přímo jako parametr jiných funkcí (jako vytváření elementů přímo v příkazu AppendChild(novy element(‘text_elementu’))).
3.5 XML v databázích Tématem této bakalářské práce jsou vlastně vzájemné souvislosti a vztahy XML (coby jeden z moderních a žhavých přístupů současnosti) a databází. v této kapitole bude objasněno, jaký je vztah mezi technologií XML a databázemi. Z toho vyplývá, že všechny doposud zmiňované informace znamenaly pro čtenáře jakousi formu velmi zkráceného, doslova, rychlokurzu nad problematikou XML a nyní již může začít diskuse o tom, co bylo definováno v kapitole Cíle práce a jeho dílčích krocích. Pokud má čtenář této práce pochyby o tom, zda-li správně pochopil úplné základy práce s XML a PHP, můžou mu být doporučeny buď zajímavé seriály a návody českých a zahraničních serverů např. server Živě (Švestka, 2000), Interval.cz nebo velmi dobře zpracované publikace základů XML (Žák, 2002) popřípadě jazyka PHP 5 (Bráza, 2005) a mnoho dalších zdrojů uvedených v sekci použité literatury v závěru bakalářské práce. Databáze neboli datová základna je integorvanou počítačově zpracovávanou množinou dat nebo si také můžeme představit data využívaná ve více aplikacích. Za integrovanou počítačově zpracovávanou množinu dat bychom však mohli považovat snad jakýkoliv počítačový soubor uložený na počítačovém paměťovém médiu. Vzhledem k tomu, že technologie XML mohou být podporovány konkrétními produkty vystavěnými nad XML technologiemi, např. databázovými systémy pro práci s XML, tzv. XML databázovými systémy, bude provedena nejjednodušší cestou analýza některých nejznámějších nabízených produktů současnosti. Čtenář se dozví, jaké se objevily mezi XML databázovými systémy novinky a který produkt je nejvhodnější pro prakticky řešený vzorový příklad. Datové a dokumentové XML XML dokumenty lze rozdělit na 2 skupiny. První skupinu tvoří XML dokumenty, které obsahují spíše data a druhou XML dokumenty, které v sobě ukládají spíše dokumenty. Datové XML dokumenty bývají v literatuře označovány také jako „dokumenty zaměřené na data“ („data-centric XML documents“) či „XML dokumenty s datovým obsahem“.
30
Tyto XML dokumenty používají XML jako vhodnou formu pro přenos dat. Jsou povětšinou určeny pro potřeby jiných programů, ne pro zpracování lidmi. XML slouží pouze jako jakási obálka pro přenos. Životní cyklus takových dat je nejčastěji takový, že data jsou na počátku v nějaké databázi či aplikaci, poté jsou „zabalena“ do XML a přenesena do jiné databáze či aplikace. XML forma vyjádření těchto dat je v podstatě druhotná a dočasná. Jako příklad možných datových XML dokumentů lze uvést: • • • • • •
Objednávky Faktury Vědecká data (např. chemická, záznamy měřících přístrojů,…) Ceny akcií Dokumenty vytvářené z dat na základě nějaké šablony Exporty dat z databází
Datové XML dokumenty se vyznačují poměrně pravidelnou strukturou, jemně granulovanými daty (v elementech či atributech jsou uloženy co nejmenší logické jednotky dat) a malým či žádným výskytem smíšeného obsahu v elementech. Důležitou vlastností je, že nezáleží na pořadí v jakém jsou jednotlivá data (v elementech) seřazena. Respektive nezáleží na tom z pohledu aplikace, která data načítá. XML dokument nicméně stále musí být validní vůči svému schématu. Data, která tyto dokumenty obsahují tedy nejčastěji pochází z databází či do databází směřují. Dokumentové XML dokumenty bývají v literatuře, obdobně jako datové XML dokumenty, pojmenovávány různě: „dokumentově zaměřené dokumenty“ („document-centric XML documents“) či „XML dokumenty s datovým obsahem“. Tento typ XML dokumentů je většinou určen přímo pro čtení či zpracování lidmi. Charakterizuje je méně pravidelná či nepravidelná struktura, hrubá granulace dat a hojné používání smíšeného obsahu. Pořadí v jakém jsou za sebou psány jednotlivé elementy je relevantní a zásadní. Tyto dokumenty jsou nejčastěji psány „ručně“ a to přímo v jazyce XML či např. ve formátu RTF, PDF,…, které jsou poté do XML zkonvertovány. Data těchto dokumentů obvykle nepochází z databáze. Příkladem dokumentových XML dokumentů mohou být: • • • •
Knihy E-maily Reklamy Technické dokumentace
Databázové systémy s podporou XML Databázové systémy s podporou XML (anglicky „XML Enabled DBS“) jsou databázové systémy, které obsahují rozšíření své funkcionality o přenos dat mezi XML dokumentem a svou databází. v současné době lze tímto termínem označit velkou skupinu (převážně relačních) databázových systémů, které s postupným rozšířením XML obohatily svou funkcionalitu. Příkladem jsou známe databázové systémy Microsoft SQL Server, Oracle, IBM DB2 či Sybase ASE 15.0. Sybase Adaptive Server Enterprise Sybase Adaptive Sever Enterprise (ASE) je databázový server splňující náročné požadavky mission-critical OLTP aplikací a aplikací analytického DSS charakteru. Tradiční podpora otevřených standardů poskytuje platformu pro flexibilní a rychlou integraci datových zdrojů v prostředí heterogenních systémů. Vysoce efektivní optimalizátor dotazů v ASE zajišťuje nepřekonatelnou úroveň výkonnosti a škálovatelnosti.
31
Nejnovější verze staví na těchto pevných základech a přináší inovace zaměřené na oblast e-Businessu, zahrnující efektivní podporu datových typů charakteristických pro eBusiness, dynamické změny výkonnostních parametrů reflektující nepredikovatelnou povahu Internetových aplikací, zvýšenou bezpečnost pro maximální ochranu obchodních dat v distribuovaném prostředí Internetu. Sybase ASE se tedy v nové verzi zaměřuje spíše na elektronické obchodování, funkcionalita XML pokrčuje ve šlépějích starši verze ASE 12.5.1, které spíše sporadicky rozšiřuje o XML Management balíček a vylepšuje spolupráci s platformou Java (Sybase, 2004). Microsoft SQL Server 2005 SQL Server 2005, který dále rozšiřuje výkonné funkce produktu SQL Server 2000, představuje integrované řešení pro správu a analýzu dat. Relační databáze jsou zabezpečenější, spolehlivější, škálovatelnější s vysoce dostupným relačním databázovým strojem se zvýšeným výkonem a podporou strukturovaných a nestrukturovaných dat XML. v nové verzi byly rozšířeny možnosti upravování a dotazování XML dat. Pro ještě lepsí dotazování nad XML daty byla prohloubena možnost indexování založeném na nákladovém rozhodování. SQL Server 2005 umožňuje jako jeho předchůdce získat z databáze výslednou množinu dat ve formě XML elementů. k tomu slouží rozšíření operace SELECT (výběrová datová operace). Rozšíření se provede tak, že za příkaz SELECT přidáme výraz FOR XML. FOR XML však nelze použít vždy. Nelze jej použít např. ve vnořených dotazech, v uložených procedurách, v dotazech obsahujících klauzuli ORDER BY, ... atd . Pokud použijeme FOR XML bude výsledkem operace vždy jeden řádek, který obsahuje celý XML výstup, pokud by se chtěl čtenář dozvědět více, dozví se komplexní informace v podporách společnosti Microsoft (Rys, 2004). IBM DB 2 XML rozšíření databázového systému DB2 (Nash, 2003) od firmy IBM se jmenuje XML Extender. XML Extender není základní součástí databázového systému, můžeme si ho však stáhnout ze stránek IBM a doinstalovat ho do DB2. XML Extender přidává k databázovému systému DB2 nové datové typy, funkce a schopnost indexovat XML obsah. Pomocí tohoto rozšíření můžeme: • • •
ukládat do databáze XML dokumenty transformovat data z XML dokumentu do tabulek transformovat data z tabulek do XML dokumentu
XML dokument (a jeho XML schéma) může být uložen do databáze dvěma způsoby: • •
v „XML sloupci“ v „XML kolekci“
V případě použití XML sloupce je celý XML dokument uložen v některém ze tří poskytovaných XML datových typů ( XMLCLOB, XMLVARCHAR a XMLFile). XMLCLOB a XMLVARCHAR ukládají XML dokument jako CLOB a VARCHAR, kdežto XMLFile jako soubor v lokálním souborovém systému. DB2 umožňuje pomocí tzv. „definice přístupu k datům“ (DAD – Data Access Definition) definovat, které elementy a atributy XML dokumentu mají být indexovány. Uložení do XML sloupce je jednoduché a výhodné v situacích kdy v XML dokumentu potřebujeme často vyhledávat, přičemž nepředpokládáme časté aktualizace. Načtení XML dokumentu z XML sloupce je rychlé, protože není potřeba
32
XML dokument sestavovat z více tabulek. k vyhledávání v XML sloupci se používá XPath kombinovaný s DB2 funkcemi (např. pro vrácení hodnoty jako datový typ integer, varchar,...) XML kolekcí se rozumí množina relačních tabulek obsahující data, která jsou mapována do XML dokumentu. Metodu uložení do XML kolekce tedy využijeme když chceme mapovat XML dokument do tabulek nebo z dat uložených v tabulkách vytvořit XML dokument. DAD definuje vzájemné mapování XML a tabulek. Oracle 10g a Oracle 11g Technologie rozšiřující databázový systém Oracle Database 10g (Clark, 2005) o podporu XML se nazývá Oracle XML DB. Mezi předchozí verzí DBS (9i) a poslední verzí (10g) však co se podpory XML týče není téměř žádný praktický rozdíl.) XML rozšíření poskytuje funkcionalitu známou z nativních XML databázových systémů. Oracle XML DB poskytuje zejména: • • • • • •
nový nativní XML datový typ XMLType metody a SQL operátory umožňující provádět XML operace nad XML daty práce s XML schématy možnost provádět XML operace nad relačními daty a SQL operace nad XML daty podpora XPath, XQuery a SQL/XML jazyků přístup k databázi přes HTTP, FTP a webDAV s možností nahrávat a načítat XML dokumenty do/z databáze.
V nejnovější jedenácté verzi společnosti Oracle, stojí za zmínku vcelku zajímavá věc a tou jest nová možnost porovnávání XML dokumentů pomocí XML-aware algoritmu, to by se mohlo hodit v případě, že bychom porovnávali dva dokumenty, které by měli nesetříděné atributy, v předchozí verzi, kde porovnávání zajišťuje line algoritmus, by porovnávání skončilo neshodou, v jedenácté verzi již ne, jelikož algoritmus zjišťuje, zda jsou atributy stejné bez ohledu na pořadí. Shrnutí Informace, které jsou uvedeny v této kapitole jsou jenom velmi hrubým výčtem některých zajímavých vlastností jednotlivých produktů společností intenzivně vyvíjejících databázové systémy. Je důležité si uvědomit, že firmy zmíněné v této kapitole jsou jenom zlomkem z celkového databázového trhu. a stejně tak jejich produkty, se kterými jsme se snažili čtenáře seznámit jsou pouze částí z celkového portfolia jejich výrobků. Tudíž doporučením pro čtenáře by mohlo být: „Při výběru databáze se snažte využít všech informací z odkazů poskytnutých touto bakalářskou prací, zohledněte svoji dosavadní znalost určitého produktu a zkušeností, které s ním máte. Vyhledejte diskusní servery, kde jsou výhody a nevýhody jednotlivých produktů žhavě diskutovaným tématem a obohaťte se tak o cenné znalosti a zkušenosti ostatních uživatelů. Nezapomeňte na to, že ne vždy jsou nedražší produkty tou nejlepší volbou. Raději se obraťte na informační centra více společností a nechte si jimi navrhnout pro Vás nejvýhodnější produkt s cenovou nabídkou.“ Veškeré další operace s demonstrativním příkladem správy rozsáhlých XML dokumentů však budou probíhat pod platformou Oracle 10g a to z toho důvodu, že ukázková aplikace bude laděna a zprovozněna s využitím univerzitního studentského serveru Akela, kde je instalován právě tento databázový systém s platnou licencí.
33
3.6 Ukládání XML v Oracle 10g Jen o málo lepší než používání samostatných souborů je uložení XML v relační databázi do datového typu LOB. Je také možné XML rozložit a důležitá data ve formě běžného záznamu uložit do relační databáze, jenže to znamená na úrovni aplikací implementovat mechanismy pro mapování XML dat do relačních struktur a naopak. Ve všech případech úložiště nerozumí vnitřní struktuře XML a nemůže s ním jako takovým pracovat. Tady na scénu přicházejí XML databáze. Ty mohou nativně pracovat s XML, tzn. že databáze rozumí vnitřní struktuře XML dokumentů a poskytuje všechny funkce nutné pro manipulaci s tímto formátem dat. Lze v nich tak implementovat datovou logiku aplikace podobným způsobem, jako to děláte u běžných aplikací v relačních databázích. Co by tedy XML databáze měla umět? Určitě musí pracovat s XML dokumentem jako celkem, tj. načíst jej a vrátit ho. Musí podporovat dotazování, které odstíní aplikaci od skutečného uložení dat, vyhledávacího algoritmu a pomocných datových struktur, jako jsou třeba indexy. v této oblasti vznikl již standard XPath a jednou se snad dočkáme i přijetí dlouho očekávaného standardu XQuery (Robbie, 2004), který je zatím stále jen ve formě Working Draftu. XML databáze by měla nad tento základ poskytovat i další funkce specifické pro XML, aby je nebylo nutno implementovat jednotlivě v každé aplikaci. Jde například o validaci dokumentu pomocí XMLSchema, nebo definici dalších omezujících podmínek tak, aby aplikace měla jistotu, že očekává-li jako XML dokument objednávku, nezíská třeba fakturu nebo scénář k Romeovi a Julii zapsaný pomocí XML. Důležitá je také podpora transformace pomocí XML stylesheetů, která umožňuje jednoduše převádět data z XML dokumentu jednoho formátu do jiného formátu a tak například zjednodušuje přenos dat mezi různými aplikacemi nebo vytváření HTML stránek formátováním XML dat. Pojem "nativní XML databáze" se střídavě používá pro označení faktu, že databázová platforma přímo poskytuje funkce pro práci s XML a střídavě pro označení databází specializovaných pouze na XML. Díky tomu vzniká dojem, že současné hlavní platformy, jejichž původ je relační, nemohou fungovat v roli XML databází a je třeba použít speciální produkty. Přitom pravda je často zcela opačná. I když jsou XML databáze v něčem specifické, mají s ostatními databázovými platformami jedno společné. Důležité je i provozní hledisko. Musí tedy poskytovat prostředky pro zajištění vysoké dostupnosti, výkonu, bezpečnosti a samozřejmě také snadné správy. Tento pohled je zvláště důležitý ve chvíli, kdy má daný databázový systém překročit hranici aplikací pro malý počet uživatelů a stát se skutečným úložištěm dat pro podnikové aplikace. Z provozního pohledu je velmi výhodné, pokud lze s různými typy dat pracovat stejnými prostředky. Správa dvou specializovaných úložišť bude vždy náročnější a tudíž i nákladnější, než správa jednoho úložiště univerzálního. I jako vývojář, který má na starost vývoj více různých aplikací budete raději, pokud si pro všechny vystačíte se stejnými zkušenostmi, rozhraními i nástroji. Jak se tedy s XML může vypořádat relační databázová platforma, v tomto případě Oracle Database 10g? Ukládání dat V zásadě existují dva způsoby jak XML v databázi uložit. Buď jako celek do datového typu LOB (nestrukturované uložení), nebo jej rozložit na jednotlivé elementy a ty uložit do běžných relačních tabulek (strukturované uložení). Každý typ uložení přitom má své výhody i nevýhody.
34
Nestrukturované uložení je výhodné, pokud se s dokumentem převážně pracuje jako s celkem. Oproti tomu i když potřebujete v programu načíst, nebo změnit jediný element dokumentu, databázová platforma sama musí vždy načíst celý dokument. Při použití strukturovaného uložení představuje samozřejmě rozložení dokumentu do interních tabulek a jeho následné opětovné skládání zátěž navíc. Je také nutné definovat strukturu dokumentu (například pomocí XMLSchema) při definici tabulky – není tedy možné uložit zcela libovolný XML dokument do libovolné tabulky. Toto uložení je výhodné v případě, kdy většina operací probíhá jen nad fragmentem dokumentu, nebo u dotazů provádějících agregaci určitých dat z více dokumentů. Díky tomu, že Oracle podporuje v rámci objektových tabulek i hierarchie objektů, je možné ukládat i XML dokumenty se složitější hierarchií, než jen <řádek>/<políčko>. Oracle řeší tuto dualitu zavedením objektového datového typu XMLType, který může vnitřně ukládat data jedním z obou výše popsaných způsobů, ale zároveň poskytuje jednotné metody pro práci s XML dokumentem a odstiňuje tak zbytek aplikace od detailů vlastního uložení. Celá funkcionalita pro práci s XML je implementována přímo na úrovni databáze a tak lze XMLType použít jak pro proměnné v rámci uložených procedur, tak i při definici tabulky, pohledu nebo dotazu. Strukturovaná podoba XMLType neudržuje pouze hodnoty jednotlivých elementů, ale i všechny další detaily DOM modelu – zůstanou tedy zachovány nejen hodnoty elementů a jejich atributů, ale také například jejich pořadí, nebo různé poznámky či zpracovací instrukce. Na rozdíl od nestrukturovaného uložení se však dokumenty mohou lišit např. ve formátování. Strukturovaný XMLType optimalizuje přístup k datům – nesestavuje do podoby DOM vždy celý dokument, ale jen jeho jednotlivé části dle potřeby – tzv. lazy loading. Při použití strukturovaného XMLType může také databáze transparentně přepisovat některé dotazy definované pomocí XPath do podoby relačních dotazů, které pak vykonává efektivněji. I změnové operace může vnitřní logika serveru transparentně změnit v běžný relační dotaz. S ukládáním dat úzce souvisí možnost indexování. Bez ohledu na způsob uložení je možné v Oracle pro XML použít buď fulltextový index, který indexuje celý obsah dokumentu, nebo funkční index pro vybranou hodnotu. Strukturované uložení XML dokumentu pak také umožňuje použít běžný b-tree index nad určitým elementem. XMLType poskytuje aplikaci veškeré nutné metody pro práci s XML dokumentem, jako je například extrakce nebo změna hodnot, validace dokumentu dle XMLSchema a transformace. v rámci databáze je možné využít také metody DOM API a to jak v podobě PL/SQL, tak i Java. XML oproti SQL Oracle implementoval veškerou funkcionalitu pro práci s XML přímo na úrovni databázového stroje. Podařilo se přitom dosáhnout toho, že způsob uložení dat neomezuje škálu funkcí, které se mohou později použít pro práci s nimi. I když už jsou data uložena v běžné relační podobě, neznamená to, že se s nimi nedá pracovat jako s XML dokumentem, a máte-li data uložena v podobě XMLType (ať už v jeho nestrukturované nebo strukturované podobě), může se s nimi pracovat i jako s běžnými relačními daty. To umožňuje pracovat s XML daty i v rámci aplikací, které nejsou pro práci s XML připraveny, například různé analytické nástroje. Příklad čistě relačního pohledu nad tabulkou s XML dokumenty (výběr hodnot z XML dokumentu se provádí pomocí XPath): CREATE or REPLACE VIEW náhled_faktury (VYSTAVELO, ODBERATEL, DODAVATEL, POLOZKA) AS
35
SELECT extractValue(fak,'/faktura@vystaveno), extractValue(fak,'/faktura/odberatel/nazev'), extractValue(fak,'/faktura/dodavatel/nazev'), extractValue(fak,'/faktura/polozka[0]/cena') FROM faktury; Příklad kombinace XML dat a relačních dat v rámci jednoho dotazu: SELECT extractValue(fak,'//faktura/odberatel/nazev') FROM faktury, Objednavky WHERE extractValue(fak,'//faktura@id') = Objednavky.id; Pozn. Lejdříve byl zaveden relační statický pohled na data (VIEW) nazvaný náhled_faktury s tím, že jsou data extrahovány z tabulky XMLType datového typu pojmenovaného „fak“ (objektová hodnota) a dále je pro extrakci důležitá cesta k datům (pomocí XPath). Poté byl vytvořen jednoduchý algoritmus pro výběr názvu odběratele na základě projekce s dalsí tabulkou „Objednavky“ a rovnosti „id“ faktur. Relační postupy lze použít i pro definici pravidel pro které již XMLSchema nestačí, například pro unikátnost hodnot, referenční integritu nebo triggery. Je tedy možné definovat nejen to, že faktura v XML formátu musí odpovídat určitému schématu, ale že veškeré kódy objednaného zboží musí odpovídat položkám ceníku z běžné relační tabulky a číslo faktury musí být unikátní. Tím že jsou XML data uložena nativně v databázi Oracle, vztahují se na ně veškeré mechanismy pro zajištění transakčního přístupu, dostupnosti, bezpečnosti a výkonu, jako na běžná relační data. Není tedy problém provozovat stand-by databázi s využitím Oracle DataGuard, využít Real Application Clusters pro zvýšení výkonu a zároveň i dostupnosti databáze, nebo třeba řídit přístup na úrovni tabulek i jednotlivých záznamů (v tomto případě tedy dokumentů) pomocí mechanismu Virtual Private Database. Vedle aplikací, které jsou naprogramovány tak, aby pracovali s XML v databázi, již existuje řada aplikací, které pracují s XML pomocí souborových protokolů. Může jít o různé editory ale také o webovou aplikaci, která načítá XML data a po transformaci je publikuje v podobě HTML stránky. Pro tyto aplikace nabízí Oracle přístup k datům v databázi pomocí souborových protokolů, jako je HTTP, WebDAV a FTP. K uvedení smysluplného příkladu bude použita praktická část práce. Aplikace tedy bude ukládat XML dokument znázorněný ve 4. kapitole (Vhodné funkce XML, podkapitola Vznik nového XML dokumentu). k uložení takového dokumentu se může využít dvou způsobů a to buď modernější a novější způsob uložení pomocí nového datového typu, který je zmiňován v předešlé kapitole, XMLType nebo způsobem ukládání dokumentu pomocí postaršího balíčku PL/SQL dbms_lob. v pořadí druhý zmiňovaný postup má své výhody, ovšem nejprve bude uveden první způsob, snazší a modernější, a teprve v dalších kapitolách bude uvedeno, v jakém případě bude mít druhý způsob ukládání své opodstatnění. XMLType Datový typ XMLType skrývá většinu složitostí ukládání a dotazování v XML údajích, což správcům dovoluje zpracovávat data pomocí důvěrně známých SQL nástrojů a postupů. Je například možné vytvořit XMLType tabulku nebo XMLType sloupec uvnitř relační tabulky. Vytváření XMLType tabulek je způsobem, jak implementovat strukturovanou metodu ukládání a zachovat XML hierarchii. Vytváření XMLType sloupců v relačních databázích představuje způsob implementace metody nestrukturovaného ukládání, která je vhodná pro
36
ukládání celých XML dokumentů jakožto příloh relačních záznamů. Totéž, co lze provádět s tabulkou, lze realizovat i s pohledem. Pomocí XMLType by se dal řešit vzorový příklad například tak, že nejprve negenerujeme nový dokument pomocí DOM XML funkcí uvedených na začátku bakalářské práce a jakmile bude k dispozici správně seskupený XML dokument uložený v proměnné kupříkladu $dom, může jej programátor uložit za pomoci příkazu save() nebo saveXML()do databáze respektive do souborového systému. Funkci save() použijeme v případě, že náš XML dokument ukládáme do mezipaměti pro následovný výstup na obrazovka, tedy výpis. Takový příklad může vypadat následovně: save (); ?> Pozn. Tento zápis vypíše obsah XML dokumentu negenerovaném pomocí DOM XML, samozřejmě za předpokladu, že je v proměnné $dom správně negenerován. Novější verze Internet Eploreru a Mozilly k takovému výpisu nabízejí i pěkné formátování výstupu pro XML dokumenty verze 1.0, což uživatel definuje na úplném počátku generování nového dokumentu příkazem: $dom = new DOMDocument (‘1.0‘); a následovně zvolí formátování výstupu: $dom -> formatOutput = true; Příkaz save() se v souvislosti s alikacemi v databázích používá zejména následujícím způsobem: save().”’)”; ?> Takto odeslaný dotaz na databázi bude funkční za předpokladu, že čtenář bude mít vytvořenou funkční tabulku a v rámci vkládání nových záznamů do tabulky bume mít vytvořenou i sekvenci pro identifikační čísla například tímto způsobem: SQL> CREATE TABLE databazeXML (id LUMBER(10) PRIMARY KEY LOT LULL, dokument XMLTYPE); SQL> CREATE SEQUELCE sid; Pozn. Tedy takovým zápisem bude databázi řečno, že uživatel chce vytvořit tabulku nazvanou databazeXML s relacemi id datového typu vyjadřující celá čísla a dokument vyjadřující právě onu důležitou úschovnu pro dokumenty typu XML. Na rozdíl od funkce save() se druhá zmiňovaná funkce saveXML() používá při ukládání XML dokumentu, který se bude uchovávat v souborovém systému serveru nebo na jiném médiu.
37
saveXML (‘../dokumenty/novy_dokument.xml’); ?> Pozn. Tímto zápisem se jednoduše obsah proměnné $dom uloží do souboru novy_dokument.xml a bude připraven pro opětovné načtení funkcemi load() a loadXML(), které fungují na úplně stejném principu jako save() a saveXML(), ale opačně. Definuje-li se v databázi, že nějaký obsah je datového typu xmltype, určuje se tím, že obsahem bude XML dokument. Při definici xmltype se však ještě určuje, zda se má XML obsah vnitřně uložit tzv. strukturovaně nebo nestrukturovaně. Volba vnitřní reprezentace XML obsahu nijak neovlivní práci s obsahem „z venku“ (uživatelem, programátorem,...). Ovlivní však způsob vnitřního zpracování datového obsahu systémem řízení báze dat, budou použity jiné indexy, jinak se budou provádět databázové operace. Nestrukturovaný xmltype se vnitřně uloží do datového typu CLOB. Tento typ uložení nevyžaduje XML schéma ukládaných dat. Při práci s dokumentem se musí vždy načíst/uložit celý obsah. Strukturovaný xmltype je vnitřně mapován do tabulek. Pro uložení je třeba dodat XML schéma obsahu, který bude ukládán. Při provádění databázové operace nad strukturovaným xmltype se nemusí načítat celý obsah. XPath operace jsou převáděny do SQL příkazů a tyto SQL příkazy jsou pak aplikovány pouze na vytyčenou množinu dat. Pro názornost je níže uvedena přehledná tabulka výhod a nevýhod strukturovaného a nestrukturovaného způsobu uložení dat v databázi (tab. 2). Tab. 2: Porovnání strukturovaného a nestrukturovaného uložení typu XMLType v Oracle 10g Nestrukturované uložení Výkon Ukládání Zpracování XML schéma
Round-tripping9
XPath
9
rychlé zpracování při načítání a ukládání celých XML dokumentů LOB datový typ (Large Object)
Strukturované uložení rychlé zpracování při práci s určenou částí XML dokumentu tabulky
pouze specifikovaná část, na kterou se má provést operace povinná (do databáze volitelná (můžeme tedy do databáze uložit libovolný XML uložíme jen XML dokument vyhovující XML schématu) dokument) nemusí být stoprocentní – XML obsah se může lišit v bílých znacích; struktura ano a pořadí elementů (tedy DOM reprezentace) však bude zachována nad DOM reprezentací XPath je převeden do SQL načteného XML obsahu
celý XML obsah
Uložení obsahu a načtení „na bajt“ stejného obsahu.
38
Dbms_lob Tento rozšiřující balíček nad databází Oracle umožňuje uživatelům vytvářet podprogramy specifikované v PL/SQL10 prostředí za účelem lepšího ovládání velko objemových datových entit LOB11, konkrétních datových typů BLOB (velký binární objekt), CLOB (velký znakověorientovaný objekt), NCLOB, BFILE (velký externě uložený binární objekt) a dočasných LOBů. Programátor tak může použít dbms_lob k přístupu a manipulaci s konkrétními částmi těchto entit. Z výše popsané charakteristiky tohoto rozšíření databáze Oracle je zřejmé, že jeho použití bude vhodnou alternativou k operacím se soubory či proměnnými, které v sobě nesou větší počet informací a jejich velikost by mohla dělat potíže za použití stejných prostředků, které používáme při práci s menšími datovými objekty. Dalších důvodem, proč je vhodném aby se čtenář s tímto balíčkem seznámil je i skutečnost, že je snad jediným možným řešením vzniklých problémů souvisejících s ukládáním delších textů do databázových tabulek. Jak se čtenář dočte v dalších sekcích práce, s tímto problémem se budeme potýkat i u naší demonstrativní aplikace pro zpracování rozsáhlých XML dokumentů. Vzhledem k tomu, že je ale dbms_lob specifický pro starší verze Oracle 8i, Oracle 9i a v Oracle 10g se pouze uchovává jeho funkčnost, práce s ním je relativně složitá a čtenáře, který se s touto problematikou pouze seznamuje by vysvětlování jednotlivých příkazů a definicí mohlo úspěšně zmást a navíc použití dbms_lob v našem případě vzorového programu pro zpracovávání XML dokumentů je pouze okrajovou informací, nebudeme zde uvádět příklady kódů a spíše bude čtenáři poskytnut odkaz na informační zdroje, které tuto problematiku obsáhle vysvětlují (Nyffenegger, 2008), (Feuerstein, 2007). Shrnutí Veškeré uvedené postupy pro uchovávání XML v databázi Oracle 10g jsou pouze částí z možností, které firma Oracle poskytuje uživatelům. Cílem této kapitoly bylo seznámit čtenáře s nejvíce používanými funkcemi a databázovými balíčky současnosti. Dalo by se říci, že v souvislosti s XML se dnes nejvíce diskutuje o zpracovávání takovýchto dokumentů pomocí funkcí nad datovým typem XMLType a to jednoduše proto, že jeho jednoduchost a intuitivnost použití přináší uživalům komfortní prosředí pro zpracování XML dokumentů a překonává těmito výhodami i některé své nedostatky. Také by se dalo predikovat, že právě tento datový typ, bude v dalších verzích databáze Oracle nejvíce upravovanou a vylepšovanou částí pro práci s XML.
3.7 XML v souborech Jak již název kapitoly napovídá, čtenář má možnost kromě použití XML funkcí v souvislosti s databázemi použít ty samé funkce a balíčky i v případě zvolení ukládání v souborovém systému na disku uživatele či na webovém serveru apod. Pokud uživatel zvolí takovýto způsob uchovávání dokumentů, za přepokladu hlavní nevýhody a to takové, že uživatel ztrácí veškeré nabízené možnosti pro zpracování XML dokumentů nad databázemi, přinese mu tento způsob i nemalé výhody.
10
Procedural Language/Structured Query Language) je procedurální nadstavba jazyka SQL od firmy Oracle. Pomocí PL/SQL můžeme vytvářet procedury, funkce a triggery (spouštěče) uložené přímo interně v databázi. 11 Zkratka z anglického Large Object, souvisí s databázovými datovými typy velkých objektů.
39
Uložení XML dokumentů Už v této sekci se čtenář seznámí s první velkou výhodou ukládání XML v souborech mimo databázi. Ukládání dokumentů je totiž daleko snazší v porovnání s ukládáním do databáze. Čtenář totiž de facto vytváří textový dokument, ať už v rámci nějaké webové aplikace či přímo v nějakém textovém editoru (př. Poznámkový blok) a jediné, na co je třeba dávat pozor, jest udržovat strukturu a pravidla pro zápis takového XML dokumentu zmiňované na začátku této práce. Příkladem může být uzavírání textu mezi počáteční a koncový tag, vytvořit kořenový uzel a pod. Jak čtenář pozná, tento způsob uchovávání dokumentů byl z konkrétních důvodů zvolen i pro vzorový příklad, který provází celou bakalářskou práci a to z důvodů, které budou uvedeny v příští kapitole (Zákoutí jazyka XML v souvislosti s databázemi). Z praktického hlediska tedy můžeme vytvořit nový prázdný dokument, poté do něj zapsat obsah proměnné $dom, uložit a uzavřít. Celý takový algoritmus může vypadat takto: $newfile = fopen ('../databazeXML/testovaci_dokument.xml','w+'); fwrite($newfile,$dom->saveXML()); fclose($newfile); Pozn. Prvím příkazem se otevře nový soubor s nazvem „testovaci_dokument.xml“ v adresáři „databazeXML“. Pokud již soubor existuje, je přepsán. Poté je do něj vložena proměnná s obsahem XML za použití funkce saveXML(), uložen a uzavřen. Práce s dokumenty Ovládáni takto uložených dokumentů je naprosto stejné jako v případě ukládání XML dokumentů do databáze vzhledem k tomu, že načítáme při práci vždy celý XML dokument. To je dáno za předpokladu používání nestrukturovaných XML dokumentů. Jediný rozdíl je v použití příkazu loadXML() namísto pouhého load() v případě načítání dat z databáze a saveXML() namísto save() při ukládání XML do databáze. Jednoduše řečeno, rozdílné jsou akorát syntaxe v zápisu kódu při načítání a ukládání dat. Shrnutí Tento typ práce s XML dokumenty má bezesporu výhody a nevýhody. První velkou výhodou je daleko jednodušší přísup k již uloženým dokumentům, které může programátor číst a kontrolovat validitu zapsaných XML dokumentů za pomoci jednoduchých textových editorů. v těchto editorech může opravit chyby v syntaxi, modifikovat celý obsah dokumentu, přidávat další tagy do dokumentu, de facto má možnost absolutní modifikace v rámci například poznámkového bloku. Další velkou výhodou je, že uživatel, který se rozhodne k práci s externími soubory nemusí počítat s někdy velmi vysokými náklady na licence a práva k použití nejrůznějšich zmiňovaných databázových systémů. Do třetice uvedeme i to, že uživatel nepodléhá žádným limitům, které plynou z pravidel databázových systémů jako jsou limity velikosti ukládaných dat apod. Naopak velkou nevýhodou je skutečnost, že uživatel, který definuje nový dokument nepodléhá žádným kontrolním procesům, které poskytují databáze. To znamená, že čtenář, který není plně znalý všech pravidel pro zápis dokumentů může zapsat dokument chybně, což se projeví buď nesprávným zobrazením dokumentu v rámci internetového prohlížeče či plnou nefunkčností. a pro následné opravy bude muset vynaložit nemalé úsilí a trpělivost. Dobrou zprávou je však to, že většina novějších prohlížečů obsahují jednoduché parsery pro načítání
40
a XML dokumentů a XSL šablon, tudíž upozorní na některé nejasnosti v dokumentu či poukáže na chyby vzniklé při zápisu. Další nevýhodou je i to, že programátor musí povolit práva potenciálním uživatelům k ukládání dokumentů a dovolit tak přístup jiným osobám do určitého místa na disku web serveru. Z toho mohou plynout neblahé důsledky a zneužití internetovými piráty a hackery.
3.8 Zákoutí jazyka XML Kódování jazyka Prvním problémem, se kterým se čtenář může setkat ať už při přepisu vzorového kódu příkladu použití XML dokumentů nebo při programování jakéhokoliv jiného projektu týkajícího se XML je kódování jazyka. Obecně je v manuálech XML (Quin, 2008 B) udáváno, že jsou veškeré nově vytvářené dokumenty ukládány implicitně do kódování UTF-8. V případě, že by chtěl programátor přejít na jiný druh kódování jazyka, je nutné uvést tuto skutečnost na začátku definice dokumentu, tedy v hlavičce. To není nic těžkého, ovšem za předpokladu, že Vaše aplikace zpracovávající XML dokumenty poběží na Vašem vlastním serveru, nad kterých máte co se týká nastavení systémových atributů naprostý přehled a kontrolu. Takový stav ale neplatí u většiny uživatelů, např. i u praktického projektu této práce, kdy se využívá univerzitní server, který není možno ze strany uživatele nastavovat a záleží pouze na benevolenci poskytovatele serverových služeb jestli programátorovi výjde vstříc. Také hrozí do jisté míry ztráta třeba dosti důležitých dat, když programátor čte data z formulářového prvku na webu. Uživatel, který bude vkládat data totiž může zapsat nepřípustné znaky a pokud je parser nepřečte, jednoduše je vypustí a to bez jakékoliv chybové hlášky či upozornění. Programátor tak musí kontrolovat data ze vstupu s ASCII tabulkou a upřesnit kódování i ve stylech CSS, které kooperují s XSL šablonou tímto způsobem: @charset "UTF-8"; Pozn. Tento příkaz musí být uveden na začátku souboru s CSS stylem. Další skutečností může být i to, že některé servery jsou z bezpečnostích důvodů nastaveny tak, že automaticky přepisují některé části hlaviček dokumentů a to především právě část s definicí kódování, tzn, že uživatel nemá prakticky možnost nastavit vlastní jazyk. Proto je důležité kontaktovat správce serveru a dotázat se na kódování jazyka. Velikost ukládaných dat Dalším velkým zákoutím jazyka XML je fakt, že ne vždy bude používán pouze jako nositel informací typu faktura, korespondence, seznam knih apod. Ono totiž při použití XML dokumentu jako např. v případě odborných textů, esejí a komentářů nastane obrovský problém v souvislosti s prácí s databází. Pokud totiž budeme předpokládat, že takovýto XML dokument bude mít několik desítek odstavců, dá se střízlivě konstatovat, že tento dokument bude mít zajisté více než 4000 znaků. To není nikterat neobvyklé, ovšem při zjištění, že např. databáze Oracle 10g limituje uživatele v souvislosti s použitím datového typu XMLType na pouhých 4000 znaků, můžeme pocítit jistý druh depresivního stavu. Nepodaří se totiž tento dokument obvyklým postupem uložit a skript pro ukládání bude optimálně fungovat pouze pro menší dokumenty, v opačném případě se setkáme s chybou ORA-01704: „Řetězcový literál je příliš dlouhý.“
41
Při řešení takového stavu je nutno obrnit se trpělivostí a zkoušet nabízené varianty k odstarnění problému. První možností je využití zmiňovaného rozšíření Oracle 10g a jeho starších verzí a to dbms_lob. Tato možnost je doporučována ve většině manuálech a jiných zdrojích týkajících se XML, ovšem opět se předpokládá alespoň částečná kontrola nad ovládacími prvky databáze, je třeba totiž uživateli vytvořit dočasný adresářový prostor na webovém serveru, u kterého musí správce databáze nastavit přístupová práva uživateli a je zde nutnost restartovat databázi, což může být ale obrovským problémem! Pokud čtenář patří do skupiny, kteří si mohou zajistit všechny nutné kroky k definování BFILE a dočasných virtuálních adresářů, může se celá situaci vyřešit: CREATE DIRECTORY xmlfiles AS 'C:\xmlfiles'; GRALT READ OL DIRECTORY xmlfiles TO databazeXML; CREATE OR REPLACE PROCEDURE insertXmlFile( dir VARCHAR2, file VARCHAR2, id LUMBER:= LULL) IS theBFile BFILE; theCLob CLOB; theDocLame VARCHAR2(200) := LVL(name,file); BEGIL ILSERT ILTO databazeXML (sid.nextval,xmldoc) VALUES(id,empty_clob( )) RETURLILG xmldoc ILTO theCLob; theBFile := BFileLame(dir,file); dbms_lob.fileOpen(theBFile); dbms_lob.loadFromFile(dest_lob => theCLob, src_lob => theBFile, amount => dbms_lob.getLength(theBFile)); dbms_lob.fileClose(theBFile); COMMIT; ELD; Pozn. Lejprve je vytvořen BFILE prostor „xmlfiles“, poté jsou mu upřesněny přístupová práva a definována procedura pro vložení nového řádku do tabulky. Jak je vidět, parametry budou: adresář, soubor, id. Prvně se vloží pouze prázdný záznam a teprve poté se nastaví BFILE z parametrů procedury, otevře se soubor v BFILE a načte za pomoci cílové, zdrojové a délkové proměnné (theCLob, theBFile, délka celého souboru XML).V případě, že by programátor chtěl pokračovat cestou řešení dbms_lob, více informací nalezne ve zdroji (O'Reilly, 2000) Pokud ovšem čtenář takové možnosti nemá, nezbývá než přejít na ukládání dokumentů do externích souborů a neztrácet tak čas s hledáním v současnosti nemožného. Důvod je jednoduchý. Cesta k uložení takhle velkých dokumentů totiž není lehká. Kromě trošku složitejšiho a celkově ukládání stěžujícího postupu, kdy zavedením PL/SQL procedury pro převod proměnné, ve které je uložen nagenerovaný nový dokument na datový typ CLOB
42
a takto konvertovanou proměnnou uložit do databázové tabulky s atributem také CLOB. Uživatel tedy po počáteční eufórii ze zdolání jednoho problému podlehle v zápětí další krizi, při zjištění, že k opětovnému načtení potřebujeme načíst celý dokument a SQL příkazu, ve kterém by byla proměnná načtena pro zpracování nestačí vyrovnávací paměť a dojde k další chybě. Bezpečnost Webové služby jsou založeny na standardech W3C, jsou technologicky nezávislé. Jedním z jejich základních problémů je ale neřešení bezpečnosti. Protokol SOAP používaný ve webových službách je ve své podstatě XML dokument, který je přenášen obvykle protokolem HTTP. Pro řadu aplikací je tato vlastnost tj. neřešení bezpečnosti nepřijatelná. XML je sice velmi silný nástroj k použití v tzv. „bussines procesech“ vzhledem k možnosti sdílení informací např. mezi jednotlivými odděleními atd., ale na druhou stranu tyto možnosti zvyšují nebezpečí zneužití informací. Pokud se sdílejí informace o kreditních kartách, citlivé informace o pacientech, osobní údaje např. studentů, informace o fakturách atd., jsou zde vždy obsažena data, která mohou být zneužita, ať již jde o obchodní informace nebo informace osobní ( osobní údaje) nebo případně i citlivé informace ( ve zdravotnictví). Navíc některé z těchto informací je nutno chránit v důsledku platných zákonů (Zákon o ochraně osobních údajů aj.) a situace v této oblasti se stále zpřísňuje. Např. při přenosu informací o pacientovi je nutno během přenosu příslušné informace ochránit před úmyslným či neúmyslným prozrazením či modifikací, je nutno ověřit identitu podepsaného pracovníka atd. Je tedy nutno zajistit základní bezpečnostní požadavky (autenticita, integrita dat, nepopiratelnost a utajení a dostupnost dat). v prostředí Internetu je nutno určit identitu původce informace. Je nutno určit, které informace smí který uživatel vidět. Při on-line transakcích musíme určit, které transakce jsou platné. Musíme zajistit utajení citlivých dat při transferu informací. Dalším požadavkem může např. být možnost, jak případně u soudu dokázat, že někdo měl přístup k určitým informacím. Navíc bezpečnostní požadavky je nutno splnit v každém bodě komunikace. Kromě dostupnosti informací, která se zajišťuje jinými způsoby, se veškeré výše uvedené požadavky dají zajistit přímo přidáním určitých částí do XML. Vzhledem k tomu, že samotné webové služby v sobě základní bezpečnostní služby nemají, bylo nutno XML rozšířit o část zvanou XML Security. V posledních letech byla vyvinuta celá řada XML bezpečnostních technologií, které jsou dnes v různé fázi normalizace a vývoje. Je to XML Signature ( XML-DSIG nebo také XML-SIG nebo XS), XML Encryption (XE), XML Key Management Specification (XKMS), Secure Assertion Markup Language (SAML), XML Access Control Markup Language (XACML), WSsecurity (Qweb Services Security), EbXML Messege Services. Dále se jedná o Liberty Alliance Project. Tyto technologie jsou nyní v různé fázi vývoje. Některé tyto iniciativy jsou teprve na úrovni vývoje, jiné jako např. XML podpis a XML šifrování jsou již i implementovány v produktech. Dá se očekávat, že tyto nové možnosti zvýší bezpečnost webových služeb a umožní některé doposud těžko řešitelné akce jako např. selektivní podepisování záznamů o pacientech, studentech apod. V poslední době jsou také nové pokroky u XACML. Vzhledem k zájmu o tuto oblast je možno očekávat velmi rychlý pokrok a nasazení v nejbližší době (Brechlerová, 2006).
3.9 Nejvhodnější řešení při použití databází Touto kapitolou bude ukončena celá problematika, ve které se práce snažila objasnit některé problémy spojené s XML a ukládáním dat, tedy XML dokumentů, v databázích. Bohužel diskutovaná problematika se bude muset soustředit pouze na databázový systém společnosti
43
Oracle 10g vzhledem k jeho pužití u bakalářského projektu a také kvůli tomu, že rozsah této práce nedovoluje porovnat všechny dostupné databázové systémy. Malé objekty Pokud se má vést diskuse o nejvhodnějším použití krátkých respektive malých objektů či dokumentů XML technologií v souvislosti s databází Oracle 10g, dalo by se hovořit snad jen v superlativech. Databázový systém totiž uživatelům umožňuje naprosto komfortní prostředí pro práci s takovými dokumenty. v případě takto dlouhých dokumentů se uživatel nesetká s žádnými chybovými hláškami typu příliš dlouhého řetězcového literálu, o kterých jsme hovořili v souvislosti se zákoutími XML v databázích, snad jen zústává problém s kódováním jazyka, ovšem to zase závisí na poskytovateli serverových služeb a de facto se s tímto problémem můžeme setkat i v jiných situacích namající nic společného s XML problematikou. Další velkou výhodou je i to, že programátor může využít naprosté většiny nejnovějších a nejmodernějších aplikací pro práci s XML a nemusí se obávat, že bude muset v některých situacích substituovat moderní algoritmy jinými ze starších verzí. Navíc nenovější verze databázového systému Oracle 10g a Oracle 11g nabízí plně grafické prostředí (obr. 13) prostřednictvím WWW rozhraní, do kterého se uživatel přihlašuje přes internetový prohlížeč. Tím se podporuje i využitelnost Oracle a jeho funkcí i pro čtenáře, kteří nejsou úplně sběhlí v problematice XML aplikací a SQL příkazů pro práci s databázovými tabulkami apod. V případě, že se tedy čtenář rozhodne k vytvoření informačního systému pro práci například s fakturami, nejlepsí volbou bude využití DOM XML funkcí a datového typu XMLType nebo může ukládat XML dokument jednoduše do řetězcového datového typu (v Oracle je to Varchar2), který je plně bezproblémový stejně jako XMLType do maximální délky 4000 znaků. Může využívat všech užitečných funkcí (viz. tab. 2) jako je v rámci XML dokumentu dohledávat informace u uzlů, porovnávat je mezi sebou, vkládat nové dokumenty, přidávat a upravovat uzly v dokumentech, využít mnoha booleovských funkcí k nalezení existujícího uzlu nebo zjištění jeho neexistence atd. Uživatel bude využívat prakticky všech nových nástrojů databázových společností a zároveň se setká pouze s minimálními problémy a komplikacemi. Rozsáhlé objekty V případě rozsáhlých objektů se situace o něco více komplikuje. Jak bylo již mnohokrát řečeno, rozsáhlé objekty způsobují problémy při ukládání a načítání XML objektu do respektive z databáze a to z toho důvodu, že XMLType není schopen uložit objekt větší než 4000 znaků (v případě Oracle 10g) a zároveň datový typ CLOB v souvislosti s jazykem PHP způsobuje při načítání XML dokumentu chybné hlášení týkajícího se nedostatečné velikosti vyrovnávací paměti pro přenos SQL dotazu. Kromě těchto skutečností se uživatel bude více či méně potýkat s problémy stejnými jako u menších objektů zmínovaných v předcházející sekci bakalářské práce. Shrnutí Na základě všech zjištěných skutečností a faktů, o kterých bylo psáno v rámci vytváření projektu této bakalářské práce demonstrujícího funkčnost XML technologie můžeme konstatovat, že naprosto nejvýhodnější je aplikace XML technologií na rozsahově menší objekty. Tím pádem mohou uživatelé využít všech výhod jak ze strany databáze, tak ze strany programovacího jazyka. Programátor bude mít uložená data bezpečneji v útrobách databázových úložišť a ostatní uživatelé nebudou mít možnost zneužít jakýmkoliv způsobem jeho osobní data či způsobit škodu na jeho části webového serveru.
44
Pokud však bude stát čtenář před stejným problémem jako já na začátku této práce, doporučuji mu přejít na externí ukládání dat mimo databázi a vyhnout se tak problémům s uchováváním v databázi na úkor bezpečnosti a zneužitelnosti. Navíc je možné, že některé další skriptovací či programovací jazyky jako Java, Perl či ASP.NET mají tyto problémy lépe vyřešené a všechny výše zmíněné problémy třeba ani nevyvstanou. Bylo zjištěno, že v rámcí Oracle 11g je více pozornosti skrze ovladatelnost databázových prvků zaměřeno k jazyku Java a AJAX, tudíž doporučení vůči čtenáři by mohlo znít: „Zajisté by stálo za to vyzkoušet funkčnost například vzorového projektu v rámci jazyka Java a zjistit tak, jestli se setkáte s podobnými problémy jako v případě PHP nebo jsou tyto potíže u Javy eliminovány.“
3.10 Nejvhodnější řešení mimo databázi Na otázku: „Jaké je vhodné řešení XML mimo databázi?“ může být odpověď nalezena ve výsledcích dosavadních řešení v rámci demonstrativního projektu k ukázce technologie XML a jeho funkcí. Nakonec bylo úspěšně docíleno funkčnosti námi vytvořeného informačního systému a bylo zároveň naprogramováno velmi výhodným způsobem rychlé vyhledávání v dokumentech XML pomocí prvku metadat dokumentů. Pokud tedy bude stát čtenář před rozhodnutím, jak nejlépe uskladnit a využívat informace, které mají stejnou nebo hodně podobnou strukturu a bude s nimi muset pracovat, předávat je dalším subjektům, které je budou opět pozměňovat a číst z nich, doporučujeme jednoznačně použití XML s tím upřesněním, že pokud bude využívat k programování PHP a Oracle 10g a nebude mít přímo pod kontrolou ovladatelnost a nastavení databáze, bude lepší ukládat data mimo databázi a Oracle asi úplně vyřadit z cesty. Čtenářům bude doporučeno, aby v takovém případě vytvořili jakýmkoliv pro ně vhodným způsobem základní strukturu informačního systému nebo jekékoliv jiné aplikace pro správu jejich dokumentů a poté pro lepší využitelnost XML zavedli i jistým způsobem pomocný dokument, kde budou ukládány veškeré metadata, tedy všechny informace o dokumentu, které programátor uzná za vhodné označit jako metainformace a na základě nic rychleji vyhledávat, vypisovat, zkrátka lépe zpracovávat dokumenty XML. V bakalářském projektu bylo využito také tzv. sémantického slovníku k popisu dokumentů, tedy k tomu, abychom měli více upřesňujících informací o dokumentech a ještě více tak podpořili sílu metadat a rychlejšího nelezení požadovaných informací.
3.11 Nevhodné použití XML Ačkoliv by se dalo říci, že negativních vlastností značkovacího jazyka XML v souvislosti s informačními systémy je málo, najdou se případy, kdy zavedení XML technologie není úplně výhodné. To je dáno hlavně tím, že syntaxe XML je docela nabobtnalá, tzn. takovému člověku může tento zápis snižovat celkovou přehlednost kódu. Dalším problémem může být to, že XML soubory jsou hodně velké a mohl by b některých případech vzniknout problém na síti, u kapesních počítačích atd. Faktem je také to, že XML strom může být libovolně hluboko vnořený, což opět zatěžuje slabší počítače s menší pamětí a navíc zvyšuje riziko nebezpečí stack overflow. XML samo o sobě obsahuje jen textová data, alvšak jiné datové typy je nutno definovat zvlášť pomocí schémat, nebo zpracovávat dodatečnou konverzí textu na jiný datový typ, což může někomu způsobovat komplikace. Obecně se dá řict, že využití pro obecnější než stromové struktury je složitější, např. obecné uložení objektů, relační nebo síťové databáze atd.
45
3.12 Praktické využití Dalo by se říci, že pozorný čtenář již má určitou představu o tom, jaké by mělo být praktické využití XML technologií v rámci informačních systémů . Čtenář byl seznámen přímo o tom, za jakým účelem formát XML vznikl, proč byl dále rozšiřován a stal se tak oblíbeným a mocným nástrojem programátorů. Stálo by však za to shrnout všechny, v práci zmiňované, části naší praktické práce a sestavit tak konečně kompletní rozbor funkčního informačního systému spravující data odborných textů a najít nejlepší cestu k jejich vyhledávání. Nastavení dokumentů Předpokládejme, že ne všechny uzly musí být vyplněny uživatelem. Řekněme, že uživatel si nepřeje vyplňovat abstrakt nebo anotaci či naopak chce dokument rozšířit o více kapitol v části statí či diskusí. Možností řešení tohoto problému je mnoho, ale vzhledem k tomu, že se tento problém netýká přímo problematiky práce, zvolil jsem ten nejjednodušší možný způsob a to takový, že si sám uživatel určí, kolik kterých uzlů požaduje, nastaví si jednak limity pro dokumentové uzly (maximální počty jednostlivých statí, diskusí, abstraktů atd.) viz. příloha (obr. 4) a poté si zvolí konkrétní počet v nabídce při vytváření dokumentu (obr. 5). Tím se docílí, že se nám zobrazí v další části vkládání nového dokumentu příslušný maximální počet oddílů. Další možností pro vkládání nových dokumentů může být využití jednoho textového pole pro vstupní data (obr. 7) a poté je šikovným skriptem „zkompilovat“ a rozdělit na jednotlivé odstavce. Ty poté uživatel pojmenuje a určí příslušnost k tagu (obr. 8). Tato varianta je sice elegantnější, ovšem komplikace nastává při tom, jak nejlépe rozlišit jednotlivé odstavce. Buď musí být uživatel dopředu informován o způsobu zápisu dat, např. mezi každým odstavcem bude příslušný počet ENTERů nebo budou uzavřeny v závorkách apod. Vkládání dokumentu Vkládání nových dokumentů bylo popsáno jednak pomocí ukázky PHP kódu (kapitola: Generování nového dokumentu) a ilustrace pro lepší nastínění toho jak by mohl být vyřešen vstupní formulář pro takovéto vkládání nových dokumentů (obr. 6, obr. 7). Dalši postup spočíval v tom, že jsem k tomu přidal pouze další HTML element v rámcí formuláře pro označení, o jaký typ dokumentu jde (tématika) a rozšiřil jsem skript o zbytek uzlů, které byly zapotřebí k vytvoření nového dokumentu (kapitola Vznik nového XML dokumentu). Nový dokument poté vznikne uložením obsahu nagenerované DOM proměnné do souboru na disku (v našem případě bude soubor označen identifikačním číslem, dále jen ID, a příponou xml. Tedy například: 423.xml, 424.xml atd.) a zároveň zapsáním některých tagů dokumentu do dalšího existujícího dokumentu, dokumentu „metadat“. Důvodem, proč jsem zvolil názvy dokumentů v podobě jejich identifikačních čísel je ten, že tak vystihnu unikátní označení dokumentu (nemůže dojít k dualitě souborů se stejnými názvy). Navíc jsem ID dokumentů zavedl i jako atribut elementu např. <dokument id=”6”> v dokumentu „metadata.xml”, tímpádem docílím lepší propojenosti. Pokud by programátor postupoval z minulé kapitoly druhým zmiňovaným postupem, byly by další kroky již shodné s první variantou. Jedná se totiž jen o rozdíl ve způsobu získání zdrojových textů, uložených v textových proměnných a připravených pro nagenerování nového XML dokumentu. Vyhledávání informací Celá problematika, kterou tato bakalářská práce probírá směřuje k tomu, aby byla nalezena odpověď na otázku, jak zrychlit vyhledávání a dotazování v konkrétním případě nad dokumenty XML s podobou rozsáhlých odborných textů.
46
Co ovšem stále není jasné je to, jak docílit rychlého vyhledávání a dotazování nad vytvořenými XML dokumenty. Metod, jak takovéto vyhledávání urychlit je mnoho, v této části bude nastíněna taková možnost, kdy bude využito tzv. metadat jednotlivých dokumentů, k tomu, aby podle těchto „metainformací“ bylo umožněno uživateli vybrat respektive přiblížit oblast XML dokumentů, ve kterých by se v další fázi vyhledávalo full-textově. Uživatel při vytváření dokumentu bude dotázán kromě jasně daných formulářových prvků (textová pole s názvem dokumentu, abstraktem, úvodem apod.) také na informace o druhu dokumentu pomocí určitého uživatelem definovaného sémantického slovníku. Příkladem toho může být typ dokumentu zapadající do oblasti IT, software, hardware, programování apod. Uživatel tedy vybere podle svého mínění, kam nový dokument bude patřit. Tyto informace budou uloženy v novém společném dokumentu nazvaném v našem případě metadata.xml, kde budou uloženy informace o druhu dokumentu spolu s nadpisy a podnadpisy všech oddílů statě a diskuse, autorem, datem vytvoření, poslední změny apod. <dokument id="3"> Testovaci dokument 3 <metadata> <Studie/><Esej/> <stat> <podnadpis> Ut venenatis lectus vel tellus. In hac habitasse platea dictumst. Proin convallis diam aliquam enim. <podnadpis>Ut venenatis 2<jmeno>Ondrej<prijmeni>Smetana <editator> 2 <editovano>15/04/2008 17:18:11 09/04/2008 14:33:25 Pozn. Takto bude vypadat nově zapsaná část do dokumentu metadata.xml, který se skládá z kořenového uzlu <dokumenty> a poté jednostlivých jeho synů, tj. <dokument id=’x’>. Jak je vidět, metadata dokumentů jsou uložena mezi tagem <metadata> a při vyhledávání se datazuji, zda existuje ten či onen tag metadata, př. Zda existuje tag či <Esej> atd. Dále je vidět, že se ukládají podnadpisy, iniciály autora a editátora, tj. Osoby, která naposledy dokument měnila. Na základě metadat se poté bude rychleji vypisovat celý obsah systému, jelikož se načtou data pouze z jednoho dokumentu (metadata.xml) a další dokumenty se již neotvírají a také se významně urychlí vyhledávání v dokumentech. Co to tedy znamená? Odpověď je jednoduchá. Uživatel naší aplikace pro sptávu XML dokumentů nejprve zvolí požadovaný hledaný text nebo jiný řetězec znaků a dále určí, které oblasti budou prohledávány (obr. 9).
47
Obrovskou výhodou takovéhoto postupu bude to, že stačí načíst pouze dokument s metadaty a na základě informací zadaných uživatelem budou z metadat vybrány pouze některé dokumenty, které splňují kritéria daná uživatelem. Ty poté budou prohledány v daných oblastech popřípadě celé. Výpis nalezených informací Poté, co uživatel zadá konkrétní text k hledání viz příloha (obr. 5), pomocí metadat dokumentů se vyberou všechny dokumenty splňující kritéria zadávaná v menu hledání a na základě nich se prohledají jen tyto dokumenty. Samotný algoritmus hledání bude lepší projít krok za krokem na přiloženém CD, využívají se k tomu funkce PHP pro práci s řetězci znaků. Samotný výsledek můžete shlédnout v příloze (obr. 10). Výpis dokumentů Standartní výpis jednotlivých dokumentů je zajištěn na základě funkční šablony XSLT stylů, která má za úkol transformovat XML dokument do podoby HTML dokumentu zobrazitelného na webu v naší aplikaci. v bakalářském projektu je to ošetřeno tak, že uživatel má k dispozili seznam všech dokumentů (obr. 11) a výběrem požadovaného dokumentu je uživatel přesměrován k danému souboru (obr. 12).
3.13 Transformace XML V předchozích kapitolách bylo ukázáno, jak lze používat XML dokumenty. Nyní bude čtenář seznámen s posledním problémem, daleko snazším a to je, jak transformovat dokumenty do požadované podoby.V mnoha případech už totiž možnosti kaskádových stylů nestačí, a potom přichází na řadu jazyk XSL (eXtensible Stylesheet Language). Jazyk XSL Když vznikal jazyk XSL, měl to být skutečně jen starší bratříček kaskádových stylů (CSS). Umožňoval samozřejmě definovat vzhled jednotlivých elementů – způsob jejich zarovnání, velikost a styl písma, barvy apod. Kromě toho jej šlo použít i k takovým věcem, jako je automatické generování obsahu, číslování obrázků, kapitol apod. Postupně se ukázalo, že XSL má sloužit ke dvěma poměrně odlišným věcem – ke transformaci XML dokumentů a k definici vzhledu jejich formátování. Během příprav standardu XSL z něj proto byla vyřazena jeho část sloužící k transformaci dokumentů, pro kterou se používá název XSLT (XSL Transformations). Pomocí XSLT lze vytvářet styly, které definují, jak se XML dokumenty mají převádět do formátu HTML, do XML dokumentů s jinou strukturou nebo do obyčejných textových souborů. Zejména možnost konverze do HTML je dnes hojně využívána, protože většina prohlížečů si zatím se samotnými XML dokumenty neporadí. Druhé části XSL, která slouží k přesnému popisu vzhledu dokumentu, se často říká XSL FO (formátovací objekty), někdy jen zkráceně XSL. k dispozici máme vše, co známe z CSS, navíc lze přesně určit layout stránky – včetně sazby do více sloupců, hlaviček, patiček apod. Standard XSLT byl přijat jako standard konsorcia W3C na konci minulého roku. k dispozici je dnes celá řada softwarových procesorů, které umožňují zpracování XML dokumentů na základě XSLT stylu. Většina z nich je přitom napsaná v Javě, některé jsou k dispozici i v C++. Mezi volně šířené procesory patří XT, Saxon a Xalan. Vlastním XSLT procesorem se může pochlubit i Microsoft, Oracle, IBM a některé další firmy. Je tedy z čeho vybírat. Názornou ukázkou jak taková šablona XSL funguje je obrázek znázorňující funkci
48
XSL procesoru při transformaci XML dokumentu na výsledný požadovaný dokument za pomoci XSL šablony (obr. 3).
Obr. 3: Princip zpracování XML dokumentů pomocí stylů Struktura stylu Soubor s XSLT stylem je sám o sobě XML dokument, protože používá syntaxi XML. Pro jeho editování proto můžou být využity běžné XML editory. v dokumentu se přitom míchají dva druhy značek. Řídící příkazy pro procesor a značky výsledného dokumentu (např. HTML tagy). Aby šlo v jednom dokumentu kombinovat dvě sady značek, používají se jmenné prostory. To znamená, že před jména všech elementů, které má XSLT procesor zpracovávat, se píše speciální prefix „xsl:“. Celý styl přitom musí být uzavřen v elementu stylesheet. Jazyk Xpath XPath (XML Path Language) je samostatný standard W3C, který se používá v několika dalších jazycích včetně XSLT. v XPathu lze zapisovat jednoduché výrazy, které vybírají části XML dokumentu. XML dokument je přitom chápán jako stromová struktura, kde jsou jednotlivé elementy, atributy a text chápány jako uzly. Výrazy v XPath jsou podobné zápisu cest ve struktuře adresářů. Kdybychom například chtěli vybrat všechny položky faktury, použijeme XPath výraz /faktura/polozka. Lomítko přitom odděluje jednu úroveň ve stromu. Znamená to, že položka musí být dítětem faktury. Pokud nám na hloubce vnoření nezáleží, použijeme dvě lomítka bezprostředně za sebou, hledají se pak všichni potomci v libovolné úrovni stromu. Podobně jako v adresářové struktuře, existuje i zde možnost odvolávat se na aktuální uzel stromu pomocí tečky a přejít na nadřazenou úroveň pomocí dvou teček. Pokud se čtenář bude chtít ve výrazu odkázat na atribut, vloží před jeho jméno „@“ . Výraz „//@mena“ vybere všechny atributy měna kdekoliv v dokumentu. Za výraz lze do hranatých závorek zapisovat podmínku, která výběr zúží. Pokud se jako podmínka zapíše číslo, vybere se
49
element s daným pořadím. Například „/faktura/polozka[0]“ vybere první položku dokumentu. Poslední položku bychom vybrali s využitím speciální funkce „last()“ v podobě např. „/faktura/polozka[last()]“. Vše lze samozřejmě navzájem kombinovat. Pokud by zadání znělo vybrat jen ty faktury, kde je měna v dolarech, použil by se příkaz Xpath v podobě: „//faktura[cena/@mena='USD']“. Možnosti XPath jsou samozřejmě mnohem větší, ale prostor práce neumožňuje zabývat se jimi podrobně. k dispozici jsou funkce pro základní výpočty, pro práci s řetězci a samozřejmě i logické spojky (Clark, 2005). Transformace XML v ASP.NET Způsobů práce s XML dokumentem v ASP.NET je několik. Nejjednodušší je využít vestavěný web control pro práci, parsování a transformace. Jde o Xml Web Server Control, díky kterému lze zobrazení nebo překlad pomocí XSLT šablony provést na jediném řádku. Použijeme-li zmíněný webový ovládací prvek, pak naše stránka může vypadat takto jednoduše (z důvodu přehlednosti je HTML kód očesán na minimum): <%@ Page Language="C#" %> Transfomace XML Pozn. Z takového zápisu si každý čtenář může uvědomit sílu XML právě při transformacích původního XML dokumentu do dalších výstupních formátů (HTML, PDF apod.) za předpokladu, že bude k dipozici XML dokument a několik (třeba i stovky) XSL šablon. Jedním příkazem je tak můžeme kombinovat. Ukázka XSL šablony Praktickou ukázkou takové XSL šablony může být zpracovávaný vzorový příklad. Styl tedy bude transformovat XML dokument s pevnou strukturou na HTML dokument s formátováním blízce podobném odborné práci. Je jasné, že docílit pomocí XSL šablony formálně naprosto přesnou předlohu odborného textu není docela možné, ovšem dá se mu velice dobře přiblížit a pro účely vzdělávací a dohledávání informací se dají formální nedostatky přehlédnout. Pro názornost bude ilustrativně uveden příklad toho, jak může vypadat šablona XSL pro transformaci XML na HTML. Bude využit demonstrativní projekt s rozsáhlými dokumenty. Pro větší obsáhlost bude skript přemístěn do příloh (příloha A). URL adresa http://www.w3.org/1999/XSL/Transform, která identifikuje jmenný prostor, je přitom velmi důležitá. XSLT procesor podle ní pozná, že dokument opravdu obsahuje styl. Pokud toto URL není uvedeno nebo v něm bude překlep, procesor nebude instrukce ve stylu vůbec zpracovávat. Samotný styl se skládá především z šablon, které definují, jak se jednotlivé části XML dokumentu budou převádět do tvaru výstupního dokumentu. Při výběru částí dokumentu se používá jednoduchý dotazovací jazyk XPath. Pozn. Tímto stylem docílíme transformace XML dokumentů do požadované podoby HTML dokumentu, názorná ukázka je uvedena v příloze (obr. 12).
50
Shrnutí Transformace dokumentů do jejich dalších podob je jednou z nejdůležitějších oblastí, kvůli kterým je XML tolik populární. Jde totiž o univerzálnost jednoho jediného dokumentu, ze kterého může programátor jednou šablonou vytvořit HTML dokument, druhou šablonou PDF dokument atd. Na základě této vlastnosti XML se dá vytvořit kupříkladu plně dynamický web (McLellan, 2005).
51
4 Závěr Práce se zabývá možnostmi zpracování informací v rámci WWW služeb, databází a informačních systémů. Jejím cílem bylo určit nejnovější dostupné metody pro správu a vyhledávání takovýchto informací z různorodých informačních systámů. Na samotném počátku práce byl zvolen jeden konkrétní a v současné době velmi moderní přístup, který problematiku dozajista řeší, tj. využití XML dokumentů v systémech. Dále byla vybrána úloha pro praktickou část práce, na jejímž základě bylo upozorněno na některé neduhy XML. Bylo tak poukázáno na skutečnosti, které mohou zkomplikovat práci s XML dokumenty v rámci databázových systému. Byly jasně shrnuty jak převládající výhody, tak negativní vlastnosti XML. Práce je prolnuta různými doporučeními, která vycházejí pokud možno z platných norem, jejichž cílem je nasměrovat čtenáře správnou cestou (nejen odborného charakteru) k ovládání XML v rámci informačních systémů tak, aby čtenářům a uživatelům přinášely co nejvyšší užitnou hodnotu. Nejvýznamnějším problémem se zdálo být ukládání a načítání velkého objektu do respektive z databáze Oracle 10g, která je v případě datového typu xmlype limitována maximálním počtem 4000 znaků. Ačkoliv byla nalezena určitá řešení, která byla popsána a okomentována, rozhodl jsem se k ukládání XML dokumentů mimo databázi. Bylo by vhodné připomenout i zrádný problém s nedůkladným nastavením jazykových sad dokumentů, jehož důsledkem bylo neuložení některých dat a to bez žádného chybového hlášení! Dalo by se také konstatovat, že datový typ xmltype je nejvhodnější při práci s malými, krátkými XML dokumenty jako jsou databáze faktur, korespondence apod. v takovém případě nemá programátor žádný větší problém s implementací XML do databáze. Za zmínku stojí i fakt, že práci s vyhledáváním informací v systémech soustřeďující XML dokumenty značně zlehčí zavedení pomocného dokumentu s metadaty vytvořeným na základě sémantického slovníku a některými vhodnými částmi jednotlivých dokumentů. V budoucnu se dá předpokládat další vývoj XML aplikací a technologií, příkladem může být i zmiňovaný, relativně nový jazyk známý jako AJAX, který je založen na předávání informací pomocí XML.
52
5 Literatura (ARMSTRONG, 2005)
ARMSTRONG, E., BALL, J. The J2EE 1.4 Tutorial [online]. 2005 [cit. 2008-05-17]. Sun Microsystems. Angličtina. Dostupný z WWW: < http://java.sun.com/j2ee/1.4/docs/tutorial/doc/>.
(BELLINASO, 2008)
BELLINASO, M. Webové programování v ASP.LET 2.0: Problém, návrh, řešení. Brno: Computer Press, 2008. Čeština. ISBN 978-80251-1893-1.
(BRÁZA, 2005)
BRÁZA, J. PHP5: začínáme programovat. Praha: Grada Publishing, 2005 [cit. 2008-02-01]. Čeština. ISBN 80-2471-146-X.
(BRECHLEROVÁ, 2006)
BRECHLEROVÁ, D. XML a bezpečnost [online v PDF]. 2006 [cit. 2008-03-11]. Praha: INFORUM 2006. Čeština. Dostupný z WWW: .
(CLARK, 2005)
CLARK, J. XSL Transformations (XSLT) [online]. c1999 [cit. 200803-11]. Angličtina. Dostupný z WWW: .
(DAVES, 2005)
DAVES, CH., BRYLA, B., JOHNSON, J., WEISHAM, M. OCA Oracle 10g Administration I Study Guide [online v PDF]. [cit. 2008-0226]. Angličtina. Dostupný z WWW: .
(FEUERSTEIN, 2007)
FEUERSTEIN, S., PRIBYL, B., DAWES, CH. Oracle PL/SQL Language Pocket Reference, Fourth Edition. 2007. ISBN 13: 9780596514044.
(GUTMANS, 2005)
GUTMANS, A., BAKKEN, S., RETHANS, D. Mistrovství v PHP5. Brno: Computer Press, 2005. Čeština. ISBN 978-80-251-1519-0.
(JÍCHA, 2003)
JÍCHA, R. XML v ASP.LET [online tutoriál]. Brno: Redakce Interval.cz, 2003 [cit. 2008-02-01]. Čeština. Dostupný z WWW: . ISSN 1212-8651.
(KLEIN, 2000 A)
KLEIN, S. Interactive SQL Server & XML Online Tutorial [online v PDF] [cit. 2008-02-28]. Dostupný z WWW: .
(KOSEK, 2000 A)
KOSEK, J. Vše o WWW [online]. c1999-2006 [cit. 2008-02-03]. Čeština. Dostupný z WWW: .
(KOSEK, 2000 B)
KOSEK, J. XML pro každého. Praha: Grada Publishing, 2000 [cit. 2008-02-25]. Čeština. ISBN 80-7169-860-1.
(KOSEK, 2000 C)
KOSEK, J. Vše o WWW [online]. c1999-2006 [cit. 2008-02-03]. Čeština. Dostupný z WWW: .
53
(KOSEK, 2000 D)
KOSEK, J. Vše o WWW [online]. c1999-2006 [cit. 2008-02-03]. Čeština. Dostupný z WWW: .
(LEMAY, 2002)
LEMAY, L. Laučte se Perl za 21 dní. Brno: Computer Press, 2002. Čeština. ISBN: 80-7226-616-0.
(LONEY, 2005)
LONEY, K., BRYLA, B. Mistrovství v Oracle Database 10g. Brno: Computer Press, 2006 [cit. 2008-02-01]. Čeština. ISBN: 80-251-1277-2.
(MCLELLAN, 2005)
MCLELLAN, D. Very Dynamic Web Interfaces [online]. c2008, 2005 [cit. 2008-05-14]. Angličtina. Dostupný z WWW: .
(NASH, 2003)
NASH, G. Learn to Use XML with DB2 [online]. 2003 [cit. 2008-0309]. Dostupný z WWW: .
(NYFFENEGGER, 2003)
NYFFENEGGER, R. DBMS_LOB [online]. 2008. Dostupný z WWW: < http://www.adp-gmbh.ch/ora/plsql/dbms_lob.html>.
(O‘REILLY, 2000)
O‘REILLY, T. DBMS_LOB [online]. 2008. Dostupný z WWW: < http://www.adp-gmbh.ch/ora/plsql/dbms_lob.html>.
(POKORNÝ, 2004)
POKORNÝ, J. XML databáze: Současný stav a perspektivy [online v PDF]. 2004 [cit. 2008-04-15]. Čeština. Dosupný z WWW: .
(ROBBIE, 2004)
ROBBIE, J. XQuery: a Guided Tour [online v PDF]. Datadirect Technologies, c2004 [cit. 2008-04-21]. Angličtina. Dostupný z WWW: .
(RYS, 2004)
RYS, M. What's Lew in FOR XML in Microsoft SQL Server 2005 [online]. Microsoft Corporation, c2008 [cit. 2008-02-03]. Angličtina. Dostupný z WWW: .
(SYBASE, 2004)
SYBASE, INC. Managing XML with Adaptive Server Enterprise [online v PDF]. Dublin: Sybase Inc. 2004 [cit. 2008-04-13]. Dostupný z WWW: .
54
(ŠVESTKA, 2000)
ŠVESTKA, P. PHP : to nejlepší je zadarmo [online]. Brno: Computer press. 2000 [cit. 2008-04-14]. Dostupný z WWW: . ISSN 1214-1887.
(VANICKÝ, 2004)
VANICKÝ, M. XML a databáze [diplomová práce]. 2004 [cit. 200803-26]. Dostupný z WWW: .
(VÁCLAVOVIČ, 2001)
VÁCLAVOVIČ, J. Budoucnost HTML se jmenuje XHTML [online]. Praha: Redakce Reboot.cz. 2001 [cit. 2008-04-22]. Čeština. Dostupný z WWW: . ISSN:1213-9955.
(QUIN,, 2008 A)
QUIN, L. Extensible Markup Language (XML) Activity Statement [online]. W3C, 2008 [cit. 2008-02-25]. Angličtina. Dostupný z WWW: .
(QUIN,, 2008 B)
QUIN, L. Extensible Markup Language (XML) [online]. W3C, 2008 [cit. 2008-02-25]. Angličtina. Dostupný z WWW: .
(ŽÁK, 2002)
ŽÁK , M. XML: začínáme programovat. Praha: Grada Publishing, 2002 [cit. 2008-02-25]. Čeština. ISBN 80-247-0565-6.
55
6 Seznam ilustrací v práci 6.1 Obrázky Obr. 1: Množství energie nesoucí XML ...................................................................................... 13 Obr. 2: Třívrstvá webová aplikace, XML slouží jako formát pro výměnu dat ........................... 16 Obr. 3: Princip zpracování XML dokumentů pomocí stylů ........................................................ 48
6.2 Tabulky Tab. 1: Některé změny v PHP 5 ................................................................................................... 27 Tab. 2: Porovnání strukturovaného a nestrukturovaného uložení XMLType v Oracle 10g ........ 37
4: Nastavení oddílů .......................................................................................................... 58 5: Výběr počtů jednotlivých oddílů nového dokumentu ................................................. 59 6: Vytváření nového dokumentu a editace dokumentu stávajícího ................................. 60 7: Druhý způsob vkládání dat .......................................................................................... 61 8: Výběr oddílů v druhém způsobu vkládání dat ............................................................ 62 9: Vyhledávání pomocí metadat ...................................................................................... 63 10: Výsledek hledání písmena „a“ ve všech úvodech dokumentů .................................. 64 11: Výpis dokumentů ...................................................................................................... 65 12: Ukázka vybraného dokumentu .................................................................................. 66 13: Ukázka webového rozhraní Oracle 10g .................................................................... 66
7.2 Tabulky Tab. 3: Vybrané užitečné funkce DOM XML .......................................................................... 67
7.3 Příloha A Ukázka XSL šablony ................................................................................................................ 69
58
Obr. 4: Nastavení oddílů
59
Obr. 5: Výběr počtů jednotlivých oddílů nového dokumentu
60
Obr. 6: Vytváření nového dokumentu a editace dokumentu stávajícího
61
Obr. 7: Druhý způsob vkládání dat
62
Obr. 8: Výběr oddílů v druhém způsobu vkládání dat
63
Obr. 9: Vyhledávání pomocí metadat
64
Obr. 10: Výsledek hledání slova "ipsum" v daných oddílech dokumentů
65
Obr. 11: Výpis dokumentů
66
Obr. 12: Ukázka vybraného dokumentu
Obr. 13: Ukázka webového rozhraní Oracle 10g
67
Tab. 3: Vybrané užitečné funkce DOM XML DOMDocument DomDocument-> create_element DomDocument-> create_attribute DomDocument-> create_text_node DomDocument-> get_element_by_id DomDocument-> get_elements_by_tagname
Popis funkce Vytvoření nového uzlu Vytvoření nového atributu Vytvoření nového textového uzlu Vyhledání uzlu s atribute ID Vrací pole hodnot nalezených uzlů s daným názvem
Vrací hodnotu uzlu s daným názvem Vrací uzel s daným atributem Vrací daný atribut Přidá nový atribut Nastaví hodnotu atributu Kontrola, zda existuje uzel s daným atributem