• Nem Talált Eredményt

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;&copyright;</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:

DokumentumElem

AttribútumSzö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:

KAPCSOLÓDÓ DOKUMENTUMOK