Transcript Document
Félig-strukturált adatmodell (Semi-structured data model) dr. Kiss Attila [email protected] dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 1 Az előadás vázlata 1. 2. 3. 4. 5. 6. 7. 8. 9. Általános információk Bevezető: Félig-strukturált, XML adatbázisok Az XML fogalmai Az XML DTD sémája Az XML séma Az XPath lekérdező nyelv Az XQuery lekérdező nyelv Az XSLT Összefoglalás dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 2 Tankönyv az XML-hez III. Félig-strukturált adatok modellezése és programozása Adatbázisrendszerek alapvetés könyv: 11.1 fejezet: Félig-strukturált adat (515-519 oldal) 11.2 fejezet: XML (520-528 oldal) 11.3 fejezet: DTD (528-535 oldal) 11.4 fejezet: XML séma (535-547 oldal) 12.1 fejezet: XPath (553-560 oldal), 12.2 fejezet: XQuery (565-579 oldal) 12.3 fejezet: XSLT (580-589 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) dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 3 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 dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 4 A relációs adatmodell korlátai Hogyan tárolnánk ezt relációs adatbázisban? dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 5 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 dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 6 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 dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 7 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 8 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:[email protected]">[email protected]</a> címemre! </body></html> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 9 A HTML megjelenítése böngészővel dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 10 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? dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 11 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ő. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 12 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="[email protected]"/> <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="[email protected]"/> </Személy> </barát> <kedveli> <Személy> <név>Becky Thatcher</név> </Személy> </kedveli> </Személy> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 13 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 dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 14 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∈XMLSGML • 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 15 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> [email protected] </email> </személy> Nagy ügy! Ennyi az egész? dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 16 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) dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 17 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> [email protected] </email> </személy> nem elem dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 18 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> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 19 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 20 Példa • <feladat> Igaz-e, hogy 2+3 < 6? </feladat> • Előre definiált entitások: dr. Kiss Attila Master Informatique < < > > & & ' ‘ " “ Félig-strukturált adatmodell 21 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 dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 22 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) dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 23 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> Szemantika: milyen URL-en található a <játék:cikk> séma <játék:név>plüssmacska</játék:név> </játék:cikk> </tartalma> </cikk> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 24 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”?> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 25 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ó>]]> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 26 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> [email protected] </email> </személy> </névjegyzék> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 27 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> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 28 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 > dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 29 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> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 30 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 31 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 32 Az XML dokumentumfa személy név Kiss Attila tel tel email 363-47-97 372-2500-8479 [email protected] • 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 33 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/ dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 34 Az XML és a relációs adatbázisok Tetszőleges relációs adatbázis reprezentálható XML dokumentumként. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 35 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 36 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) dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 37 Telefonkönyv DTD sémája <személy> <név> Kiss Attila </név> <bece> Attila </bece> Pontosan 1 név Legfeljebb 1 becenév <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> Annyi címsor, amennyi csak szükséges Telefonok, faxok keverve <email> [email protected] </email> Legalább 1 email </személy> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 38 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 39 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 40 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 dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 41 A model reguláris kifejezéseiben a következők használhatók a e1? e1* e1+ e1,e2 e1|e2 (e) #PCDATA EMPTY ANY (#PCDATA|a1|..|an)* dr. Kiss Attila Master Informatique a elem 0 vagy 1 előfordulása az e1 kifejezésnek 0 vagy több előfordulása az e1-nek 1 vagy több előfordulása az e1-nek Az e2 az e1 után következik e1 vagy e2 Zárójelezés Nem elemzendő szöveg Nincs tartalom Tetszőleges tartalom Vegyes tartalom Félig-strukturált adatmodell 42 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)> ]> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 43 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”> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 44 <!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 Karaktersorozat (en1|en2|..) A lista egyik tagja ID Egyedi azonosító IDREF Egy másik elem azonosítója IDREFS Más elemek azonosítóinak listája dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 45 <!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 Az attribútum alapértéke #REQUIRED Az attribútumértéknek szerepelnie kell az elemben #IMPLIED Az attribútum megadása nem kötelező #FIXED érték Az attribútum értéke nem változtatható dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 46 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” > dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 47 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> ]> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 48 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> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 49 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"> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 50 Példa • DTD: <!ENTITY ka "Kiss Attila"> <!ENTITY copyright SYSTEM "http://www.w3schools.com/dtd/entities.dtd"> • XML: <author>&ka;©right;</author> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 51 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"> – dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 52 É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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 53 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 dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 54 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> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 55 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: dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 56 Á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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 57 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 58 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 dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 59 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 60 Csúcsok azonosítói • Minden csúcsnak van egy egyedi csúcsazonosítója, ami nem módosítható. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 61 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ő. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 62 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> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 63 Az XML-fa Gyökér irodalom ár könyv kiadó szerző szerző szerző kernév dr. Kiss Attila Master Informatique könyv cím év kiadó szerző cím veznév Félig-strukturált adatmodell 64 év /irodalom/könyv/év Gyökér irodalom ár könyv kiadó szerző szerző szerző kernév könyv cím év kiadó szerző cím veznév /irodalom/könyv/év Eredmény: <év>1995</év> <év>1998</év> /irodalom/cikk/év eredménye üres, mert nincs cikk. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 65 év //szerző Gyökér irodalom ár könyv kiadó szerző szerző szerző kernév dr. Kiss Attila Master Informatique veznév könyv cím év kiadó szerző cím é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 66 /irodalom//kernév Gyökér irodalom ár könyv kiadó szerző szerző szerző kernév könyv cím év kiadó szerző cím veznév /irodalom//kernév Eredmény: <kernév>Rick</kernév> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 67 év /irodalom/könyv/szerző/text() Gyökér irodalom ár könyv kiadó szerző szerző szerző kernév könyv cím év kiadó szerző cím veznév /irodalom/könyv/szerző/text() Eredmény: Serge Abiteboul Victor Vianu text() = visszaadja a szövegcsúcs értékét Jeffrey D. Ullman node() = visszaadja csúcsot name() = visszadja a jelölő nevét dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 68 év //szerző/* Gyökér irodalom ár könyv kiadó szerző szerző szerző kernév könyv cím év kiadó szerző cím 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 69 év /irodalom/könyv/@ár Gyökér irodalom ár könyv kiadó szerző szerző szerző kernév könyv cím év kiadó szerző cím veznév /irodalom/könyv/@ár Eredmény: 55 dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 70 év /irodalom/könyv/szerző[kernév] Gyökér irodalom ár könyv kiadó szerző szerző szerző kernév dr. Kiss Attila Master Informatique veznév könyv cím év kiadó szerző cím é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 71 További példák predikátumokra Aritmetikai /irodalom/könyv[@ár < 60] összehasonlítás 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] Egzisztenciális kifejezés a 2. könyv Pozícionáló kifejezés dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 72 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 73 Tengelyek b Aktuális csúcs Elem csúcs Attribútum csúcs Gyökér bli … - Szöveg dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 74 A child tengely b Az attribútumnak van szülője, de ő nem gyereke semelyik csúcsnak! dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 75 A parent tengely b dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 76 Az attribute tengely b dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 77 A descendant tengely b A leszármazott, illetve felmenő a gyerek, illetve a szülő tranzitív lezárása. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 78 A descendant-or-self tengely b dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 79 Az ancestor tengely b dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 80 Az ancestor-or-self tengely b dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 81 A following tengely b dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 82 A following-sibling tengely b dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 83 A preceding tengely b dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 84 A preceding-sibling tengely b dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 85 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 86 Rövidítések Teljes alak Rövidítve root(.) / /descendant-or-self::node()/ // self::node() . parent::node() .. child:: attribute:: @ [position() = szám] [szám] dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 87 Példák rövidítésekre Hosszú alak Rövid alak /child::irodalom/child::könyv /irodalom/könyv /child::irodalom/child::könyv/ /irodalom/könyv/@ár attribute::ár /self::node()/descendant-or- /.//cím self::node()/child::cím (ugyanaz mint a //cím) /descendant-or-self::node()/ child::szerző/parent::node() dr. Kiss Attila Master Informatique //szerző/.. Félig-strukturált adatmodell 88 Kontextus csúcsok • Az útvonalakat egy vagy több kontextus csúcsból indítjuk el. • Egy XPath lépés: cs0/lépés – cs0 jelöli a kontextus csúcsok sorozatát, ahonnan a navigációs lépést végrehajtuk. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 89 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ési (i>=1) ). • A lépés1 a cs0 kontextus csúcsokból indul és cs1 csúcsokba érkezik. • Ezután cs1 lesz a lépés2 új kontextus csúcssorozata, és így tovább. • Egy többlépéses XPath útvonal tehát így néz ki: cs0/lépés1/lépés2/… ((cs0/lépés1)/lépés2)/… cs1 dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 90 Egy XPath lépés szintaxisa • • Egy lépés a következő fomájú: ax::nt[p1] … [pn] 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 pi 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 91 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) dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 92 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 dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 93 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> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 94 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 95 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 dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 96 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> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 97 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> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 98 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 99 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> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 100 Ö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> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 101 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> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 102 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 ( ) dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 103 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. dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 104 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> dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 105 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 count Példa 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) dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 106 Ö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! dr. Kiss Attila Master Informatique Félig-strukturált adatmodell 107