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
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
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
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
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
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
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
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
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
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
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
4.11 Siinäkö kaikki? Ei suinkaan, vrt. Web-standardipino 81
4.12 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... 82
4.13 XML-perheen keskeisiä suosituksia XML 1.0 (1.1) (*) - merkkauskielioppi, DTD-mää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]) 83
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
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öä - käsittelyn "hitautta" (ja 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
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
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
4.18 Esimerkki "WYSIWYG-editoinnista": Oxygen 88
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
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