Opcionális
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
//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
/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>
/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
//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
/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
/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ő>
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
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.
Tengelyek
b Aktuális csúcs Elem csúcs Attribútum csúcs
Gyökér
bli … - Szöveg
A child tengely
Az attribútumnak van szülője, de ő nem gyereke semelyik csúcsnak!
b
A parent tengely
b
Az attribute tengely
b
A descendant tengely
A leszármazott, illetve felmenő a gyerek, illetve a szülő tranzitív
b
A descendant-or-self tengely
b
Az ancestor tengely
b
Az ancestor-or-self tengely
b
A following tengely
b
A following-sibling tengely
b
A preceding tengely
b
A preceding-sibling tengely
b
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.
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]
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ő/..
Kontextus csúcsok
• Az útvonalakat egy vagy több kontextus csúcsból indítjuk el.
• Egy XPath lépés:
In document
Félig-strukturált adatmodell (Semi-structured data model)
(Pldal 38-89)