• Nem Talált Eredményt

Félig-strukturált adatmodell (Semi-structured data model)

N/A
N/A
Protected

Academic year: 2023

Ossza meg "Félig-strukturált adatmodell (Semi-structured data model)"

Copied!
107
0
0

Teljes szövegt

(1)

Félig-strukturált adatmodell (Semi-structured data model)

dr. Kiss Attila

kiss@inf.elte.hu

(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 XML séma

6. Az XPath lekérdező nyelv 7. Az XQuery lekérdező nyelv 8. Az XSLT

9. Összefoglalás

(3)

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)

(4)

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

(5)

A relációs adatmodell korlátai

Hogyan tárolnánk ezt relációs adatbázisban?

(6)

A relációs adatmodell korlátai

Miből áll ez az oldal?

1. SZÖVEG 2. KÉP 3. TÁBLÁZAT

(7)

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

(8)

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.

(9)

<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>

Egy egyszerű HTML kód

(10)

A HTML megjelenítése böngészővel

(11)

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?

(12)

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ő.

(13)

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>

(14)

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

(15)

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

• 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.

HTML4.0 XML SGML

(16)

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>

(17)

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)

(18)

Elemek (Elements)

Egy XML dokumentumban egy nyitó és megfelelő záró jelölő (tag) közötti részt elemnek hívjuk.

<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>

elem elem

(19)

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>

(20)

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.

(21)

Példa

• <feladat> Igaz-e, hogy 2+3 &lt; 6? </feladat>

• Előre definiált entitások:

&lt; <

&gt; >

&amp; &

&apos; ‘

&quot; “

(22)

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

(23)

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)

(24)

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> Szintaktika: a névütközés elkerülésére Szintaktika: a névütközés elkerülésére

Szemantika: milyen URL-en található a séma

Szemantika: milyen URL-en található a

séma

(25)

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”?>

(26)

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ó>]]>

(27)

Egy teljes XML dokumentum

<?XML version ="1.0" encoding="UTF-8"

standalone="no"?>

<!DOCTYPE névjegyzék SYSTEM

"http://people.inf.elte.hu/kiss/névjegyzék.dtd">

<névjegyzék> <!--telefonkönyv-->

<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>

Kötelező

Opcionális

(28)

XML szabályok (1.)

• Az XML sorrend-érzékeny, vagyis a következők különböznek:

• Az XML kisbetű-nagybetű érzékeny, vagyis a következők különböznek:

<személy>, <Személy>, <SZEMÉLY>

<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>

(29)

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 >

(30)

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 > N em . </Válasz>

(31)

Jólformált dokumentumok (Well-Formed Documents)

• Egy XML dokumentum jólformált (well- formed, ha

– kielégíti az előző 3 szabályt, továbbá

– jelölőn belül egy attribútum nem ismétlődhet.

(32)

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.

(33)

Az XML dokumentumfa

• 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.

személy

név tel tel email

Kiss Attila

372-2500-8479

363-47-97

kiss@inf.elte.hu

(34)

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/

(35)

Az XML és a relációs adatbázisok

Tetszőleges relációs adatbázis

reprezentálható XML dokumentumként.

(36)

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

(37)

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)

(38)

Telefonkönyv DTD sémája

<személy>

<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>

Telefonok, faxok keverve

Legalább 1 email

Annyi címsor, amennyi csak szükséges Legfeljebb 1 becenév

Pontosan 1 név

(39)

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.

(40)

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.

(41)

Miből állhat egy személy elem?

– 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

név, bece?, cím*, (tel | fax)*, email+

(42)

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

A model reguláris kifejezéseiben a

következők használhatók

(43)

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)>

]>

(44)

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”>

(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 >

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

(46)

<!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ő

(47)

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”

>

(48)

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>

]>

(49)

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>

(50)

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">

(51)

Példa

• DTD:

<!ENTITY ka "Kiss Attila">

<!ENTITY copyright SYSTEM

"http://www.w3schools.com/dtd/entities.dtd">

• XML:

<author>&ka;&copyright;</author>

(52)

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">

(53)

É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.

(54)

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

(55)

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>

(56)

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.

(57)

Á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.

(58)

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.

(59)

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:

DokumentumElem

AttribútumSzöveg

Instrukció

Megjegyzés

Névtér

(60)

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.

(61)

Csúcsok azonosítói

• Minden csúcsnak van egy egyedi csúcs-

azonosítója, ami nem módosítható.

(62)

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ő.

(63)

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>

(64)

Az XML-fa

irodalom

Gyökér

könyv könyv

kiadó szerző szerző szerző kiadó szerző

ár

cím év cím év

veznév

kernév

(65)

/irodalom/könyv/év

irodalom

Gyökér

könyv könyv

kiadó szerző szerző szerző kiadó szerző

ár

cím év cím év

veznév kernév

/irodalom/könyv/év

Eredmény: <év>1995</év>

<év>1998</év>

(66)

Master Informatiquedr. Kiss Attila Félig-strukturált adatmodell 66

//szerző

irodalom

Gyökér

könyv könyv

kiadó szerző szerző szerző kiadó szerző

ár

cím év cím év

veznév

kernév //szerző

Eredmény: <szerző>Serge Abiteboul</szerző>

<szerző><kernév>Rick</kernév>

<veznév>Hull</veznév>

</szerző>

<szerző>Victor

(67)

/irodalom//kernév

irodalom

Gyökér

könyv könyv

kiadó szerző szerző szerző kiadó szerző

ár

cím év cím év

veznév kernév

/irodalom//kernév

Eredmény: <kernév>Rick</kernév>

(68)

/irodalom/könyv/szerző/text()

irodalom

Gyökér

könyv könyv

kiadó szerző szerző szerző kiadó szerző

ár

cím év cím év

veznév kernév

/irodalom/könyv/szerző/text() Eredmény: Serge Abiteboul

Victor Vianu

Jeffrey D. Ullman

text() = visszaadja a szövegcsúcs értékét

(69)

//szerző/*

irodalom

Gyökér

könyv könyv

kiadó szerző szerző szerző kiadó szerző

ár

cím év cím év

veznév kernév

//szerző/*

Eredmény: <kernév>Rick</kernév>

<veznév>Hull</veznév>

A * tetszőleges elemre illeszkedik, de szövegre, attribútumra

(70)

/irodalom/könyv/@ár

irodalom

Gyökér

könyv könyv

kiadó szerző szerző szerző kiadó szerző

ár

cím év cím év

veznév kernév

/irodalom/könyv/@ár

Eredmény: 55

(71)

/irodalom/könyv/szerző[kernév]

irodalom

Gyökér

könyv könyv

kiadó szerző szerző szerző kiadó szerző

ár

cím év cím év

veznév

kernév /irodalom/könyv/szerző[kernév]

Eredmény: <szerző>

<kernév>Rick</kernév>

<veznév>Hull</veznév>

</szerző>

(72)

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

Aritmetikai

összehasonlítás

Egzisztenciális kifejezés

Pozícionáló kifejezés

(73)

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.

(74)

Tengelyek

b Aktuális csúcs Elem csúcs Attribútum csúcs

Gyökér

bli … - Szöveg

(75)

A child tengely

Az attribútumnak van szülője, de ő nem gyereke semelyik csúcsnak!

b

(76)

A parent tengely

b

(77)

Az attribute tengely

b

(78)

A descendant tengely

A leszármazott, illetve felmenő a gyerek, illetve a szülő tranzitív

b

(79)

A descendant-or-self tengely

b

(80)

Az ancestor tengely

b

(81)

Az ancestor-or-self tengely

b

(82)

A following tengely

b

(83)

A following-sibling tengely

b

(84)

A preceding tengely

b

(85)

A preceding-sibling tengely

b

(86)

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.

(87)

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]

(88)

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/

attribute::ár /irodalom/könyv/@ár

/self::node()/descendant-or-

self::node()/child::cím /.//cím

(ugyanaz mint a //cím)

/descendant-or-self::node()/

child::szerző/parent::node() //szerző/..

(89)

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.

(90)

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

)/…

(91)

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.

(92)

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

(93)

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

(94)

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>

(95)

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.

(96)

A FLOWR kifejezések

• Szintaxis:

for $v in e1 [ where e3 ] [ order by ... ] return e2let $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

(97)

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>

(98)

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>

(99)

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.

(100)

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>

(101)

Ö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>

(102)

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 distinct-

values(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>

(103)

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> {

<év> $é </év>, $s,

<összesen> count($k) </összesen>

} </eredmény>

else ( )

(104)

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.

(105)

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>

(106)

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)

(107)

Ö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ázis- kezelő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!

Hivatkozások

Outline

KAPCSOLÓDÓ DOKUMENTUMOK

E koncepció iránti elköteleződés Osterman és Seyler (1995, hivatkozik rá Glass-Estes 1997) szerint elsősorban azoknál a munkahelyeknél kerül sor, ahol viszonylag sok a

De azt tudni kell, hogy a cserkészet úgy épül fel, hogy vannak őrsök, am elyek a legkisebb egységek 5-15 fővel, ezt vezeti egy őrsvezető; akkor vannak a rajok, ahol

A tanulmány későbbi szekciói a szerzők által gyűjtött kvalitatív információk (elsősorban a párt helyi és regionális képviselőivel ké- szített félig

A félig strukturált interjúkból kirajzolódik, hogy maga a nőiség, a női lét narra- tívaalkotó tényezőként kaphat szerepet napjaink alternatív gyógyászatában, mely

A tech- nikai eszközök elterjedésével a közvetett és a közvetlen megfigyelések külön úton fejlődtek tovább; lehetővé vált a megfigyelési, rögzítési technikák

A kutatás módszereként a félig strukturált interjú módszerét választottam (lásd Cserné 1994, Fóris 2008a), amelyet Antunovics Mónikával, a Microsoft

1970-es cikk: A Relational Model of Data for Large Shared Data Banks Teljes adatmodell: nem csak azt mondja meg hogyan ´ırok le az adatot, hanem vannak mˆ uveletek is.. Ezeket a

Mert csak rövid időt töltött velem és hosszasan másutt.. Hogy mi kötötte őt a völgyekhez,