xml
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 PresentationTRANSCRIPT
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.
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.
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):