XML Alle tekortkomingen op een rijtje! (en een paar pluspunten...) Innovation DevDay 2009 Marc de Graauw http://www.marcdegraauw.com/ Marc de Graauw • studeerde biologie & filosofie • sinds 1989 in de ICT • sinds 1996 zelfstandig consultant – semantiek – interoperabiliteit – XML & Web Services • Landelijk Elektronisch Patiëntendossier, Strafrechtketen, verzekeraars, arbodiensten, UWV • artikelen en presentaties: zie http://www.marcdegraauw.com/ Marc de Graauw http://www.marcdegraauw.com/ De geschiedenis van XML • SGML – Standard Generalized Markup Language – IBM: back to the sixties... – Markup: structuur, niet processing • HTML: SGML spinoff • 1998: XML – SGML voor het Web, zonder ballast • 2002: Hype • 2009: Waar staan we? Marc de Graauw http://www.marcdegraauw.com/ Waarom XML? • XML als documentformaat – uitgevers: een bron, veel weergaven – SGML is te complex • XML voor gegevensuitwisseling – ASCII, CSV is te simpel en foutgevoelig – EDI is te duur • XML voor het Web – HTML kan geen semantiek uitdrukken – XML volgende generatie (‘Semantic Web’) Marc de Graauw http://www.marcdegraauw.com/ XML en Unicode Marc de Graauw http://www.marcdegraauw.com/ HTML - een voorbeeld <HTML> <HEAD> <TITLE>Marc de Graauw</TITLE> </HEAD> <BODY> <H1>Marc de Graauw</H1> <P>Geslacht: Man</P> <H2>Opleidingen</H2> <OL> <LI>VWO</LI> <LI>kandidaats Biologie</LI> <LI>doctoraal filosofie</LI> </OL> </BODY> </HTML> Marc de Graauw http://www.marcdegraauw.com/ XML - een voorbeeld <?xml version="1.0" encoding="UTF-8"?> <persoon> <persoonsgegevens geslacht="Man"> <achternaam>Graauw</achternaam> <voorvoegsel>de</voorvoegsel> <voornaam>Marc</voornaam> </persoonsgegevens> <opleiding>VWO</opleiding> <opleiding>kandidaats Biologie</opleiding> <opleiding>doctoraal filosofie</opleiding> </persoon> Marc de Graauw http://www.marcdegraauw.com/ Vóór Unicode bits 0110 1101 0110 0001 0111 0010 0110 0011 bytes dec 109 97 114 99 bytes hex 6d 61 72 63 ascii m a r c • • • • 7 bits, 128 tekens, 95 afdrukbaar Engels: cijfers, letters, leestekens niet: Frans: ê ç Duits: ß ä Grieks: ε Ω Nederlands: ë ï Spaans, Arabisch, Fins, Russisch, Chinees, Thais, etc. etc. Marc de Graauw http://www.marcdegraauw.com/ Vóór Unicode bytes 128 - 255 bytes 0 - 127 code page 473 ASCII code page 850 Engels, meeste Frans, Duits IBM PC DEC Multinational West Character Europees Set +Áß WestISOEuropees 8859-1 (ISO-Latin) Windows 1252 ShiftJIS Japans EBCDIC IBM mainframe Marc de Graauw http://www.marcdegraauw.com/ ISO8859-15 ISO-Latin + ‘IJ’sland + ‘œ’uf ISO-Latin + œ, € etc. etc. etc.... Vóór Unicode CP 437 CP 850 Windows 1252 ISOLatin-1 ISOLatin-15 Unicode a 61 61 61 61 61 0061 á a0 a0 e1 e1 e1 00e1 ä 84 84 e4 e4 e4 00e4 € - - 80 - a4 20ac õ - e4 f5 f5 f5 00f5 Ç 80 80 c7 c7 c7 00c7 œ - - 9c - bd 0153 Marc de Graauw http://www.marcdegraauw.com/ Unicode code point karakter glyph m m U+006D LATIN SMALL LETTER M (de letter ‘m’) m m m Marc de Graauw http://www.marcdegraauw.com/ Marc de Graauw http://www.marcdegraauw.com/ Marc de Graauw http://www.marcdegraauw.com/ Marc de Graauw http://www.marcdegraauw.com/ Marc de Graauw http://www.marcdegraauw.com/ Marc de Graauw http://www.marcdegraauw.com/ Tengwar – Tolkien - niet officieel (private use range) Marc de Graauw http://www.marcdegraauw.com/ Unicode encodings • Unicode – U+006D = ‘m’ – karakter 0 – 255: gelijk aan ISO-Latin-1 – 1.114.112 code points (0 – 10FFFF) • UTF-16 encoding – 4 bytes – 0000 – FFFF: gelijk aan Unicode nummer – Byte Order Mark • U+FEFF (ZERO-WIDTH NO-BREAK SPACE) • byte-swapped = U+FFFE = geen legaal karakter – efficiënt voor Chinees en Japans • UTF-8 – – – – 1 tot 4 bytes 0 – 127: gelijk aan ASCII ergo: ASCII tekst is altijd ook UTF-8 tekst efficiënt voor Westerse talen Marc de Graauw http://www.marcdegraauw.com/ Unicode encodings teken code point UTF-8 UTF-16 ISOLatin-1 ASCII spatie U+0020 20 00 20 20 20 a U+0061 61 00 61 61 61 ä U+00E4 C3 A4 00 E4 E4 - Marc de Graauw http://www.marcdegraauw.com/ • XML • Java • .NET Marc de Graauw http://www.marcdegraauw.com/ XML • XML = SGML – ballast + Unicode – Een XML document is een boom – Een root node – Attributen, elementen, tekst Marc de Graauw http://www.marcdegraauw.com/ Marc de Graauw http://www.marcdegraauw.com/ Documenten • • • • • opmaak kleur plaatjes in de tekst vetgedrukte en schuingedrukte tekst titel / paragraaf / lijst Marc de Graauw http://www.marcdegraauw.com/ wo do vr za zo Zonneschijn (%) 20 40 50 40 40 Neerslagkans (%) 20 10 10 10 20 Neerslaghoeveelheid (mm) 2 0 0 0 0-1 Minimumtemperatuur (°C) 15 9/11 8/11 9/11 9/11 Middagtemperatuur (°C) 18 16/19 17/20 17/20 16/19 Windrichting W NW W W W Windkracht (bft) 4 3 3 2 3 Marc de Graauw http://www.marcdegraauw.com/ Data • • • • • tabellen, rijen, kolommen cijfers korte teksten datatypes: %, mm, °C, bft datatypes en structuur van een XML document vastleggen in een schema Marc de Graauw http://www.marcdegraauw.com/ Document Object Model (DOM) • XML document wordt ingeladen in een object – de ‘DOM tree’ • methoden – getElementsByTagName(...) – getAttribute(...) – createElement(...) • dezelfde methoden in iedere taal: Java, C, .NET... Marc de Graauw http://www.marcdegraauw.com/ Namespaces • een document kan meerdere vocabulaires herbergen • wat is dan de betekenis van <name>, <id>... • namespace voorbeelden: • • • • <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <schema xmlns="http://www.w3.org/2001/XMLSchema"> <element name="purchaseOrder" type="po:PurchaseOrderType"/> <faultcode>SOAP-ENV:MustUnderstand</faultcode> Marc de Graauw http://www.marcdegraauw.com/ Pro XML • combineert documenten met data • software breed beschikbaar • geen problemen met – encoding – regeleinden – afspraken Marc de Graauw http://www.marcdegraauw.com/ Contra XML • • • • • overhead door start- en eindtags DOM is complex DOM sluit niet goed aan op programmeertalen Namespaces zijn complex Redundantie • <mdg:auteur naam="Marc" xmlns:mdg="http://www.marcdegraauw.com/voorbeeld/"/> • <auteur xmlns="http://www.marcdegraauw.com/voorbeeld/" naam="Marc"></auteur> Marc de Graauw http://www.marcdegraauw.com/ XPath en XSLT Marc de Graauw http://www.marcdegraauw.com/ XPath • XPath: taal om nodes uit de boom te trekken / document root /book alle <book> elementen onder root /book[@id] alle <book> elementen onder root met een ‘id’ attribuut Marc de Graauw http://www.marcdegraauw.com/ XSLT stylesheet XML bronbestand Marc de Graauw http://www.marcdegraauw.com/ XML resultaat XSLT • demo (stylesheet – bron – resultaat) • voordelen – snel – veel implementaties op veel platforms • nadelen – verbose – namespaces zijn foutgevoelig Marc de Graauw http://www.marcdegraauw.com/ Schematalen Marc de Graauw http://www.marcdegraauw.com/ Schematalen • • • • • • • • • 1998: XML, DOM, XPath 1999: Namespaces, XSLT 2001: XML Schema W3C versus ISO 1999: Schematron 2001: RelaxNG 2003: ISO RelaxNG 2006: ISO Schematron demo L1, L2 Marc de Graauw http://www.marcdegraauw.com/ RelaxNG Marc de Graauw http://www.marcdegraauw.com/ XML Schema ongeldige constructie! ongeldige constructie! Marc de Graauw http://www.marcdegraauw.com/ Schematron • rules • in XML • alleen een XSLT processor nodig Schematron stylesheet(s) Schematron regels voor project X Stylesheet voor project X XML bestand project X Marc de Graauw http://www.marcdegraauw.com/ Rapport XML bestand project X Schematron Marc de Graauw http://www.marcdegraauw.com/ Schema pro en con • Schema’s – zonder schema: eindeloze discussies • XML Schema – is complex – kan veel simpele constraints niet uitdrukken – is overal aanwezig, m.n. in Microsoft en Web Services • RelaxNG – simpeler – minder software • Schematron – regelgebaseerd – XSLT processor is de hele toolkit Marc de Graauw http://www.marcdegraauw.com/ JSON en Ajax Marc de Graauw http://www.marcdegraauw.com/ JSON • • • • • JavaScript Object Notation compact sluit goed aan op programmeertalen geen schemataal altijd Unicode; voorkeur UTF-8 Marc de Graauw http://www.marcdegraauw.com/ HTML Server Browser HTTP GET HTTP 200 OK + pagina HTTP GET HTTP 200 OK + pagina Marc de Graauw http://www.marcdegraauw.com/ XMLHttpRequest Server Browser HTTP GET HTTP 200 OK + pagina XMLHttpRequest HTTP GET HTTP 200 OK + pagina Marc de Graauw http://www.marcdegraauw.com/ XML AJAX • Asynchronous JavaScript and XML – XMLHttpRequest – ‘XML’ is hier vaak JSON! – pulldowns, refresh, drag & drop – Javascript libraries – Prototype, jQuery e.v.a. • AJAX – volledige applicatie in de browser – ASP Marc de Graauw http://www.marcdegraauw.com/ Web Services Marc de Graauw http://www.marcdegraauw.com/ Web Services basis • XML voor de gegevens • Schema voor – contract – design – codegeneratie – validatie • Transport: SOAP en HTTP • Servicebeschrijving: WSDL Marc de Graauw http://www.marcdegraauw.com/ Web Services stack (WS-*) • Security – XML Signature, XML Encryption – XML Canonicalization (2x) – WS-Security, WS-SecureConversation, WS-Trust • Transport – WS-Addressing – WS-ReliableMessaging – MTOM • Metadata – WS-Policy • Totaal: complex! Marc de Graauw http://www.marcdegraauw.com/ Waarom XML? • XML als documentformaat – uitgevers: het werkt – SGML is grotendeels vervangen • XML voor gegevensuitwisseling – veelgebruikt: EDI en CSV zijn geen alternatief – Web Services: complex... • XML voor het Web – grotendeels mislukt – JSON vult een deel van deze niche Marc de Graauw http://www.marcdegraauw.com/ Vragen? Marc de Graauw http://www.marcdegraauw.com/