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. •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 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:
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) Adatforrás
5 XML 2.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ó Adatforrás Kérdés Alkérdés Kérdés Alválasz Válasz Alvá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, ).
7 XML Szűz Soproni kerRing Ászok sör kocsma gyártó kapható név cím díj évhelyezé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. •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 Tea Citromlé Forrald fel a vizet és tedd bele a teát! Tedd bele a citromlevet, majd keverd össze!
12 XML Tea 1 tasak Tea 1 kanál Citromlé Receptek Recept 5 perc Név Idő Ö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 egység Élcímkézett reprezentálás
13 lépés XML Tea Citromlé Receptek Recept Név Idő Ö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 egység Tea 5 perc 1tasak kanál 1 Gyökér Csú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 XML XMLSpy - (30 napos próbaverzió), - ellenőrzi a helyesen formázottságot, érvényességet, sémát generál.
16 XML <!DOCTYPE Receptek [ ]> Tea Citromlé Forrald fel a vizet és tedd bele a teát! Tedd bele a citromlevet, majd keverd össze!
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. <!ATTLIST összetevő egység (tasak | kanál) #REQUIRED mennyi CDATA #FIXED "1" > <!ATTLIST Recept idő 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: Tea Citromlé Forrald fel a vizet és tedd bele a teát! Tedd bele a citromlevet, majd keverd össze!
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: - Tea Citromlé - Forrald fel a vizet és tedd bele a teát! Tedd bele a citromlevet, majd keverd össze!
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"?> s.t.b.
21 XML •A sémát is gráffal lehet reprezentálni. •A konyha.png tartalma:
22 XML •Az XPath ( lekérdezőnyelv reguláris kifejezésekre illeszkedő útvonalakat keres. •Példák: •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évaz adott nevű *tetszőleges csúcs |két lekérdezés eredményének egyesítése [ ]feltétel megadása
23 XML eredménye: név attribútum, értéke: tea 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úcs Utasítások csúcs -- 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... and összetevő="Citromlé"]//lépés eredmé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): childgyerek parentszülő descendantösszes leszármazott ancestorösszes ős selfaktuális csúcs attributeösszes attribútum following- sibling következő testvér preceding- sibling előző testvér precedingnyitó tag előtti összes csúcs followingzáró tag utáni összes csúcs
26 XML •Az XPath lekérdezésekben függvények is használhatók: Fontosabb függvényosztályok: •Accessor Például: /Receptek/Recept/node-name(.) Eredménye: xs:QName, értéke: Recept •Numeric Például: Eredménye: xs: Double, értéke:4 •String Például: Eredménye: xs: Integer, értéke:8 Másik példa: 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: 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: :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 "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 = 2.xs = 3.xsi = 4.fn = 5.local =
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 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 return $x Eredménye XML dokumentum: Citromlé Tea
31 XML •HTML dokumentum is generálható a segítségével Például a konyha.xq fájl legyen a következő: xquery version "1.0"; Összetevők { for $x in doc("konyha.xml")//összetevő let $valami :="kanál" where return {$x/text()} }
32 XML •Az előbbi XQuery eredménye: Összetevők Citromlé 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"; Összetevők { for $x in doc("konyha.xml")//összetevő order by return {$x/text()} }
34 XML •Az előbbi XQuery eredménye: Összetevők Citromlé Tea •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 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