Adatbá Adatbázis modellek 5. téma
XML DB
GEIAL Kovács László
Az adatkezelés és XML kapcsolata Miért fontos az XML használata az adatbázis kezelésben? Adattárolás alapformái: - strukturált - szabad-szöveges - szemi struktúrált
- XML a web-es adatcsere szabványa - XML széles körben elterjedt - XML rugalmas szerkezetű - XML szemi-struktúrált - XML az adatok mellett a jelentést is hordozza - XML-hez széles szabvány feldolgozó felületek állnak rendelkezésre - XML egyszerűen feldolgozható
GEIAL Kovács László
1
Az adatkezelés és XML kapcsolata
XML
XSLT
SQL
XQuery
XPath
XML-DB XMLSchema
dokumentum orientáltság
adat orientáltság
rugalmasság hatékonyság integritás GEIAL Kovács László
Az adatkezelés és XML kapcsolata
GEIAL Kovács László
2
Az adatkezelés és XML kapcsolata Adatbázis kezelés és XML kapcsolata - XML is alkalmas hosszúidejű adattárolásra - adatDok egyik megjelenítési, közvetítő formátuma - új piaci szegmens - DBMS-ek tartalmaznak XML adattípust - DBMS-ek tartalmaznak XML kezelő függvényeket - DBMS-ek támogatják az xQuery-t - DBMS-ek támogatják az XmlSchema-t - DBMS-ek tartalmaznak XML-t generáló,vagy beolvasó funkciókat
GEIAL Kovács László
XML tárolási formátumai Logikai alternatívák: - külső állomány (karakterlánc) : + : egész dokumentum egyben - : lekérdezés, módosítás - belső nem ellenőrzött XML típus táblamezőben +: lekérdezés, érték módosítás -: bővítés, törlés, teljes dokumentum átfésülés - belső sémával ellenőrzött XML típus táblamezőben +: lekérdezés, érték módosítás -: bővítés, törlés, teljes dokumentum átfésülés - objektumokban (objektum táblákban) - lokális változókban GEIAL Kovács László
3
XML tárolási formátumai
Tárolási alternatívák: - CLOB (karakterlánc) : + : egész dokumentum egyben - : lekérdezés, módosítás - shredded (elemekre bontott, objektum-relációs táblákba átvitt): +: lekérdezés, érték módosítás -: bővítés, törlés, teljes dokumentum átfésülés - binary (az struktúra elemek tokenekkel kódoltak) +: tömörség -: teljes dokumentum átfésülés - hibrid (egyes részek más és más módon tárolódnak)
GEIAL Kovács László
XML tárolási formátumai XML dokumentumok tárolásának fő elemei: XMLType/XML XML DB Repository XML-DB XML XMLSchema
Táblák
XMLType mezők, táblák
XML-DB Repository
XML tárolási formátumok (CLOB, binary, OR)
séma ellenőrzés XSLT indexelés adatkezelés
ACL védelem verzió követés katalógusok
GEIAL Kovács László
4
XML tárolási formátumai A XML adatkezelés fő problémája: - hatékony keresés, szelekció - tömörítés - védelem XML indexelési alternatívák tárolási típus
index típus
shredded
B-fa, bitmap
CLOB
XMLIndex
CLOB
FreeText
XMLIndex: (dokumentum ID, position of the node, xPath, value)
GEIAL Kovács László
XML tárolási formátumai XML-DB Repository Az XML-DB Repository célja, hogy egy virtuális file-rendszert tegyen az XMLType mezőkben tárolt XML dokumentumok fölé.
XML-DB Repository ACL verziókezelés relációs struktúra
FTP HTTP
virtuális file-rendszer
GEIAL Kovács László
5
XML kezelő felülete XML adatok kezelésének alternatívái: - hagyományos szövegkezelő funkciókkal (korlátozott funkciók) - XML szabványok (xQuery,..) (általános) - SQL-beli XML szabványok (SQL/XML) (lekérdezésre korlátozott) - DBMS specifikus elemek (XMLDB) (kiterjedt)
GEIAL Kovács László
SQLServer XML kezelő felülete XML adatok letárolása XML mezőtípus használata Tábla létrehozása: CREATE TABLE XT (KOD INT PRIMARY KEY, SZOVEG XML); Index létrehozása, törlése: CREATE PRIMARY XML INDEX XTI ON XT(SZOVEG); DROP INDEX XTI ON XT; Konstans XML szöveg felvitele: INSERT INTO XT VALUES (1,'
1A2A…');
GEIAL Kovács László
6
SQLServer XML kezelő felülete XML adatok lekérdezése SELECT parancs használata Teljes tartalom lekérdezése: SELECT kod, szoveg FROM XT; Eredmény: 1
1uj2… 2
4UU 3
Fiat … Egy csomópont szövegtartalmának lekérdezése: SELECT szoveg.value('/B[1]/C[1]','char(2)') from xt; Nem érvényes, nem egyértelmű az alábbi alak: SELECT szoveg.value('/B[1]/C','char(2)') from xt; GEIAL Kovács László
SQLServer XML kezelő felülete XML adatok lekérdezése xQuery parancs használata
Lekérdezés: SELECT szoveg.query('for $i in //B return $i/D ') FROM XT Eredmény:
ujA UU Létezés vizsgálat: SELECT KOD FROM XT WHERE SZOVEG.exist('//C')=1;
GEIAL Kovács László
7
SQLServer XML kezelő felülete XML adatok módosítása xQuery parancs használata Csomópont felvitele: UPDATE xt SET szoveg.modify(' insert <E/> into /A[1]/B[1] ') WHERE kod = 1; UPDATE xt SET szoveg.modify(' insert <E/> after /A[1]/B[1] ') WHERE kod = 1; Csomópont törlése: UPDATE xt SET szoveg.modify(' delete //B/E ') WHERE kod = 1 Csomópont módosítása: UPDATE xt SET szoveg.modify(' replace value of (//B[1]/D[1]/text())[1] with xs:string("uj") ') WHERE kod = 1
GEIAL Kovács László
SQLServer XML kezelő felülete Relációs tábla XML adatokból Létező XML objektum használata
OPENXML(doc_id, r_node, mode) WITH séma: egy létező XML dokumentumból rowset, rekordhalmaz előállítása; táblával egyenértékű halmazt ad doc_id: dokumentum azonosító, előállítása sp_xml_preparedocument-n keresztül r_node: gyökér csomópont mode: megjelenítési minta séma: mezők neve, típusa és képzési típusa az eredmény táblában név típus forrás
GEIAL Kovács László
8
SQLServer XML kezelő felülete Relációs tábla XML adatokból Parancssor: declare @did int; exec sp_xml_preparedocument @did output, '
248'; select * from openxml(@did,'/a/b/text()',1) ; exec sp_xml_removedocument @did; Eredmény: id 5 6 7
parentid 2 3 4
ntype 3 3 3
lname #text #text #text
NULL NULL NULL
NULL NULL NULL
NULL NULL NULL
NULL NULL NULL
text 2 4 8
GEIAL Kovács László
SQLServer XML kezelő felülete Relációs tábla XML adatokból Parancssor: declare @did int; exec sp_xml_preparedocument @did output, '
248'; select * from openxml(@did,'/a/b',1) with (AA varchar(8) 'text()') ; exec sp_xml_removedocument @did; Eredmény: AA 2 4 8
GEIAL Kovács László
9
SQLServer XML kezelő felülete Relációs tábla XML adatokból Parancssor: declare @did int; declare @stxt varchar(2000); set @stxt = (select convert(varchar(2000), szoveg) from xt where kod = 3); exec sp_xml_preparedocument @did output, @stxt; select * from openxml(@did,'//auto/tipus/text()',2) ; exec sp_xml_removedocument @did; Eredmény: id 6 7
parentid ntype 3 3 5 3
lname #text #text
NULL NULL
NULL NULL
NULL NULL
NULL NULL
text Fiat Opel
GEIAL Kovács László
SQLServer XML kezelő felülete XML állomány relációs táblából SELECT … FOR XML tipus tipus: RAW AUTO EXPLICIT Minden rekord egy elem, a mezők attributumok lesznek: SELECT * FROM AUTOK FOR XML AUTO; Eredmény:
|
" ar="333" />
Explicit mezőnév kell: SELECT tipus, count(*) as db FROM AUTOK group by tipus for xml AUTO GEIAL Kovács László
10
SQLServer XML kezelő felülete XML állomány relációs táblából Minden rekord egy elem, a mezők gyerekelemek lesznek: SELECT * FROM AUTOK FOR XML AUTO, ELEMENTS;
fiat 2 opel 2
GEIAL Kovács László
SQLServer XML kezelő felülete XML adatok külső állományból OPENROWSET( forrásállomány, eredménytípus) Al-SELECT- ben használhatjuk insert into xt select 3, xx from (Select * FROM openrowset(BULK 'C:\users\kovacs_l\ab_msc\xmldb\X1.XML', SINGLE_BLOB) as xx) as R(xx);
GEIAL Kovács László
11
SQLServer XML kezelő felülete XML adatok sémakezeléssel Séma létrehozása: CREATE XML SCHEMA COLLECTION mySC AS ' <schema xmlns="http://www.w3.org/2001/XMLSchema"> <element name="A" >
<sequence> <element name="B" type="string"/> <element name="C" type="string"/> ' GO
GEIAL Kovács László
SQLServer XML kezelő felülete XML adatok sémakezeléssel
Séma kötése mezőhöz CREATE TABLE T (Col1 xml (mySC)) GO Adatfelvitel: INSERT INTO T VALUES ('
3'); Eredmény: XML Validation: Declaration not found for element 'G'. Location: /*:G[1] INSERT INTO T VALUES ('
aahh'); Eredmény: OK
GEIAL Kovács László
12
Oracle XML kezelő felülete XML adatok letárolása
Tábla létrehozása: CREATE TABLE XT (KOD INT PRIMARY KEY, SZOVEG XMLType); Konstans XML szöveg felvitele: INSERT INTO XT VALUES (1, XMLType ('
1A2…‘) ); UDT típusként kezeli az XMLType típust
GEIAL Kovács László
XML kezelő felülete Oracle XML-DB
XML/SQL SQL PL/SQL tábla SQL/XML elemei: - XMLElement() - XMLForest() - XMLAggreg() - XMLQuery() - XMLValidate() …
Oracle XML/SQL
XML
Oracle XML/DB elemei: - UpdateXML() - DeleteXML() - InsertXMLBefore() …
Az XML/DB csomag segítségével XML View definálható a relációs adattáblák fölé GEIAL Kovács László
13
XPath szabvány XPath : szabvány az XML dokumentumrészletek kijelölésére 1999-ben jött létre Követelmények: -tetszõleges elem vagy elemhalmaz kijelölhetõ legyen -rugalmas elemkijelölés biztosítása, melyben az elem kiválasztása történhet - név alapján - pozíció alapján - érték alapján - öszetett feltételek támogatása - származtatott kifejezések támogatása - tömör jelölési - adattípusok kezelése Add vissza azon áruk nevét, amiből legalább 7 darab van
bab ásó
GEIAL Kovács László
XPath kifejezés Elemi XPath kifejezés általános alakja: tengely::csomópont-szûrés[szelekció] Összetett XPath kifejezés: elem_kif/elemi_kif/… XPath kifejezés értéke: - csomópont-halmaz - logikai értékû érték - numerikus érték - szöveges érték - (navigációs) tengely: megadja a keresés fõ irányát (lehet például a gyererek felé vagy a szülõ felé mozogni) - csomópont-szûrés: az érintett csomópontok halmazát szûkíteni lehet a csomópont neve vagy típusa alapján - szelekció : az elõzõ lépésekben kiválasztott csomópontoknál további, rendszerint a tartalmukra vonatkozó szûkítés GEIAL Kovács László
14
XPath kifejezés Tengelytípusok - self: maga a kontextus csomópont - child: gyerek csomópontok (nem elemjellemzõ nem névtér) - descendant: befoglalt csomópontok,tetszõleges mélységben - descendant-or-self: a befoglalt csomópontok + kontextus - parent: a szülőt tartalmazó csomópont - ancestor: befoglaló csomópontotok - ancestor-or-self: a befoglaló csomópontok és a kontextus - preceding: megelõző csomópontotok (nem elemjellemzõ nem névtér) - preceding-sibling: megelőző és testvér - following: követő csomópontotok (nem elemjellemzõ nem névtér) - following-sibling: követő és testvér - attribute: elemjellemzõ - namespace: névtér leíró csomópontok
Child::*
GEIAL Kovács László
XPath kifejezés Csomópont szűrés A megadott tengely mentén elhelyezkedő csomópont halmazra történő elemi szűrés Név alapján név névtér:név * névtér:* Tipus alapján node() text() processing instruction() comment() GEIAL Kovács László
15
XPath kifejezés Fontosabb rövidítések child:: attribute::
@
descendant-or-self::node()
//
self::node()
.
parent::node()
..
[position()=2]
2
child::/adatbazis/ descendant::jatekos[csapat[attribute::p=3]/tipus/text() = 3]/child::nev
/adatbazis//jatekos[csapat[@p=3]/tipus/text() = 3]/nev
GEIAL Kovács László
XPath kifejezés Az XPath kifejezés nemcsak útvonal kifejezéseket tartalmazhat + : összeadás - : kivonás * : szorzás div : osztás mod : moduló | : csomópont-halmaz egyesítés and : logikai és or : logikai vagy not() : logikai tagadás = : egyenlő != : nem egyenlő < : kisebb > : nagyobb
GEIAL Kovács László
16
XQuery minta for $x in doc('xx9.xml')/adatbazis/autok/auto where $x/ar < 222 order by $x/tipus descending return
{$x/@rsz} {$x/tipus/text()} {$x/ar} {ll:felez($x/ar)}
opel <ar>214 <emberek> …
opel 214 107
GEIAL Kovács László
XQuery lekérdezés struktúrája (FLOWER)
FOR elem : ciklus LET elem : értékadás ORDER BY elem : rendezés WHERE elem : szelekció RETURN elem : projekció
for $x in doc('xx9.xml')/adatbazis/autok/auto where $x/ar < 222 order by $x/tipus descending return
{$x/@rsz} {$x/tipus/text()} {$x/ar} {ll:felez($x/ar)} GEIAL Kovács László
17
XQuery lekérdezés struktúrája XML dokumentum kijelölés fn:doc(file-specifikáció) Részfa kijelölés (XPath) fn:doc(file-specifikáció)/p1/p2/… for $x in fn:doc("xx9.xml")/adatbazis/autok/auto return
{$x} for $x in doc('xx9.xml')/adatbazis/autok/auto for $y in doc('xx9.xml')/adatbazis/emberek/ember return
{$x} {$y}
GEIAL Kovács László
XQuery lekérdezés struktúrája Szelekcio FOR $v IN lista LET $w := kifejezes WHERE feltetel RETURN kifejezes
for $x in doc('xx9.xml')/adatbazis/autok/auto where $x/ar > 222 return
{$x/@rsz}{$x/tipus/text()}
GEIAL Kovács László
18
XQuery lekérdezés struktúrája a 200-nál drágább autok rendszáma for $v in fn:doc('xx9.xml')//auto where $v/ar>200 return element eredmeny {$v/@rsz}
Auto rendszama es a tulaj neve for $a in fn:doc('xx9.xml')//auto for $e in fn:doc('xx9.xml')//ember where $a/@tulaj eq $e/@kod return element eredmeny { element auto {$a}, element tulaj {$e} } GEIAL Kovács László
XQuery lekérdezés struktúrája Tipusok es darabszamuk
{ for $t in fn:distinct-values( fn:doc('xx9.xml')//auto/tipus ) return element tipus {attribute tip {$t}, attribute db {count( for $a in fn:doc('xx9.xml')//auto where $a/tipus eq $t return element auto {$a/@rsz} ) } } } GEIAL Kovács László
19