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∈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.
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 &lt; 6? </feladat>
• Előre definiált entitások:
dr. Kiss Attila
Master Informatique
&lt;
<
&gt;
>
&amp;
&
&apos;
‘
&quot;
“
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;&copyright;</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