4 Kommentoitu johdanto XML-maailmaan

Samankaltaiset tiedostot
5 Merkkaus: XML protokollana

5 Merkkaus: XML protokollana

4 Kommentoitu johdanto XML-maailmaan

4 Johdanto XML-maailmaan

4 Johdanto XML-maailmaan

9 XML perusteet

9 XML perusteet

9 XML perusteet

6 DTD ja dokumentin tyyppimääritys

W3C, Web-teknologiat ja XML

3 Verkkosaavutettavuuden tekniset perusteet

XML johdanto, uusimmat standardit ja kehitys

6 DTD ja dokumentin tyyppimääritys

6 DTD ja dokumentin tyyppimääritys

Tutkitaan sitten HTML-dokumenttien anatomiaa, jotta päästään käsiksi rakenteisten dokumenttien käsitteistöön esimerkkien kautta.

<Element> <ELEMENT> <element> </element> </ELEMENT> </Element>

Sisältö. XML, XHTML ja CSS XML XML. XML:n ja HTML:n ero. XML kieliä XML XHTML CSS XSL. T Hypermediadokumentin laatiminen 2002

XML prosessori. XML prosessointi. XML:n kirjoittaminen. Validoiva jäsennin. Tapahtumaohjattu käsittely. Tapahtumaohjattu käsittely.

XML-evoluutio ja kestävä kehitys

6 XML-työkalut 1. 6 XML-työkalut

2 Rakenteisten dokumenttien perusteet

Paikkatiedot ja Web-standardit

Johdatus rakenteisiin dokumentteihin

W3C, XML ja tietojenkäsittely: Ihmisen ja tietokoneen yhteinen ymmärrys suoritettavasta tehtävästä ja XML-standardien merkitys tietosysteemeissä (MH)

XML kielioppi. Elementtien ja attribuuttien määrittely. Ctl230: Luentokalvot Miro Lehtonen

Semanttinen Web. Ossi Nykänen Tampereen teknillinen yliopisto (TTY), DMI / Hypermedialaboratorio W3C Suomen toimisto

W3C-teknologiat ja yhteensopivuus

XML - mahdollisuudet ja kehitys

XML-tietojenkäsittely

XML johdatus: DTD. Jaana Holvikivi

M. Merikanto 2012 XML. Merkkauskieli, osa 2

Vaasan yliopiston toimintaa tukevat informaatiopalvelut ovat käytettävissä WWW:n kautta.

Johdatus XML teknologioihin

Rakenteisten dokumenttien jatkokurssi, syksy 2006

StanForD-XML. Juha-Antti Sorsa, Tapio Räsänen, Vesa Imponen

7 Kommentoitu johdanto XML:ään

XML ja Web Services update

WWW-ohjelmoinnin kokonaisuus. WWW-OHJELMOINTI 1 Merkkauskielet. Merkkauskielten idea. Merkkauskielet (markup languages) Merkkauskielten merkitys

Luento 7: XML-ohjelmointirajapinnat

2. PEHMEÄ XHTML XRAJAHTML

Hohde Consulting 2004

W3C ja alueellinen standardointi

XML, XHTML ja CSS. T Hypermediadokumentin laatiminen. Mikko Pohja

Semanttinen Web. Ossi Nykänen. Tampereen teknillinen yliopisto (TTY), Digitaalisen median instituutti (DMI), Hypermedialaboratorio W3C Suomen toimisto

12 Dokumenttiluokan toteuttamisesta

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

2 Rakenteisten dokumenttien perusteet

9.16 XSLT ja nimiavaruudet (1/3): literaali oletusnimiavaruus

Luento 12: XML ja metatieto

W3C ja Web-teknologiat

Tutkija Mikko Salmenperä. huone: sd109. TTY / Systeemitekniikan laitos. puh: mikko.salmenpera@tut.fi

Luento 1: Johdanto merkintäkieliin

Laajuus 5 op Luennot: 12 x 2t Harjoitukset: 7 viikkoharjoitusta harjoitusten tekemiseen saatavissa apua 2 ryhmää / harjoitus

Elementtien tyyppideklaraatiot

Extensible Stylesheet Language (XSL)

XML, standardointi ja kehitys

W3C: teknologia ja (tieto)yhteiskunta

Digitaalisen median tekniikat. JSP ja XML

W3C & verkkojulkaisun standardit

Kurssin aloitus. AS XML-kuvauskielten perusteet Janne Kalliola

10 XML ja dokumenttien tyyppimäärittely

XML - perusteet. Ctl230: Luentokalvot Miro Lehtonen

Esimerkki: ulkoisen tyylitiedoston valinta median mukaan

Verkkosisällön saavutettavuusohjeet 2.0: hyviä ohjeita monimuotoisen sisällön suunnitteluun ja arviointiin

XML-merkkaus. Merkkidata, prosessointikomennot, kommentit

3 XHTML-dokumenttien anatomia

W3C, Web-teknologiat ja Semanttinen Web

Hohde Consulting 2004

P e d a c o d e ohjelmointikoulutus verkossa

XML-pohjaiset rakennemäärittelyt

XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy

Median valinta. Median Esimerkki: ulkoisen tyylitiedoston valinta median mukaan: tai vaihtoehtoisesti, esim:

2.17 Esimerkki järkevän relaatiotietokannan rakenteesta

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli (2011) Harri Laine 1. Jäsennys ja sarjallistaminen

HTML & CSS. HTML (HyperText Markup Language) Antti Koivisto. ! HTML on sivujen kuvauskieli.

13 Nimiavaruudet. kirjoitetaan muotoon (ja koodataan vähän lisätietoa) huomataan heti, mitä kirjoittaja ajaa takaa ja tarkoittaa. Vai huomataanko?

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Dokumenttien tietosisällön hallinta

11 XML-entiteetit. Edellisistä laillisia ominaisuusyhdistelmiä ovat siis vain aikaisemmin luetellut viisi:

XML / DTD / FOP -opas Internal

Interfacing Product Data Management System

Verkkopalveluiden saavutettavuus

3 Verkkosaavutettavuuden tekniset perusteet

11 XML-entiteetit. <eg> Using HTML tag <FONT> is not recommended! </eg> <eg> Using HTML tag <FONT> is not recommended! </eg> XML-entiteetit

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Avoimet standardit ja asiakirjamuodot Suomen julkisessa hallinnossa: teoriasta käytäntöön

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Sisällys. Valtion tietotekniikan rajapintasuosituksia. XML:n rooleja sähköisen asioinnin tavoitearkkitehtuurissa. dbroker - asiointialusta

Ctl160 Tekstikorpusten tietojenkäsittely p.1/15

XML rakenteen suunnittelu. Jaana Holvikivi

Neoxen Systems on suomalainen ohjelmistotalo. Olemme erikoistuneet tiedon- ja oppimisen hallinnan ratkaisuihin.

Eero Hyvönen. Semanttinen web. Linkitetyn avoimen datan käsikirja

Yhteentoimivuutta edistävien työkalujen kehittäminen

Avoimet standardit ja arkistointi

XML Finland seminaari : Office 2007 XML dokumenttituotannossa

Tuomas Komulainen LUOVA LOMAKE ANALYSOINTITYÖKALU

Sisällönhallinnan menetelmiä

SISÄLLYS. Johdanto JOHDATUS XML:n PARIIN 1.1 Extensible Markup Languge XML:n edut Mitä XML:llä tehdään? 3

Transkriptio:

è è è Kommentoitu johdanto XML-maailmaan 4 Kommentoitu johdanto XML-maailmaan Yksinkertainen XML-merkkauskielioppi on modernin rakenteisen dokumentaation ja mitä monimaisimpien XML-sovellusten pienin yhteinen tekijä. Pelkästä merkkauskielestä ei kuitenkaan ole juuri mitään hyötyä. Seuraavassa luodaan johdatteleva katsaus XMLmaailmaan, jatkossa (tiettyihin) yksittäisiin tekniikoihin pureudutaan tarkemmin. Tavoitteena on nyt oivaltaa XML-metakielen perusidea ja nähdä metsä puilta potentiaalisesti tarpeellista osattavaa löytyy jo XMLperheestä todella paljon. Tällä kurssilla käsittely rajataan keskeisiin perustekniikoihin. 70

è è è Kommentoitu johdanto XML-maailmaan 4.1 Välisoitto Koska tavoitteena on yleensä kehittää hyviä sovelluksia kohtuuresurssein, RDkehitystyö(kin) perustuu pitkälti (valmis)komponenttien hyödyntämiseen XML-tekniikat tarjoavat välineitä useille tietotekniikan osa-alueille joissa hyödynnetään yhteensopivaa XMLkielioppia esim. sovellusintegraatiossa myös XML-teknologiaperhe kehittyy jatkuvasti (joskin spesifikaatiot kehittyvät toisinaan nopeammin kuin käytännön sovellukset ja päinvastoin) 71

è è è Kommentoitu johdanto XML-maailmaan 4.2 Uusi merkintäkieli? XHTML soveltuu Web-sivujen julkaisuformaatiksi, mutta ei tarjoa kunnon välineitä mallintaa muuntyyppistä tietoa (vrt. musiikki.html) Myös "omien merkkausrakenteiden esittely HTMLkieleen" onnistuu esim. div- ja span-elementtien sekä class-attribuutin avulla ( mikroformaatit) Merkkauksesta tulee kuitenkin erittäin kömpelöä, ja käsittelijä joudutaan kuitenkin ohjelmoimaan itse (jopa julkaisusovelluksissa koska CSS-toteutukset ei mahdollista esim. elementtien uudelleenjärjestelyä eikä esim. selain välttämättä ymmärrä itse keksittyjä class-attribuutteja) "Rajoittuneisuus" ei kuitenkaan johdu merkkauksesta, vaan XHTMLdokumenttityypistä joka ei tietenkään taivu kaikkiin sovelluksiin (lue: ei sisällä merkkausrakennetta esim. cd-levyn tiedoille) 72

è è è Kommentoitu johdanto XML-maailmaan 4.3 XHTML-sanasto vaihtoon (merkkauskielioppi saa jäädä) Vaihdetaan siis sanasto...ja merkataan esim. seuraavasti (musiikki.alb): <music> <album artist="dire Straits" year="1978"> <name>dire Straits</name> <tracks> <track len="5m34s">sultans of swing</track> <track len="6m14s">in the gallery</track> </tracks> </album> <album artist="pet Shop Boys" year="1993"> <name>very</name> <tracks> <track len="3m55s">yesterday, When I Was Mad</track> </tracks> </album> </music> 73

è è è Kommentoitu johdanto XML-maailmaan 4.4 Huomioita Merkkausrakenne on tuttu XHTML-kielestä, mutta tiedot on nyt ilmeisestikin merkattu musiikkilevyjen käsitteiden näkökulmasta (looginen rakenne) Rakenteen suunnittelu on vain osatehtävä: <!DOCTYPE music SYSTEM "cd-music.dtd"> <!-- Mitä tällä tehdään? --> Mutta kuka osaa yo. tietoa käsitellä? Mikä ohjelma ymmärtää yo. rakenteen tiedot? Kuka tietoa tuottaa? jne. Ellei aio toteuttaa "kaikkea itse", kannattaa siis suosia jo saatavilla olevia & tuettuja dokumenttityyppejä, jos suinkin mahdollista No, ainakin esitystavan määrittely onnistuu esim. CSS:n avulla (vrt. oheinen prosessointiohje), mutta tällä ei vielä pitkälle pötkitä: <?xml-stylesheet href="mystyle.css" type="text/css"?> 74

è è è Kommentoitu johdanto XML-maailmaan 4.5 XML:n rooli sovelluskehityksessä XML-dokumenttien/rajapintojen käyttö yleistää HTML-kielestä tuttua rajapinta-ajattelua: Nyt motiivi on hyödyntää XMLteknologiaperheen välineitä: - editorit, ohjelmointirajapinnat, valmisohjelmat, tunnetut sovellukset, kokemukset, hyvät käytännöt, koulutus ja osaaminen, yhteisö, tilaajan valmius ymmärtää suunnittelua [conforms to] [can write] System component (Requestor) Schema definition Data instance in XML [implemented as] [implements] [can read] System component (Provider) [standard interface for] Techniques and tools from the XML family of technologies 75

è è è Kommentoitu johdanto XML-maailmaan 4.6 No niin... XML - mikä se on? Extensible Markup Language (XML) 1.0 (Third Edition) on virallinen W3C suositus (ns. recommendation, 1. versio vuodelta 1998) XML määrittelee (teksti)dokumenttien loogisen ja fyysisen rakenteen, (merkkauskielioppi ja entiteetit) sekä DTD-määrityskielen tietyn (rajoitetun) elementtirakenteen omaavien, tietyntyyppisten dokumenttiluokkien kuvaamiseen XML 1.0 määrittelee keskeisesti XML-dokumenttien luokan, ts. sen, millaisia XML-dokumentit ovat ja miten niitä tulee käsitellä - XML-prosessori vs. XML-sovellus (ts. XML ~ rajapinta!) XML on SGML:n osajoukko (tästä seuraa ) Kaksi versiota: 1.0 (v. 1998) ja 1.1 (v. 2004); erot vähäisiä XML-sovelluksissa tarvitaan useita muitakin XML-perheen teknisiä suosituksia 76

è è è Kommentoitu johdanto XML-maailmaan 4.7 XML-spesifikaation suunnittelukriteerit XML:ää kehittäneet XML Working Group (vanha SGML Editorial Review Board) ja XML Special Interest Group (vanha SGML Working Group) asettivat XML:n kehitystyölle seuraavia tavoitteita: - suoraviivainen käyttö Internetin yli - laaja sovellusalue (ei esim. laite- tai ohjelmistoriippuvuutta) - yhteensopivuus SGML:n kanssa - XML:ää käsittelevien ohjelmien kirjoittamisen helppous - vähän valinnaisia ominaisuuksia - dokumenttien luettavuus ja selkeys (myös ihmisten näkökulmasta) - määrityksen tulee valmistua nopeasti (työ alkoi toukokuussa 1996) - määrityksen suunnittelun on oltava tarkkaa ja huolellista - dokumenttien tekemisen helppous - minimalistiseen merkkauksen ei pyritä (esim. pitkät nimet ovat sallittuja) 77

è è è Kommentoitu johdanto XML-maailmaan 4.8 XML-merkkaus pähkinänkuoressa (dok. esiintymäosa) <?xml version="1.0" encoding="iso-8859-1" standalone="no"?> <!DOCTYPE music SYSTEM "cd-music.dtd"> <!-- taustalla tyyppimääritys --> <?xml-stylesheet href="mystyle.css" type="text/css"?> <music xml:lang="en" xml:space="default"> <album artist="dire Straits" year="1978"> <name>dire Straits</name> <tracks> <track len="5m34s">sultans of swing</track> </tracks> <!-- lisäsin editorin kommentin --> <ed_note> Mercury Records. Dire Straits -- wrong time, wrong place? Note: Should comments be added to <![CDATA[<track>]]> elements as well? (&on;) </ed_note> <cover src="dd79.png" title="painting by Chuck Loyola" /> </album> </music> Ts. iso osa merkkauksesta tuli jo XHTML-esimerkeissä, (joskin merkkidatalohko uupui aikaisemmista esimerkeistä) 78

è è è Kommentoitu johdanto XML-maailmaan 4.9 Vastaava SVG-esimerkki (1/2) <?xml version="1.0" encoding="iso-8859-1" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/graphics/svg/1.1/dtd/svg11.dtd" [ <!ENTITY hello "Napsauta"> ]> <?xml-stylesheet href="napsauta.css" type="text/css"?> <svg viewbox="-100-100 200 200" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="fi" xml:space="preserve"> <defs> <script type="text/javascript"> <![CDATA[ var c = 0; function setcolor(evt) { if (c<11) { evt.target.setattribute('fill', "rgb("+c*25+","+c*25+","+c*25+")"); 79

è è è Kommentoitu johdanto XML-maailmaan 4.10 Vastaava SVG-esimerkki (2/2) c = c + 1 } else c = 0; } ]]> </script> </defs> <!-- Ympyränkin tyylitieto kannattaisi siirtää css-tiedostoon --> <circle r="50" fill="black" onclick="setcolor(evt)" /> <text x="-30" y="70" class="title">&hello; </text> </svg> 80

è è è Kommentoitu johdanto XML-maailmaan 4.11 XML-perheen keskeisiä suosituksia XML 1.0 (1.1) (*) - merkkauskielioppi (looginen rakenne), DTDmäärityskieli ja entiteetit (fyysinen rakenne) Namespaces (1.1) (*) - nimiavaruuden käsite (sanastojen yksikäsitteisyys) SAX, DOM (*) - ohjelmointirajapintoja (tapahtuma-, mallipohjainen) XML Schema - DTD-kieltä ilmaisuvoimaisempi skeemakieli (sis. mm. std-tietotyypit) XSL (*) - erityisesti XSL-muunnoskieli XSLT (dokumenttiluokkien väliset muunnokset, esim. music xhtml, DocBook xsl-fo,...) (SAX = Simple API to XML, DOM = Document Object Model, XSL[T] = Extensible Stylesheet Language [Transformations]) 81

è è è Kommentoitu johdanto XML-maailmaan 4.12 Siinäkö kaikki? Ei suinkaan, vrt. Web-standardipino 82

è è è Kommentoitu johdanto XML-maailmaan 4.13 Eräs XML-teknologiaperheen yleisjäsennys Standardoituja XMLpohjaisia teknologioita on todella paljon (puhumattakaan eri organisaatioiden omista XMLsovelluksista) Kärjistettynä: XMLmerkkaus tuo siis käyttöön paljon ko. rajapintaa tukevia teknologioita (sekä välineitä ja sisältöä) XHTML SVG SMIL MathML VoiceXML XForms... DOM Encryption EMMA RDFS, OWL XSL-FO XSLT RDF CSS P3P XPath XQuery CC/PP WSDL WAI... SOAP... Canonical Base Fragments Signature Inclusions Events XKMS XLink XPointer... XML 1.0/1.1 Namespaces 1/1.1 XML Schema HTTP Unicode URI... 83

è è è Kommentoitu johdanto XML-maailmaan 4.14 Mihin XML:ää voi/kannattaa käyttää? XML tarjoaa siis valmista sisältöä(!), abstraktin metakielen, suunnittelufilosofian ja tekniikoita joiden tuella voi periaatteessa implementoida mitä sovelluksia tahansa RD-maailmassa tyypillisiä käyttökohteita esim. - tiedon esitysmuodon standardointi ja integrointi - automatisoitu käsittely (XML-tekstiformaatit) - hajautus ja mekaaninen kommunikaatio (XML-viestit) - arkistointi ja pitkäaikaissäilytys (virkistäminen helppoa) Laajennettavuutensa ansiosta XML tarjoaa perustan myös erilaisten tietoa kehystävien rakenteiden, kuvailukielten, mikroformaattien yms. pinomaiseen, laajennettavissa/tarkennettavissa olevaan määrittelyyn eri sovelluksissa (vrt. esim. ATOM, CC/PP, SOAP, RDF, RSS, SKOS, OWL) 84

è è è Kommentoitu johdanto XML-maailmaan 4.15 Miksi ja mihin XML:ää ei pitäisi käyttää? XML:kään ei kannata ottaa perusteitta käyttöön teknologiavetoisesti, onhan olemassa - CSV-tietorakenteita, taulukkolaskentaohjelmia, relaatiotietokantoja, hyviä propietary- (teksti)formaatteja, binääriformaatteja, jne. XML-perustekniikan pulmina voidaan pitää esim. - tekstimuotoisuutta ja monisanaisuutta (verbose) silloin kun tilaa on vähän ( Binary XML) - rajoittuneita merkkaus- ja tyyppimäärityskieliä (DTD), SGML-perintöä - "hitautta" (monimutkaisuudesta aiheutuvaa optimoinnin vaikeutta) Näissäkin tapauksissa XML voi kuitenkin tarjota luontevan tavan nimetä ja kehystää tietoa esim. tiedonsiirrossa tarvittavan rajapinta/liimakielen tavoin Osa pulmista ratkeaa hyvällä suunnittelulla (esim. pakkaus), osa ei 85

è è è Kommentoitu johdanto XML-maailmaan 4.16 Dokumenttituotannon perusvälineistä Kuten tavallista, XML:n plussat ja miinukset realisoituvat vasta suhteessa sovellusten tarpeisiin ja käytössä oleviin välineisiin Koska XML-tietorakenteen tulee aina olla kunnossa, tekstinkäsittelytyökalun rinnalla käytetään (validoivaa) XML-jäsennintä: - XML-dokumenttien merkkauksen tarkistaminen, so. onko dokumentti ns. hyvin muodostettu (well-formed) - XML-dokumenttien (rakenteen) validointi, so. dokumentin vahvistaminen tiettyyn dokumenttiluokkaan kuuluvaksi - sovellusohjelmointi nojautuu parseriin (joka suorittaa jäsennyksen ja tarjoaa tähän perustuvan ohjelmointirajapinnan) 86

è è è Kommentoitu johdanto XML-maailmaan 4.17 Lisää ominaisuuksia Tekstinkäsittely ja jäsennin voidaan yhdistää, tuloksena... - graafinen esitys dokumentin puurakenteesta - XML-merkkauksen syntaksiväritys - elementtien menupohjainen valintatyökalu - tyylieditori ja dokumentin esikatselu, WYSIWYGeditointi... Editoriin integroitavissa esim. - suunnitteluvälineitä, tyyppikirjastoja - tuki muille XML-standardiperheen välineille - yhteys tietokantajärjestelmään ja (yrityksen tai organisaation) muihin operatiivisiin järjestelmiin, objektieditoreita,... Ks. esim. - XML Spy, XMetaL, FrameMaker,, Oxygen,, XRay, - myös komentorivipohjaisia XML-jäsentimiä (yms. työkaluja) löytyy tavallisten tekstieditorien tueksi (esim. Xerces) 87

è è è Kommentoitu johdanto XML-maailmaan 4.18 Esimerkki "WYSIWYG-editoinnista": Oxygen 88

è è è Kommentoitu johdanto XML-maailmaan 4.19 Välineet ja sovelluskehitys Huom. Graafisten ympäristöjen käyttö on toisinaan "makuasia", toisinaan ei - vrt. ohjelmointi Javakielellä - vrt. XRay ja XSLT - mutta esim. tekniset kirjoittajat ("sisällöntuottajat") eivät ole kiinnostuneita merkkauksen tekniikasta vaan kirjoittamisesta! 89

è è è Kommentoitu johdanto XML-maailmaan 4.20 Lopuksi: XML kulissien takaa vs. näyttämöllä Edellä kuvattiin lähinnä XML:ää kehittäjän näkökulmasta (tekniikkaa...) - loppukäyttäjän näkökulmasta XML on kuin mikä tahansa perustekniikka: - "taas uusia tiedostotyyppejä, jolle integroitu ohjelmistotuki" (vrt. Open Office) Rajatuissa sovelluksissa XML-syntaksi on usein tarkoituksenmukaista piilottaa hallitusti paitsi loppukäyttäjiltä, myös kirjoittajilta (vrt. WYSIWYG) Mitä loppukäyttäjät sitten loppujen lopuksi tarvitsevat? New model with ASCII support! Buy NOW! - XML:ää hyödyntävän sovellusohjelman, pluginin tms., käyttöohjeineen Lue: loppukäyttäjän näkökulmasta rakenteisten dokumenttien ja esim. XML-tekniikoiden hyödyt ovat vain välillisiä - yhteensopivien ohjelmistojen runsaus, ominaisuudet, hinta (kehitystyön kustannukset), sovellusten hallittavuus ja virheettömyys,... 90

è è è Merkkaus: XML protokollana 5 Merkkaus: XML protokollana XML on siis ns. metakieli, joka käytännössä voidaan tulkita tavaksi merkitä ja tyypittää rakenteisia dokumentteja. XML on kuitenkin ennen kaikkea standardimuotoinen tietorakenne tiedonsiirtoon tietokoneohjelmien välillä. Tästä syystä XMLdokumenttiluokka on määriteltävä tietorakenteena tarkasti. Yksityiskohtainen määrittely pyrkii varmistamaan että XML-perustekniikan varaan rakennettujen sovellusten määrittely on vakaalla pohjalla.... XML 10010010010010010011 Me tutustumme asiaan koska asian XML-tekniikan ymmärtäminen "protokollan tasolla" tuo valmiudet arvioida eri prosessorien toimintaa ja esim. tulkita virhetilanteita ja eri XML-versioita (se toki on opettavaista myös sinänsä) 91

è è è Merkkaus: XML protokollana 5.1 Välisoitto XML 1.0 (1.1) on melko matalan tason protokolla... - määritys on yleiskäyttöinen (...pinomainen määritys) - ei suoraan osoita sovelluksia - määrityksen on oltava teknisesti tarkka - näkyy kenties "vain välineiden läpi" 92

è è è Merkkaus: XML protokollana 5.2 XML-dokumentin lukeminen XML 1.0 (1.1) -spesifikaatio jakaa dokumenttien käsittelyn kaksitasoiseksi prosessiksi, jossa XML-prosessori (processor) lukee XML-dokumentin ja välittää tämän jäsennettynä sovellukselle (application) - XML-prosessori osaa lukea ja jäsentää merkkauskieliopin mukaisia dokumentteja (sis. DTD-tyyppimääritys) - sovellus hyödyntää jäsennettyä tietoa prosessorin toimittaman informaation perusteella (yleensä jäsennyspuun perusteella) XML-prosessori (Puhekielessä "parseri") XMLdokumentti Ohjelmointirajapinta XML-sovellus Kohdesovellus (Koostuu useista komponenteista joista jotkin XML-sovelluksia) 93

è è è Merkkaus: XML protokollana 5.3 Kyse on hyvin matalan tason määrittelystä XML 1.0 (1.1) on "protokollamainen" Erityisesti, XML 1.0 ei määrittele: - mihin sovellus käyttää XML-dokumentin tietoja - millainen ohjelmointirajapinta prosessorin ja sovelluksen välillä on (käytännössä yleensä kuitenkin "yleensä" SAX tai DOM) XML 1.0 (1.1) -spesifikaatio ei siis määrittele sovelluksen toimintaa käytännössä lainkaan (eikä siten XML-sovellusalueita) vaan keskittyy XML-prosessorin efektiivisen käyttäytymisen (erityisesti peruuttamattomien virheiden) kuvailuun Siispä... - XML:n varaan voidaan rakentaa mitä tahansa sovelluksia jotka hyödyntävät elementti- ja attribuuttirakenteista tietoa - Hyöty: tiedon matalan tason yhteensopivuus (merkkauskielioppi) 94

è è è Merkkaus: XML protokollana 5.4 XML-dokumenttien merkkauksesta XML-dokumenttien merkkaus (markup) voi siis olla jotakin seuraavista: - prosessointiohje - dokumentin tyyppimäärittely - elementin alkutagi - elementin lopputagi - tyhjän elementin tagi - entiteettiviittaus - merkkiviittaus - kommentti - merkkidatalohko Kaikki muu tekstisisältö on merkkidataa Merkkaus tuli siis esiteltyä XHTML-dokumenttien esittelyn yhteydessä! - sama merkkauskielioppi on käytössä kaikissa XML-sovelluksissa: XHTML, SVG, DocBook, SOAP, RDF/XML,... ) e01 e00 e10 e11 ID IDREF 95

è è è Merkkaus: XML protokollana 5.5 XML-dokumenttien jäsentäminen (1/2) Merkkauskieliopin täsmällisyydellä tavoitellaan tietenkin XML-dokumenttien ohjelmallisen käsittelyn yksikäsitteisyyttä (jäsennys onnistuu mekaanisesti) Dokumentin d.xml jäsennysyritys voi tuottaa seuraavat lopputulokset ok 1. d.xml sisältää merkkausvirheen d.xml ei ole XML-dokumentti 2. d.xml sisältää tyyppiesittelyn D muttei noudata sitä d.xml ei ole (tyyppi)validi XML-dokumentti #! (kuitenkin hyvin muodostettu XMLdokumentti jos kohta 1 läpäistiin) 3. d.xml sisältää tyyppiesittelyn D ja noudattaa sitä d.xml on validi XMLdokumenttia tyyppiä D 96

è è è Merkkaus: XML protokollana 5.6... jäsentäminen (2/2) Huomautuksia - lopputulos 2 voi olla myös toivottu toisinaan dokumentin tyyppimäärittelyä käytetään esim. vain entiteettien määrittelyyn - jäsennin joka ei tunne sanastoa ei ymmärrä dokumentin kirjoittajan tai sovelluksen tavoitteitta jäsentimen raportoimat virheet eivät välttämättä ole kovin kuvaavia (vrt. rxp-esim: 1nimi, tiku&taku, jne.) - XML ei kerro miten "huonosti muodostettuja XML-dokumentteja" tulisi käsitellä, mikä on käytännössä pulma esim. editoreille Erilaisten XML-laajennusten myötä tulosten kirjo voi laajentua, erityisesti - noudattaako d.xml nimiavaruuksien kielioppia (joka lisää yhden kerroksen semantiikkaa XML-merkkauskieliopin tulkintaan) - noudattaako d.xml skeemaa D' (tms. globaaleja sanastoja) 97

è è è Merkkaus: XML protokollana 5.7 XML -dokumenttiluokan määritelty XML-dokumentin rakenne on siis määriteltävä täsmällisesti, muuten sen mekaaninen lukeminen ja jäsentäminen ("parsiminen") ei onnistu Väärinymmärrysten välttämiseksi (ja teknisen toteutustyön pohjaksi), XML 1.0 (1.1) on määritelty formaalin kielen tavoin (tuotto)sääntöinä (XML 1.1; 83 kpl) joista kaikki ko. kielen sanat (nyt siis hyvin muodostetut XML-dokumentit) voidaan johtaa; vrt. esim. (XML 1.0) [1] document ::= prolog element Misc* /*...*/ [39] element ::= EmptyElemTag STag content ETag [ WFC: Element Type Match ] [ VC: Element Valid ] XML 1.1:n ero 1.0:aan on lähinnä määrittelytekninen (1.1 lähinnä huomioi alla olevan Unicode-standardin kehityksen ja lisää uuden rivinvaihtomerkin.) 98

è è è Merkkaus: XML protokollana 5.8 Kontekstivapaa kielioppi ja EBNF Kielioppi on määritelty ohjelmointikielistä tuttua BNF-notaatiota mukaillen Extended Backus Naur Form (EBNF) esittää ns. kontekstivapaan kielen kieliopin G = (N, T, N 0, P): - tuottosäännöt (P), välisymbolit (N), loppusymbolit (T), operaattorit, merkkiluokat ja kertojat - ensimmäisenä esiteltävä tuottosääntö N 0 sovitaan kieliopin aksioomaksi josta kaikki ko. formaalin kielen sanat johdetaan - kieli määritellään siten että sanoille löytyy yksikäsitteinen jäsennyspuu - EBNF-muotoiset kieliopit ovat helppolukuisia mutta eivät kovin ilmaisuvoimaisia (täsmennettävä esim. sanallisin lisäyksin) T ::= '(' T O T ')' N N ::= [1234567890]+ O ::= '+' '-' '*' '/' Nyt EBNF on siis vain väline ns. hyvin muodostettujen XML-dokumenttien määrittelyyn se ei tietenkään "näy" dokumenteissa kuin välillisesti 99

è è è Merkkaus: XML protokollana 5.9 EBNF-sääntöjen rakenne (1/3) Kieliopin määrittely perustuu nyt literaaliviittauksiin, sulkujen käyttöön, operaattoreihin ja kertojiin Merkki ja merkkijonoviittaukset: - #xn (N on halutun merkin indeksi) - [a-za-z],[#xn-#xm] (lueteltu merkkiluokan merkki) - [^abc], [^#xn#xm] (jokin muu merkki kuin lueteltu) - "string", 'string' (vakiomerkkijono) Sulkujen käyttö: - (lauseke) (lausekkeiden ryhmittely esim. kertojien vaikutusalueen asettamiseksi) 100

è è è Merkkaus: XML protokollana 5.10 EBNF-sääntöjen rakenne (2/3) Operaattorit: - A B (B seuraa A:ta) - A B (A tai B muttei molemmat) - A - B (A muttei B:tä) Kertojat: - A? (A esiintyy kerran tai ei ollenkaan) - A+ (A esiintyy yhden tai useamman kerran) - A* (A esiintyy yhden tai useamman kerran tai ei ollenkaan) Loput säännöllisistä lausekkeista tutut operaattorit ja kertojat voidaan tarvittaessa konstruoida näistä metakielen tasolla, esim. "A{3,4}" on sama kuin "A A A A A A A" 101

è è è Merkkaus: XML protokollana 5.11 EBNF-sääntöjen rakenne (3/3) Huom. XML-spesifikaatio esittelee lisäksi muutakin kielen määrittelyyn liittyvää notaatiota, erityisesti ns. rajoitteita (constraint): - /* */ (kommentti) - [ wfc: ] (well-formedness constraint) - [ vc: ] (validity constraint) Näitä tarvitaan teknisistä syistä, koska kontekstivapaa kielioppi (joka nyt siis kirjoitettu EBNF-notaatiota käyttäen) ei ole tarpeeksi vahva tiettyjen relaatioiden (järkevään esittämiseen), esim. - elementin alku- ja lopputagissa esiintyy sama nimi - elementin nimi on esitelty tyyppimäärittelyssä ja se esiintyy vanhemmassaan tämän tyyppiesittelyn mukaisesti 102

è è è Merkkaus: XML protokollana 5.12 Merkitseviä asioita: nimet XML erottelee täsmällisesti merkistöihin, elementtien nimeämiseen ja attribuuttien arvoihin liittyviä termejä, näistä keskeisiä ovat: - nimi (name) - tunnistemerkkijono (name token) [4] NameChar ::= Letter Digit '.' '-' '_' ':' CombiningChar Extender [5] Name ::= (Letter '_' ':') (NameChar)* [7] Nmtoken ::= (NameChar)+ Muut em. tuottosäännöissä esiteltävät käsitteet määrittelevät (luettelevat) ne Unicode-indeksit (merkkiluokat), jotka vastaavat termejä "Letter", "Digit", "CombiningChar" ja "Extender", jne. (XML 1.0 vs. 1.1) Nimiä käytetään tyypillisesti elementtien nimeämiseen, tunnistemerkkijonoja taas esim. attribuuttien arvoalueen rajaamiseen Huom. XML varaa nimien prefixarvot [xx][mm][ll] omaan käyttöönsä - esim. "xml-element" ei siis ole laillinen itse keksityn elementin nimi 103

è è è Merkkaus: XML protokollana 5.13 XML-dokumentin yleisrakenne XML-dokumentti jakautuu siis kahteen osaan: esittelyyn ja esiintymään [1] document ::= prolog element Misc* Esittely (prolog) - XML-versionumero, koodaustapa, riippumattomuusesittely - dokumentin tyyppiesittely Esiintymä (instance, käytännössä juurielementti) - dokumentin sisältö (dokumentin juurientiteetti) mahdollisen tyyppikuvauksen rajoittaman loogisen rakenteen puitteissa Elementtien muodostama rakenne on hierarkkinen ja siten aidosti sisäkkäinen XML-dokumentti ei määritä omaa semantiikkaansa (merkitystä), vaan ainoastaan paljaan rakenteen, johon informaatio on "ripustettu" 104

è è è Merkkaus: XML protokollana 5.14 XML-merkkauskieliopin määrittelystä (1/4) [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? [27] Misc ::= Comment PI S [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' [24] VersionInfo ::= S 'version' Eq ("'" VersionNum "'" '"' VersionNum '"') [80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' "'" EncName "'" ) [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] '-')* /* Encoding name contains only Latin characters */ [32] SDDecl ::= S 'standalone' Eq (("'" ('yes' 'no') "'") ('"' ('yes' 'no') '"')) [ VC: Standalone Document Declaration ] Huomautuksia: - XML-esittely (tai julistus), dokumentin tyyppiesittely (tai julistus) - mikäli merkkikoodausta (encoding) ei ilmoiteta, oletetaan UTF-8 (prosessorit tukevan ainakin UTF-8 ja UTF-16, Suomessa ISO-8859-1 toisinaan tarpeen) 105

è è è Merkkaus: XML protokollana 5.15 XML-merkkauskieliopin määrittelystä (2/4) Elementeillä on siis aina nimi (itse asiassa elementin tyypin nimi (generic identifier, GI)) ja saman nimen on tietenkin esiinnyttävä sekä elementin alkuettä lopputageissa: [39] element ::= EmptyElemTag STag content ETag [ WFC: Element Type Match ] [ VC: Element Valid ] [40] STag ::= '<' Name (S Attribute)* S? '>' [ WFC: Unique Att Spec ] [42] ETag ::= '</' Name S? '>' Tyhjän elementin tagi on hyvin samanlainen kuin elementin alkutagikin: [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>' [ WFC: Unique Att Spec ] Tyhjän elementin saa siis kirjoittaa myös alku- ja lopputagien avulla (tällöin tagien väliin ei saa jäädä edes tyhjämerkkiä): 106

è è è Merkkaus: XML protokollana 5.16 XML-merkkauskieliopin määrittelystä (3/4) Attribuuttien nimet määräytyvät kuten elementeillä, rakennekin on tuttu: [41] Attribute ::= Name Eq AttValue [ VC: Attribute Value Type ] [ WFC: No External Entity References ] [ WFC: No < in Attribute Values ] Attribuutin arvon sijoitusoperaattorina toimii tuttuun tapaan yhtäsuuruusmerkki [25] Eq ::= S? '=' S? XML-dokumenteissa elementeille voidaan pakottaa attribuutteja, antaa näille oletusarvoja sekä kiinnittää attribuuttien arvoalueita 107

è è è Merkkaus: XML protokollana 5.17 XML-merkkauskieliopin määrittelystä (4/4) Entiteetti- ja merkkiviittaukset määritelty odotetusti (lt, gt, amp, apos, quot): [67] Reference ::= EntityRef CharRef [68] EntityRef ::= '&' Name ';' [ WFC: Entity Declared ] [ VC: Entity Declared ] [ WFC: Parsed Entity ] [ WFC: No Recursion ] [66] CharRef ::= '&#' [0-9]+ ';' '&#x' [0-9a-fA-F]+ ';' [ WFC: Legal Character ] Merkkidatalohkot, prosessointiohjeet ja kommentit samoin... [18] CDSect ::= CDStart CData CDEnd [19] CDStart ::= '<![CDATA[' [20] CData ::= (Char* - (Char* ']]>' Char*)) [21] CDEnd ::= ']]>' [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>' [17] PITarget ::= Name - (('X' 'x') ('M' 'm') ('L' 'l')) [15] Comment ::= '<!--' ((Char - '-') ('-' (Char - '-')))* '-->' 108

è è è Merkkaus: XML protokollana 5.18 Tuttu esimerkki uudessa valossa ESITTELY ESIINTYMÄ <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE example SYSTEM "hellow.dtd"> <example> <title>hei maailma!</title> <content> <text>ensimmäinen XML-dokumentti</text> <author>nn</author> </content><date/> </example> example Elementtirakenne vs. "formaalin kielen sana" Huomioita: - esittelyosan tyyppi määrää title content "muotin" dokumentille - tyyppi saattaa pakottaa Hei text author attribuutteja joita ei ole merkattu Ensimmä NN esiintymäosaan - tyhjäsolmujen tulkinta tyypin mukaan (nyt ei merkitty kuvaan) date 109

è è è Merkkaus: XML protokollana 5.19 XML-dokumentti on hyvin muodostettu XML-dokumentti on siis määritelmänsä ansiosta aina hyvin muodostettu (well-formed, WF); spesifikaation mukaan tekstidokumentti on (hyvin muodostettu) XML-dokumentti, jos 1) se voidaan kokonaisuutena johtaa XML-kieliopin documentaksioomasta, 2) se toteuttaa kaikki XML-kieliopin yhteydessä asetetut WFC-rajoitteet JA 3) jokainen tekstientiteetti, johon dokumentissa viitataan, on hyvin muodostettu XML-dokumentti (voi olla, ei ole pakko) lisäksi validi (valid), jos se esittelee tyyppinsä ja toteuttaa tyypin (VC-rajoitteet) - tyyppimäärittelystä voi siis olla hyötyä, vaikka validiuteen ei pyrittäisikään (entiteetit ja attribuuttien pakottaminen) Huomaa termit: esim. "väärin muodostettua XML-dokumenttia" ei siis ole olemassa (se on vain esim. "tekstidokumentti") 110

è è è Merkkaus: XML protokollana 5.20 Huomautuksia jäsentimistä ja prosessoreista Käytännössä XML-dokumentin kirjoitusprosessissa tai tiedonsiirrossa saattaa tapahtua virhe, eikä lopputuloksena olekaan (WF) XML-dokumentti Tyypillinen XML-jäsennin toimii kuten ohjelmointikielen kääntäjä ja ilmoittaa havaitut syntaksivirheet - virheilmoitukset saadaan esim. tekstimuotoisena muodossa "virheen kuvaus, rivi, sarake, korjausehdotus" - paitsi ihmislukijalle, jäsentimen tulostus voidaan ohjata myös XMLsovellukselle (jäsennintä voidaan käyttää myös jonkin ohjelmointirajapinnan läpi) Erilaisia jäsentimiä on todella paljon (komentorivi, sulautettu, API, Web,...); kurssin kontekstissa hyviä ovat esim. Xerces ja RXP Yksiä ja samoja jäsentimiä kierrätetään eri ohjelmointiympäristöissä (esim. C-kielisen expatin käyttö PHP:ssä, Perlissä, Pythonissa jne.) XML-versioiden "1.0" ja "1.1" erot eivät yleensä merkittäviä, mutta todellisia 111