Využití XML v DB aplikacích Michal Kopecký
Výběr ze slajdů k 7. přednášce předmětu Databázové Aplikace (DBI026) na MFF UK
Komunikace aplikace s okolím • Databázová aplikace potřebuje často komunikovat s dalšími informačními systémy – Export podkladů z IS pro externí účetnictví – B2G (business-to-government) • Export výkazů pro státní správu
– B2B (business-to-business) • Import údajů z IS jiných firem • Elektronické objednávky
– SOA service-oriented architecture • Komunikace mezi jednotlivými komponentami 2 DBI026 -DB Aplikace - MFF UK
Komunikace aplikace s okolím • Pro komunikaci se ve stále větší míře používá XML formát dat Čitelný i pro lidskou obsluhu aplikací Strukturovaný Snadno parsovatelný – Velký objem dat – Přímé dotazování nad XML daty vyžaduje zcela odlišné nástroje a datové struktury, než relační databází 3 DBI026 -DB Aplikace - MFF UK
XML a relační databáze • Pro komunikaci databázové aplikace s okolím je proto často potřebné – Exportovat uložená relační data do XML – Získat informace uložené v uzlech XML stromu a uložit je do relačních tabulek – Ukládat původní XML dokumenty, získané od obchodních partnerů – Vyhledávat XML dokumenty obsahující dané informace 4 DBI026 -DB Aplikace - MFF UK
Adresování dat v XML - XPath • XPath je jedním z často používaných dotazovacích jazyků nad XML • Výsledkem dotazu je množina uzlů či atributů, které vyhovují zadané podmínce • Dokument je chápán jako strom, obsahující – – – – –
Kořenový uzel (není součástí dokumentu) Elementy Atributy Textové uzly (listy, odpovídají volnému textu mezi uzly) … (komentáře, jmenné prostory, instrukce pro zpracování) 5 DBI026 -DB Aplikace - MFF UK
Adresování dat v XML - XPath • Cesta je základním prostředkem pro adresaci uzlu či uzlů ve stromě – Absolutní začínají znakem ’/’ – Relativní – Zapisuje se jako seznam kroků, oddělených lomítky.
6 DBI026 -DB Aplikace - MFF UK
Adresování dat v XML - XPath • Příklady Xpath dotazů – /knihy/kniha/nazev • seznam všech elementů nazev, které jsou přímým potomkem elementu kniha, který je přímým potomkem kořenového elementu knihy.
– //nazev • seznam všech elementů nazev v XML stromu, nacházejících se na libovolných cestách
7 DBI026 -DB Aplikace - MFF UK
Adresování dat v XML - XPath • Příklady Xpath dotazů – /knihy/*/nazev • na druhém kroku cesty může být libovolný element
– /knihy/kniha[1]/autor[2] • druhý autor první knihy v seznamu
– /knihy/kniha[autor=’Pokorný J.’]/titul • tituly všech knih od J. Pokorného
8 DBI026 -DB Aplikace - MFF UK
Adresování dat v XML - XPath • Osy v XPath – self:: - aktuální uzel – parent::, child:: - přímý rodič/potomci aktuálního uzlu – ancestor::, descendand:: - všichni předci/potomci, včetně nepřímých – descendand-or-self::, ancestor -or-self:: – following::, preceding:: - uzly před/za aktuálním uzlem a všemi jeho předky – following-sibling::, preceding-sibling:: - sourozenci – attribute:: - atributy aktuálního uzlu
• child:: tvoří defaultní osu, nemusí se uvádět 9 DBI026 -DB Aplikace - MFF UK
Adresování dat v XML - XPath • preceding::
• following::
10 DBI026 -DB Aplikace - MFF UK
Adresování dat v XML - XPath • Obvykle se využívají zkrácené notace – – – –
jméno_uzlu místo child::jméno_uzlu @jméno_atributu místo attribute:: jméno_atributu ’.’ pro aktuální uzel ’..’ pro rodičovský uzel
11 DBI026 -DB Aplikace - MFF UK
Adresování dat v XML - XPath • Příklady dotazů – Názvy všech knih /knihy/kniha/nazev/text() – První kniha v seznamu /knihy/kniha[1]
……
12 DBI026 -DB Aplikace - MFF UK
Indexování dat v XML • Problémem je efektivita vyhodnocování XPath dotazů, případně dotazů v jiných dotazovacích jazycích nad XML – Data mohou být v relační databázi uložena po částech, a využity standardní nástroje (spojení, indexy) Použitelné v libovolné relační databázi Nutná znalost struktury ukládaných dokumentů (DTD, XMLSchema)
– Data mohou být uložena nativně v podobě textu Nutná podpora speciálních typů indexů 13 DBI026 -DB Aplikace - MFF UK
Ukládání XML do relačních databází • Pokud je potřeba ukládat XML dokumenty, platné vzhledem ke konkrétnímu DTD, je možné použít několik variant uložení • Nástin jednoho z možných řešení: – Předpokládá dostatečně jednoduché DTD, nebo vytvoření jednoduššího DTD’, které je méně striktní, než DTD původní, tj.: platnost v DTD platnost v DTD’ • • • •
Elementy jmenují jiné elementy ve svém obsahu nejvýše jednou Obsažený element může být nepovinný (?) nebo opakující se (*) Obsažené elementy jsou oddělené pouze čárkou, ne ’|’ Na pořadí elementů nezáleží 14 DBI026 -DB Aplikace - MFF UK
Ukládání XML do relačních databází • Pro takto zjednodušené DTD je možné vytvořit – Seznam možných cest v XML stromu – Pro každý element je E vytvořena tabulka, obsahující sloupce pro jednotlivé atributy E(DocID,ElemID,ParID,PathID,atributy) • Id dokumentu, Id elementu,sloupce pro uchování atributů, Id rodičovského elementu, Id cesty na které element leží 15 DBI026 -DB Aplikace - MFF UK
Ukládání XML do relačních databází • • Kniha(DocID,ElemID,ParID,PathID,ISBN) Titul(DocID,ElemID,ParID,PathID,PCDataId) Autor(DocID,ElemID,ParID,PathID,PCDataId) PCData(DocID,ElemID,Data) 16 DBI026 -DB Aplikace - MFF UK
Ukládání XML do relačních databází • Dotazy v XPath jsou přeformulovány na SQL • Často je nutné spojovat velké množství tabulek. Jejich počet je možné snížit např. tím, že pro podstromy, ve kterých se nemůže vyskytovat opakující se element, se vytvoří jediná tabulka obsahující element a všechny podelementy
17 DBI026 -DB Aplikace - MFF UK
Ukládání XML do relačních databází • • Kniha( DocID,ElemID, ISBN, TitulPCDataId, AutorPCDataId, ParID,PathID) PCData(DocID,ElemID,Data) 18 DBI026 -DB Aplikace - MFF UK
Ukládání XML do relačních databází • • Pokud se autor může vícekrát opakovat, je nutné jej uložit do samostatné tabulky, titul ale může být sloučen
• Kniha( DocID,ElemID,ISBN,TitulPCDataId,ParID,PathID) Autor(DocID,ElemID,ParID,PathID,PCDataId) PCData(DocID,ElemID,Data) 19 DBI026 -DB Aplikace - MFF UK
Indexace XML dat • DataGuide index – obsahuje strom cest, vyskytujících se v XML dokumentu – Každá cesta je vněm uložena právě jednou – Uzly obsahují metainformace o uzlech, které dané cestě odpovídají – Je možné jej uložit v XML formátu
20 DBI026 -DB Aplikace - MFF UK
Indexace XML dat • Index cest v XML – Obdoba DataGuide indexu – V uzlech obsahuje přímo množiny odkazů na jednotlivé elementy, které cestě odpovídají – Výrazně urychluje odpovědi na dotazy ve formě cest bez použití // – Přispívá pro vyhodnocení dotazů, které alespoň začínají absolutní cestou, a // obsahují ve větší hloubce 21 DBI026 -DB Aplikace - MFF UK
Indexace XML dat • Lore Index – VIndex (Value index) - indexuje textové hodnoty uzlů a atributů – TIndex (Term index) - indexuje slova v hodnotách elementů – LIndex - index pro nalezení otců pro jednotlivé uzly – PIndex (Path index) - indexuje cesty a udržuje pro ně množiny odpovídajících uzlů 22 DBI026 -DB Aplikace - MFF UK
Indexace XML dat • Lore Index – /knihy//autor[@stat=”CZ”] • pomocí VIndexu se naleznou atributy stat s hodnotou ”CZ”, pro ně se bottom-up postupem přes LIndex ověří cesta
23 DBI026 -DB Aplikace - MFF UK
Uložení XML dat – MS SQL • Nativní datový typ XML – CREATE TABLE XmlTab( ID NUMERIC CONSTRAINT XmlTabPk PRIMARY KEY, Dok XML ); – INSERT INTO XmlTab VALUES( 1, ’
b1’ ); 24 DBI026 -DB Aplikace - MFF UK
Export tabulky do XML – MS SQL • MS SQL pro export dat z tabulek do XML podoby používá konstrukci SELECT … FOR XML {RAW|AUTO|EXPLICIT|PATH} [,XMLDATA][,ELEMENTS][BINARY BASE64] [ROOT(’korenovy_element’)] • RAW generuje pro každou řádku jeden element row, hodnoty jsou obsažené v atributech elementu, názvy atributů odpovídají názvům sloupců (aliasů) v dotazu
25 DBI026 -DB Aplikace - MFF UK
Export tabulky do XML – MS SQL • MS SQL pro export dat z tabulek do XML podoby používá konstrukci SELECT … FOR XML {RAW|AUTO|EXPLICIT|PATH} [,XMLDATA][,ELEMENTS][BINARY BASE64] • RAW generuje pro každou řádku jeden element row, hodnoty jsou obsažené v atributech elementu, názvy atributů odpovídají názvům sloupců (aliasů) v dotaz •
|
26 DBI026 -DB Aplikace - MFF UK
Export tabulky do XML – MS SQL • AUTO generuje pro každou tabulku v použitém dotazu jeden element. Struktura odpovídá spojení. Názvy elementů odpovídají názvům tabulek • <dept deptno=”10”> <emp empno=”1230” ename=”King” /> <emp empno=”4560” ename=”Scott” /> <dept deptno=”20”> <emp empno=”7800” ename=”King” deptno=”20” /> 27 DBI026 -DB Aplikace - MFF UK
Export tabulky do XML – MS SQL • Modifikátor ELEMENTS zajistí, že hodnoty atributů jsou uloženy jako podelementy, nikoli jako atributy •
<dept> <deptno>10 <emp> <empno>1230<ename>King <empno>4560<ename>Scott <dept deptno=”20”> ... 28 DBI026 -DB Aplikace - MFF UK
Indexování XML dat – MS SQL • MS SQL dovoluje nad sloupcem typu XML vytvořit tři typy indexů – Nejprve je nutné vytvořit primární XML index CREATE PRIMARY XML INDEX XmlIdx ON XmlTab(Dok) – Následně lze vytvořit hodnotový index, index cest a index vlastností CREATE XML INDEX jm ON XmlTab(Dok) USING XML INDEX XmlIdx FOR {VALUE|PATH|PROPERTY} 29 DBI026 -DB Aplikace - MFF UK
Získání dat z XML • Pokud je k dispozici XML dokument s požadavkem na databázovou aplikaci, je potřebné získat z něj potřebné údaje a požadavek vyřídit, nebo data uložit do relační databáze
30 DBI026 -DB Aplikace - MFF UK
Získání dat z XML – MS SQL • Využívá XPath pro adresaci jednotlivých elementů a jejich množin, případně Xquery pro konstrukci výsledného XML z XML zdrojového • xml.Query(dotaz) – Vrací fragment, obsahující elementy, vyhovující dotazu – Dok.Query(’/kniha/autor’)
• xml.Exist(dotaz) – Vrací 1, pokud ex. alespoň jeden uzel, odpovídající dotazu. Jinak vrací 0
• xml.Value(dotaz,typ) – Vrací hodnotu odpovídajícího uzlu 31 DBI026 -DB Aplikace - MFF UK
Získání dat z XML – MS SQL • SELECT dok.Query(’/kniha/autor’) FROM knihy; –
Pokorný J. –
Král J.
• SELECT dok.Value(’/kniha/autor’,’varchar(30)’) FROM knihy; – Pokorný J. – Král J. 32 DBI026 -DB Aplikace - MFF UK
Aktualizace XML - MS SQL • Metoda xml.Modify(’XQuery’) UPDATE Knihy SET seznam=seznam.Modify( ’delete /knihy/kniha[autor=”Kopecký M.”]’ ) WHERE … UPDATE Knihy SET seznam=seznam.Modify( ’insert
…… into /knihy’) WHERE ... 33 DBI026 -DB Aplikace - MFF UK
Zpřístupnění XML dat – MS SQL • Pomocí nástroje „IIS Virtual Directory Management for SQL Server “ lze definovat v IIS 5 a vyšším adresář, pomocí kterého lze XML data publikovat na webu • //http://localhost/xml?SELECT * FROM KNIHY FOR XML AUTO&root=knihy
34 DBI026 -DB Aplikace - MFF UK