xml

63
1 XML • 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 a 2004. február 4-én publikált harmadik kiadás az aktuális. Ezzel egy időben adták ki az XML 1.1-et. Magyar XML összefoglaló, és Oracle XML összefoglaló található az alábbi címen: http://ablinux.inf.elte.hu/indexxml.html

Upload: tallulah-raymond

Post on 30-Dec-2015

19 views

Category:

Documents


0 download

DESCRIPTION

XML. 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) G eneralized M arkup L anguage - PowerPoint PPT Presentation

TRANSCRIPT

1

XML• 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 a 2004. február 4-én publikált harmadik kiadás az

aktuális. • Ezzel egy időben adták ki az XML 1.1-et.• Magyar XML összefoglaló, és Oracle XML összefoglaló

található az alábbi címen:http://ablinux.inf.elte.hu/indexxml.html

2

XML• Az XML jellegzetességei:

– az XML dokumentum önleíró szöveges információ,– az XML dokumentumok könnyen reprezentálhatók

címkézett, irányított gráfokkal,– lekérdező nyelvek

a gráfokban keresnek meghatározott

mintára illeszkedő útvonalakat (XPath),– a különböző funkciójú nyelvek

(XQuery, XSLT, XLink, XPointer)

közös része az XPath,– az adatbázis-kezelők (pl. Oracle)

támogatják az XML típus kezelését, – szabványos adatcsere formátumként segít az adatintegráció

megoldásában.

3

XML• Az adatintegráció promlémája:

– különböző helyeken tárolt, különböző formátumú adatbázisokat szeretnénk egységes formátumú, egy adatbázisban látni, illetve kezelni.

• A különbözőség többféle lehet:– eltérő adatmodell (relációs, objektumorientált),– különböző sémákban reprezentálhatják akár ugyanazt az

információt is,– más elnevezéseket használnak (név, ügyfélnév, vevő),– más skálákat használnak (forint, euro, dollár).

• Például képzeljük el különböző sörözők nyilvántartásait:– egyik helyen használnak adatbázis-kezelőt, a másik helyen meg

szöveges fájlokban tárolják az információt,– egyik helyen sörös üvegeket számolnak, a másik helyen sörös

ládákat,– az egyik helyen tárolják a szállító telefonszámát, a másik helyen

nem,– az egyik helyen megkülönböztetik a világos és barna söröket, a

másik helyen nem.

4

XML• Az adatintegráció kétféle megoldása:1. Adattárház építése (warehousing):

- egy közös sémájú adatbázisba napi, heti rendszerességgel betöltjük (szükség esetén transzformáljuk) a feldolgozáshoz szükséges adatokat.

Adattárház (Warehouse)

Burkoló (Wrapper) Burkoló (Wrapper)

Adatforrás Adatforrás

5

XML2. Közvetítő használata (mediation):

- az adatforrásokból egy közös nézetet (virtuális adatbázist) definiálunk,

- a virtuális adatbázishoz intézett lekérdezéseket át kell fordítani az eredeti adatforrások lekérdezéseivé, és a lekérdezések eredményeit vissza kell integrálni.

Közvetítő

Burkoló Burkoló

Adatforrás Adatforrás

Kérdés

Alkérdés

Alkérdés

KérdésKérdés

Alválasz

Válasz

Alválasz

Válasz

Válasz

6

XML• Az információ integráció megoldásához új adatmodellt

vezetünk be, a félig (vagy részben) strukturált adatmodellt.• Az XML a félig strukturált adatmodell szabványos leíró

nyelve.• A félig strukturált adatok irányított, címkézett gráffal

reprezentálhatók:• Csúcsok (elemek, gyökér): objektumok,• Élek (szülő-gyerek kapcsolatok): objektumok közti

kapcsolatok,• Címkék az éleken vagy csúcsokon: attribútumok,

kapcsolatnevek,• Levelek (text csúcsok): atomi értéket tartalmaznak.• Megjegyzés: Az élcímkézett és csúcscímkézett modellek

megfeleltethetők egymásnak.• Az adatmodell általánosítása a DOM (Document Object

Model, http://www.w3.org/DOM/ ).

7

XML

Szűz

Soproni

1.1995

5. kerRing

Ászok

sör sörkocsma

gyártógyártó

kapható

név

névnév

cím

díj

év helyezés

gyökér

Kocsma objektum

Sör objektum

8

XML• Helyesen formázott XML dokumentumok• Egy XML dokumentum szövegből áll.• Egy helyesen formázott XML dokumentumnak

többek között a következő szabályoknak kell megfelelnie:

• Egyetlen gyökér elem lehet egy dokumentumban. Az XML deklaráció, feldolgozó utasítások és megjegyzések megelőzhetik a gyökér elemet. Ezt a részt prológusnak, az utána következő részt dokumentumpéldánynak hívjuk.

• Az elemeket mind nyitó, mind záró címkének, tag-eknek kell határolni. <kocsma> </kocsma>

• A tag-ek egymásba ágyazhatók, de nem lehetnek átfedők. Mindegyik nem gyökér elemet másik elemnek kell magában foglalnia.

9

XML

10

XML

11

XML<?xml version="1.0" encoding="ISO-8859-2" standalone="no"?><Receptek><Recept név="tea" idő="5 perc">

<összetevő mennyi="1" egység="tasak">Tea</összetevő> <összetevő mennyi="1" egység="kanál">Citromlé</összetevő>

<Utasítások> <lépés>Forrald fel a vizet és tedd bele a teát!</lépés> <lépés>Tedd bele a citromlevet, majd keverd össze!</lépés> </Utasítások>

</Recept> </Receptek>

12

XML

Tea

1 tasak Tea 1 kanál Citromlé

Receptek

Recept

5 perc

Név

IdőÖsszetevő

Összetevő Utasítások

lépés lépés

Forrald fel a vizet és tedd bele a teát!

Tedd bele a citromlevet, majd keverd össze!

mennyi mennyi

egység egység

Élcímkézett reprezentálás

13

lépés

XML

Tea

Citromlé

Receptek

Recept

Név

Idő

Összetevő ÖsszetevőUtasítások

lépés

Forrald fel a vizet és tedd bele a teát!

Tedd bele a citromlevet, majd keverd össze!

mennyi mennyiegység egység

Tea

5 perc

1 tasak kanál1

GyökérCsúcscímkézett reprezentálás

Csúcs:

Attribútum:

Attribútumérték:

Szöveg:

14

XML

• Érvényes XML dokumentumok

• Egy helyesen formázott XML dokumentum érvényes, ha megfelel egy adott sémának.

• Egy XML séma az XML dokumentum típusának, szerkezeti szabályainak leírása.

• Kétféle séma használatos:

• DTD (Document Type Definition)

• XSD (XML Scheme Definition)

15

XMLXMLSpy http://www.altova.com/products/xmlspy/xml_editor.html

- (30 napos próbaverzió),- ellenőrzi a helyesen formázottságot, érvényességet, sémát generál.

16

XML<?xml version="1.0" encoding="ISO-8859-2" standalone="no"?><!DOCTYPE Receptek [

<!ELEMENT Receptek (Recept*)><!ELEMENT Recept (összetevő*,Utasítások*)><!ELEMENT összetevő (#PCDATA)><!ELEMENT Utasítások (lépés*)><!ELEMENT lépés (#PCDATA)><!ATTLIST Recept név CDATA #IMPLIED><!ATTLIST Recept idő CDATA #IMPLIED><!ATTLIST összetevő mennyi CDATA #IMPLIED> <!ATTLIST összetevő egység CDATA #IMPLIED>

]><Receptek><Recept név="tea" idő="5 perc">

<összetevő mennyi="1" egység="tasak">Tea</összetevő> <összetevő mennyi="1" egység="kanál">Citromlé</összetevő>

<Utasítások> <lépés>Forrald fel a vizet és tedd bele a teát!</lépés> <lépés>Tedd bele a citromlevet, majd keverd össze!</lépés> </Utasítások>

</Recept> </Receptek>

17

XML• Egy XML dokumentumpéldányhoz visszafele is le lehet generálni a sémáját, de

ez erre a példányra fog legjobban illeszkedni: – az aktuális értékeket tekinti az összes lehetséges értéknek,– az értékekből határozza meg a típust, és a számosságot, – így várhatóan nem lesz elég általános.

<?xml version="1.0" encoding="UTF-8"?><!--DTD generated by XMLSpy v2007 sp2 (http://www.altova.com)--><!ELEMENT összetevő (#PCDATA)>

<!ATTLIST összetevőegység (tasak | kanál) #REQUIREDmennyi CDATA #FIXED "1"

><!ELEMENT lépés (#PCDATA)><!ELEMENT Utasítások ((lépés+))><!ELEMENT Receptek ((Recept))><!ELEMENT Recept ((összetevő+, Utasítások))>

<!ATTLIST Receptidő CDATA #FIXED "5 perc"név CDATA #FIXED "tea"

>

18

XML• A DTD sémát külön fájlban is lehet tárolni:

<?xml version="1.0" encoding="ISO-8859-2" standalone="no"?><!DOCTYPE Receptek SYSTEM "C:\TMP\Konyha.dtd"><Receptek>

<Recept név="tea" idő="5 perc"><összetevő mennyi="1" egység="tasak">Tea</összetevő><összetevő mennyi="1" egység="kanál">Citromlé</összetevő><Utasítások>

<lépés>Forrald fel a vizet és tedd bele a teát!</lépés><lépés>Tedd bele a citromlevet, majd keverd

össze!</lépés></Utasítások>

</Recept></Receptek>

19

XML• Az XML fájl böngészővel is megnyitható, és az alstruktúrák kinyithatók

a – jelekre kattintva, illetve összecsukhatók még egy kattintással.• A konyha.xml fájlt Internet Explorerrel megnyitva:

<?xml version="1.0" encoding="ISO-8859-2" standalone="no" ?>   <!DOCTYPE Receptek (View Source for full doctype...)> - <Receptek> - <Recept név="tea" idő="5 perc">  <összetevő mennyi="1" egység="tasak">Tea</összetevő>   <összetevő mennyi="1" egység="kanál">Citromlé</összetevő> - <Utasítások>  <lépés>Forrald fel a vizet és tedd bele a teát!</lépés>   <lépés>Tedd bele a citromlevet, majd keverd össze!</lépés>   </Utasítások>  </Recept>  </Receptek>

20

XML• Az XSD sokkal részletesebb, mint a DTD.• A generált Konyha.xsd 73 sor, a Konyha.dtd 15 sor.• A Konyha.xsd első pár sora:

?xml version="1.0" encoding="UTF-8"?><!--W3C Schema generated by XMLSpy v2007 sp2 (http://www.altova.com)--><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:simpleType name="T3_összetevő"><xs:restriction base="xs:string">

<xs:enumeration value="Citromlé"/><xs:enumeration value="Tea"/>

</xs:restriction></xs:simpleType><xs:element name="Receptek">

<xs:complexType><xs:sequence>

<xs:element name="Recept"><xs:complexType>

<xs:sequence>s.t.b.

21

XML• A sémát is gráffal lehet reprezentálni.

• A konyha.png tartalma:

22

XML• Az XPath (http://www.w3.org/TR/xpath) lekérdezőnyelv

reguláris kifejezésekre illeszkedő útvonalakat keres.• Példák: http://www.zvon.org/xxl/XPathTutorial/General/examples.html

• 1999-ben készült az 1.0 verzió.• 2007. januárban jelent meg a 2.0 verzió.• A reguláris kifejezésben használt fontosabb jelölések:

/ gyökér csúcs

// az aktuális csúcs leszármazottjai

. aktuális csúcs

.. az aktuális csúcs közvetlen szülője

csúcsnév az adott nevű csúcs

@ attribútum

* tetszőleges csúcs

| két lekérdezés eredményének egyesítése

[ ] feltétel megadása

23

XML• /Receptek/Recept/@név eredménye:

név attribútum, értéke: tea• //összetevő[@mennyi=1]

eredménye:összetevő csúcs, értéke: Teaösszetevő csúcs, értéke: Citromlé

• /Receptek/Recept/Utasítások/*eredménye: lépés csúcs, értéke: Forrald fel a vizet ...lépés csúcs, értéke: Tedd bele a citromlevet...

24

XML• //Utasítások | /Receptek/Recept

eredménye:Recept csúcsUtasítások csúcs

• //*[@mennyi] -- létezik a csúcsnak mennyi attribútuma --

eredménye:összetevő csúcs, értéke: Teaösszetevő csúcs, értéke: Citromlé

• //Utasítások/lépés[2] – a 2. lépés csúcs –

eredménye:lépés csúcs, értéke: Tedd bele a citromlevet...

• //Recept[@név="tea" and összetevő="Citromlé"]//lépéseredménye:lépés csúcs, értéke: Forrald fel a vizet ...lépés csúcs, értéke: Tedd bele a citromlevet...

25

XML• /*/*

eredménye:

Recept csúcs• /*/*/*

eredménye:

összetevő csúcs, értéke: Tea

összetevő csúcs, értéke: Citromlé

Utasítások csúcs• /*/*/*/parent::* -- az aktuális csúcs szülője --

eredménye:

Recept csúcs• Fontosabb tengelyek (axes):

child gyerek

parent szülő

descendant összes leszármazott

ancestor összes ős

self aktuális csúcs

attribute összes attribútum

following-sibling

következő testvér

preceding-sibling

előző testvér

preceding nyitó tag előtti összes csúcs

following záró tag utáni összes csúcs

26

XML• Az XPath lekérdezésekben függvények is használhatók:

http://www.w3schools.com/xpath/xpath_functions.asp

Fontosabb függvényosztályok:• Accessor

Például: /Receptek/Recept/node-name(.)Eredménye: xs:QName, értéke: Recept

• Numeric Például: /Receptek/Recept/összetevő[@egység="kanál"]/@mennyi+3.14/round(.)Eredménye: xs: Double, értéke:4

• String Például: /Receptek/Recept/összetevő[@egység="kanál"]/string-length(.)Eredménye: xs: Integer, értéke:8

Másik példa: /Receptek/Recept/összetevő[@egység="tasak"]/upper-case(.)Eredménye: xs: string, értéke: TEA

27

XML• AnyURI

Például: /resolve-uri(".\Példa")Eredménye: xs: anyURI, értéke: C:\TMP\Példa

• Boolean Például: //összetevő[@egység="tasak"]/@mennyi="1" and false()Eredménye: xs: boolean, értéke false

• Duration/Date/Time Például: //lépés/current-date()Eredménye (-- időzónával együtt --): xs: date, értéke: 2007-04-24+02:00 xs: date, értéke: 2007-04-24+02:00

• QName (qualified name)Például: //Recept/namespace-uri(.)Eredménye:xs: anyURI, értéke üres

28

XML• Node

Például: Például: //Recept/namespace-uri(.)Eredménye:xs: string, értéke "összetevő"xs: string, értéke "összetevő"xs: string, értéke "Utasítások"

További függvényosztályok:• Sequence • Context • Error and Trace

• Elnevezéseket névterek segítségével lehet egyedivé tenni. A névterek után : jelet teszünk. Előre deklarált névterek:

1. xml = http://www.w3.org/XML/1998/namespace2. xs = http://www.w3.org/2001/XMLSchema3. xsi = http://www.w3.org/2001/XMLSchema-instance4. fn = http://www.w3.org/2005/xpath-functions5. local = http://www.w3.org/2005/xquery-local-functions

29

XML• Az XQuery lekérdező nyelv:

– SQL-hez hasonló: • FLOWR kifejezések:• FOR, LET, WHERE, ORDER BY, RETURN.

– XML-ben az adatelérést XPath kifejezéssel lehet megadni,

– az XQuery 1.0 2007. január 23 óta W3C ajánlás– az adatbázis-kezelők (pl. Oracle) támogatják

• Alkalmazási területek:– információ kinyerése XML fájlokból, – jelentések készítése,– XML adatok átalakítása XHTML formátumra,– weben publikált adatokon keresés– web service alkalmazások megvalósítása.

30

XML• Változók használata:

– $változó

• Például:

• xquery version "1.0";

for $x in doc("konyha.xml")//összetevő

order by $x/@egység

return $x

Eredménye XML dokumentum:<összetevő mennyi="1" egység="kanál">Citromlé</összetevő>

<összetevő mennyi="1" egység="tasak">Tea</összetevő>

31

XML• HTML dokumentum is generálható a segítségévelPéldául a konyha.xq fájl legyen a következő:

xquery version "1.0";<html><body><h1>Összetevők</h1><ul>{for $x in doc("konyha.xml")//összetevőlet $valami :="kanál"where $x/@egység=$valami return <li>{$x/text()}</li>}</ul></body></html>

32

XML• Az előbbi XQuery eredménye:<html>

<body>

<h1>Összetevők</h1>

<ul>

<li>Citromlé</li>

</ul>

</body>

</html>

Az eredményt elmentve Konyha.html fájlba és böngészővel megnyitva:

33

XML• Ha a lekérdezés eredménye több elemet tartalmaz,

külön sorokba jeleníthetjük meg az elemeket, és rendezhetjük is:

xquery version "1.0";<html><body><h1>Összetevők</h1><ul>{for $x in doc("konyha.xml")//összetevőorder by $x/@egységreturn <li> {$x/text()} </li>}</ul></body></html>

34

XML• Az előbbi XQuery eredménye:<html>

<body><h1>Összetevők</h1><ul>

<li>Citromlé</li><li>Tea</li>

</ul></body>

</html>

• Böngészővel megnyitva:

35

XML• Az XPath összes függvénye mellett más beépített függvények is használhatók, és új

függvényeket is meg lehet adni.• Például a sum(doc("konyha.xml")//összetevő/@mennyi) eredménye 2.• A következő rekurzív függvény kiszámolja a megadott XML dokumentum gráfjának

mélységét.

xquery version "1.0";declare function local:depth($e as node()) as xs:integer{ (: Ha nincs gyereke egy csúcsnak, akkor a mélysége 1 :) (: Különben 1-gyel nagyobb a mélysége, mint a gyerekei mélységeinek maximuma :) if (fn:empty($e/*)) then 1 else fn:max(for $c in $e/* return local:depth($c)) + 1};

local:depth(fn:doc("Konyha.xml"))

• Eredménye: 5 • A local:depth(fn:doc("Konyha.xml")/Receptek/Recept/Utasítások/lépés[1])

Eredménye: 1

36

XML

• Az Oracle adatbázis-kezelő különböző verziói egyre bővülő XML támogatást nyújtanak.

• A legfontosabb fogalmak összefoglalva (a címke, vagy tag jelentik a gráf egy csúcsát):

37

XML

38

XML

39

XML

40

XML

41

XML

42

XML

43

XML

44

XML

45

XML

46

XML

47

XML

48

XML

49

XML

50

XML

51

XML

52

XML

53

XML

54

XML

55

XML

56

XML

57

XML

FLOWR kifejezés

58

XML

59

XML

60

XML

61

XML

62

XML

63

XML