Bevezets az XMLbe Dr Nehz Kroly egyetemi adjunktus
Bevezetés az XML-be Dr. Nehéz Károly egyetemi adjunktus Miskolci Egyetem Alkalmazott Informatikai Tanszék 2005
XML (e. Xtensible Markup Language) • A HTML a WEB kialakulásának alapnyelve volt • A HTML elsősorban adatmegjelenítésre szolgál, adat struktúra leírásra nem alkalmas. A HTML alapfunkciója: az információ milyen formában jelenik meg a web-en (betűméret, típus, táblázat, bekezdés). • Az XML szöveg alapú leírónyelv, ami strukturális információkat hordoz az adatról. • Az XML az SGML (Standard Generalized Markup Language ISO 8879) web-re alakított változata. • XML sokszor programnyelvként említett, valójában metanyelv: azaz az XML használható más programnyelvek leírására.
XML • Az XML tehát: – bővíthető nyelv (e. Xtensible), mert saját elemeket lehet deklarálni – jelölő (Markup), mert az elemek megadott jelöléssel különböztethetőek meg – nyelv (Language), mert rögzíthető a szókincs és a szintaktika. • Az alapvető különbség a HTML és az XML között az, hogy az XML-ben mi magunk definiálhatunk tag-eket. Tehát amíg a HTML egy adott taghalmazból dolgozik, addig az XML saját tag-ek létrehozását engedélyezi.
XML • számos olyan nyelv létezik amelyek bizonyos probléma megoldására, általánosítására készültek XML-ben: – XSL: adatlap formázó nyelv ami specifikusan XML adatok feldolgozására készült. – XHTML: e. Xtensible Hyper. Text Markup Language. http: //www. w 3 schools. com/xhtml/ – WML: mobilkommunikáció nyelve. http: //www. w 3 schools. com/wap/wml_reference. asp – SMIL: szabványos multimédia leíró nyelv, amely korszerű multimédiás, és web megjelenést tesz lehetővé. http: //www. w 3 schools. com/smil_intro. asp – XSL Patterns: lekérdező nyelv, amely hatékony keresést biztosít az XML dokumentumok között – SVG: Scalable Vector Graphics, 2 D vektoros grafika leírásához. http: //www. w 3. org/TR/voicexml 20/ – Voice. XML: beszédfelismerés, internetes hangátvitel, hangtömörítés. http: //www. w 3. org/TR/voicexml 20/ – Math. ML: matematikai képletek leírásához. http: //www. w 3. org/TR/REC-Math. ML/
XML • Első XML példa: <? xml version='1. 0' encoding=‘ISO-8859 -2‘ ? > <!-- első XML példa --> <uzenet id = ” 123456"> <udvozlet>Hello Világ!</udvozlet> </uzenet> • version: a dokumentum által használt XML verzió száma • encoding: karakterkódolás; az UTF-8 egy 1 bájtos kódolást jelent. UTF 16 két bájton tárol. ‘ISO-8859 -2’ Latin-2 kódolást jelent. • megjegyzések: <!-- --> jelek között megjegyzés helyezhető el, ami többsoros is lehet. • az adatok címkézése tag-ek által történik. pl: <név> </név> – start tag, end tag
XML • A start és end tag-ek által közrezárt, önálló egységeket elemeknek nevezzük. pl: <valami>aaa</valami> • Az XML fájl egy fő-elemet tartalmaz, amelyhez az összes többi is tartozik, ez a gyökérelem. pl: <uzenet> – az elemek hierarchikusan vannak egymásba ágyazva, a csúcson egy gyökérelem áll – a beágyazás egyértelmű kapcsolatot alakít ki az elemek között • azok az elemek amelyek más elemeket is tartalmaznak: szülő elemek • a szülő elemeken belüli elemek a gyermek elemek. • Az elemek korlátlan számú attribútumot (tulajdonságot) tartalmazhatnak. – pl. : id attribútum = ” 123456” – a attribútum nevek hossza nem korlátozott – minden attribútumnév betűvel kezdődik.
XML értelmezők • Az XML értelmezők XML dokumentumokat dolgoznak fel: – szintaktikai ellenőrzést végeznek • • „Jól formázott” (well-formed) az XML dokumentum, ha szintaktikailag teljesen hibátlan. Azaz egy gyökéreleme van, és minden nyitó tag-hez tartozik egy záró tag, valamint az attribútumok megadása helyes. XML dokumentum speciális karakterei: – – – • & < > ‘ ” - & < > &apos " CDATA rész tartalmazhat beágyazott adatokat. A köv. formában <script language="Java. Script" type="text/javascript"> <![CDATA[ function say. Hello() { document. writeln("Hello World!"); } ]]> </script>
XML névterek • A dokumentumok készítői, saját szókincsükkel építik fel az XML dokumentumokat, ezért névütközés lehetséges • névtér-előtagok: <miskolci: diak>Nagy István</miskolci: diak> minősített elem: diak , névtérelőtag: miskolci <? xml version = "1. 0" encoding = "UTF-8"? > <adatok xmlns: unimiskolc = "www. uni-miskolc. hu" > <unimiskolc: filename = "aula. jpg"> <unimiskolc: description>Ez egy kep</unimiskolc: description> <unimiskolc: size width = "200" height = "100" /> </unimiskolc: file> </adatok>
DTD • Document Type Definition – DTD kiterjesztésű fájlban tárolódik, de lehet az XML része is. – szintaktikai ellenőrzést tesz lehetővé – Extended Backus-Naur Form-ot használja – Definiálhatók: • típusmegkötések • előírt sorrend, számosság • struktúra
DTD • A dokumentum típusdeklarációja. – <!DOCTYPE> – a dokumentum elején kell megadni – a típusdeklaráció lehet belső vagy külső • belső: <!DOCTYPE uzenet [ …. ]> • külső URI: <!DOCTYPE html PUBLIC ”-//W 3//DTD XHTML 1. 0 Strict//EN” http: //www. w 3. org/TR/. . . dtd> • külső fájl: <!DOCTYPE uzenet SYSTEM ”filename. dtd">
DTD feldolgozó • Parser Microsoft Explorer alatt: http: //www. w 3 schools. com/xml_examples. asp <html> <body> <script type = "text/javascript"> xml. Doc = new Active. XObject("Microsoft. XMLDOM") xml. Doc. async="false" xml. Doc. load("1. xml") if (xml. Doc. parse. Error. error. Code != 0) { txt = "Hibakód: " + xml. Doc. parse. Error. error. Code + "n" txt = txt + "Hiba oka: " + xml. Doc. parse. Error. reason txt = txt + "Sorszám: " + xml. Doc. parse. Error. line alert(txt) } else { alert("Hibátlan") } </script> </body> </html>
DTD • példa xml: <? xml version = "1. 0" encoding = "UTF-8"? > <!DOCTYPE uzenet SYSTEM ”uzenet_szintaktika. dtd"> <uzenet> <szoveg>Hello XML</szoveg> </uzenet> A példa. xml-hez tartozó uzenet_szintaktika. dtd állomány: <!ELEMENT uzenet ( szoveg )> <!ELEMENT szoveg ( #PCDATA )>
<!ELEMENT tankor (tanar, diak)> A kötelező sorrend jele a vessző , A tankor elemnek tartalmaznia kell a ‘tanar’ és a ‘diak’ elemeket <!DOCTYPE tankor [ <!ELEMENT tankor (tanar, diak)> <!ELEMENT tanar ( #PCDATA ) > <!ELEMENT diak ( #PCDATA ) > ]> <tankor> <tanar>Kiss Janos</tanar> <diak>Gipsz Jakab</diak> </tankor>
<!ELEMENT desszert (fagylalt | sütemény)> A vagylagosság kifejezése a csőjel | A desszert lehet fagylalt vagy sütemény, de mindkettő nem lehet! <!DOCTYPE desszert [ <!ELEMENT desszert (fagylalt | sutemeny)> <!ELEMENT fagylalt ( #PCDATA ) > <!ELEMENT sutemeny ( #PCDATA ) > ]> <desszert> <fagylalt>Vanilia</fagylalt> </desszert>
DTD • Gyakoriság kifejezése: Jelző Jelentés + Az adott elem legalább egyszer megjelenik * Az adott elem bármennyi alkalommal megjelenhet 0 -szor is. ? Az elem 0 -szor vagy egyszer jelenik meg
DTD <!ELEMENT album ( dal+) > az album egy vagy több dalt tartalmaz <album> <dal>Dal 1</dal> </album> <!ELEMENT album (cím+, (dalcim, idotartam)+)> az albumnak van legalább egy címe amit legalább egy dalcim és időtartam követ <album> <cim>Cim 1</cim> <cim>Cim 2</cim> <dalcim>Dalcim 1</dalcim> <idotartam>3. 42</idotartam> <dalcim>Dalcim 2</dalcim> <idotartam>2. 32</idotartam> </album>
DTD <!ELEMENT konyvtar ( konyv* ) > a könyvtárban lehetnek könyvek (nulla, vagy több) <konyvtar> <konyv>Cim 1</konyv> <konyv>Cim 2</konyv> </konyvtar> <!ELEMENT sutemeny (zsele? , citrom*, ((krem | cukor )+ | maz ))> A sutemeny elemnek null vagy egy zsele eleme van, továbbá egy citrom elem nulla vagy több előfordulással, majd ezután egy vagy több krem vagy cukor elem, vagy pontosan egy maz elem követi. <sutemeny> <zsele>cukros</zsele> <citrom>gyengen savanyu</citrom> <citrom>erosen savanyu</citrom> <maz>karamell</maz> </sutemeny> <cukor>cukros</cukor> <krem>gyengen savanyu</krem> <cukor>erosen savanyu</cukor> </sutemeny>
DTD attribútumok • Attribútumok deklarációja: Ha az osztálynak van egy ‘letszam’ attribútuma (tulajdonsága) a következőképpen adható meg. <!ELEMENT osztaly (hallgato *) > <!ATTLIST osztaly letszam CDATA #REQUIRED> #IMPLIED #REQUIRED #FIXED - nem kötelező fix érték pl: az irányítoszam csak 3515 lehet! <!ATTLIST cím iranyitoszam #FIXED ” 3515”
DTD attribútumok megadásai Kötelező érték: DTD attribútum: <!ELEMENT negyzet EMPTY> <!ATTLIST negyzet oldalhossz CDATA #REQUIRED> XML példa: <negyzet oldalhossz ="100"></negyzet> Alapértelmezett érték megadása Szintaktika: <!ATTLIST elemnév attribútumnév CDATA "default-érték"> DTD példa: <!ATTLIST fizetesmod type CDATA ”atutalas"> XML példa: < fizetesmod type="atutalas">
DTD attribútumok megadásai Kötelező érték Szintaktika: <!ATTLIST elem attribútumnév attribútumtípus #REQUIRED> DTD példa: <!ATTLIST person number CDATA #REQUIRED> XML példa: <person number="5677"> Felsorolt érték: Szintaktika: <!ATTLIST element-name attribute-name (eval |. . ) default-value> DTD példa: <!ATTLIST payment type (check | cash) "cash"> XML példa: <payment type="check"> vagy <payment type="cash">
<levelek> <email> <cimzett nick="Alice">alice@usa. com</cimzett> <kuldo nick="Bob">bob@jp. com</kuldo> <uzenet>Hash kod</uzenet> <csatolas tipus="text/doc"></csatolas> </email> <kepeslap scanimage="kep. jpg"> <cim> Összetett példa: <nev>Gipsz Jakab</nev> egy képzeletbeli levélfeldolgozó <iranyitoszam>1234</iranyitoszam> <varos>Miskolc</varos> <orszag>Magyarorszag</orszag> </cim> <felado neve="Papp Bela" /> <uzenet>Boldog Nevnapot</uzenet> </kepeslap> <!ELEMENT levelek (email* , kepeslap*)> </levelek> <!ELEMENT email (cimzett, kuldo, uzenet? , csatolas? )> <!ATTLIST cimzett nick CDATA #IMPLIED> <!ATTLIST kuldo nick CDATA #IMPLIED> <!ATTLIST csatolas tipus CDATA #REQUIRED> <!ELEMENT kepeslap (cim, felado? , uzenet? )> <!ELEMENT cim (nev, iranyitoszam, varos, orszag)> <!ATTLIST kepeslap scanimage CDATA #IMPLIED> <!ATTLIST felado neve CDATA #REQUIRED>
XML transzformációk • • Az XML megjelenítése vezérelhető. XSL (Extensive Stylesheet Language) – – – kiterjeszthető stíluslap nyelv XML -> HTML transzformációt ír le. XSL három specifikációt tartalmaz: 1. XSLT - stíluslap 2. XSL-FO (XSL Formatting Objects) nyomtatott dokumentumok ellenőrzésére 3. XPath (XML Path Language) Egy adott XML dolumentum tagjei, elemei, attribútumainak helyének meghatározása A XSLT specifikáció elérhető: http: //www. w 3. org/TR/xslt
XML transzformációk • Példa: menu. xml <? xml version="1. 0" encoding="ISO-8859 -1"? > <ebed> <etel> <neve>Húsleves</neve> <ara>250</ara> <megnevezes>Húsleves csigatésztával, zöldségekkel</megnevezes> <energiatartalom>250</energiatartalom> </etel> <neve>Gyümölcsleves</neve> <ara>230</ara> <megnevezes>Gyümölcsleves friss gyümölcsökkel</megnevezes> <energiatartalom>350</energiatartalom> </etel> </ebed>
XML transzformációk A menu. xml stíluslapja: <? xml version="1. 0" encoding="ISO-8859 -1"? > <html xsl: version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform" xmlns="http: //www. w 3. org/TR/xhtml 1/strict"> <body style="font-family: Arial, helvetica, sans-serif; font-size: 12 pt; background-color: #EEEEEE"> <xsl: for-each select="ebed/etel"> <div style="background-color: teal; color: white; padding: 4 px"> <span style="font-weight: bold; color: white"> <xsl: value-of select="neve"/></span> - <xsl: value-of select="ara"/> </div> <div style="margin-left: 20 px; margin-bottom: 1 em; font-size: 10 pt"> <xsl: value-of select="megnevezes"/> <span style="font-style: italic"> (<xsl: value-of select="energiatartalom"/> kalória egy adag) </span> </div> </xsl: for-each> </body> </html>
XSL
XSL – Gyakorlati példák <? xml version="1. 0" encoding="ISO-8859 -2"? > <? xml-stylesheet type="text/xsl" href="alkatresz. xsl" ? > <alkatrészek> <alkatrész cikkszám="00001"> <megnevezés>Csap</megnevezés> <egységár>10</egységár> </alkatrész> <alkatrész cikkszám="00002"> <megnevezés>Tengely</megnevezés> <egységár>28</egységár> </alkatrész> <alkatrész cikkszám="00003"> <megnevezés>Ceruzaelem</megnevezés> <egységár>21</egységár> </alkatrész> <alkatrész cikkszám="00004"> <megnevezés>Alátét</megnevezés> <egységár>3</egységár> </alkatrészek>
Egy elem kiválasztása: <? xml version="1. 0" encoding="ISO-8859 -2"? > <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform"> <xsl: template match="/"> <html> <body> <h 2>Árlista</h 2> <table border="1"> <tr bgcolor="#9 acd 32"> <th>Név</th> <th>Ár</th> </tr> <td> <xsl: value-of select = "alkatrészek/alkatrész/megnevezés"/> </td> <xsl: value-of select = "alkatrészek/alkatrész/egységár"/> </td> </tr> </table> </body> </html> </xsl: template> </xsl: stylesheet>
Ciklikus elemkiválasztás: <? xml version="1. 0" encoding="ISO-8859 -2"? > <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform"> <xsl: template match="/"> <html> <body> <h 2>Árlista</h 2> <table border="1"> <tr bgcolor="#9 acd 32"> <th>Név</th> <th>Ár</th> </tr> <xsl: for-each select="alkatrészek/alkatrész"> <tr> <td> <xsl: value-of select = "megnevezés"/> </td> <xsl: value-of select = "egységár"/> </td> </tr> </xsl: for-each> </table> </body> </html> </xsl: template> </xsl: stylesheet>
Ciklikus elemkiválasztás feltétellel: <? xml version="1. 0" encoding="ISO-8859 -2"? > <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform"> <xsl: template match="/"> <html> <body> <h 2>Árlista</h 2> <table border="1"> <tr bgcolor="#9 acd 32"> <th>Név</th> <th>Ár</th> </tr> <xsl: for-each select="alkatrészek/alkatrész[egységár > 10]"> <tr> <td> <xsl: value-of select = "megnevezés"/> </td> <xsl: value-of select = "egységár"/> </td> </tr> </xsl: for-each> </table> </body> </html> </xsl: template> </xsl: stylesheet>
Ciklikus elemkiválasztás feltétellel és rendezéssel: <? xml version="1. 0" encoding="ISO-8859 -2"? > <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform"> <xsl: template match="/"> <html> <body> <h 2>Árlista</h 2> <table border="1"> <tr bgcolor="#9 acd 32"> <th>Név</th> <th>Ár</th> </tr> <xsl: for-each select="alkatrészek/alkatrész"> <xsl: sort select="egységár" data-type="number" /> <tr> <td> <xsl: value-of select = "megnevezés"/> </td> <xsl: value-of select = "egységár"/> </td> </tr> </xsl: for-each> </table> </body> </html> </xsl: template> </xsl: stylesheet>
Feltételek: <? xml version="1. 0" encoding="ISO-8859 -2"? > <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform"> <xsl: template match="/"> <html> <body> <h 2>Árlista</h 2> <table border="1"> <tr bgcolor="#9 acd 32"> <th>Név</th> <th>Ár</th> </tr> <xsl: for-each select="alkatrészek/alkatrész"> <xsl: if test="egységár > 10 and egységár != 21"> <tr> <td> <xsl: value-of select = "megnevezés"/> </td> <xsl: value-of select = "egységár"/> </td> </tr> </xsl: if> </xsl: for-each> </table> </body> </html> </xsl: template> </xsl: stylesheet>
Feltételek 2: <? xml version="1. 0" encoding="ISO-8859 -2"? > <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform"> <xsl: template match="/"> <html> <body> <h 2>Árlista</h 2> <table border="1"> <tr bgcolor="#9 acd 32"> <th>Név</th> <th>Ár</th> </tr> <xsl: for-each select="alkatrészek/alkatrész"> <tr> <td> <xsl: value-of select = "megnevezés"/> </td> <xsl: choose> <xsl: when test="egységár > 10 and egységár != 21"> <td bgcolor="green"> <xsl: value-of select = "egységár"/> </td> </xsl: when> <xsl: when test="egységár < 10"> <td bgcolor="blue"> <xsl: value-of select = "egységár"/> </td> </xsl: when> <xsl: otherwise> <td bgcolor="red"> <xsl: value-of select = "egységár"/> </td> </xsl: otherwise> </xsl: choose> </tr> </xsl: for-each> </table> </body> </html> </xsl: template> </xsl: stylesheet>
- Slides: 32