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
DBI026 -DB Aplikace - MFF UK 2 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
DBI026 -DB Aplikace - MFF UK 3 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í
DBI026 -DB Aplikace - MFF UK 4 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
DBI026 -DB Aplikace - MFF UK 5 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í)
DBI026 -DB Aplikace - MFF UK 6 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.
DBI026 -DB Aplikace - MFF UK 7 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
DBI026 -DB Aplikace - MFF UK 8 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
DBI026 -DB Aplikace - MFF UK 9 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
DBI026 -DB Aplikace - MFF UK 10 Adresování dat v XML - XPath preceding::following::
DBI026 -DB Aplikace - MFF UK 11 Adresování dat v XML - XPath Obvykle se využívají zkrácené notace –jméno_uzlu místo child::jméno_uzlu místo attribute:: jméno_atributu –’.’ pro aktuální uzel –’..’ pro rodičovský uzel
DBI026 -DB Aplikace - MFF UK 12 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] … …
DBI026 -DB Aplikace - MFF UK 13 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ů
DBI026 -DB Aplikace - MFF UK 14 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ží
DBI026 -DB Aplikace - MFF UK 15 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ží
DBI026 -DB Aplikace - MFF UK 16 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)
DBI026 -DB Aplikace - MFF UK 17 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
DBI026 -DB Aplikace - MFF UK 18 Ukládání XML do relačních databází Kniha( DocID,ElemID, ISBN, TitulPCDataId, AutorPCDataId, ParID,PathID) PCData(DocID,ElemID,Data)
DBI026 -DB Aplikace - MFF UK 19 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)
DBI026 -DB Aplikace - MFF UK 20 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
DBI026 -DB Aplikace - MFF UK 21 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
DBI026 -DB Aplikace - MFF UK 22 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ů
DBI026 -DB Aplikace - MFF UK 23 Indexace XML dat Lore Index pomocí VIndexu se naleznou atributy stat s hodnotou ”CZ”, pro ně se bottom-up postupem přes LIndex ověří cesta
DBI026 -DB Aplikace - MFF UK 24 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 ’ );
DBI026 -DB Aplikace - MFF UK 25 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
DBI026 -DB Aplikace - MFF UK 26 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
DBI026 -DB Aplikace - MFF UK 27 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
DBI026 -DB Aplikace - MFF UK 28 Export tabulky do XML – MS SQL Modifikátor ELEMENTS zajistí, že hodnoty atributů jsou uloženy jako podelementy, nikoli jako atributy King 4560 Scott...
DBI026 -DB Aplikace - MFF UK 29 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}
DBI026 -DB Aplikace - MFF UK 30 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
DBI026 -DB Aplikace - MFF UK 31 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
DBI026 -DB Aplikace - MFF UK 32 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.
DBI026 -DB Aplikace - MFF UK 33 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...
DBI026 -DB Aplikace - MFF UK 34 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 // * FROM KNIHY FOR XML AUTO&root=knihy