KOULUTUSMATERIAALI 20.2.2003
Ossi Nykänen (ossi@w3.org)
W3C Suomen toimisto
Tiivistelmä. XML-peruskurssi esittelee XML:n perusidean, luonnehtii yksinkertaisia XML-sovelluksia, käy läpi XML-merkkauksen, esittelee dokumentin tyyppimäärittelyn ja XML-nimiavaruudet, sekä pohjustaa XSL-muunnosten opiskelua. Koulutusmateriaali ei pyri määrittelemään XML:ää vaan yrittää kertoa siitä. Kurssin lähestymistapa aiheeseen on luonteeltaan tekninen.
Tämä XML-peruskurssi löytyy verkosta (kalvosarjan tapaisiin osiin jaettuna) osoitteesta http://www.w3c.tut.fi/ training/2003/0219-xml-1/index.html. Kurssimateriaalin lineaarinen versio löytyy osoitteesta http://www.w3c.tut.fi/ training/2003/0219-xml-1/single.html (tulostettuna ei sisällä aivan kaikkia esimerkkejä.)
Kurssin asiasisältöä on viimeksi päivitetty 3.3.2003 (ON). Pikkuvirheitä on korjattu 7.4.2003 (ON).
XML on tapa merkata tekstidokumentteja. XML on metakieli. XML on tapa integroida tietoa ja sovelluksia. XML on eri merkkauskielten, Semanttisen Webin ja saavutettavuuden selkäranka. XML tarjoaa yhtenäisen rajapinnan kaikkeen tietoon. XML on tekninen kehys yhteensopivien ja hyvien teknisten ratkaisujen tekemiseen. XML on universaali tapa käsitellä tietoa.
XML-peruskurssin tarkoituksena on kertoa mistä XML:ssä oikeastaan on kyse.
Sisällysluettelo
1.
Esipuhe
2.
Johdanto
3.
XML-sovelluksia
4.
XML-merkkaus
5.
Dokumenttien looginen ja fyysinen rakenne
6.
Nimiavaruudet
7.
XML ja tyylit
8.
Yhteenveto
XML is the ASCII of the 21st century
--Tim Bray
...ja vähän enemmänkin.
XML-peruskurssin verkkoaineistoa saa vapaasti käyttää sellaisenaan ja kokonaisuudessaan. Aineistoon voi kohdistaa linkkejä omasta aineistostaan (esim. verkkosivuilta) hyvien tapojen mukaisesti. XML-peruskurssin aineiston kaikenlainen muuntelu, yhdistely tai kopioiminen osittain tai myyminen on kuitenkin ehdottomasti kiellettyä. W3C Suomen toimisto ei vastaa mahdollisista virheistä. Mikäli käytät XML-peruskurssia osana opetustasi, ilmoita siitä osoitteeseen w3c@cs.tut.fi. (Erillinen ilmoitus jokaisesta pidetystä opintojaksosta tai kurssista.)
Kaikki palaute peruskurssien kehittämiseksi on tervetullutta. Palautetta voi myös lähettää osoitteella w3c@cs.tut.fi.
XML-peruskurssilla tutustutaan esimerkkien kautta XML:n perusteisiin ja kuvailevan merkkauksen ideaan. Kurssilla tarkastellaan yksinkertaisia XML-sovelluksia, opitaan XML-merkkaus, käydään läpi dokumenttien tyyppimäärittelyn ja nimiavaruuksien perusteet ja tarkastellaan XSL-tyylejä "ensimmäisenä opittavana uutena ja hyödyllisenä XML-sovelluksena". Perustietoina oletetaan tietotekniikan perustiedot ja auttava HTML:n tuntemus.
Kurssilla ei niinkään syvennytä yksittäisten XML-ohjelmistojen käyttöön, vaan tarkastellaan XML:ää yleisenä menetelmänä. Esimerkkeinä käytetään lähinnä ilmaisohjelmia ja tavalla tai toisella visuaalisia sovelluksia (koska niiden kautta asiaan pääse helpoimmin sisälle). Merkkauksen oppimismielessä dokumentit kirjoitetaan "käsin". Laajamittaisessa tuotantokäytössä esim. XML:n tekninen kirjoittaminen lienee kuitenkin soveliasta integroida osaksi jonkin tietyn dokumenttien hallintajärjestelmän käyttöä. Tämäkään ei ole kaikissa sovelluksissa tarpeen; huomattava osa XML-tekstistä on puhtaasti ohjelmien tuottamaa.
Kurssin onnistuminen perustuu pitkälti opiskelijan omaan aktiivisuuteen. Oppimisen kannalta ensiarvoisen tärkeää on esitettyjen asioiden kokeileminen ja tehtävien oma-aloitteiden ja huolellinen tekeminen. Tie todelliseen osaaminen syntyy siitä kun yrittää suhteuttaa ja soveltaa oppimaansa omassa työssään tai harrastuksessaan. XML-peruskurssi ei missään tapauksessa käy läpi "koko XML:ää" (ei edes XML 1.0 -suositusta). Kurssisisältö on valittu ja rajattu laajuuteensa allekirjoittaneen opetuksesta ja sovellusten parissa työskentelystä saatujen kokemusten perusteella. Selkeimmin "poisjätetty" asia on XML-sovellusten ohjelmointi esim. DOM-rajapintaa käyttämällä.
Tunneiksi muutettuna XML-peruskurssi on suunniteltu vastaamaan n. yhden päivin mittaista varsin tiivistä koulutuskokonaisuutta. Sisällön omaksuminen edellyttää käytännössä asiaa selventävien lisäesimerkkien ja osallistujien kysymysten käsittelyä koulutuksen osana. Osallistujien valmiuksien mukaisesti tuntimäärää voidaan kuitenkin tästä supistaa (tai asiasisältöä laajentaa). Kurssia ei ole ensisijaisesti tarkoitettu itseopiskeluun, joskin sitä voi käyttää myös sellaiseen. Kurssimateriaali sijoittuu narrattiivisen tekstin ja esityskalvojen välimaastoon. Tarkastelun tarkkuus ja esitystapa ovat teknisen kohdeyleisön löyhän rajauksen takia varsin "käytännönläheisiä" (sikäli kun tietokonekieliin liittyvät asiat nyt voivat käytännönläheisiä olla).
Lopuksi on syytä todeta, että XML-peruskurssi on pohjimmiltaan pienten mutta tärkeiden teknisten yksityiskohtien parissa työskentelyä. Tarkoituksena on nyt ensisijaisesti oppia peruskäsitteiden käytön ohella merkkaamaan XML-dokumentteja ja saada tuntumaa XML-sovelluksiin. Tuotantokäytössä XML-merkkaus on kuitenkin lähes poikkeuksetta "vain" tapa koodata tietorakenteita (keino ns. sarjallistaa tietoa) -- tällöin suunnittelukäsitteet asetetaan dokumenttien loogisen rakenteen ja erilaisten rajapintojen tasolle (muuten yksityiskohdat vievät päähuomion itse asian tekemiseltä). Toki yksityiskohtienkin täytyy tällöinkin olla hallussa.
XML-peruskurssin tavoitteena on yleiskatsaus XML-perusteisiin ja merkkauksen opettelu. Edistyneempi XML-osaaminen edellyttää myös sen sovellusten tuntemusta.
Kaiken tietojenkäsittelyn perusta on sopimus tekstimuotoisen tiedon esittämisestä. XML eli Extensible Markup Language on sekä konkreettinen menetelmä rakenteisten dokumenttien kirjoittamiseen (ja merkkaamiseen) että metakieli, jonka avulla voidaan määritellä merkkauskieliä. XML mahdollistaa myös valitun merkkauskielten laajentamisen ja eri merkkauskielten yhdistämisen (jos ko. merkkauskielten sovellusten suunnittelu sen sallii).
XML-kielen spesifikaatiot ja XML:n avulla määritellyt merkkauskielet (joita voidaan kutsua myös XML-sovelluksiksi) muodostavat pinomaisen määrittelyrakenteen:
| XHTML | SVG | ... |
| XML | XML NS | XML Schema |
| Unicode | URI | |
Metakielellä tarkoitetaan tässä yhteydessä kieltä joka tarjoaa perustan (perusmerkistön ja merkkauskieliopin) sovelluskohtaisten, "konkreettisten" kielten määrittelemiseksi. Konkreettisen kielen tärkeimmät osat ovat sanasto ja sen käyttöä ohjaava kielioppi.
Tekstin merkkaamisella tarkoitetaan tässä yhteydessä sitä että tekstin sekaan liitetään tekstiä kuvailevaa informaatiota. Esimerkiksi
Kuulakisan kolme parasta 21.6.2002 olivat:
Tuula 8,1
Maija 7,2
Liisa 7
...voidaan tulkitsemisen helpottamiseksi kirjoittaa muodossa:
<ilmoitus xml:lang="fi">
<otsikko>
Kuulakisan kolme parasta <pvm>21.6.2002</pvm> olivat:
</otsikko>
<tulokset>
<nimi>Tuula</nimi> <tulos yksikkö="metri">8,1</tulos>
<nimi>Maija</nimi> <tulos yksikkö="metri">7,2</tulos>
<nimi>Liisa</nimi> <tulos yksikkö="metri">7</tulos>
</tulokset>
</ilmoitus>
Esimerkissä merkkaus paitsi jäsensi tekstin koneellisesti luettavissa olevaan muotoon (tekstin eri osien erottelu), myös lisäsi informaatiota tekstin sekaan (teksti on kirjoitettu suomen kielellä ja pituuden yksikkö on "metri"). Ihminen saattaisi arvata em. lisätiedot oikein mutta tietokone ei -- merkkaus esittää tämän tiedon täsmällisesti (elementit ja attribuutit). (Kun esimerkkiin vielä lisätään tieto käytetystä merkistöstä ja merkkikoodauksesta, on kaikki tarvittava tieto saatavilla.)
Merkkaaminen suoritetaan poikkeuksetta tietojenkäsittelyn ja "tietokoneiden" näkökulmasta.
Merkkauskieliin liittyy keskeisesti kaksi peruskäsitettä: kielioppi ja sanasto.
Edellisessä esimerkissä XML:n merkkauskielioppi määrittelee säännöt
joiden ansiosta tekstisisältö
ja sitä kuvaileva merkkaus ei koskaan mene sekaisin (esim. <nimi> merkkaa
nimi-tyyppisen tekstilohkon alkukohdan ja </nimi> sen loppukohdan --
kokonaisuus, jota XML-terminologiassa kutsutaan
elementiksi).
Merkkauskielioppi on kaikille XML-sovelluksille yhteinen.
Merkkauksessa käytetty sanasto
sen sijaan on sovelluskohtainen.
Sanasto sisältää kaikki merkkauksessa käytetyt nimet
(edellisessä esimerkissä nimet
ilmoitus,
xml:lang,
otsikko,
pvm,
tulokset,
nimi ja
tulos).
Sanaston käyttöä rajoittaa sanaston kielioppi jonka määrittelemiseen
XML:stä löytyy lisävälineistöä.
Sanaston tulkinnan (mitä yksittäiset sanat
loppujen lopuksi tarkoittavat tai miten niiden välittämä
informaatio pitää prosessoida) asettamiseen
tarvitaan vielä erillinen,
sovelluskohtainen sopimus, esim. suomen kielellä kirjoitettu määrittelydokumentti.
XML on kehitetty SGML-kielen pohjalta (Standard Generalized Markup Language). XML:ää voi kuitenkin mainiosti soveltaa ilman minkäänlaista SGML-tuntemusta.
Merkkauskielioppi on kaikille XML-sovelluksille yksi ja sama. Kukin sovellus määrittelee oman sanastonsa (tai yhdistelee useita sanastoja).
Kielioppien ja sanaston erottelu on tärkeä rajanveto XML:ssä. XML-prosessorin tehtävä on lukea ja jäsentää XML-dokumentti sekä tarkistaa sen kielioppi. Sovellus puolestaa tulkitsee tämän tiedon ja esim. näyttää "lähdedokumenttia" vastaavan WWW-sivun:
| XML-prosessori lähdedokumentti |
jäsennys standardi rajapinta |
XML-sovellus käyttö |
XML:n suuri merkitys tietojenkäsittelyssä perustuu siihen, että se tarjoaa yhtenäisen perustan erilaisten tietorakenteiden käsittelyyn ja tallentamiseen tekstimuotoisena -- yksi ja sama XML-prosessori periaatteessa riittää kaikkien sovellusten tarpeisiin. Käytännössä XML luo tekniset edellytykset erityyppisten sovellusten yhteensopivuudelle ja vähentää samalla turhaa työtä.
Eräs XML:n käyttökelpoisuuden syistä on selkeän työnjaon osoittaminen erilaisten tietojenkäsittelytehtävien välillä. XML-prosessorin ja XML-sovelluksen erottaminen toisistaan on tästä hyvä esimerkki.
Merkkaus on hyvä tietojenkäsittelyn lähtökohta, mutta yksin merkkauksella ei vielä pitkälle pötkitä. XML on kokonainen perhe tekniikoita joista tällä XML-peruskurssilla käsitellään vain pientä osaa. XML-perhe tarjoaa välineitä mm.
Näiden perusratkaisujen varaan voidaan edelleen rakentaa esim. hypertekstin, vektorigrafiikan ja matematiikan merkkauskieliä (HTML, SVG ja MathML), rakentaa toisen sukupolven Semanttinen Web (RDF-perhe, OWL), laatia suosituksia dokumenttien salauksen ja kryptauksen suorittamiseen (XML Signature, XML Encryption), standardoida hajautettujen ohjelmistojen välistä viestiliikennettä (SOAP ja WSDL), sekä koota välineistöä monikanavajulkaisemisen tarpeisiin (Style, CC/PP, VoiceXML). Uusia XML-sovelluksia voi kehittää kuka tahansa. Sovellusten tekemiseen liittyy yleensä myös dokumentointi- ja ohjelmointityötä (esim. hypertekstin merkkauskielestä ei olisi hyötyä ellei olisi sitä noudattavia selain- ja palvelinohjelmia).
Kaikkien XML:ää hyödyntävien ei tarvitse osata teknistä XML:ää. Sovelluksissa XML piiloutuu käyttöliittymien ja tiedostojärjestelmien suunnitteluratkaisujen taakse, eikä ns. loppukäyttäjä esim. XML-merkkausta juurikaan tule lukemaan; useimmat meistä käyttävätkin jatkuvasti esim. SMTP- ja HTTP-protokollien (sähköposti ja WWW-hyperteksti) varaan rakennettuja sovelluksia näiden tekniikkaa juuri ajattelematta.
Sovelluskehittäjät, tekniset kirjoittajat ja tietoteknisten välineiden suunnittelijat todennäköisesti kuitenkin tarvitsevat XML:ää omassa työssään. XML:ää voi kuitenkin hyvin soveltaa ilman koko XML-perheen tuntemusta: useimmille riittää perusteiden tuntemus joka luo perustan uuden oppimiselle. Tämä on XML-peruskurssin tavoite.
XML on kokonainen perhe standardinomaisia teknologioita. XML-merkkaus on vain jäävuoren huippu.
XML-perhe on joukko W3C-suosituksia. Käytännössä XML:n määrittävät spesifikaatiot ovat W3C:n kehittämiä, julkisia, yksityiskohtaisia ja täsmällisiä, englannin kielisiä kuvauksia joiden varassa XML-yhteensopivien tietokoneohjelmistojen tarkka toteuttaminen on mahdollista. Erityisesti tämä tarkoittaa sitä että jos ja kun haluaa tietää mitä se-ja-se XML-suositus tarkkaan ottaen sisältää, ainoa virallinen tietolähde on ko. tekninen suositus itse.
Koulutusmateriaalit ja kirjat tiivistävät XML-spesifikaatioiden tietoa ja kytkevät sen sovelluksiin; ne eivät kuitenkaan koskaan riitä tyhjentävästi selittämään (ts. korvaamaan) varsinaisia teknisiä spesifikaatioita. Koulutusmateriaalia kuitenkin tarvitaan, koska tekniset suositukset ovat yleensä (useista syistä johtuen) vaikeampilukuisia kuin asioista "epämääräisemmin" tai "esimerkkien kautta" kertovat johdannot.
World Wide Web Consortium (W3C) kehittää yhteisiä ja yhteensopivia Webin pelisääntöjä ja teknologioita (spesifikaatioita, ohjeita, ohjelmistoja sekä työkaluja). Työn tavoitteena on ohjata Webin kehittymistä täyteen mittaansa tiedonvälityksen, kaupankäynnin, kommunikaation ja yhteisymmärryksen foorumina. W3C ja W3C Suomen toimisto eivät siis ole koulutusorganisaatioita, vaan pikemminkin "standardointiorganisaatioita". W3C asettaa (teknisiä) suosituksia ja W3C-aluetoimistot tukevat W3C:n työtä ja suositusten tunnetuksi tekemistä. Tässä nimenomaisessa asiayhteydessä W3C Suomen toimisto tukee XML-työn edistämistä koulutustyöllä; tarjoamalla kurssimuotoisen, kevyen johdannon XML-maailmaan.
W3C Suomen toimiston XML-peruskurssiinkaan ei kuitenkaan tule suhtautua "normatiivisenä" XML-lähteenä, ts. kurssi ei pyri määrittelemään XML:ää, vaan kertoo siitä. Kurssimateriaali voi eri syistä johtuen sisältää myös epätäsmällistä tai suorastaan virheellistä tietoa (kaikki havaitut virheet tietenkin korjataan parhaan mukaan). Missään tapauksessa kyse ei ole W3C:n "ainoasta sertifioimasta XML-kurssista" (tällaista käytäntöä W3C:llä ei edes ole).
XML-peruskurssin virallisia lähteitä ovat W3C-suositukset, erityisesti:
Kaikki W3C-suositukset löytyvät W3C Suomen toimiston sivuilta kohdasta W3C-suositukset. Kaikki W3C:n julkaisemat spesifikaatiot löytyvät W3C:n kotisivuilta kohdasta W3C Technical Reports and Publications. Helppolukuinen johdannon W3C:hen ja sen toimintaan tarjoaa esim. W3C Pähkinänkuoressa.
W3C:n XML-spesifikaatiot ovat ainoa virallinen XML:n määrittelevä lähde. Koulutusmateriaali ja kirjallisuus on suunniteltu välittämään tätä tietoutta havainnollisesti erilaisten sovellusten yhteydessä.
Merkkaus, keskustelua:
Suurin osa XML:n käyttöä liittyy XML:ään jonkin tietyn sovelluksen osana. Seuraavaksi luodaan yleiskatsaus kolmeen erityyppiseen XML-sovellukseen, HTML, SVG ja SOAP. Kukin esimerkki pyrkii havainnollistamaan jotakin tiettyä XML:n piirrettä. Luettelo ei missään tapauksessa ole kattava lista XML-sovelluksia! (Lisää linkkejä sovelluksiin löytyy esim. XML-kotisivuilta.)
XML on lähes täysin sovellusriippumaton teknologia. XML:ää voidaan käyttää ilman ajatusta "dokumentin katselemisesta" (esim. tietokoneohjelman konfigurointitiedosto tai XML-viesti) tai edes "tekstitiedostoon tallettamisesta" (abstraktin tietorakenteen käsittely DOM-rajapinnalla).
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Anteron kotisivu</title>
</head>
<body>
<h1>Moi maailma!</h1>
<p>Sivu noudattaa
<a href="http://www.w3.org">W3C</a>-suosituksia.</p>
</body>
</html>
W3C-suosituksen mukainen WWW-sivu on XHTML-tyyppinen XML-dokumentti.
<?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">
<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
xmlns="http://www.w3.org/2000/svg" version="1.1">
<ellipse cx="600" cy="200" rx="550" ry="175"
fill="yellow" stroke="blue" stroke-width="20"/>
<rect x="1" y="1" width="1198" height="398"
fill="none" stroke="blue" stroke-width="2" />
<polygon fill="red" stroke="blue" stroke-width="10"
points="350,75 379,161 469,161 397,215
423,301 350,250 277,301 303,215
231,161 321,161" />
<polygon fill="lime" stroke="blue" stroke-width="10"
points="850,75 958,137.5 958,262.5
850,325 742,262.6 742,137.5" />
<text x="470" y="240" font-size="70">Tekstiä</text>
</svg>
W3C-suosituksen mukainen SVG-kuva on SVG-tyyppinen XML-dokumentti (tai dokumentin osa).
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:GetLastTradePrice xmlns:m="http://example.org/trade">
<m:id>DIS</m:id>
</m:GetLastTradePrice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
GetLastTradePrice tarkoittaa,
abstraktin kehyksen kuvauksen kertoo
Simple Object Access Protocol (SOAP) 1.1
XML:n käyttöön ei tarvitse liittyä ajatusta "dokumentista joka luetaan" -- kyse voi olla myös "viestistä" tai "tietorakenteesta".
XML-sovellukset, keskustelua:
Tieto dokumentin tyypistä on edellytys sen tulkitsemiselle -- mekaaninen keino tarkistaa dokumentin tyyppi on validoida dokumentti:
esim.html ja
validoi se W3C:n
validaattoripalvelun avulla.
XML-sovellukset yleisesti:
XML:n perusta on XML 1.0 -suosituksen määrittelemä merkkauskielioppi. Merkkauskielioppi ensisijaisesti jakaa XML-dokumentin tekstisisällön kahteen osaan: merkkaukseen ja merkkidataan:
<osoite kaupunki="Tampere"> <!-- merkkausta --> Puistokatu 102 <!-- merkkidataa --> </osoite> <!-- merkkausta -->
Muistutetaan vielä, että XML-merkkauskielioppi ei määrittele sanastoa (ts. nimiä joita merkkauksessa käytetään). Sanasto määritellään (paria poikkeusta lukuun ottamatta) sovelluskohtaisesti (vrt. esim. XML:n varassa määritely XHTML-sovellus).
XML-dokumentin merkkaus on jotakin seuraavista
Näitä tarkastellaan seuraavaksi yksityiskohtaisemmin.
Todettakoon että kaikkia merkkausrakenteita ei XML-peruskurssilla käydä yksityiskohtaisesti läpi. Käytännössä perusmerkkausta täydennetään vielä nimiavaruuksiin liittyvällä merkkauskieliopilla (tämä on määritelty W3C-suosituksessa Namespaces in XML). Tähän palataan myöhemmin.
1. XML-dokumentti
1.1 dokumentin esittelyosa
1.1.1 valinnainen XML-julistus (merkistö!)
<?xml version="1.0" encoding="iso-8859-1"?>
1.1.2 valinnainen dokumentin
tyyppijulistus (sisältäen
tyyppimäärityksen)
<!DOCTYPE esimerkki [
<!ELEMENT esimerkki (tervehdys)>
<!ATTLIST esimerkki kuvaus CDATA #IMPLIED>
<!ELEMENT tervehdys (#PCDATA)>
]>
1.2 dokumentin esiintymäosa
1.2.1 juurielementti ja sen
sisältö
<esimerkki kuvaus="pakollinen">
<tervehdys>Hei maailma!</tervehdys>
</esimerkki>
<tervehdys>Hei maailma!</tervehdys>
(merkattu alkutagin ja
lopputagin avulla)
<esimerkki kuvaus="pakollinen"> (tässä attribuutin arvo on
merkkijono pakollinen)
XML-merkkauksen perusta on hierakkinen elementtirakenne. Attribuutit liittyvät elementtien alkutagiin (tai tyhjän elementin tagiin). Dokumentin tekstisisällön käsittävä esiintymäosa on XML-dokumentin ainoa pakollinen osa (juurielementti).
<?xml version="1.0"?>
<osallistujat> <!-- alkutagi -->
...
</osallistujat> <!-- lopputagi -->
<?xml version="1.0" encoding="utf-8"?>
<osallistujat>
<nimike nimi="Matti" sposti="matti@x.fi">Pjoht</nimike>
<nimike sposti="ville@x.fi" nimi="Ville">Siht</nimike>
<nimike nimi="Kaisa" sposti='kaisa@x.fi' />
<nimike nimi="Kalle" /> <!-- tyhjän elementin tagi -->
</osallistujat>
Merkistön koodauksen tulee olla oikea. Elementit ovat aidosti sisäkkäisiä. Alku- ja lopputagi esiintyvät aina pareittain. Attribuuttien keskinäisellä järjestyksellä ei ole merkitystä.
Merkkauksen perusteet:
merk.xml ja
merkkaa se käyttäen HTML:stä tuttuja
html,
body,
h1,
p,
em ja
img
-elementtejä.
<?xml version="1.0" encoding="iso-8859-1"?> Tämä on otsikko Tekstikappaleen sisällä voi tekstiä esim. korostaa! Toisen kappaleen sisältö on pelkkää täytettä. Lisätään koristeeksi vielä kuva jalkapallosta (pallo.png).
<?xml version="1.0"?>
<esimerkki>
Hyvää
& <!-- entiteettiviittaus -->
päivää <!-- merkkiviittaus -->
<!-- ON 2003 --> <!-- kommentti ;-) -->
</esimerkki>
Viittaukset tuovat dokumenttin merkkejä tai tekstiä. <-merkki on dokumentissa aina osa merkkausta (paitsi merkkidatalohkon sisällä...)!
<?xml version="1.0"?>
<!-- prosessointiohje: -->
<?xml-stylesheet type="text/css" href="mystyle.css"?>
<esimerkki>
<otsikko>Tyyli määrittää ulkoasun</otsikko>
<!-- merkkidatalohko: -->
<![CDATA[
Merkkidatalohkossa <- ja &-merkkejä ei tarvitse
koodata. ]]>
</esimerkki>
Prosessointiohjeen sisäinen rakenne on merkkijono; tulkinta on sovelluksen tehtävä. Merkkidatalohko ei sisällä merkkausta.
xml:space:
<esimerkki xml:space="default">
Välilyöntien, tabulointimerkkien ja
rivinvaihtojen kohtalon päättää sovellus.
</esimerkki>
<esimerkki xml:space="preserve"> Oletuksena tyhjämerkit ovat merkitseviä. </esimerkki>
Ellei sovellus toisin päätä, tyhjämerkit ovat oletuksena merkitseviä XML:ssä.
xml:lang:
<esimerkki xml:lang="fi"> Tämä teksti on kirjoitettu suomeksi. </esimerkki>
XML-dokumentti voi ilmoittaa mitä (luonnollista) kieltä käyttäen dokumentti on kirjoitettu.
<html lang="fi"> <head><title>Esim</title></head> <body><p>Moi!</p></body> </html>
Dokumentin jäsentäminen on sen käsittelyn perusehto.
Merkkauksesta on hyötyä vain jos merkkauskielioppia noudatetaan. Helpoin tapa merkkauksen testaamiseen on kokeilla dokumenttia turvallisessa sovelluksessa: XML-suosituksen mukaan XML-prosessorin on keskeytettävä dokumentin käsittely jos se törmää peruuttamattomaan virheeseen (jos lähdedokumentti ei esim. noudata merkkauskielioppia). Seuraavissa tehtävissä on tarkoitus käyttää jotakin XML-tuen tarjoavaa selainohjelmaa, esim. Internet Explorer 5 -selainta tai uudempaa.
Dokumentin tyyppitiedon merkitys XML-dokumentin tulkinnassa:
puu.html. Kokeile katsoa XML-dokumenttia selaimessa.
puu.xml. Kokeile katsoa XML-dokumenttia selaimessa.
Näyttääkö samalta?
Huomaa että puu.html ei ole HTML-tyyppinen dokumentti.
(Miksi?)
Merkistövirheet:
p sisään teksti
"Minä kirjoitin tämän" (tiedostoon puu.xml). Kokeile selaimessa.
Miten kävi? (Osaatko korjata...?)
puu.html kanssa. Jos lopputulos oli
erilainen, osaatko
selittää miksi?
Merkkausvirheet:
p lopputagi tiedostosta puu.xml.
Kokeile selaimessa.
puu.html kanssa. Jos lopputulos oli
erilainen, osaatko
selittää miksi?
Merkkausrakenteet:
puu.xml -dokumentissa.
Muistitko kaikki?
TAUKO!
Seuraavaksi tutustumme dokumentin jäsennyspuun merkitykseen XML-sovelluksissa. Hauskan sovelluksen aiheesta tarjoaa XML-dokumentin ulkoasun määrittely CSS-tyylien avulla. (CSS:stäkin riittäisi opiskeltavaa yhden koulutuksen tarpeiksi, mutta nyt vedetään mutkat suoriksi jotta päästään kokeilemaan XML:ää...)
puu.xml -dokumenttisi alkuun (heti
XML-julistusta seuraavalle riville) ja luo uusi tiedosto
puu.css (samaan hakemistoon muiden tiedostojen kanssa).
Kopioi css-tiedostoon prosessointiohjetta seuraava koodinpätkä.
Kokeile katsoa dokumenttia puu.xml selaimessa.
<?xml-stylesheet type="text/css" href="puu.css"?>
body {
display: block;
background: rgb(255,255,0);
border-bottom: 5px solid blue;
}
p {
display: block; /* voisi olla myös esim.
inline, inherit tai none */
color: red;
font-size: 30px;
}
Esimerkissä käytetty tyylikieli on nimeltään
Cascading Style Sheets. CSS sopii mainiosti myös HTML-käyttöön. XML-prosessointiohjeen
xml-stylesheet
vastine XHTML-kielessä on elementin link käyttäminen:
<link rel="stylesheet" type="text/css" href="puu.css" />
font-family),
eri värejä (esim. color ja background) sekä erilaisia reunuksia
(esim. margin).
CSS-sääntöjen vaikutusalue (ts. se osa dokumenttia johon asetetut ominaisuudet vaikuttavat) määritellään valitsimien avulla. CSS2 määrittelee seuraavissa esimerkeissä esiintyvät valitsimet (joista osa sopii vain esim. HTML-käyttöön):
p { color: blue; } /* tyyppivalitsin */
* { color: blue; } /* universaalivalitsin */
p div { color: blue;} /* jälkeläisvalitsin */
p > div { color: blue;} /* lapsivalitsin */
p + table { color: blue;} /* sisarvalitsin */
p[title="esimerkki"] { color: blue;} /* attribuuttivalitsin */
pre.koodi { color: blue;} /* luokkavalitsin */
h1#luku1 { color: blue;} /* ID-valitsin */
Edellisten lisäksi CSS2 määrittelee vielä erilaisia pseudovalitsimia. (Ikävä kyllä kaikki nykyselaimet eivät toteuta CSS2:a kokonaisuudessaan, esim. sisarvalitsin ei välttämättä toimi.)
CSS:n sovellusala:
CSS-tyylit sisältävät tiettyjä rajoituksia (mitä?). "Vaativampaan käyttöön" XML-perhe tarjoaa XSL-tyylit; aiheeseen palataan tuonnempana...
XML-dokumentin loogisella rakenteella tarkoitetaan dokumentin jäsennystä sen sanaston käytön suhteen. Tällöin jäsennyspuuhun otetaan erityisesti mukaan elementtien ja attribuuttien tuottamat solmut, mutta esim. merkkiviittauksen tulos tulkitaan osaksi elementin tai attribuutin merkkidatasisältöä.
Kun vielä muistetaan ettei attribuuttien järjestyksellä ole merkitystä, huomataan että esimerkiksi seuraavat kaksi XML-dokumenttia ovat tässä mielessä "samanlaisia":
<b><div>Kuva A1: <img src="a1.png" alt="Jalkapallo"/></div></b>
<!-- versio 2: --> <b><div>Kuva A1: <img alt="Jalkapallo" src="a1.png" /></div></b>
Molempien dokumenttien (loogisen rakenteen) jäsennyspuuksi tulee:
Jäsennyspuu tarjoaa hyvän välineen dokumentin tyypin määrittämiseen -- kuten esim. XHTML- ja SVG-esimerkeistä todettiin, XML-dokumentin käsittely edellyttää tietoa dokumentin tyypistä.
XML-dokumentin fyysisellä rakenteella puolestaan tarkoitetaan dokumentin talletusrakennetta esim. tiedostoina. Yksi ja sama looginen dokumentti voidaan jakaa useilla eri tavoin fyysisiin osiin.
Edellisen valossa XML-dokumentin tyyppi muodostuu dokumentin sanastosta ja sanaston käyttöä ohjaavasta kieliopista. XML 1.0 -suosituksen mukaisesti dokumentin tyyppi määritellään dokumentin tyyppimäärityksen (Document Type Definition, DTD) avulla. (Dokumentin tyypin käsitettä voidaan yleistää -- tähän palataan nimiavaruuksien esittelyn yhteydessä.)
Dokumentin tyyppi mahdollistaa erilaisten sovellusten täsmällisen erottelun toisistaan. HTML-dokumentin täsmällisestä tyypistä sopiminen on perusedellytys esim. WWW-selainohjelmien yhteensopivuuden ja virheettömän toiminnan kannalta. Samantyyppiset dokumentit muodostavat dokumenttiluokan. Tämä ajattelutapa näkyy peruskäsitteistössäkin, esim. yksittäisen XHTML 1.0 Strict -tyyppisen dokumentin esiintymäosa voidaan tulkita ko. tyyppisten dokumenttien luokan esiintymäksi tai ilmentymäksi.
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE b [ <!ELEMENT b (div+)> <!ELEMENT div (#PCDATA|img)*> <!ELEMENT img EMPTY> <!ATTLIST img src CDATA #REQUIRED> <!ATTLIST img alt CDATA #IMPLIED> ]> <b> <div>Ks. kuva A1: <img src="a1.png" alt="Jalkapallo"/></div> </b>
Dokumentin tyyppimäärittely on DTD-kielen avulla määritelty muotti jota ko. tyyppisten dokumenttien esiintymäosan tulee noudattaa.
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE b SYSTEM "block.dtd"> <b> <div>Ei kuvaa ja kaksi div-elementtiä...</div> <div>...silti tyyppiä b!</div> </b>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
DTD:n voi jakaa osiin. Yleisesti tunnetuille tyyppimäärityksille on sovittu julkisia tunnisteita.
<!ELEMENT html (head,body)> <!-- elementtisisältöinen elementti -->
<html> <head><!-- ... --></head> <body><!-- ... --></body> </html>
<!ELEMENT p (#PCDATA|img)*> <!-- yhdistelmäsisältöinen elementti -->
<p>
Merkkidataa
<!-- ... -->
<img><!-- ... --></img>
<!-- ... -->
<img><!-- ... --></img>
<!-- ... -->
</p>
<!ELEMENT hr EMPTY> <!-- tyhjä elementti -->
<hr />
<!ELEMENT sulkeuma ANY> <!-- rajoitteeton elementti -->
<sulkeuma>
<!-- ... -->
<sulkeuma>
<!-- ... -->
</sulkeuma>
<!-- ... -->
</sulkeuma>
Elementin tyyppimäärittely osoittaa elementin sisäisen rakenteen.
<!ELEMENT chapt (h1,sect+,refs?)> <!ELEMENT sect (h2,(p|object)*,exercise*)> <!ELEMENT object (desc,(img|table))> <!-- ... -->
| A, B | B seuraa A:ta |
| A | B | A tai B (muttei molempia) |
| A? | A esiinty kerran tai ei ollenkaan |
| A+ | A esiintyy yhden tai useamman kerran |
| A* | A esiintyy yhden tai useamman kerran tai ei ollenkaan |
| (...) | osamallien ryhmittely |
Säännönmukaisten lausekkeiden käyttö mahdollistaa geneerisen elementtimäärittelyn.
Dokumentin kirjoittaminen:
esim.myhtml ja
täydennä se validiksi XML-dokumentiksi:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE myhtml [
<!ELEMENT myhtml (head,body)>
<!ELEMENT head (title)>
<!ELEMENT body (h1,p+,note?)>
<!ELEMENT p (#PCDATA|em)*>
<!ELEMENT title (#PCDATA)>
<!ELEMENT h1 (#PCDATA)>
<!ELEMENT em (#PCDATA)>
<!ELEMENT note (#PCDATA)>
]>
<myhtml>
<!-- ... -->
</myhtml>
Dokumentin tyypin tarkistaminen (eli validoiminen) on mekaanista ja virhealtista puuhaa joka yleisesti ottaen kannattaa jättää tietokoneiden tehtäväksi. Opiskelumielessä pienten dokumenttien validointi sujuu esim. STG:n on-line validaattorilla.
esim.myhtml
STG-validaattorin
avulla.
myhtml-tyyppisten dokumenttien esiintymäosa
voi vaihdella paitsi tekstisisällöltään, myös rakenteeltaan (tyyppimäärittelyn
puitteissa). Mieti millaisia muutoksia voisit dokumentin esiintymäosaan tehdä
(ts. millaisia myhtml-tyyppiset dokumentit ovat).
Kuten kenties huomasitkin, validointi sisältää aina myös merkkauskieliopin tarkistamisen (koska muuten dokumentin looginen jäsentäminen ei olisi edes mahdollista).
Dokumentin jäsennyspuuta voi käyttää myös tyypin suunnittelun visuaalisena apuvälineenä. Tällöin dokumentin tyyppimäärittely voidaan esittää puudiagrammin avulla jossa osamalleissa esiintyvät kertoja yms. notaatio on piirretty kaikki sovelluksen sanat esittävän puun yhteyteen.
<!ELEMENT img EMPTY> <!ATTLIST img src CDATA "notavailable.png">
<!ATTLIST img class (bitmap|vector) #REQUIRED> <!ATTLIST img style CDATA #IMPLIED> <!ATTLIST img id ID #REQUIRED> <!ATTLIST img editor CDATA #FIXED "ver-002">
<!ELEMENT a (#PCDATA)> <!ATTLIST a href IDREF #REQUIRED>
Attribuutin tyyppimäärittely liittää elementtiin attribuutin.
Merkkaajan näkökulmasta entiteettien tärkein sovellus XML-dokumentin pilkkominen osiin.
<!NOTATION png SYSTEM "Image/png"> <!ENTITY cover-pic SYSTEM "p1.png" NDATA png>
<!ENTITY % coreattrs
"id ID #IMPLIED
class CDATA #IMPLIED">
<!ATTLIST doc %coreattrs;
type (page|slide) #IMPLIED>
Muista entiteettityypeistä tärkein on parametrientiteetti, jonka avulla voidaan sieventää DTD:tä.
Dokumentin tyyppimäärittelyn kirjoittaminen.
id
määritellään ID-tyyppiseksi ja ref IDREF-tyyppiseksi.
Talleta dokumenttisi tiedostoon pipari.xml.
<?xml version="1.0" encoding="iso-8859-1"?>
<note>
<p>
<dfn id="p">Porkkana</dfn> on juures.
<dfn id="p">Pipari</dfn> on pikkuleipä.
</p>
<p>
Mieleni tekisi syödä vain pelkkiä
<link ref="p">pipareita</link>.
</p>
</note>
Tekstientiteettien käyttö.
loru.xml,
loru.dtd,
p1.xml,
p2.xml sekä
p3.xml) ja
toteuta toistuva SATU-merkkijono tekstientiteetillä (lorussa esiintyvän
nimen muuttaminen):
<?xml version="1.0" encoding="iso-8859-1"?> <loru> <p>SATU meni saunaan, laittoi laukun naulaan.</p> <p>SATU tuli saunasta, otti laukun naulasta.</p> <p>SATU oppi XM-kieltä -- lorussa tässä ei mitään mieltä.</p> </loru>
Yhteinen merkkauskielioppi on XML:n perusta. Kuka tahansa voi kehittää XML-sovelluksia. Käytännössä XML:stä saadaan suurin hyöty eri sovelluksia yhdistelemällä. Mielekkäitä käyttötapauksia ovat esim.
Ilman yhteistä sopimusta eri sanastojen nimeämisestä, näissä kaikissa sovelluksissa olisi vaarana se, että (sattumalta) eri asiaa tarkoittavat mutta saman nimiset sanat menisivät sekaisin. Sanojen törmäysten välttämiseksi nimet sijoitellaan suunnitteluvaiheessa eri nimiavaruuksiin. Nimiavaruudet määrittelee suositus Namespaces in XML. Käytännössä nimiavaruuksien tulkinta täydentää XML 1.0 -suositusta XML-merkkauksen kiinteänä osana.
XML-nimiavaruus on yksikäsitteinen URI-merkkijono. Esim. XHTML-kielen nimiavaruudeksi
on valittu
http://www.w3.org/1999/xhtml.
Käsitteellisesti nimiavaruus
niputtaa eri sovellusten
sanastot "omiin pusseihinsa" minkä avulla eri sovellusten
saman nimiset sanat eivät mene sekaisin.
Nimiavaruuruden "osoittamasta paikasta" (jos käytetään esim. URL-merkkijonoa) ei tarvitse löytyä HTTP-palvelun mielessä yhtään mitään. Joskin voi löytyä -- vrt. XHTML-nimiavaruus edellä (kokeile!).
a on hieman erilainen
XHTML ja SVG-sanastoissa:
xml-alkuisille nimille nimiavaruuden
http://www.w3.org/XML/1998/namespace (jota ei dokumentissa enää erikseen
määritellä). Esimerkiksi attribuutit xmlns ja
xml:lang kuuluvat aina tähän nimiavaruuteen.
Nimiavaruudet lokeroivat eri sovellusten sanastot.
object
-elementin käyttöön (ks. lopputulos kuvana):
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>SVG-esimerkki</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>SVG-kuva:</h1>
<object data="pic.svg" width="200px" height="100px" type="image/svg+xml" />
</body></html>
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="200px" height="100px" viewBox="0 0 200 100" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<ellipse cx="100" cy="50" rx="90" ry="40" fill="red" /> </svg>
xmlns)
a käsittelevä esimerkki)
Jokaiselle sanastolle voidaan keksiä yksikäsitteinen nimiavaruus.
Esimerkiksi XHTML-sanaston nimiavaruus on http://www.w3.org/1999/xhtml
ja SVG-sanaston nimiavaruus on http://www.w3.org/2000/svg.
Eri sovellusten sanastoja yhdistellään näiden suunniteluratkaisujen
tarjoamissa puitteissa.
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="5cm" height="3cm" viewBox="0 0 5 3"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<rect x=".01" y=".01" width="4.98" height="2.98"
fill="none" stroke="blue" stroke-width=".03"/>
<a xlink:href="http://www.w3.org">
<ellipse cx="2.5" cy="1.5" rx="2" ry="1"
fill="red" /> </a>
</svg>
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink
xlink:href="http://www.w3.org"
Nimiavaruuden syntaksi on XML-attribuutin syntaksi (+ kaksoispisteen käyttö erotinmerkkinä); tulkinta rakentuu nimiavaruuksien erikseen määritellyn semantiikan varaan.
Nimiavaruuksien peruskäsitteet:
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fi">
<head>
<title>Esimerkki</title>
</head>
<body>
<h1>Jekku</h1>
<p>Helppo nakki.</p>
<p xml:lang="en">Piece of cake.</p>
</body>
</html>
Tällä XML-peruskurssilla toisen kunnon esimerkin sovelluksesta jossa nimiavaruuksia toden teolla tarvitaan, ovat XSL-muunnokset. (Ensimmäinen esimerkki oli SOAP.)
<!ELEMENT html (head,body)> <!ATTLIST html xmlns CDATA #REQUIRED> ... <html xmlns="http://www.w3.org/1999/xhtml"> ... </html>
int ja
boolean -datatyypit),
XML DTD ei ole ainoa tapa määritellä dokumentin tyyppi. XML Schema -tyyppimäärittely mahdollistaa myös nimiavaruudet huomioivan tyyppimäärittelyn.
Tyylien perusidea on erottaa dokumenttien tietosisältöä kuvaava rakenne dokumenttien esitystavasta. Esimerkiksi XML- tai HTML-dokumentin ulkoasu voidaan asettaa CSS-tyylin avulla. Tyylien käyttö tarjoaa mm. seuraavia merkittäviä etuja:
Edellisistä seuraa erityisesti että hyvin suunniteltu dokumentti voidaan ainakin periaatteessa esittää eri päätelaitteita ja eri medioita hyödyntäen (esim. paperi, pc, kämmenmikro ja puhe). Tyylit tarjoavat siten välineitä paitsi monikanavajulkaisemiseen ja dokumenttien ylläpitoon, myös esim. saavutettavan aineiston tuottamiseen (esim. tiputtamalla turhat kuvat pois kämmenmikroihin tarkoitetusta materiaalista tai lisäämällä tekstin kontrastia heikkonäköisille).
CSS ei ole ainoa XML-käyttöön sopiva tyylikieli. XML-perhe määrittelee XSL-tyylin (Ks. The Extensible Stylesheet Language (XSL)). XSL-tyylien määrittely koostuu käytännössä kolmesta osasta:
Tällä XML-peruskurssilla tutustutaan vain yleiskäyttöisiin XSL-muunnoksiin (ja varsin lyhyesti, esimerkkien kautta). Muunnosten avulla voidaan suorittaa myös muuta kuin dokumenttien esitystapaan liittyvää tietojenkäsittelyä, esim kuvata tietoa sanastosta toiseen.
CSS ja XSL soveltuvat erilaiseen käyttöön. Helposti omaksuttava CSS on esimerkki lähdedokumenttia päällystävästä tyylistä -- lähdedokumentin osille voidaan määritellä erilaisia formatointiominaisuuksia mutta dokumentin rakenteeseen ei ole juuri mahdollista vaikuttaa. XSL taasen on esimerkki muunnostyylistä -- tyylin avulla on paitsi mahdollista formatoida elementtejä, myös täysin muuttaa dokumentin rakennetta. XSL kuvaa CSS:ää monipuolisemmin myös esim. sivuntaittoon liittyviä käsitteitä.
(CSS:n osaamisesta on hyötyä myös konkreettista hyötyä XSL:ää käytettäessä; XSL esim. käyttää suoraan hyödykseen CSS-tyylien ominaisuuksia.)
XSL-muunnostyyli on kahden dokumentin jäsennyspuun välinen kuvaus.
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output
method="xml" indent="yes" encoding="iso-8859-1"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/memo">
<html xmlns="http://www.w3.org/1999/xhtml">
<head> <title><xsl:value-of select="title" /></title> </head>
<body> <xsl:apply-templates /> </body>
</html>
</xsl:template>
<xsl:template match="p">
<p xmlns="http://www.w3.org/1999/xhtml"><xsl:value-of select="." /></p>
</xsl:template>
<xsl:template match="*" />
</xsl:stylesheet>
xsl:template
/memo
xsl:template sisältö
xsl:value-of
Muunnostyylin suorituksessa säännöistä valitaan aina lähdepuun kontekstia parhaiten vastaava sääntö. Muunnoksen suoritus päättyy kun sovellettavaa sääntöä ei enää seuraa toinen sääntö.
child::para/descendant-or-self::node()/child::ulist/child::item[position()=1]
child, descendant,
parent, ancestor,
following-sibling,
preceding-sibling, following,
preceding, attribute,
namespace, self,
descendant-or-self,
ancestor-or-self
name, *,
text(), comment(),
processing-instruction(), node()
para//ulist/item[position()=1]
/html//p//a@href
Muunnosten hahmojen kielioppi perustuu XPath-lausekkeisiin.
<xsl:template match="item">
<a>
<xsl:choose>
<xsl:when test="@class='vihje'">
<xsl:attribute name="href">hint.html</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="href"><xsl:value-of select="@link" /></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="." />
</a>
</xsl:template>
xsl:template,
xsl:apply-templates,
xsl:call-template
xsl:stylesheet,
xsl:transform,
xsl:include,
xsl:import
xsl:value-of,
xsl:element,
xsl:attribute,
xsl:comment,
xsl:processing-instruction,
xsl:text
xsl:variable,
xsl:param,
xsl:with-param
xsl:copy,
xsl:copy-of,
xsl:if,
xsl:choose,
xsl:when,
xsl:otherwise,
xsl:for-each
xsl:sort,
xsl:number
xsl:output
XSL-muunnokset perustuvat funktionaalisen ohjelmoinnin periaatteeseen. XSL-komentojen avulla on kuitenkin mahdollista toteuttaa tutut lausekielisen ohjelmoinnin perusrakenteet.
Yleisessä tapauksessa muunnosten suorittaminen onnistuu luotettavimmin erillisten XSL-muunnosohjelmien avulla (ks. esim. Saxon tai Xalan).
muistio.html.
(Esim. Instant Saxon -ohjelmalla komentorivi olisi
saxon muistio.xml memo-html.xsl > test.html)
)
<?xml-stylesheet type="text/xsl" href="memo-html.xsl"?>
<?xml version="1.0" encoding="iso-8859-1"?>
<memo>
<title>XML-kurssin kuvaus</title>
<sect>
<title>Esittely</title>
<p>Kurssilla opitaan XML:n perusteet,
merkkauskielioppi ja tutustutaan yksinkertaisiin
sovelluksiin.</p>
<p>Tarkoituksena on tarjota eväät omaehtoiseen
oppimiseen.</p>
</sect>
<sect>
<title>XML</title>
<p>XML on kokonainen perhe teknologioita.</p>
<p>XML:n merkitys aukeaa vasta sen sovellusten kautta.
Useat Web-teknologiat perustuvat tavalla tai toisella
XML:n hyödyntämiseen.
</p>
</sect>
</memo>
XML on kokonainen perhe teknologioita. Useat Web-teknologiat perustuvat tavalla tai toisella XML:n hyödyntämiseen. XML-peruskurssi tarjosi tiiviin johdannon XML-maailman perusteisiin. Tietojen ja taitojen karttuessa XML-merkkaus ja perustekniikat siirtyvät työssä sivummalle ja huomio kohdistuu sovellusten parissa työskentelyyn.
Menestystä XML:n soveltamiseen työssäsi!
Perustietojen karttuessa XML:n opiskelun painopiste siirtyy sovellusten suuntaan. XML-peruskurssin tavoite on yksilöllisen XML-opiskelun alkutaipaleen tasoittaminen.
Esipuhe. XML-peruskurssin tavoitteena on yleiskatsaus XML-perusteisiin ja merkkauksen opettelu. Edistyneempi XML-osaaminen edellyttää myös sen sovellusten tuntemusta.
Johdanto. Merkkaaminen suoritetaan poikkeuksetta tietojenkäsittelyn ja "tietokoneiden" näkökulmasta. Merkkauskielioppi on kaikille XML-sovelluksille yksi ja sama. Kukin sovellus määrittelee oman sanastonsa (tai yhdistelee useita sanastoja). Eräs XML:n käyttökelpoisuuden syistä on selkeän työnjaon osoittaminen erilaisten tietojenkäsittelytehtävien välillä. XML-prosessorin ja XML-sovelluksen erottaminen toisistaan on tästä hyvä esimerkki. XML on kokonainen perhe standardinomaisia teknologioita. XML-merkkaus on vain jäävuoren huippu. W3C:n XML-spesifikaatiot ovat ainoa virallinen XML:n määrittelevä lähde. Koulutusmateriaali ja kirjallisuus on suunniteltu välittämään tätä tietoutta havainnollisesti erilaisten sovellusten yhteydessä.
Sovelluksia. W3C-suosituksen mukainen WWW-sivu on XHTML-tyyppinen XML-dokumentti. W3C-suosituksen mukainen SVG-kuva on SVG-tyyppinen XML-dokumentti (tai dokumentin osa). XML:n käyttöön ei tarvitse liittyä ajatusta "dokumentista joka luetaan" -- kyse voi olla myös "viestistä" tai "tietorakenteesta".
Merkkaus. XML-merkkauksen perusta on hierakkinen elementtirakenne. Attribuutit liittyvät elementtien alkutagiin (tai tyhjän elementin tagiin). Dokumentin tekstisisällön käsittävä esiintymäosa on XML-dokumentin ainoa pakollinen osa (juurielementti). Merkistön koodauksen tulee olla oikea. Elementit ovat aidosti sisäkkäisiä. Alku- ja lopputagi esiintyvät aina pareittain. Attribuuttien keskinäisellä järjestyksellä ei ole merkitystä. Viittaukset tuovat dokumenttin merkkejä tai tekstiä. <-merkki on dokumentissa aina osa merkkausta (paitsi merkkidatalohkon sisällä...)! Prosessointiohjeen sisäinen rakenne on merkkijono; tulkinta on sovelluksen tehtävä. Merkkidatalohko ei sisällä merkkausta. Ellei sovellus toisin päätä, tyhjämerkit ovat oletuksena merkitseviä XML:ssä. XML-dokumentti voi ilmoittaa mitä (luonnollista) kieltä käyttäen dokumentti on kirjoitettu. Dokumentin jäsentäminen on sen käsittelyn perusehto.
Rakenne. Dokumentin tyyppimäärittely on DTD-kielen avulla määritelty muotti jota ko. tyyppisten dokumenttien esiintymäosan tulee noudattaa. DTD:n voi jakaa osiin. Yleisesti tunnetuille tyyppimäärityksille on sovittu julkisia tunnisteita. Elementin tyyppimäärittely osoittaa elementin sisäisen rakenteen. Säännönmukaisten lausekkeiden käyttö mahdollistaa geneerisen elementtimäärittelyn. Attribuutin tyyppimäärittely liittää elementtiin attribuutin. Merkkaajan näkökulmasta entiteettien tärkein sovellus XML-dokumentin pilkkominen osiin. Muista entiteettityypeistä tärkein on parametrientiteetti, jonka avulla voidaan sieventää DTD:tä.
Nimiavaruudet. Nimiavaruudet lokeroivat eri sovellusten sanastot. Jokaiselle sanastolle voidaan keksiä yksikäsitteinen nimiavaruus. Esimerkiksi XHTML-sanaston nimiavaruus on http://www.w3.org/1999/xhtml ja SVG-sanaston nimiavaruus on http://www.w3.org/2000/svg. Eri sovellusten sanastoja yhdistellään näiden suunniteluratkaisujen tarjoamissa puitteissa. Nimiavaruuden syntaksi on XML-attribuutin syntaksi (+ kaksoispisteen käyttö erotinmerkkinä); tulkinta rakentuu nimiavaruuksien erikseen määritellyn semantiikan varaan. XML DTD ei ole ainoa tapa määritellä dokumentin tyyppi. XML Schema -tyyppimäärittely mahdollistaa myös nimiavaruudet huomioivan tyyppimäärittelyn.
Tyylit. XSL-muunnostyyli on kahden dokumentin jäsennyspuun välinen kuvaus. Muunnostyylin suorituksessa säännöistä valitaan aina lähdepuun kontekstia parhaiten vastaava sääntö. Muunnoksen suoritus päättyy kun sovellettavaa sääntöä ei enää seuraa toinen sääntö. Muunnosten hahmojen kielioppi perustuu XPath-lausekkeisiin. XSL-muunnokset perustuvat funktionaalisen ohjelmoinnin periaatteeseen. XSL-komentojen avulla on kuitenkin mahdollista toteuttaa tutut lausekielisen ohjelmoinnin perusrakenteet.
Yhteenveto. Perustietojen karttuessa XML:n opiskelun painopiste siirtyy sovellusten suuntaan. XML-peruskurssin tavoite on yksilöllisen XML-opiskelun alkutaipaleen tasoittaminen.