56
XML XML – 1 - alapok

XML.ppt [Kompatibilitási mód] - ade.web.elte.huade.web.elte.hu/old/ASPNET/XML.pdf · Álmos völgy … #Text: Washington ... //leltar/konyv[2]/child::cím – 2-ik könyv címe

Embed Size (px)

Citation preview

XML

XML – 1 - alapok

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

SGML l ú b á kSGML alapú szabványok

XML 4

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

HTML DOMHTML DOM

18

DOM I tDOM Inspector

19

XML DOMXML DOM

20

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