Upload
duongkhuong
View
225
Download
4
Embed Size (px)
Citation preview
XMLXML
eXtensible Markup Language: Kiterjeszthető jelölőnyelvKiterjeszthető jelölőnyelv
Jelölő nyelvÁlt láb ö fájlb tá lj kÁltalában szöveges fájlban tároljukCímkékből (tag), attribútumokból és magából a tartalomból állHierarchikus szerkezetű
XML 2
E d t SGMLEredete: SGML
SGML (Structured Generalized Markup Language) a jelölőnyelvekMarkup Language) a jelölőnyelvek ősatyja – 1986D k t l í áDokumentum leírásraRészeiRészei
DTD (Data Type Definition): az elemkészlet és az elemek struktúrájaelemkészlet és az elemek struktúrájaAz elemkészlettel jelölt szöveg
XML 3
XML f lh álá i t ül t iXML felhasználási területeiStruktúrált dokumentumszerkesztés leírás: docxStruktúrált dokumentumszerkesztés, leírás: docxVektorgrafika tárolása: VML, SVGAlkalmazások közötti webes kommunikáció: WSDLPénzügyi információk cseréje: OFXDigitális űrlapok kezelése: XFDL, InfopathEmberi erőforrás menedzsment jelölőnyelv: HRMMLEmberi erőforrás menedzsment jelölőnyelv: HRMMLJogi dokumentumok kezelése: OXCIMatematikai képletek leírása, formázása: MathMLp ,Konfigurációs adatok leírása: egyediNews feeds leírás: RSS3D fik i l í á X3D3D grafikai leírás: X3DStílus leírásra megjelenítéshez: XSLAdatbázis, lekérdezés: XQuery
5
Adatbázis, lekérdezés: XQueryHTML leírás: XHTML
XML éljXML célja
Egyszerű kezelhetőségInterneten használható legyenInterneten használható legyenAlkalmazások támogassákE b i kö l hEmber is könnyen olvashassaÁltalános célúHTML korlátosságának kiváltásaAdat és a megjelenés elválaszthatóAdat és a megjelenés elválasztható legyen egymástól
XML 6
P blé ák HTML l lProblémák a HTML-lel
Nem tipikus elemekből álló dokumentum leírása nehézdokumentum leírása nehézAdatok leírására sem alkalmas (kötött é á l d lk ik)sémával rendelkezik)
Nem teljesen hierarchikusNem teljesen hierarchikusXHTML kiegészítés: egy XHTML
d k t XML d k t idokumentum XML dokumentum is egyben.
XML 7
Jól f á tt XML éldJól formázott XML példa<?xml version "1 0" encoding "ISO 8859 2"?><?xml version="1.0" encoding="ISO-8859-2"?><!-- Megjegyzés -->
<?xml stylesheet type="text/css" href="2 css"?>
Fejrész
<?xml-stylesheet type= text/css href= 2.css ?>
<segedanyagok><irodalom><irodalom>
<cim>XML lépésrol lépésre</cim><szerzo>Michael J. Joung</szerzo><kiadas>2002</kiadas>Dokumentum kiadas 2002 /kiadas
</irodalom><irodalom>
<cim>Az XML kézikönyv</cim>
elem, gyökérelem
y<szerzo>Neil Bradley</szerzo> <kiadas>2005</kiadas>
</irodalom>
8</segedanyagok<?SajatAlkalmazas Param1="ertek" Param2="ertek"?>
Feldolgozó utasítás
T l jd á iTulajdonságaiKis és nagybetűk különbözőek.Kötelező megadni a záró tag-eket.g gFontos az egymásba ágyazás, így a zárás sorrendjesorrendje.<b><i>Vastag és dölt szöveg. HIBÁS!</b></i><b><i>Vastag és dölt szöveg. JÓ!</i></b>
Mindig van egy gyökérelem, annak lehet egy gyermeke, mely tartalmazhat további leszármazottakatBővíthető
XML 9
T l jd á i IITulajdonságai – II.Elenevezési konvenció: betű, szám, egyéb karakter.Nem kezdődhet: számmal központonzássalNem kezdődhet: számmal, központonzással, az xml karakterekkelNem tartalmazhat: szóközöketNem tartalmazhat: szóközöketElem vagy attribútum? Nincs rá szabály!<szemely nem="ffi">szemely nem ffi
<nev>Ka Pál</nev></szemely>
l<szemely><nem>ffi</nem><nev>Ka Pál</nev>
XML 10</szemely>
É é ítéÉrvényesítés
Jól formázott dokumentum – well-formedformed
Megfelel az XML szintaktikánakÉÉrvényesség, validság:
Jól formázottStruktúrája megfelel a szerző szabványánakszabványának
XML DTD és XML Schema (XSD)
XML 11
Dokumentumtípus definálás: DTD
Használható elemek,elemek struktúrájának,adattartalom típusának megadására
Gyakorlatban: tervrajzként funkcionál
Megadható az XML fájlban vagy külön állományban is.
Ellenőrzése az érvényesítés
12
DTD d k t tí d fDTD – dokumentum típus def.<?xml version="1 0" encoding="UTF 8"?><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE cikk SYSTEM "cikk2.dtd"><cikk>
<datum>2003/05/01</datum><szerzo>LAci</szerzo><tartalom>tananyag</tartalom>
</cikk>
A külső DTD fájl:<!ELEMENT cikk (datum, szerzo, tartalom)>( , , )<!ELEMENT datum (#PCDATA)><!ELEMENT szerzo (#PCDATA)>
13<!ELEMENT tartalom (#PCDATA)>
XML é (XSD)XML séma (XSD)
XML dokumentumok tartalmát és szerkezetét.
Elemeket, jellemzőketAdat típusokatAdat típusokatElemek számára adhatunk előírástElrendezéstElrendezést
~ DTD, de több annálXML alapúLehetőséget rejt magában
14
XSD éldXSD példa<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="konyv"><xs:complexType>
<xs:sequence><xs:element name="szerzo" type="xs:string"/><xs:element name="cim" type="xs:string"/>< l t " " t " i t "/><xs:element name="ar" type="xs:integer"/>
</xs:sequence></xs:complexType>
</xs:element></xs:element></xs:schema>Az XML dokumentumban így kell megadni:<?xml version="1 0" encoding="UTF-8"?><?xml version 1.0 encoding UTF 8 ?><konyv xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="konyv.xsd">
<szerzo>XY</szerzo>
15
<szerzo>XY</szerzo><cim>XML tananyag</cim><ar>1000</ar>
</konyv>
W3C D t Obj t M d lW3C Document Object Model
Platform- és nyelv független interfészleírásA tartalom, a struktúra és a designA tartalom, a struktúra és a design hozzáféréséhez, módosításához. Objektumok és tulajdonságaik ésObjektumok és tulajdonságaik és hozzáférési metódusok szabályaRészei:Részei:
Core DOM: bármilyen strukturált d k t tk ó b ádokumentumra vonatkozó szabványHTML DOM: HTML dokumentumokraXML DOM: XML dokumentumokra 16
XML DOM N d kXML DOM Node-ok
Node típus Példa
Dokumentum <!DOCTYPE food SYSTEM "food.dtd">
FeldolgozásiFeldolgozási instrukció
<?xml version="1.0"?>
El<drink
Elem type="beer">Carlsberg</drink>
Attribútum type="beer"Attribútum type= beer
Szöveg Carlsbergg g
17
L lt lLeltar.xml
#document
LELTAR
KONYV KONYVKONYV
CIM SZERZO KOTES OLDALSZAM AR
KONYV
CIM SZERZO KOTES OLDALSZAM AR
#Text: Fűszálak
#Text: Walt Whitman
#Text: keménykötés #Text: 462 #Text: 775 #Text: Az
Álmos völgy…#Text:
Washington… #Text: olcsó… #Text: 98 #Text: 295
21
Letar.xml kapcsolati struktúrája
Gyökér elem: <leltar> parentNode
Elem: <konyv>
Elem: <konyv>
firstChild
Elem: <konyv>
Elem: <konyv>nextSibling
Elem: <konyv>previousSibling
…
Elem: <konyv> lastChild22
Elem: <konyv> lastChild
XML parse-olás a böngészőkben
XML beolvasása a memóriábaXML DOM objektum készítéseXML DOM objektum készítéseParszolást követően az XML JavaScript-ből feldolgozható
xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); //IE
xmlDoc=document.implementation.createDocument("","",null); // i f b//Firefox, Opera, stb.
xmlDoc.async="false"; xmlDoc.load("leltar.xml");
23
xmlDoc.load( leltar.xml );
XML DOM ti & th dXML DOM properties & methodsPropertiesProperties
x.nodeName – x neved V l d é tékx.nodeValue – x node értéke
x.parentNode – x node szülőjex.childNodes – x node gyermekex.attributes – x node attribútuma
Metódusokx.getElementsByTagName(nev) – visszaadja az összes nev nevű elemetx.appendChild(node) – x elemhez beszúr egy gyermek elemet x.removeChild(node) – gyermek elem törlése
24
XML f ld l áXML feldolgozás
documentElement: gyökér elemgetElementsByTagName("cim"): azgetElementsByTagName( cim ): az összes cim nevű elem kijelölésegetElementsByTagName("cim")[0]: azgetElementsByTagName( cim )[0]: az első cim nevű elemhildN d [0]: a cim nevű elem elsőchildNodes[0]: a cim nevű elem első
gyermek elemed ( ö l ) é éknodeValue: a node (szöveges elem) értéke
nodeName: node nevenodeType: node típusa 25
D l hiDelphiunit Unit1;unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs, ComObj;
typeTForm1 = class(TForm)o c ass( o )Button1: TButton;procedure Button1Click(Sender: TObject);
private{ P i t d l ti }{ Private declarations }
public{ Public declarations }
end;
varForm1: TForm1;
implementation
{$R *.DFM}
26
D l hi 2Delphi - 2procedure TForm1.Button1Click(Sender: Tobject);var
xml:Variant;b ibegin
xml:=CreateOleObject('Msxml2.DOMDocument.4.0');xml.async := false;xml loadXML('<ALMA></ALMA>');xml.loadXML('<ALMA></ALMA>');root:=xml.documentElement;newnode:=xml.createElement('BARACK');newNode text:='sárga';newNode.text:= sárga ;root.appendChild(newnode);newnode:=xml.createElement('CITROM');newNode.text:='savanyú';newNode.text: savanyú ;root.appendChild(newnode);ShowMessage(xml.documentElement.xml);
end;
end. 27
Vi l B iVisual BasicDim xmlDoc As New Msxml2.DOMDocument40Dim comment As IXMLDOMCommentxmlDoc async = FalsexmlDoc.async = FalsexmlDoc.LoadXML ("<ALMA></ALMA>")Set root = xmlDoc.documentElementSet newNode = xmlDoc.createElement("BARACK")newNode.text = “sárga”root.appendChild newNodeSet newNode = xmlDoc.createElement("CITROM")newNode text = “savanyú”newNode.text = savanyúroot.appendChild newNodeMsgBox (xmlDoc.documentElement.xml)
28
J S i tJavaScriptvar xmlDoc = new
ActiveXObject("Msxml2.DOMDocument.4.0");var root;var root;var newNode;xmlDoc.async = false;xmlDoc.loadXML("<ALMA></ALMA>");root = xmlDoc.documentElement;
N d lD t El t("BARACK")newNode = xmlDoc.createElement("BARACK");newNode.text = “sárga”;root.appendChild(newNode);root.appendChild(newNode);newNode = xmlDoc.createElement("CITROM");newNode.text = “savanyú”;root.appendChild(newNode);alert(xmlDoc.documentElement.xml);
29
XP thXPath
XML dokumentumokban történő keresésekreNavigációra, környezetfüggő kijelölésekre, formázásokrag , y gg j ,~ SQL SELECTKijelölés UNIX-hoz hasonlóan:Kijelölés UNIX hoz hasonlóan:
/ . ...
//leltar/konyv/cim[@nyelv='hu']/../szerzo//leltar/konyv/cim[@nyelv hu ]/../szerzo
30
PéldákPéldákchild::cim az aktuális elem ‘cim' gyereke(i)attribute::nyelv az aktuális elem nyelv' attribútuma/ a gyökér-elem/leltar/child::konyv/child::cim[position() = 2] a második cimchild::cim[attribute::nyelv=en'][child::gyermek=Szöveg'] az aktuális elem azon ‘cim' gyereke, amelynek a ‘nyelv' attribútumának tartalma ‘en' és van egy ‘gyermek' gyereke amelynek tartalma ‘szoveg'gyermek gyereke, amelynek tartalma szoveg /descendant::cim a dokumentum összes ‘cim' elemechild::*[self::cim or self::szerzo] az aktuálischild::*[self::cim or self::szerzo] az aktuális elem cim' vagy 'szerzo' elemei 31
N d k ki ál táNode-ok kiválasztásaleltar – leltar nevű gyökérelem kiválasztása/leltar/konyv – a leltar nevű gyökérelem konyvy gy ynevű gyermekeinek kiválasztása//leltar/konyv – leltar nevű elem konyv nevű y ygyermekeinek kiválasztása//leltar/konyv[2]/cim – 2-ik könyv címe// / y [ ]/ y//leltar/konyv[2]/child::cím – 2-ik könyv címecíme//konyv/cim = //child::konyv/child::cim= //child::konyv/cim//c d:: o y /c
//konyv/descendant::* - konyvek utódai 32
Rö idíté kRövidítések
self::node() = . parent::node() =parent::node() = .. descendant-or-self::node()= // '//cim' az összes cim elemchild::szerzo = szerzochild::szerzo szerzo attribute::nyelv = @nyelv @* az aktuális elem összes attribútumakonyv[3] az aktuális elem 3 konyv'konyv[3] az aktuális elem 3. konyv gyermeke 33
P dikát kPredikátumok
Feltétel megadás: [] - ban/leltar/konyv[3]/leltar/konyv[3]/leltar/konyv[last()]/leltar/konyv[last()-2]/leltar/konyv[position()<5]/ / y [p () ]/leltar/konyv[position() mod 2]/l l /k [ () 500]/leltar/konyv[ar()>500]/leltar/konyv[ar()>500]/cím//konyv/cim | //konyv/szerzo 34
AXIS – node kontextus k l t kkapcsolatok
child: gyerekdescendant: leszármazottparent: szülőancestor: ősfollowing sibling: következő testvér (ugyanazon a szinten lévő elem)following-sibling: következő testvér (ugyanazon a szinten lévő elem)preceding-sibling: előző testvér (ugyanazon a szinten lévő elem)following: következő nodefollowing: következő nodepreceding: előző nodeattribute: attribútumnamespace: namespaceself: önmagadescendant-or-self: leszármazott vagy önmagaancestor-or-self: ős vagy önmaga
35
Fü é kFüggvényeklast()position()count(node-set)starts-with(string,string)
i i icontains(string,string)substing(string,number,number?)string length(string)string-length(string)sum(node-set)round(number)round(number)
floor(number) - A legnagyobb egész szám, ami nem nagyobb az argumentumnál.gy gceiling(number) - A legkisebb egész szám, ami nem kisebb az argumentumnál
36
PéldákPéldák
//*[string-length(name()) = 5]Elem neve 5 hosszú
//cim/ancestor::*ŐseiŐsei
//cim/ancestor-or-self::* Ősei és magaŐsei és maga
//*[count(*)=2]Kiválasztja azt az elemet, melynek két gyermek eleme van/ / /sum(/leltar/konyv/ar)
37
XQXQuery
XML dokumentumokban történő keresésekreXPath kifejezéseken alapulj p~ SQLAdatbázis-rendszerek: Oracle IBM Microsoft általAdatbázis rendszerek: Oracle, IBM, Microsoft által támogatottZorba: XML feldolgozó XQuery kiterjesztéshezZorba: XML feldolgozó XQuery kiterjesztéshez programozási nyelvekbe, böngészőkbe.Teszteléshez: http://try zorba-xquery com/Teszteléshez: http://try.zorba-xquery.com/Apache Xindice XML alapú adatbázis
38
XQXQuery
Dokumentum kijelölése:doc("books xml")doc( books.xml )
Navigáció az XML dokumentumban:doc("books.xml")/bib/book/title
Feltételek szűrésreFeltételek, szűrésredoc("products.xml")/products/product[price<50]/categoryt[price<50]/category
39
XQ FLOWRXQuery – FLOWRFOR, LET, WHERE, ORDER BY, RETURN = SQL: SELECT-FROM-WHEREdoc("products.xml")/products/product[price<50]/categoryfor $x in doc("products xml")/products/productfor $x in doc("products.xml")/products/productwhere $x/price<50return $x/category
Ez még csak FWR volt
40
XQ FLOWRXQuery – FLOWRLet
let $x := (1 to 5)t <t t>{$ }</t t>return <test>{$x}</test>
Order byfor $x in doc("products xml")/products/productfor $x in doc( products.xml )/products/productwhere $x/price<50order by $x/name
t $ / treturn $x/category
41
XU d tXUpdate
XML-re épülő XML dokumentumokat módosító nyelvmódosító nyelvKipróbálható: htt // b / / dbhttp://www.orbeon.com/ops/sandbox-transformations/xupdate/
42
XU d t k láXUpdate gyakorlás<addresses>
<address id="1"> <!—Egy ember cím adatai-->! Egy ember cím adatai<name>
<first>Citad</first><last>Ella</last><last>Ella</last>
</name><city>Budapest</city>< i >1234</ i ><zip>1234</zip><country>Hungary</country><phone type="home">333-3000</phone><phone type="work">333-5000</phone><note><Komment></note>
</address></addresses>
43
XU d t ű l t kXUpdate műveletek
insert-before: element, commentinsert-after: element, commentinsert after: element, commentappend: element, attribute, text,
d t tt ib t t t tupdate: attribute, text, commentrename: element, attribute, text, remove: element, attribute, text, comment
44
Elem elé beillesztés (insert-before)
Egy middle name elem beillesztése a last name elem eléname elem elé.
<xupdate:modifications version="1.0" xmlns:xupdate="http://www.xmldb.org/xupdate">
<xupdate:insert-before select="/addresses/address[@id = 1]/name/last" >
<xupdate:element name="middle">Kis</xupdate:element></xupdate:insert-before>
</xupdate:modifications>
45
XML d tbá iXML adatbázis
Oracle, MS SQL Server, DB2 is fel tud dolgozni XML-tNatív XML (NXD) adatbázisok a gyakorlatban:
Apache XIndiceApache XIndiceeXistBaseXBaseXSedna
46
XSL(T) b téXSL(T) bevezetés
Szabványalapú (sablonokat definiálhatunk)Deklaratív (XPath alapú kiválasztás)Deklaratív (XPath alapú kiválasztás)XML dokumentum transzformálása: HTML, PDF (XSL FO Formatting Objects) más XML be(XSL-FO Formatting Objects), más XML-beCsomópontonként dolgozik~ CSSHierarchikus<xsl:stylesheet> vagy <xsl:transform>
47
XML és XSLT összekapcsolásaXML és XSLT összekapcsolása<?xml version="1.0" encoding="ISO-8859-2"?><xsl:stylesheet
version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"> <!-- az XSLT gyökércsomóponttal illeszkedik --><HTML><HEAD>
<TITLE>Könyvismertető</TITLE></HEAD>BODY<BODY><H2>Könyvismertető</H2><SPAN STYLE="font-style:italic">Szerző: </SPAN><xsl:value-of select="KONYV/SZERZO"/><BR/><SPAN STYLE "f t t l it li ">Cí </SPAN><SPAN STYLE="font-style:italic">Cím: </SPAN><xsl:value-of select="KONYV/CIM"/><BR/><SPAN STYLE="font-style:italic">Ár: </SPAN><xsl:value-of select="KONYV/AR"/><BR/><SPAN STYLE "f t t l it li ">Köté </SPAN><SPAN STYLE="font-style:italic">Kötés: </SPAN><xsl:value-of select="KONYV/KOTES"/><BR/><SPAN STYLE="font-style:italic">Terjedelem (oldal): </SPAN><xsl:value-of select="KONYV/OLDALSZAM"/></BODY>
48
</BODY></HTML>
</xsl:template></xsl:stylesheet>
Péld XMLPélda XML<?xml version="1.0" encoding="ISO-8859-2"?>
<?xml-stylesheet type="text/xsl" href="1.xsl"?>y yp
<KONYV><CIM>Moby-Dick</CIM><CIM>Moby Dick</CIM><SZERZO>Herman Melville</SZERZO><KOTES>keménykötés</KOTES><KOTES>keménykötés</KOTES><OLDALSZAM>724</OLDALSZAM><AR>995 Ft</AR>
</KONYV></KONYV>
49
XSLT l k 1XSLT elemek – 1.<xsl:template match="/">…</xsl:template>Template definiálása a match-ben megadott gyökérelemmelgyökérelemmel.<xsl:value-of select="konyv/oldalszam/> Relatíven megadott elérési út alapján ad meg egy elemetRelatíven megadott elérési út alapján ad meg egy elemet (node-ot). Ezek sorrendje határozza meg a megjelenítés sorrendjét is! A Selec-ben megadott formátum XPath alapúj g p
50
XSLT l k 2 XP thXSLT elemek – 2. XPath<xsl:value-of select="sum(leltar/konyv/oldalszam)"/>XP th l ktáláXPath szelektálás<...SELECT="leltar/konyv[kotes='puha']">XPath szűrésXPath szűrés<...SELECT="leltar/konyv/cim[@nyelv='hu']">< l f h l t "l lt /k "><xsl:for-each select="leltar/konyv">...</xsl:for-each>Csomópont összes elemét kijelöliCsomópont összes elemét kijelöli
51
XSLT l k 3XSLT elemek – 3.
<xsl: template match="konyv" name="nev" priority="1">Egyszerre több template is szerepelhet<xsl: apply-templates s : app y te p atesselect="leltar/konyv">Melyik elemre alkalmazza a sablont?Melyik elemre alkalmazza a sablont?
52
CiklCiklus: <xsl:for-each>
Minden konyv elem kijelölése<xsl:for-each select="konyv">xsl:for each select konyv<xsl:value-of select="nev"/>
</ l f h></xsl:for-each>
Minden cérnakötésű könyv kijelölése<xsl:for-each select="konyv[kotes='cérnakötés']"><xsl:value-of select="nev"/>
</xsl:for-each>53
/
S ű é é d éSzűrés és rendezés <xsl:sort><xsl:for-each
select="leltar/konyv[kotes='cérnakötés']"><xsl:sort
select="szerzo" data-type="text"order="ascending"/>order ascending />
<xsl:sortselect="oldalszam" data-type="number"data-type= numberorder="descending"/>
…</ l f h></xsl:for-each>
54
XSL lá á kXSL elágazások<xsl:if test="position() mod 2 = 1">
Ebben az esetben...</xsl:if>vagy<xsl:choose>
<xsl:when test="kotes='cérnakötés'"><xsl:when test kotes cérnakötés >Ebben az esetben ez jelenik meg.
</xsl:when><xsl:when test="kotes='keménykötés'"><xsl:when test= kotes= keménykötés >
Ebben az esetben pedig ez.</xsl:when>< l th i ><xsl:otherwise>
Különben ez jelenik meg.</xsl:otherwise>
55
</xsl:choose>
T ábbi XSL l kTovábbi XSL elemekKimenet megadása:
<xsl:output method="xml"/>l t t th d "ht l" di "ISO<xsl:output method="html" encoding="ISO-
8859-2"/><xsl:output method="text"/>p
Változó definiálsa:<xsl:variable
/name="EMail">alma@domain</xsl:variable><xsl:variable name="EMail2" select="document('email.xml')"/>se ect docu e t( e a . ) /
Hivatkozás változóra ($EMail):<xsl:value-of select="$EMail" />
56