Félig-strukturált adatmodell (Semi-structured data model)
dr. Kiss Attila
kiss@inf.elte.hu
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
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)
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
A relációs adatmodell korlátai
Hogyan tárolnánk ezt relációs adatbázisban?
A relációs adatmodell korlátai
Miből áll ez az oldal?
1. SZÖVEG 2. KÉP 3. TÁBLÁZAT
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
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.
<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
A HTML megjelenítése böngészővel
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?
Két megközelítés
Ha a weben található információs egy előre ismert sémájú
adatbázisban lenne tárolva, akkor a problémákat könnyen meg lehetne oldani.
De nem így van tárolva – akkor most mit kell tenni?
1. Adatbányászat, mesterséges intelligencia alkalmazása:
Intelligens technikákkal próbáljuk felismerni a HTML oldalon tárolt információt a környezetből, a formázásból, a hivatkozásokból.
2. Adatbázisos megközelítés: Használjunk XML-t a tartalom
leírására. Ezáltal a web egy félig-strukturált XML adatbázissá
válik, amelyből az információ az XML lekérdező nyelveivel
(Xpath, XQuery) egyszerűen kinyerhető.
Tom Sawyer adatai XML fájlban
<Személy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="E:\Habil2009\Vedes\tom.xsd">
<név>Thomas Sawyer</név>
<email cím="tom@mark.twain"/>
<kép hely="tom.jpg"/>
<leírás>Hello! Tudtad, hogy Huckleberry Finn a legjobb barátom? Azért néha Becky Thatcher-t is kedvelem...</leírás>
<hobbi megnevezés="Hajókázni a Mississippin"/>
<hobbi megnevezés="Kincset keresni"/>
<hobbi megnevezés="Kerítést festeni"/>
<barát>
<Személy>
<név>Huckleberry Finn</név>
<email cím="finn@mark.twain"/>
</Személy>
</barát>
<kedveli>
<Személy>
<név>Becky Thatcher</név>
</Személy>
</kedveli>
</Személy>
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
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
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>
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)
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
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>
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.
Példa
• <feladat> Igaz-e, hogy 2+3 < 6? </feladat>
• Előre definiált entitások:
< <
> >
& &
' ‘
" “
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
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)
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
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”?>
További XML fogalmak
• Megjegyzések
– <!– ez egy megjegyzés -->
• CDATA szekció
– Olyan blokk, amelynek tartalmát az elemző figyelmen kívül hagyja
– <![CDATA[<nyitó>ez hibás elem lenne az
elemző számára</záró>]]>
Egy teljes XML dokumentum
<?XML version ="1.0" encoding="UTF-8"
standalone="no"?>
<!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
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>
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 >
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>
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.
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.
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
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/
Az XML és a relációs adatbázisok
Tetszőleges relációs adatbázis
reprezentálható XML dokumentumként.
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
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)
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
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.
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.
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+
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
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)>
]>
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”>
<!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
<!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ő
Példa
<!ELEMENT magasság (#PCDATA)>
<!ATTLIST magasság
mértékegység (cm | in) #REQUIRED pontosság CDATA #IMPLIED
mérhető CDATA #FIXED “igen”
>
Azonosító (ID) és hivatkozás (IDREF) attribútumok
<!DOCTYPE család [
<!ELEMENT család (személy)*>
<!ELEMENT személy (név)>
<!ELEMENT név (#PCDATA)>
<!ATTLIST személy
azon ID #REQUIRED
anya IDREF #IMPLIED apa IDREF #IMPLIED gyerekei IDREFS #IMPLIED>
]>
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>
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">
Példa
• DTD:
<!ENTITY ka "Kiss Attila">
<!ENTITY copyright SYSTEM
"http://www.w3schools.com/dtd/entities.dtd">
• XML:
<author>&ka;©right;</author>
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">
É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.
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
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>
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.
Á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.
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.
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
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.
Csúcsok azonosítói
• Minden csúcsnak van egy egyedi csúcs-
azonosítója, ami nem módosítható.
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ő.
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>
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
/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>
Master Informatiquedr. Kiss Attila Félig-strukturált adatmodell 66