XML alapok 2. XML hibaellenőrzés XML a böngészőkben XML parser XML névterek XML CDATA XML fájlok karakter kódolása Egy egyszerű XML szerver XML alkalmazások XML HTTP kérések
Az XML dokumentumok hibái leállítják az XML programot A W3C XML specifikáció kinyilvánítja, hogy az XML dokumentum feldolgozását a program ne folytassa, ha érvényességi hibát talál. Ennek indoka az, hogy az XML szoftvert könnyű legyen megírni, és hogy az összes XML dokumentum kompatibilis legyen. A HTML-lel lehetséges hibákkal zsúfolt dokumentumot létrehozni (pl. a vég tag-ek elhagyásávall). A HTML böngészők terjedelmességének és inkompatibilitásának egyik fő oka az, hogy mindegyik saját módszert követ annak kitalálására, hogy a dokumentumnak hogyan kellene kinéznie, amikor egy HTML hibát észlel. XML esetén ez nem lehetséges. Egy általános XML érvényesség ellenőrző A következő címen található egy XML érvényesség ellenőrző program (Validate any XML file): http://www.w3schools.com/dom/dom_validate.asp XML /2
XML a Netscape-ben és az Explorer-ben XML a Netscape 6-ban A Netscape 6 támogatja az XML-t. Az XML forrás megnézéséhez kattints a jobb gombbal a lapra és válaszd a "View Page Source"-t (Lap forrás megnézése). XML az Internet Explorer 5.0-ban Az Internet Explorer 5.0 támogatja az XML 1.0 szabványt és az XML DOM-t (Document Object Model). Ezeket a szabványokat a World Wide Web Consortium (W3C) határozta meg. Az Internet Explorer 5.0 a következő XML támogatással rendelkezik: XML dokumentumok megnézése, a W3C DTD szabványok teljes támogatása, a HTML-be adat-szigetekként (Data Islands) beágyazott XML, HTML elemekhez XML adat kötése, XML transzformálása és kijelzése XSL-lel, XML /3
XML megjelenítése CSS-sel, hozzáférés az XML DOM-hoz. Az Internet Explorer támogatja a Behaviors-öket ("viselkedéseket") is a Behaviors kizárólagos Microsoft technológia, a Behaviors el tudja választani a scripteket a HTML oldaltól, a Behaviors képes az XML adatokat a kliens diszkjén tárolni. Ezen jellegzetességekre a következő fejezetben mutatunk példát. XML fájlok megnézése A nyers XML fájlok a böngészőkben megnézhetők, de a weblap-szerű megjelenítéshez további információkat kell megadnunk. A böngészők színekkel jelzik a gyökér és gyerek elemeket, +- jellel az elem struktúra kinyitását és elrejtését. Hibás XML fájl megnyitásakor a böngészők jelzik a hibát. A következő fejezetekben a kijelzés különböző megoldásait mutatjuk be. XML /4
XML megjelenítése CSS-sel Valószínűleg a jövőben nem ezt a módszert fogjuk alkalmazni a Weben. Azt hisszük, hogy az XSL-lel való formázás lesz az új szabvány, amikor már a fő böngészők támogatják ezt. Nem hisszük, hogy az XML-t honlapok készítésére használnánk a jövőben, hanem az XHTML (az XML-ként definált HTML) lesz a megoldás. XHTML tutorial címe: http://www.w3schools.com/xhtml/ XML megjelenítése XSL-lel Az XSL az XML ajánlott stíluslap nyelve. Az XSL (eXtensible Stylesheet Language) sokkal kifinomultabb, mint a CSS. Az XSL használatának egyik módja az XML HTML-lé alakítása a böngészővel való kijelzés előtt. Az <?xml-stylesheet type="text/xsl" href="simple.xsl"?> sor az XML dokumentumban az XML fájlt az XSL fájlhoz csatolja. Az XSL tutorial címe: http://www.w3schools.com/xsl/ XML /5
XML az adat-szigetekben (IE 5.0) A nem hivatalos <xml> tag-et használjuk az XML adat HTML-be való beágyazására: <xml id="note"> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> </xml> vagy a különálló XML fájl is beágyazható: <xml id="note" src="note.xml"> Az <xml> tag egy HTML elem, és nem egy XML elem! XML /6
Adat csatolás (Data Binding) Az adat-szigetek HTML elemekhez köthetők (a HTML táblázatokhoz hasonlóan). Az alábbi példában az ID "cdcat" attribútumú XML adat-szigetet külső XML fájlból töltjük be. Az adatforrás attribútummal a HTML táblázatot az adat-szigethez kötjük, és végül a tabledata elemeket egy span-on (áthidalás) belüli adatmező attribútummal az XML adatelemekhez kötjük: <html> <body> <xml id="cdcat" src="cd_catalog.xml"></xml> <table border="1" datasrc="#cdcat"> <tr> <td><span datafld="ARTIST"></span></td> <td><span datafld="TITLE"></span></td> </tr> </table> </body> </html> XML /7
XML parser (elemző) használata Az XML dokumentum olvasásához és módosításához - létrehozásához és kezeléséhez egy XML elemzőre van szükségünk. A Microsoft Internet Explorer 5.0-val együtt adják a Microsoft XML parser-t, amit a nyelvsemleges programozási modell jellemez, és támogatja a JavaScript, VBScript, Perl, VB, Java, C++ és más, W3C XML 1.0 és XML DOM, DTD és érvényesség ellenőrzés eszközöket. Az XML fájl a következő script kóddal tölthető a parser-be: <script type="text/javascript"> var xmlDoc = new ActiveXObject("Microsoft.XMLDOM") xmlDoc.async="false"xmlDoc.load("note.xml") // ....... processing the document goes here </script> Az XML megjelenítésére JavaScript (vagy VBScript) használható. XML /8
XML névterek (namespaces) Mivel az XML-ben az elem nevek nem rögzítettek, nagyon gyakran névütközés áll elő, amikor két különböző dokumentum ugyanazt a nevet használja két különböző típusú elem leírására, pl.: <table> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table> és <name>African Coffee Table</name> <width>80</width> <length>120</length> Ha ezt a két dokumentumot összeraknánk, akkor névütközés keletkezne. XML /9
A névütközés feloldása prefix (előtag) használatával: <h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> és <f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> XML /10
Névterek használata és <h:table xmlns:h="http://www.w3.org/TR/html4/"> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> és <f:table xmlns:f="http://www.w3schools.com/furniture"> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> A prefixen túl a <table> tag-hez xmnls attribútumot is adtunk, ami az elem prefixhez egy névtérrel (namespace) minősített nevet (qualifid name) társít. XML /11
A névtér (namespace) attribútum A névtér attribútumot az elem kezdő tag-jében a következő szintaxissal helyezhetjük el: xmlns:namespace-prefix="namespace" Az előző példában magát a névtért egy Internet címmel adtuk meg: xmlns:f="http://www.w3schools.com/furniture" A W3C névtér specifikáció szerint a névtérnek URI-nak (Uniform resource Identifier) kell lennie. Az elem azonos prefixű gyerekei ugyanazzal a névtérrel lesznek társítva. Megjegyzendő, hogy a parser ezt a címet nem keresi meg, a cél csupán az, hogy a névtér egyedi nevet eredményezzen. Ennek ellenére a társaságok nagyon gyakran a névteret egy valódi Web lapra való mutatóként használják, amely információt tartalmaz a névtérről. XML /12
Uniform Resource Identifiers (Egységes Forrás Azonosító) Az Uniform Resource Identifier (URI) egy karaktersorozat, ami egy Internet Resource-t (Internet Forrás) azonosít. Az URI általában egy Uniform Resource Locator (URL), ami egy Internet domain címet azonosít. Egy másik kevésbé szokásos URI típus az Universal Resource Name (URN). Példáinkban csak URL-eket használunk, ez biztosítja a névtér egyediségét. Default névterek A default névtér kijelölésével a gyerek elemeknél nem kell a prefixet használni. Szintaktikája: <element xmlns="namespace"> Példák: <table xmlns="http://www.w3.org/TR/html4/"> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table> XML /13
és A névterek használata <table xmlns="http://www.w3schools.com/furniture"> <name>African Coffee Table</name> <width>80</width> <length>120</length> </table> A névterek használata Az XSL stílus lapokat az XML dokumentumok más formátumúvá, mint pl. HTML, alakítására használjuk. A következő XSL dokumentumban a legtöbb tag HTML tag, a többieknek xsl prefixe van, melyeket a "http://www.w3.org/TR/xsl" névtér azonosít. <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/xsl"> <xsl:template match="/"> <html> <body> <table border="2" bgcolor="yellow"> XML /14
<tr> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="CATALOG/CD"> <td><xsl:value-of select="TITLE"/></td> <td><xsl:value-of select="ARTIST"/></td> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> XML CDATA Az XML dokumentumban a parser a CDATA szakaszban lévő szöveg kivételével minden szöveget elemez. Egy XML elem elemzésénél a parser az XML tag-ek közötti szöveget is elemzi, mivel az XML elemek más elemeket is tartalmazhatnak: XML /15
A parser ezt alelemekre tördeli: <name><first>Bill</first><last>Gates</last></name> A parser ezt alelemekre tördeli: <name> <first>Bill</first> <last>Gates</last> </name> Escape karakterek A nem megengedett XML karaktereket entity hivatkozással (entity reference) kell helyettesíteni. Pl. a '<' karakter egy XML elemen belül hibát okoz: <message>if salary < 1000 then</message> Ennek elkerülésére a '<' karaktert entity hivatkozással kell helyettesíteni: Az XML-ben 5 előre definíált entity hivatkozás van: < < less than > > greater than & & ampersand ' ' apostrophe " " quotation mark Megjegyzés: csak a '<' és a '&' karakterek szigorúan illegálisak. XML /16
A CDATA szakasz nem tartalmazhat másik CDATA szakaszt. A CDATA szakaszon belül a parser mindent figyelmen kívül hagy. A CDATA kezdő és zárótag-je: "<![CDATA[" és "]]>" : <script> <![CDATA[ function matchwo(a,b) { if (a < b && a < 0) then return 1 } Else return 0 ]]> </script> A CDATA szakasz nem tartalmazhat másik CDATA szakaszt. XML /17
Az XML dokumentumok idegen karaktereket is tartalmazhatnak, az ilyen dokumentumokat Unicode-ként kell menteni, hogy a parser megértse. A Windows 95/98 Notepad nem képes a fájlokat Unicode formátumban menteni, ezért ezeket a fájlokat encoding attribútummal kell menteni: <?xml version="1.0" encoding="windows-1252"?> <?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?> De a <?xml version="1.0" encoding="UTF-16"?> hibát eredményez. A Windows 2000 Notepad támogatja az Unicode-ot. Hiba üzenetek a karakter kódolással kapcsolatban An invalid character was found in text content : egy karakter az XML dokumentumban nem illeszkedik a kód attribútumhoz. A fájl idegen karaktereket tartalmaz és nem megfelelően mentett, vagy nem tartalmaz kódolási attribútumot. XML /18
Egy egyszerű XML szerver Switch from current encoding to specified encoding not supported : a fájlt Unicode/UTF-18-ként mentették, de a kód attribútum más egybyte-os kódolási formát ír elő. Ugyanezt az üzenetet kaphatjuk akkor is, amikor a dokumentumot egybyte-os kódolással mentettük, de kétbyte-os kódolást adtunk meg kódolási attribútumként. Végkövetkeztetés Olyan szerkesztőt használj, ami támogatja a karakter kódolást. Bizonyosodj meg az alkalmazott kódolási formáról. Ugyanazt a kódolási attribútumot használd az XML dokumentumaidban. Egy egyszerű XML szerver Az XML előállítható olyan szerveren is, amire nem telepítettek XML vezérlőket. XML tárolása a szerveren Az XML fájlok tárolhatók az Internet szervereden ugyanolyan módon, mint a HTML fájlok. Írd be a Notepad-del a következő sorokat: <?xml version="1.0" encoding="ISO-8859-1"?> <note> <from>Jani</from> <to>Tove</to> <message>Remember me this weekend</message> </note> XML /19
XML előállítása ASP-vel Mentsd el pl. a "note.xml" néven ugyanabba a katalógusba, ahová a HTML fájlokat mented, az XML fájlokhoz a MIME típust állítsd "text/xml"-re. XML előállítása ASP-vel Egy XML szerver válasz előállítására írd be a következő kódot és mentsd ASP fájlként a szerverre: <% response.ContentType="text/xml" response.Write("<?xml version='1.0' encoding='ISO-8859-1'?>") response.Write("<note>") response.Write("<from>Jani</from>") response.Write("<to>Tove</to>") response.Write("<message>Remember me this weekend</message>") response.Write("</note>") %> A válasz tartalomtípusát XML-re kell állítani. További információk: Hogyan tér vissza az ASP fájl a szerverről: http://www.w3schools.com/xml/note.asp, ASP tutorial: http://www.w3schools.com/asp/ XML /20
XML kinyerése adatbázisból XML előállítható adatbázisból is minden további XML szoftver installálása nélkül. Írd be a következő kódot és mentsd ASP fájlként: <% response.ContentType = "text/xml" set conn=Server.CreateObject("ADODB.Connection") conn.provider="Microsoft.Jet.OLEDB.4.0;" conn.open server.mappath("../ado/database.mdb") sql="select fname,lname from tblGuestBook" set rs=Conn.Execute(sql) rs.MoveFirst() response.write("<?xml version='1.0' encoding='ISO-8859-1'?>") response.write("<guestbook>") while (not rs.EOF) response.write("<guest>") response.write("<fname>" & rs("fname") & "</fname>") response.write("<lname>" & rs("lname") & "</lname>") response.write("</guest>") XML /21
rs.MoveNext() Wend rs.close() conn.close() response.write("</guestbook>") %> A tényleges output megnézhető: http://www.w3schools.com/xml/guestbook.asp A fenti példa az ASP-t ADO-val használja, ADO tutorial: http://www.w3schools.com/ado/ XML /22
Bemutatunk egy kicsi keretet az XML alkalmazásra. XML alkalmazások Bemutatunk egy kicsi keretet az XML alkalmazásra. Egy XML dokumentummal kezdjük Egy CD katalógus: <?xml version="1.0" encoding="ISO-8859-1"?> <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> ..... more .... A dokumentum betöltése egy adat-szigetbe <xml src="cd_catalog.xml" id="xmldso" async="false"> </xml> XML /23
A fenti kóddal a "cd_catalog A fenti kóddal a "cd_catalog.xml" XML fájlt betöltjük a "láthatatlan" "xmldso" adat-szigetbe. Az async="false" attribútum biztosítja, hogy az XML adat betöltése a HTML feldolgozás előtt megtörténik. Az adat-sziget kötése egy HTML táblázathoz Az XML adat láthatóvá tételéhez az XML adat-szigetet egy HTML elemhez kell kötni. Ehhez meg kell adni a táblázat adatforrás attribútumát, a táblázat adatain belül az adatmező elemeket a <span> elemekhez kell adni: <table datasrc="#xmldso" width="100%" border="1"> <thead> <th>Title</th> <th>Artist</th> <th>Year</th> </thead> <tr align="left"> <td><span datafld="TITLE"></span></td> <td><span datafld="ARTIST"></span></td> <td><span datafld="YEAR"></span></td> </tr> </table> XML /24
Az adat-sziget kötése <span> vagy <div> elemekhez A HTML lapon bárhol megjeleníthető az adat-sziget adata, nemcsak táblázatban. Csupán <span> vagy <div> elemeket kell a laphoz adni, az adatforrás attribútumot használd az elemek adat-szigethez való kötésére, és az adatmező attribútumokat pedig az elemek XML elemhez való kötésére: <br />Title: <span datasrc="#xmldso" datafld="TITLE"></span> <br />Artist: <span datasrc="#xmldso" datafld="ARTIST"></span> <br />Year: <span datasrc="#xmldso" datafld="YEAR"></span> vagy <div datasrc="#xmldso" datafld="TITLE"></div> <div datasrc="#xmldso" datafld="ARTIST"></div> <div datasrc="#xmldso" datafld="YEAR"></div> XML /25
Navigációs script hozzáadása az XML-hez A <div> elem használatával az adat új sorban jelenik meg. A fenti példa csak egy sort mutat, a navigáláshoz egy kis scriptet kell a kódhoz adni. Navigációs script hozzáadása az XML-hez Olyan scriptet kell létrehozni, amely hívja Data Island movenext() és moveprevious() metódusait: <script type="text/javascript"> function movenext() { x=xmldso.recordset if (x.absoluteposition < x.recordcount) x.movenext() } function moveprevious() XML /26
A böngészőből kiadott HTTP kérés XML-t kérhet a szerverről: if (x.absoluteposition > 1) { x.moveprevious() } </script> XML HTTP kérések Az IE 5.0-től kezdve, a HTTP kérés (request) használatával XML adat kérhető le a szerverről. A böngésző kérés A böngészőből kiadott HTTP kérés XML-t kérhet a szerverről: var objHTTP = new ActiveXObject("Microsoft.XMLHTTP") objHTTP.Open('GET','httprequest.asp',false) objHTTP.Send() XML /27
A kérés eredménye megjeleníthető a böngészőben: document.all['A1'].innerText= objHTTP.status document.all['A2'].innerText= objHTTP.statusText document.all['A3'].innerText= objHTTP.responseText Kommunikáció a szerverrel A HTTP kéréssel kommunikálhatunk a szerverrel, a következő példa csak a módszer szemléltetése: <% response.ContentType="text/xml" txt="<answer><text>12 Years</text></answer>" response.write(txt) %> A válasz a kérdéstől függetlenül mindíg 12 év, további kódra van szükség. XML /28
XML Behaviors - az új DHTML? A behavior egy CSS attribútum szelektor. Ez a behavior szelektor képes mutatni egy különálló XML fájlra, amely a Web lap XML vagy HTML elemein végrehajtandó kódot tartalmaz. A Behaviors nem W3C szabvány, hanem egy Microsoft technológia. Ez egy olyan nagyszerű módszer, ami a HTML lapról teljesen eltávolítja a script kódot. Így most elkezdhetünk script könyvtárakat írni és a scriptjeinket tetszés szerinti elemhez csatolhatjuk. Az alábbi HTML fájl tartalmaz egy <style> elemet, amely a <h1> elem számára meghatároz egy behaviort: <html> <head> <style> h1 { behavior: url(behave.htc) } </style> </head> <body> <h1>Move your Mouse over me</h1> </body> </html> XML /29
A behavior kódot a behave.htc XML dokumentum tartalmazza: Működése kipróbálható a: http://www.w3schools.com/xml/tryit.asp?filename=behave címen. A behavior kódot a behave.htc XML dokumentum tartalmazza: <component> <attach for="element" event="onmouseover" handler="hig_lite" /> <attach for="element" event="onmouseout" handler="low_lite" /> <script type="text/javascript"> function hig_lite() { element.style.color=255 } function low_lite() element.style.color=0 </script> </component> XML /30
XML-lel kapcsolatos technológiák A behavior fájl JavaScript-et tartalmaz, amit a <component> elembe csomagoltunk. A component csomagoló a script eseménykezelőjét is tartalmazza. XML-lel kapcsolatos technológiák Ez a fejezet az XML alkalmazások megértéséhez és fejlesztéséhez fontos technológiákat sorolja fel. XML /31