Félig-strukturált adatmodell 2010.01.07. 1 Félig-strukturált adatmodell (Semi-structured data model) dr. Kiss Attila Habilitációs előadása Forrás: http://people.inf.elte.hu/kiss/10bir/10bir.htm
Félig-strukturált adatmodell 2010.01.07. 2 Az előadás vázlata 1. Általános információk 2. Bevezető: Félig-strukturált, XML adatbázisok 3. Az XML fogalmai 4. Az XML DTD sémája 5. Az XPath lekérdező nyelv 6. Az XQuery lekérdező nyelv 7. Összefoglalás
1. Általános információk 2. Bevezető: Félig-strukturált, XML adatbázisok 3. Az XML fogalmai 4. Az XML DTD sémája 5. Az XPath lekérdező nyelv 6. Az XQuery lekérdező nyelv 7. Összefoglalás Félig-strukturált adatmodell 2010.01.07. 3
Félig-strukturált adatmodell 2010.01.07. 4 Tematika Előadás: XML alapok: XML, DTD, XPath, XQuery Gyakorlat: XML-kezelő eszközök: XML Spy http://www.altova.com/xmlspy.html Az Oracle XML kezelése
Félig-strukturált adatmodell 2010.01.07. 5 Szükséges előismeretek Relációs adatbázisok Lekérdező nyelvek Irányított, címkézett gráfok, fák Reguláris nyelvek
Félig-strukturált adatmodell 2010.01.07. 6 Előadáshoz kapcsolódó anyagok Az előadás diái a kurzus oldaláról letölthetők: http://people.inf.elte.hu/kiss/09ab2/ Adatbázisrendszerek alapvetés könyv: 11.2 fejezet: XML (520-528 oldal), 11.3 fejezet: DTD (528-535 oldal), 12.1 fejezet: XPath (553-560 oldal), 12.2 fejezet: XQuery (565-579 oldal) Oracle XML DB: XML típusú tábla, XML típusú attribútum, XMLType(), XMLElement(), getclobval(), XMLQuery(), XMLTable() függvények használata: xml.ppt (37,39, 43-45, 50-51, 54-58 oldal) Az érdeklődőknek további, a részleteket jobban megvilágító, de nem kötelező segédanyagok: xml.pdf, xml07-oracle.ppt
1. Általános információk 2. Bevezető: Félig-strukturált, XML adatbázisok 3. Az XML fogalmai 4. Az XML DTD sémája 5. Az XPath lekérdező nyelv 6. Az XQuery lekérdező nyelv 7. Összefoglalás Félig-strukturált adatmodell 2010.01.07. 7
Félig-strukturált adatmodell 2010.01.07. 8 Relációs adatbázisok Strukturált adatok Rögzített adatbázisséma (táblák rendszere) Megbízható, gyors SQL lekérdező nyelv
Félig-strukturált adatmodell 2010.01.07. 9 A relációs adatmodell korlátai Hogyan tárolnánk ezt relációs adatbázisban?
Félig-strukturált adatmodell 2010.01.07. 10 A relációs adatmodell korlátai Miből áll ez az oldal? 1. SZÖVEG 2. KÉP 3. TÁBLÁZAT 4. FORMÁZÁS 5. GRAFIKON 6. HIPERLINK
Félig-strukturált adatmodell 2010.01.07. 11 A relációs adatmodell korlátai A relációs adatbázisban tároláshoz ismernünk kellene előre a weboldalak belső szerkezetét, DE a szereplő tartalmak változnak, nem egységesek. ÖTLET: a táblákba kényszerítés helyett az adatok maguk írják le a tartalmukat és a formázásukat! Az XHTML forráskód részlete
Félig-strukturált adatmodell 2010.01.07. 12 A weboldalak HTML nyelve A HTML egy jelölő nyelv (markup language). Egy HTML oldal jelölőkből (tag), attribútumokból és adatokból áll. A HTML az oldal megjelenítését (betűtípus, szín, stb.) (style) definiálja.
Félig-strukturált adatmodell 2010.01.07. 13 Egy egyszerű HTML kód <html> <body> <h1>tom Sawyer weboldala</h1> <img src="tom.jpg"> <p> Hello! Tudtad, hogy <b>huckleberry Finn</b> a legjobb barátom? Azért néha <b>becky Thatcher</b>-t is kedvelem... <p> <font color = "red"> Ezeket szeretem a legjobban: <ul> <li> Hajókázni a Mississippin <li> Kincset keresni <li> Kerítést festeni </ul> </font> Ha hasonló dolgok érdekelnek, írjál a <a href="mailto:tom@mark.twain">tom@mark.twain</a> címemre! </body></html>
A HTML megjelenítése böngészővel Félig-strukturált adatmodell 2010.01.07. 14
Félig-strukturált adatmodell 2010.01.07. 15 Hogyan nyerhető ki az információ a HTML oldalakból? Melyek Tom Sawyer hobbijai? Meg kell találni az adott személy oldalát Ki kell nyerni szükséges információt az oldalról Problémák: Honnan tudjuk, hogy egy oldal személyhez tartozik? Hogyan nyerjük ki az információt, ha mindenki más stílusú oldalon tárolja az adatait? Honnan tudjuk, hogy a hobbi szó jelentése annak felel meg, hogy mit szeret csinálni?
Félig-strukturált adatmodell 2010.01.07. 16 Két megközelítés Ha a weben található információs egy előre ismert sémájú adatbázisban lenne tárolva, akkor a problémákat könnyen meg lehetne oldani. De nem így van tárolva akkor most mit kell tenni? 1. Adatbányászat, mesterséges intelligencia alkalmazása: Intelligens technikákkal próbáljuk felismerni a HTML oldalon tárolt információt a környezetből, a formázásból, a hivatkozásokból. 2. Adatbázisos megközelítés: Használjunk XML-t a tartalom leírására. Ezáltal a web egy félig-strukturált XML adatbázissá válik, amelyből az információ az XML lekérdező nyelveivel (Xpath, XQuery) egyszerűen kinyerhető.
Tom Sawyer adatai XML fájlban <Személy xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="e:\habil2009\vedes\tom.xsd"> <név>thomas Sawyer</név> <email cím="tom@mark.twain"/> <kép hely="tom.jpg"/> <leírás>hello! Tudtad, hogy Huckleberry Finn a legjobb barátom? Azért néha Becky Thatcher-t is kedvelem...</leírás> <hobbi megnevezés="hajókázni a Mississippin"/> <hobbi megnevezés="kincset keresni"/> <hobbi megnevezés="kerítést festeni"/> <barát> <Személy> <név>huckleberry Finn</név> <email cím="finn@mark.twain"/> </Személy> </barát> <kedveli> <Személy> <név>becky Thatcher</név> </Személy> </kedveli> </Személy> Félig-strukturált adatmodell 2010.01.07. 17
Félig-strukturált adatmodell 2010.01.07. 18 Az XML használata rohamosan terjed A Microsoft Office 2007 dokumentumok alapformátuma az XML. (.docx,.xlsx,.pptx) APEH Tájékoztató a járulékbevallások (0608, 06081K, 06083) kezeléséről (2006.03.22.): Az olyan típusú nyomtatványokat - ilyen a 0608, 06083, 06081K - amelyek egy foglalkoztató (pl. 0608A), és ismeretlen számú foglalkoztatott (pl. 0608M) adatait tartalmazzák, kizárólag XML formában, elektronikus úton lehet eljuttatni az APEH-hez. Szakmaspecifikus XML nyelvek: Matematikai formulák: MathML Ábrák: SVG Webes űrlapok: XForms Multimédia prezentációk: SMIL Hangvezérlés: VoiceXML Dokumentumok: OpenDocument, DocBook Földrajzi megjelenítés: KML Génchipek: MINiML, MAGE-ML
Az XML története Az Extensible Markup Language (XML, kiterjeszthető leíró nyelv) a W3C által ajánlott általános célú leíró nyelv speciális célú leíró nyelvek létrehozására. http://www.w3.org/xml/ Előzménye: GML (1969) Generalized Markup Language SGML (1986) Standard Generalized Markup Language HTML (1989) HyperText Markup Language HTML4.0 XML SGML Jelenleg két XML verzió létezik: Az XML 1.0-t 1998-ban definiálták. Jelenleg az 5. kiadás az aktuális. 2006. szeptember: XML 1.1. Jelenleg a 2. kiadás az aktuális. Magyar XML összefoglaló és Oracle XML összefoglaló található az alábbi címen: http://ablinux.inf.elte.hu/indexxml.html Félig-strukturált adatmodell 2010.01.07. 19
Félig-strukturált adatmodell 2010.01.07. 20 Mi az XML röviden? Az XML dokumentum HTML dokumentumra hasonlít. De XML-ben tetszőleges jelölőnév (tag) használható. Például: <személy> <név> Kiss Attila</név> <tel> 372-2500-8479 </tel> <tel> 363-4797 </tel> <email> kiss@inf.elte.hu </email> </személy> Nagy ügy! Ennyi az egész?
1. Általános információk 2. Bevezető: Félig-strukturált, XML adatbázisok 3. Az XML fogalmai 4. Az XML DTD sémája 5. Az XPath lekérdező nyelv 6. Az XQuery lekérdező nyelv 7. Összefoglalás Félig-strukturált adatmodell 2010.01.07. 21
Félig-strukturált adatmodell 2010.01.07. 22 Az XML alapfogalmai Elemek (Elements) Attribútumok (Attributes) Entitások (Entities) Névterek (Namespaces) XML deklaráció (XML declaration) Feldolgozási instrukciók (Processing Instruction) Megjegyzések (Comments) CDATA szekciók (CDATA sections)
Félig-strukturált adatmodell 2010.01.07. 23 Elemek (Elements) Egy XML dokumentumban egy nyitó és megfelelő záró jelölő (tag) közötti részt elemnek hívjuk. elem elem <személy> <név> Kiss Attila </név> <tel> 02 444 7777 </tel> <tel> 051 011 022 </tel> <email> kiss@inf.elte.hu </email> </személy> nem elem
Félig-strukturált adatmodell 2010.01.07. 24 Attribútumok (Attributes) Egy nyitó jelölő (tag) tartalmazhat attribútumokat. Az attribútum értékét idézőjelek közé kell tenni. <szócikk> <szó nyelv = en > cheese</szó> <szó nyelv = fr > fromage</szó> <szó nyelv = hu > sajt </szó> <jelentés> A sajt egy tejtermék.</jelentés> </szócikk>
Félig-strukturált adatmodell 2010.01.07. 25 Entitások (Entities) Az entitás egy rövidítés, egy bonyolult vagy hosszú szöveges adat megnevezésére. Entitások szabadon definiálhatók és beépített entitások is léteznek. Az entitások bárhol használhatók a dokumentumban. Hivatkozás az entitásra: &entitásnév; Elemzéskor az entitás helyére behelyettesítődik az a szöveg, amit rövidít.
Félig-strukturált adatmodell 2010.01.07. 26 Példa <feladat> Igaz-e, hogy 2+3 < 6? </feladat> Előre definiált entitások: < < > > & & ' "
Félig-strukturált adatmodell 2010.01.07. 27 Névterek (Namespaces) Mi a névtér? Jelőlőnevek (tag-ek) egyedivé tétele, hogy dokumentumok összefésülésekor elkerülhessük a névütközést. A névterekkel egyedivé tett jelölőket, attribútumneveket minősített neveknek (qualified names) (QNames) hívjuk: Például isbn:name, xlink:href
Félig-strukturált adatmodell 2010.01.07. 28 Névterek (Namespaces) Névteret egy elem nyitó jelölőjének attribútumaként definiálhatjuk: xmlns:névtér_elnevezés="valamilyen URI" Az alapértelmezett névteret a következő módon definiáljuk xmlns="url" URI (Uniform Resource Identifier) URL (Uniform Resource Locator)
Félig-strukturált adatmodell 2010.01.07. 29 Példa <cikk xmlns= http://ecommerce.example.org/schema xmlns:játék= http://ecommerce.example.org/toy > <név>zsákbamacska</név> <tartalma> <játék:cikk> <játék:név>plüssmacska</játék:név> </játék:cikk> </tartalma> </cikk> Szemantika: milyen URL-en található a séma
Félig-strukturált adatmodell 2010.01.07. 30 További XML fogalmak XML deklaráció <?xml version= 1.0 standalone= yes encoding= UTF-8?> Feldolgozási instrukció Az alkalmazásokhoz, nem az elemző számára kell <?xml-stylesheet href= book.css type= text/css?>
Félig-strukturált adatmodell 2010.01.07. 31 További XML fogalmak Megjegyzések <! ez egy megjegyzés --> CDATA szekció Olyan blokk, amelynek tartalmát az elemző figyelmen kívül hagyja <![CDATA[<nyitó>ez hibás elem lenne az elemző számára</záró>]]>
Egy teljes XML dokumentum <?XML version ="1.0" encoding="utf-8" standalone="no"?> Kötelező <!DOCTYPE névjegyzék SYSTEM "http://people.inf.elte.hu/kiss/névjegyzék.dtd"> <névjegyzék> <!--telefonkönyv--> Opcionális <személy> <név> Kiss Attila </név> <tel> 372-2500-8479 </tel> <tel> 363-4797 </tel> <email> kiss@inf.elte.hu </email> </személy> </névjegyzék> Félig-strukturált adatmodell 2010.01.07. 32
Félig-strukturált adatmodell 2010.01.07. 33 XML szabályok (1.) Az XML sorrend-érzékeny, vagyis a következők különböznek: <szócikk> <szó language = en > cheese</szó> <szó language = fr > fromage</word> </szócikk> <szócikk> <szó language = fr > fromage</szó> <szó language = en > cheese</szó> </szócikk> Az XML kisbetű-nagybetű érzékeny, vagyis a következők különböznek: <személy>, <Személy>, <SZEMÉLY>
Félig-strukturált adatmodell 2010.01.07. 34 XML szabályok (2.) A jelölők párokat képeznek <dátum>...</dátum> A jelölő párokat helyesen kell egymásba ágyazni Jó: <dátum>... <nap>... </nap>... </dátum> Rossz: <dátum>... <nap>... </dátum>... </nap> Rossz: <dátum>... </Dátum> A szöveget nem tartalmazó elem rövidíthető: <személy vnév= Kiss knév= Attila /> <személy vnév= Kiss knév= Attila ></személy >
Félig-strukturált adatmodell 2010.01.07. 35 XML szabályok (3.) Az XML dokumentum legfelső szintjén csak egyetlen elem lehet, amit gyökér elemnek hívunk. <?xml version = 1.0?> <Kérdés>Ez így szabályos.</kérdés> <?xml version = 1.0?> <Kérdés> Ez is szabályos? </Kérdés> <Válasz> Nem. </Válasz>
Félig-strukturált adatmodell 2010.01.07. 36 Jólformált dokumentumok (Well-Formed Documents) Egy XML dokumentum jólformált (wellformed, ha kielégíti az előző 3 szabályt, továbbá jelölőn belül egy attribútum nem ismétlődhet.
Félig-strukturált adatmodell 2010.01.07. 37 Az XML feldolgozási modellje Fizikai szinten az XML dokumentum nem más mint egy sima szöveges állomány, vagyis valamilyen (UTF-8/16) karakterkészletből választott jólformált karaktersorozat. A strukturálatlan karaktersorozatokat a feldolgozó alkalmazások általában nem tudják hatékonyan kezelni. Az XML elemek, attribútumok beágyazása egy természetes logikai fa-struktúrát definiál.
Félig-strukturált adatmodell 2010.01.07. 38 Az XML dokumentumfa személy név tel tel email Kiss Attila 372-2500-8479 363-47-97 kiss@inf.elte.hu Az XML dokumentumok absztrakt modelljei az egymásba ágyazásnak megfelelő, gyökeres, irányított, címkézett fa. Azonosítók és hivatkozások (ID és IDREFS) használata esetén fa helyett tetszőleges gráf keletkezhet.
Félig-strukturált adatmodell 2010.01.07. 39 XML dokumentum feldolgozása Az XML feldolgozó (Processor) (XML parser) előállítja a jólformált XML dokumentumhoz tartozó gráfot. Az XML alkalmazások ezen a gráfon végzik el a műveleteket. XML feldolgozó például az Apache Xerces: http://xerces.apache.org/xerces2-j/
Félig-strukturált adatmodell 2010.01.07. 40 Az XML és a relációs adatbázisok Tetszőleges relációs adatbázis reprezentálható XML dokumentumként.
1. Általános információk 2. Bevezető: Félig-strukturált, XML adatbázisok 3. Az XML fogalmai 4. Az XML DTD sémája 5. Az XPath lekérdező nyelv 6. Az XQuery lekérdező nyelv 7. Összefoglalás Félig-strukturált adatmodell 2010.01.07. 41
Félig-strukturált adatmodell 2010.01.07. 42 A DTD sémaleíró A DTD (Document Type Description) sémaleíró meghatározza az XML dokumentumok szerkezetét. DTD használatával specifikáljuk, hogy mikor érvényes egy XML dokumentum. A DTD azt mondja meg, hogy mikor legális egy elem, illetve milyen beágyazások megengedettek. A DTD kifejező ereje nem elég típusok definiálására.
Félig-strukturált adatmodell 2010.01.07. 43 Mire jó a DTD? A DTD segítségével lehet az XML speciális nyelveit megadni. Például: FOAF (közösségi háló - friend of a friend) SVG (skálázható vektorgrafika) WML (HTML mobil eszközökre) SOAP (üzenetküldés webszolgáltatásokhoz) XHTML (jólformált HTML)
Félig-strukturált adatmodell 2010.01.07. 44 <személy> Telefonkönyv DTD sémája <név> Kiss Attila </név> <bece> Attila </bece> <cím>1117 Budapest </cím> <cím> Pázmány Péter 1/C</cím> <tel> 372-500-8479 </tel> <fax> 372-500-8480 </fax> <tel> 363-47-97 </tel> <email> kiss@inf.elte.hu </email> </személy> Pontosan 1 név Legfeljebb 1 becenév Annyi címsor, amennyi csak szükséges Telefonok, faxok keverve Legalább 1 email
Félig-strukturált adatmodell 2010.01.07. 45 A struktúra specifikálása Mit tartalmazhat egy személy elem? DTD-ben a megengedett tartalmakat definiáljuk (content model). A specifikálás reguláris kifejezésekkel történik.
Félig-strukturált adatmodell 2010.01.07. 46 Miből állhat egy személy elem? A kifejezés a következő lesz: név, bece?, cím*, (tel fax)*, email+ Ezek jelentése a következő: név = 1 név elem szükséges bece? = a bece elem opcionális, 0 vagy 1 bece elem lehet. név, bece? = A név elem után következik egy opcionális bece elem.
Félig-strukturált adatmodell 2010.01.07. 47 Miből állhat egy személy elem? név, bece?, cím*, (tel fax)*, email+ cím* = 0 vagy több cím elem tel fax = egy tel vagy egy fax elem (tel fax)* = 0 vagy több ismétlődése a tel vagy fax elemeknek email+ = 1 vagy több email elem
Félig-strukturált adatmodell 2010.01.07. 48 A model reguláris kifejezéseiben a következők használhatók a a elem e1? 0 vagy 1 előfordulása az e1 kifejezésnek e1* 0 vagy több előfordulása az e1-nek e1+ 1 vagy több előfordulása az e1-nek e1,e2 Az e2 az e1 után következik e1 e2 e1 vagy e2 (e) Zárójelezés #PCDATA Nem elemzendő szöveg EMPTY Nincs tartalom ANY Tetszőleges tartalom (#PCDATA a 1.. a n )* Vegyes tartalom
Félig-strukturált adatmodell 2010.01.07. 49 A telefonkönyv DTD sémája <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE telefonkönyv [ <!ELEMENT telefonkönyv (személy*)> <!ELEMENT személy (név, bece?, cím*, (fax tel)*, email+)> <!ELEMENT név (#PCDATA)> <!ELEMENT bece (#PCDATA)> <!ELEMENT cím (#PCDATA)> <!ELEMENT tel (#PCDATA)> <!ELEMENT fax (#PCDATA)> <!ELEMENT email (#PCDATA)> ]>
Félig-strukturált adatmodell 2010.01.07. 50 Attribútumok megadása a DTD sémában Az általános szintaxis a következő: <!ATTLIST elemnév attribútumnév1 típus1 alapérték1 attribútumnév2 típus2 alapérték2. attribútumnévn típusn alapértékn > Például: <!ATTLIST magasság mértékegység CDATA cm >
Félig-strukturált adatmodell 2010.01.07. 51 <!ATTLIST elemnév attribútumnév1 típus1 alapérték1 attribútumnév2 típus2 alapérték2. attribútumnévn típusn alapértékn > típus a következők valamelyike CDATA (en1 en2..) ID IDREF IDREFS Karaktersorozat A lista egyik tagja Egyedi azonosító Egy másik elem azonosítója Más elemek azonosítóinak listája
Félig-strukturált adatmodell 2010.01.07. 52 <!ATTLIST elemnév attribútumnév1 típus1 alapérték1 attribútumnév2 típus2 alapérték2. attribútumnévn típusn alapértékn > alapérték a következők egyike érték #REQUIRED #IMPLIED #FIXED érték Az attribútum alapértéke Az attribútumértéknek szerepelnie kell az elemben Az attribútum megadása nem kötelező Az attribútum értéke nem változtatható
Félig-strukturált adatmodell 2010.01.07. 53 Példa <!ELEMENT magasság (#PCDATA)> <!ATTLIST magasság mértékegység (cm in) #REQUIRED pontosság CDATA #IMPLIED mérhető CDATA #FIXED igen >
Azonosító (ID) és hivatkozás (IDREF) attribútumok <!DOCTYPE család [ <!ELEMENT család (személy)*> <!ELEMENT személy (név)> <!ELEMENT név (#PCDATA)> <!ATTLIST személy azon ID #REQUIRED anya IDREF #IMPLIED apa IDREF #IMPLIED gyerekei IDREFS #IMPLIED> ]> Félig-strukturált adatmodell 2010.01.07. 54
Félig-strukturált adatmodell 2010.01.07. 55 A DTD-nek megfelelő dokumentum <család> <személy azon= henry anya= diana apa= charles > <név> Henry </név> </személy> <személy azon= willi anya= diana apa= charles > <név> William </név> </személy> <személy azon= diana gyerekei= henry willi > <név> Diana </név> </személy> <személy azon= charles gyerekei= henry willi > <név> Charles </név> </személy> </család>
Félig-strukturált adatmodell 2010.01.07. 56 Entitások megadása a DTD sémában Az entitások rövidítések Az entitás belül és kívül is deklarálható. belül: <!ENTITY entitásnév "entitásérték"> kivül: <!ENTITY entitásnév SYSTEM "URI/URL">
Félig-strukturált adatmodell 2010.01.07. 57 Példa DTD: <!ENTITY ka "Kiss Attila"> <!ENTITY copyright SYSTEM "http://www.w3schools.com/dtd/entities.dtd"> XML: <author>&ka;©right;</author>
Félig-strukturált adatmodell 2010.01.07. 58 A DTD séma hozzárendelése a dokumentumhoz A dokumentumon belül: <?xml version="1.0"?> <!DOCTYPE család [<!ELEMENT...> ]> <család>... </család> A DTD egy külön fájlban szerepel: <!DOCTYPE család SYSTEM "család.dtd"> vagy <!DOCTYPE család SYSTEM "http://people.inf.elte.hu/kiss/család.dtd">
Félig-strukturált adatmodell 2010.01.07. 59 Érvényes dokumentumok Egy XML dokumentum érvényes egy adott DTD szerint, ha a dokumentum illeszkedik a reguláris kifejezésekre, az attribútumok típusai megfelelőek, és az azonosítók és hivatkozások használata szabályos.
Félig-strukturált adatmodell 2010.01.07. 60 XML Schema (XSD) Egy másik sémamegadási mód Többféle alaptípus használható Új típusok származtathatók Típus-kiterjesztéssel Típus-megszorítással Adatbázisszerű kulcsok fogalma Névterek használata Részletek: http://www.w3schools.com/schema
Félig-strukturált adatmodell 2010.01.07. 61 Egy DTD-nek megfelelő XML schema DTD: <!ELEMENT cikk (cím,szerző*,év, (folyóirat konferencia))> <xsd:element name= cikk type= cikktípus /> <xsd:complextype name= cikktípus > <xsd:sequence> <xsd:element name= cím type= xsd:string /> <xsd:element name= szerző minoccurs= 0 /> <xsd:element name= év /> <xsd:choice> <xsd:element name= folyóirat /> <xsd:element name= konferencia /> </xsd:choice> </xsd:sequence> </xsd:complextype> </xsd:element>
Félig-strukturált adatmodell 2010.01.07. 62 A DTD vagy XML schema diagramja A sémát diagrammal ábrázolhatjuk. A diagramon az elemek egymásba ágyazását, attribútumait adjuk meg a reguláris kifejezéseknek megfelelően. A járulékbevallás sémájának diagramja:
1. Általános információk 2. Bevezető: Félig-strukturált, XML adatbázisok 3. Az XML fogalmai 4. Az XML DTD sémája 5. Az XPath lekérdező nyelv 6. Az XQuery lekérdező nyelv 7. Összefoglalás Félig-strukturált adatmodell 2010.01.07. 63
Félig-strukturált adatmodell 2010.01.07. 64 Általános lekérdezési feladatok Az XML értékeinek szűrése, kiválasztása: navigálás, kiválasztás, információ kinyerése XML dokumentumok összefésülése, aggregálás: Összekapcsolás, aggregálás Adott sémájú XML dokumentum átalakítása másik sémájú dokumentummá: XML konstrukció A programozási felülettel a hogyant specifikáljuk. A lekérdező nyelven nem a hogyant, hanem a mit specifikáljuk.
Félig-strukturált adatmodell 2010.01.07. 65 Az XML lekérdező nyelvei XPath 2.0: Általános nyelv a navigálásra, kiválasztásra, információs kinyerésre Az XSLT, XQuery, XML Schema, alapját képezi. XSLT 2.0: XML XML, HTML, Text Átalakító script nyelv. Az XML-t például HTML formájúvá alakítja, hogy böngészővel meg lehessen jeleníteni. XQuery 1.0: XML XML Az XPath-nál bővebb lekérdező nyelv.
Félig-strukturált adatmodell 2010.01.07. 66 XPath adatmodell Az XML lekérdezései az XML fa bejárását határozzák meg. XPath kifejezéseit az XML fa alapján kell kiértékelni. Az XML fa csúcsai a következő csúcstípusúak lehetnek: Dokumentum Elem Attribútum Szöveg Instrukció Megjegyzés Névtér
Félig-strukturált adatmodell 2010.01.07. 67 Csúcsok Egy csúcsnak lehet neve, vagy értéke, vagy mindkettő egy Elem csúcsnak neve van, de értéke nincs; egy Szöveg csúcsnak nincs neve, de karaktersorozatú értéke van; egy Attribútum csúcsnak neve és értéke is van.
Félig-strukturált adatmodell 2010.01.07. 68 Csúcsok azonosítói Minden csúcsnak van egy egyedi csúcsazonosítója, ami nem módosítható.
Félig-strukturált adatmodell 2010.01.07. 69 Dokumentum sorrend A csúcsok közti rendezést a dokumentum sorrend definiálja, mely a pre-order bejárásnak felel meg. Egy szülő csúcs megelőzi a gyerekeit és attribútumait. A testvér csúcsok közül az attribútumok jönnek előbb és csak utána a más típusúak. Az attribútumok sorrendje implementáció függő.
Félig-strukturált adatmodell 2010.01.07. 70 Példák XPath lekérdezésekre <irodalom> <könyv ár= 55 > <kiadó>addison-wesley</kiadó> <szerző>serge Abiteboul</szerző> <szerző><kernév>rick</kernév> <veznév>hull</veznév> </szerző> <szerző>victor Vianu</szerző> <cím>foundations of Databases</cím> <év>1995</év> </könyv> <könyv> <kiadó>freeman</kiadó> <szerző>jeffrey D. Ullman</szerző> <cím>principles of Database and Knowledge Base Systems</cím> <év>1998</év> </könyv> </irodalom>
Félig-strukturált adatmodell 2010.01.07. 71 Az XML-fa Gyökér irodalom ár könyv könyv kiadó szerző szerző szerző cím év kiadó szerző cím év kernév veznév
/irodalom/könyv/év Gyökér irodalom ár könyv könyv kiadó szerző szerző szerző cím év kiadó szerző cím év kernév veznév /irodalom/könyv/év Eredmény: <év>1995</év> <év>1998</év> /irodalom/cikk/év eredménye üres, mert nincs cikk. Félig-strukturált adatmodell 2010.01.07. 72
Félig-strukturált adatmodell 2010.01.07. 73 //szerző Gyökér irodalom ár könyv könyv kiadó szerző szerző szerző cím év kiadó szerző cím év kernév veznév //szerző Eredmény: <szerző>serge Abiteboul</szerző> <szerző><kernév>rick</kernév> <veznév>hull</veznév> </szerző> <szerző>victor Vianu</szerző> <szerző>jeffrey D. Ullman</szerző>
Félig-strukturált adatmodell 2010.01.07. 74 /irodalom//kernév Gyökér irodalom ár könyv könyv kiadó szerző szerző szerző cím év kiadó szerző cím év kernév veznév /irodalom//kernév Eredmény: <kernév>rick</kernév>
Félig-strukturált adatmodell 2010.01.07. 75 /irodalom/könyv/szerző/text() Gyökér irodalom ár könyv könyv kiadó szerző szerző szerző cím év kiadó szerző cím év kernév veznév text() = visszaadja a szövegcsúcs értékét node() = visszaadja csúcsot name() = visszadja a jelölő nevét /irodalom/könyv/szerző/text() Eredmény: Serge Abiteboul Victor Vianu Jeffrey D. Ullman
Félig-strukturált adatmodell 2010.01.07. 76 //szerző/* Gyökér irodalom ár könyv könyv kiadó szerző szerző szerző cím év kiadó szerző cím év kernév veznév //szerző/* Eredmény: <kernév>rick</kernév> <veznév>hull</veznév> A * tetszőleges elemre illeszkedik, de szövegre, attribútumra nem.
Félig-strukturált adatmodell 2010.01.07. 77 /irodalom/könyv/@ár Gyökér irodalom ár könyv könyv kiadó szerző szerző szerző cím év kiadó szerző cím év kernév veznév /irodalom/könyv/@ár Eredmény: 55
Félig-strukturált adatmodell 2010.01.07. 78 /irodalom/könyv/szerző[kernév] Gyökér irodalom ár könyv könyv kiadó szerző szerző szerző cím év kiadó szerző cím év kernév veznév /irodalom/könyv/szerző[kernév] Eredmény: <szerző> <kernév>rick</kernév> <veznév>hull</veznév> </szerző> [kernév] igaz, ha a szerző elemnek van kernév gyereke.
Félig-strukturált adatmodell 2010.01.07. 79 További példák predikátumokra /irodalom/könyv[@ár < 60] az ára kisebb mint 60 /irodalom/könyv[szerző/kernév = "Rick"] egyik szerzőjének kerneve Rick /irodalom/könyv[szerző/text()] van szöveggel megadott szerzője /irodalom/könyv[2] a 2. könyv Pozícionáló kifejezés Aritmetikai összehasonlítás Egzisztenciális kifejezés
Félig-strukturált adatmodell 2010.01.07. 80 Lekérdezések eredményeinek kombinálása A következő halmazműveleteket lehet használni: Egyesítés:, union Metszet: intersect Kivonás: except Ezek a műveletek eltávolítják a többszörös előfordulásokat.
Félig-strukturált adatmodell 2010.01.07. 81 Tengelyek b Aktuális csúcs Elem csúcs Attribútum csúcs Gyökér bli - Szöveg
Félig-strukturált adatmodell 2010.01.07. 82 A child tengely b Az attribútumnak van szülője, de ő nem gyereke semelyik csúcsnak!
Félig-strukturált adatmodell 2010.01.07. 83 A parent tengely b
Félig-strukturált adatmodell 2010.01.07. 84 Az attribute tengely b
Félig-strukturált adatmodell 2010.01.07. 85 A descendant tengely b A leszármazott, illetve felmenő a gyerek, illetve a szülő tranzitív lezárása.
Félig-strukturált adatmodell 2010.01.07. 86 A descendant-or-self tengely b
Félig-strukturált adatmodell 2010.01.07. 87 Az ancestor tengely b
Félig-strukturált adatmodell 2010.01.07. 88 Az ancestor-or-self tengely b
Félig-strukturált adatmodell 2010.01.07. 89 A following tengely b
Félig-strukturált adatmodell 2010.01.07. 90 A following-sibling tengely b
Félig-strukturált adatmodell 2010.01.07. 91 A preceding tengely b
Félig-strukturált adatmodell 2010.01.07. 92 A preceding-sibling tengely b
Félig-strukturált adatmodell 2010.01.07. 93 XPath tengelyei (Axes) child (alapértelmezett tengely) Gyerek csúcsok. parent Szülő csúcsok. attribute Attribútum csúcsok. descendant Leszármazott csúcsok, az aktuális csúcsot nem beleértve. descendant-or-self Leszármazott csúcsok, az aktuális csúcsot is beleértve. ancestor Felmenő ősök, az aktuális csúcsot nem beleértve. ancestor-or-self Felmenő ősök, az aktuális csúcsot is beleértve. following A dokumentum sorrend szerint következő csúcsok. following-sibling A dokumentum sorrend szerint következő testvérek. preceding A dokumentum sorrend szerint megelőző csúcsok. preceding-sibling A dokumentum sorrend szerint megelőző testvérek. self Az aktuális kontextus csúcs.
Félig-strukturált adatmodell 2010.01.07. 94 Rövidítések Teljes alak root(.) /descendant-or-self::node()/ self::node() parent::node() child:: attribute:: [position() = szám] Rövidítve / //... @ [szám]
Félig-strukturált adatmodell 2010.01.07. 95 Példák rövidítésekre Hosszú alak /child::irodalom/child::könyv /child::irodalom/child::könyv/ attribute::ár /self::node()/descendant-orself::node()/child::cím /descendant-or-self::node()/ child::szerző/parent::node() Rövid alak /irodalom/könyv /irodalom/könyv/@ár /.//cím (ugyanaz mint a //cím) //szerző/..
Félig-strukturált adatmodell 2010.01.07. 96 Kontextus csúcsok Az útvonalakat egy vagy több kontextus csúcsból indítjuk el. Egy XPath lépés: cs 0 /lépés cs 0 jelöli a kontextus csúcsok sorozatát, ahonnan a navigációs lépést végrehajtuk.
Félig-strukturált adatmodell 2010.01.07. 97 Lépéssorozat Egy XPath navigációs kifejezés egy vagy több egymás utáni lépésből áll (lépés i (i>=1) ). A lépés 1 a cs 0 kontextus csúcsokból indul és cs 1 csúcsokba érkezik. Ezután cs 1 lesz a lépés 2 új kontextus csúcssorozata, és így tovább. Egy többlépéses XPath útvonal tehát így néz ki: cs 0 /lépés 1 /lépés 2 / ((cs 0 /lépés 1 )/lépés 2 )/ cs 1
Félig-strukturált adatmodell 2010.01.07. 98 Egy XPath lépés szintaxisa Egy lépés a következő fomájú: ax::nt[p 1 ] [p n ] ahol 1. az ax egy tengely (axis), amely azt határozza meg, hogy milyen irányba kell a kontextus csúcsokból a navigációt végrehajtani, 2. a nt egy csúcsteszt (node test), amelyet arra használunk, hogy csak bizonyos nevű vagy típusú csúcsokhoz navigáljunk, 3. A p i egy opcionális predikátum, amely segítségével tovább lehet szűrni, hogy milyen csúcsokhoz akarunk a lépéssel eljutni. A predikátumlista a predikátumok konjunkcióját jelenti.
1. Általános információk 2. Bevezető: Félig-strukturált, XML adatbázisok 3. Az XML fogalmai 4. Az XML DTD sémája 5. Az XPath lekérdező nyelv 6. Az XQuery lekérdező nyelv 7. Összefoglalás Félig-strukturált adatmodell 2010.01.07. 99
Félig-strukturált adatmodell 2010.01.07. 100 Az XQuery lekérdező nyelv Az XQuery egy deklaratív XML lekérdező nyelv. Azt a szerepet játssza, mint az SQL a relációs adatbázisok esetében. Az XQuery rendelkezik programozási nyelvre és adatbázisnyelvre jellemző tulajdonságokkal is. Programozási nyelvi jellemzők: iteráció, változók (for in, let in) rekurzív, felhasználói függvények reguláris kifejezések, típusok listák, tömbök Adatbázisos jellemzők: szűrés csoportosítás, összekapcsolás (joins)
Félig-strukturált adatmodell 2010.01.07. 101 Az XQuery nyelvtana XQuery Expr :=Literal Variable FunctionCalls PathExpr ComparisonExpr ArithmeticExpr LogicExpr FLWRExpr ConditionalExpr QuantifiedExpr TypeSwitchExpr InstanceofExpr CastExpr UnionExpr IntersectExceptExpr ConstructorExpr ValidateExpr Ebből a FLWRExpr kifejezésekkel foglalkozunk. A PathExpr tetszőleges XPath kifejezés, azaz XPath XQuery
Félig-strukturált adatmodell 2010.01.07. 102 FLOWR Expressions A FLOWR kifejezés a következőkből áll. iteráció (for); változók definiálása, lekötése (let); eredmény rendezése (order); predikátum alkalmazása (where); az eredmény konstrukciója (return). Egy példa (let nélkül): for $f in collection( filmek')/film where $f / év >= 2005 return <film>{ $f / cím / text()}, "rendezte" {$f / rendező / veznév / text()} </film>
Félig-strukturált adatmodell 2010.01.07. 103 Dokumentumok és kollekciók megadása Az XQuery számára az input a következő módon adható meg: doc() - az XML dokumentum URI-jét adjuk meg, és visszaadja a dokumentumfának a gyökerét; collection() egy olyan XML URI-jét veszi át, amely további XML fájlok URI-jét tartalmazza. Így egy XML adatbázist tudunk lekérdezni az XQuery segtségével.
Félig-strukturált adatmodell 2010.01.07. 104 A FLOWR kifejezések Szintaxis: for $v in e1 [ where e3 ] [ order by... ] return e2 let $v := e1 [ where e3 ] [ order by... ] return e2 A for és let részekből több is lehet: let $x:=1 let $y:=2 return $x+$y
Félig-strukturált adatmodell 2010.01.07. 105 for $x in expr1 return expr2 Jelentése: az $x változó felveszi az expr1 által visszaadott értékeket minden felvett értékre kiértékeljük az expr2 kifejezést az eredményeket konkatenáljuk for $x in doc("irodalom.xml")/irodalom/könyv return <eredmény> { $x } </eredmény> A lekérdezés eredmény: <eredmény> <könyv>...</könyv></eredmény> <eredmény> <könyv>...</könyv></eredmény> at kulcsszóval lehet számolni az iterációkat: for $x at $i in doc("irodalom.xml")/könyvesbolt/könyv/cím return <könyv>{$i}. {data($x)}</könyv>
Félig-strukturált adatmodell 2010.01.07. 106 let $x := expr1 return expr2 Jelentése: az $x változó az expr1 eredményét veszi fel kiértékeli és visszaadja az expr2 eredményét let $x := doc("irodalom.xml")/irodalom/könyv return <eredmény> { $x } </eredmény> A lekérdezés eredménye: <eredmény> <könyv>...</könyv> <könyv>...</könyv> </eredmény>
Félig-strukturált adatmodell 2010.01.07. 107 where where hasonló az SQL where feltételéhez. Milyen filmeket rendezett Fellini: for $f in collection(" filmek")/ film where $f/ rendező / veznév = Fellini return $f/ cím Az XPath útvonalra vonatkozó szabályok: Ha az útvonal nem létezik, akkor feltétel HAMIS! Ha az útvonal kifejezés több csúcsot eredményez, akkor a feltétel IGAZ, ha LEGALÁBB EGY csúcsra igaz.
Félig-strukturált adatmodell 2010.01.07. 108 Konstruktorok for $k in doc( irodalom.xml )//könyv where $k/szerző/kernév = Kálmán and $k/szerző/veznév = Mikszáth return <könyv> { $k/cím, $k/ár } </könyv> A lekérdezés eredménye: <könyv><cím>noszty fiú</cím><ár>845</ár></könyv> <könyv><cím>gavallérok</cím><ár>530</ár> </könyv>
Összekapcsolás (Join) Hasonlítsuk össze a Libri és az Alexandra árait! <árgép>{ for $a in doc( alexandra.xml )/könyv, $l in doc( libri.xml )/könyv where $a/@isbn = $l/@isbn return <könyv> { $a/cím } <alexandra_ár>{ $a/ár }</alexandra_ár>, <libri_ár>{ $l/ár }</libri_ár> </könyv> }</árgép> Félig-strukturált adatmodell 2010.01.07. 109
Félig-strukturált adatmodell 2010.01.07. 110 Csoportosítás Nincs GROUP BY az XQuery nyelvben. Adjuk meg a PANEM kiadó szerzőinek összes művét: <eredmény>{ for $s in distinctvalues(doc( irodalom.xml )/irodalom/könyv[kiado= PANEM ]/szerző) return <szerző>{ $s, for $c in document( irodalom.xml )/irodalom/könyv[szerző=$a]/cím return { $c } }</szerző> }</eredmény>
Félig-strukturált adatmodell 2010.01.07. 111 Aggregálás Hány könyvet adtak ki a szerzők évente? (A nulla ne jelenjen meg.) for $s in distinct-values(doc("http://www.libri.hu")/irodalom/könyv/szerző), $é in distinct-values(doc("http://www.libri.hu")/irodalom/könyv/@év) let $k := doc("http://www.libri.hu")/irodalom/könyv[szerző=$s and @év=$é] return if exists($k) then <eredmény> { $s, <év> $é </év>, <összesen> count($k) </összesen> } </eredmény> else ( )
Félig-strukturált adatmodell 2010.01.07. 112 Rendezés: order by A for $v in e1 return e2 FLWOR kifejezésben az e1 sorrendje határozza meg az eredmény elemeinek sorrendjét. Ha más sorrendet akarunk megadni, akkor a következőt használhatjuk: for $v in e1 order by e3 [ascending descending] [empty greatest least] return e2 A nullértékek esetén az [empty greatest least] mondja meg, hogy a nullérték a lista végén vagy elején legyen.
Félig-strukturált adatmodell 2010.01.07. 113 Példa rendezésre Listázzuk ki rendezve a PANEM kiadó 2001 utáni könyveit. <eredmény>{ for $könyv in /irodalom/könyv where $könyv/@évr > 2001 and $irodalom/kiadó= PANEM order by $könyv/cím return <könyv> <cím> {$könyv/cím } </cím>, for $szerző in $könyv/szerző return <szerző> {$szerző } </szerző> </könyv> }</eredmény>
Félig-strukturált adatmodell 2010.01.07. 114 Néhány fontosabb függvény Az XQuery beépített függvényei segítségével bonyolultabb számításokat is el lehet végezni. Új függvények is definiálhatók. Függvény Példa count count((0,4,2)) 3 max max((0,4,2)) 4 subsequence subsequence((1,3,5,7),2,3) (3,5,7) empty empty((0,4,2)) false() exists exists((0,4,2)) true() distinct-values distinct-values((4,4,2,4)) (4,2) to (1 to 10)[. mod 2 eq 1] (1,3,5,7,9)
1. Általános információk 2. Bevezető: Félig-strukturált, XML adatbázisok 3. Az XML fogalmai 4. Az XML DTD sémája 5. Az XPath lekérdező nyelv 6. Az XQuery lekérdező nyelv 7. Összefoglalás Félig-strukturált adatmodell 2010.01.07. 115
Félig-strukturált adatmodell 2010.01.07. 116 Összefoglalás Az XML adatbázisok egyre nagyobb szerepet kapnak. Kutatásuk, gyakorlati alkalmazásuk egyre fontosabb. Nem szorítják ki a relációs adatbázis-kezelőket. XML, DTD, XPath, XQuery Az XML adatbázis-kezelők rendelkeznek a szokásos adatbáziskezelői jellemzőkkel: Adatmodell (félig-strukturált) Lekérdező nyelvek Indexelés Tranzakció-kezelés Jogosultságok kezelése Ajánlott oldalak: Interaktív XML, DTD, XSLT: http://xmlzoo.net/ Interaktív XPath: http://www.mizar.dk/xpath/ Interaktív XQuery: http://demo.exist-db.org/exist/sandbox/ KÖSZÖNÖM A FIGYELMET!