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

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

13 XML-standardiperhe

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

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

Elementtien tyyppideklaraatiot

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

Johdatus rakenteisiin dokumentteihin

12 Dokumenttiluokan toteuttamisesta

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

P e d a c o d e ohjelmointikoulutus verkossa

10 XML ja dokumenttien tyyppimäärittely

6 DTD ja dokumentin tyyppimääritys

9 XML perusteet

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

5 Merkkaus: XML protokollana

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 standardeja. nimiavaruudet, namespaces XHTML XML Schema linkitys Jaana Holvikivi 1

3 Verkkosaavutettavuuden tekniset perusteet

6 DTD ja dokumentin tyyppimääritys

5 Merkkaus: XML protokollana

Luento 2: XML:n syntaksi

6 DTD ja dokumentin tyyppimääritys

XML johdatus: DTD. Jaana Holvikivi

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

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

XML-merkkaus. Merkkidata, prosessointikomennot, kommentit

Luento 12: XML ja metatieto

7 DTD ja entiteetit: dokumentin fyysinen rakenne

Paikkatiedot ja Web-standardit

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

Pysyvät tunnukset ja niiden hyödyntäminen

9 XML perusteet

9 XML perusteet

M. Merikanto 2012 XML. Merkkauskieli, osa 2

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

Hohde Consulting 2004

CSE-A1200 Tietokannat

Ctl160 Tekstikorpusten tietojenkäsittely p.1/15

XML johdanto, uusimmat standardit ja kehitys

Apuja ohjelmointiin» Yleisiä virheitä

Johdatus XML teknologioihin

Helsingin yliopisto / TKTL XML-Metakieli XML Schema

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

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

Hohde Consulting 2004

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

Tietokoneohjelmien käyttö laadullisen aineiston analyysin apuna

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

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

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

XML / DTD / FOP -opas Internal

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

W3C-teknologiat ja yhteensopivuus

Julkishallinnon XML-skeemat v0.5 JHS-suositus

Extensible Stylesheet Language (XSL)

JHS XXX Paikkatiedon yksilöivät tunnisteet Liite 1: URI:n muodostamisen prosessi

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

XML-saatavuuskysely. XML-tiedoston kuvaus. versio

SÄHKE-hanke. Tekninen mallintaminen SÄHKE-metatietojen XML Schema

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke

Tuomas Komulainen LUOVA LOMAKE ANALYSOINTITYÖKALU

ELM GROUP 04. Teemu Laakso Henrik Talarmo

XHTML - harjoitus. Tehtävä1: Tee xhtml tiedosto käyttäen notepad (muistio) ohjelmaa. Tiedoston tallennus notepad (muistio) ohjelmassa:

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

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010

Tietojen jakelu Skeemat Palvelupyyntö Kansallisen tulorekisterin perustamishanke

Luento 7: XML-ohjelmointirajapinnat

7 DTD ja entiteetit: dokumentin fyysinen rakenne

Vaatimusten versiointi DOORSissa

H T M L eli kuinka laadin itselleni päheät kotisivut. Janne Käki

JHS XXX Julkishallinnon XML-skeemat

Rakenteisen oppimateriaalin tuottaminen verkossa esimerkki Rhaptos. Antti Auer Koordinaattori, HT Jyväskylän yliopisto Virtuaaliyliopistohanke

W3C ja alueellinen standardointi

Luento 4: XPath ja XLink

Tietojen toimittaminen Skeemat Mitätöintitiedot Kansallisen tulorekisterin perustamishanke

Kuva-aineistojen arkisto XUA-allekirjoituksen määritys

4.2 Yhteensopivuus roolimalleihin perustuvassa palvelussa

XML rakenteen suunnittelu. Jaana Holvikivi

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

SÄHKE-hanke. Abstrakti mallintaminen Tietomallin (graafi) lukuohje

Poikkeusinfo XML-rajapinnan kuvaus, rajapinnan versio 2 Seasam Group

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

Tentti erilaiset kysymystyypit

Tietojen toimittaminen Skeemat Viestit Kansallisen tulorekisterin perustamishanke

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

Kvarkki XUA: sähköisen allekirjoituksen määritys 1 (6) V 1.0. Kvarkki XUA: sähköisen allekirjoituksen määritys

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Tietojen toimittaminen Skeemat Vastaanottokuittaus Kansallisen tulorekisterin perustamishanke

Tietojen jakelu Skeemat Palvelupyyntö Kansallisen tulorekisterin perustamishanke

Inspire-kohdetunnisteet

10 Nykyaikainen WWW-arkkitehtuuri

Tietojen toimittaminen Skeemat Vastaanottokuittaus Kansallisen tulorekisterin perustamishanke

è è è RDF-perusteet 7 RDF-perusteet

2. Minkä joukon määrittelee kaava P 0 (x 0 ) P 1 (x 0 ) mallissa M = ({0, 1, 2, 3}, P M 0, P M 1 ), kun P M 0 = {0, 1} ja P M 1 = {1, 2}?

8 XSLT-muunnoskieli XSLT-muunnoskieli

4 Johdanto XML-maailmaan

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Transkriptio:

13 Nimiavaruudet Huomautus: Otsikon voisi kuvaavammin kirjoittaa muodossa "structdoc:section". Syy selviää piakkoin Merkkauksen ideana on helpottaa tiedon ja metatiedon erottelua tarjoamalla dokumenteille selkeä rakenne Esimerkki: kun teksti Leevi and the Leavings: Mitä kuuluu, Marja-Leena? Teuvo, maanteiden kuningas Mieletön Melinda kirjoitetaan muotoon (ja koodataan vähän lisätietoa) <RECORD AUTHOR="Leevi and the Leavings"> <ITEM LEN="3.42">Mitä kuuluu, Marja-Leena?</ITEM> <ITEM LEN="4.09">Teuvo, maanteiden kuningas</item> <ITEM LEN="3.14">Mieletön Melinda</ITEM> </RECORD> "huomataan heti", mitä kirjoittaja ajaa takaa ja tarkoittaa. Vai huomataanko? 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 332

Ongelmaa syntyy, kun "samoilla" elementtien nimillä on useita järkeviä tulkintoja. Asiaa on hyvin vaikea välttää etukäteen Esimerkki: entäpä jos meillä olisi annettuna vielä toinenkin dokumentti: <RECORD AUTHOR="Matti Nykänen"> <ITEM LEN="80">pieni mäki</item> <ITEM LEN="245">lentomäki</ITEM> </RECORD> Mitäs nämä sitten tarkoittavat? Ilmeisestikin eri asioita kuin edellä, mutta millä se huomataan? Entäpä jos elementin ITEM sisältö olisi vielä erilainen? On suuri kiusaus sanoa, että dokumentit erotetaan niiden sisältämän tiedon perusteella. Tietokoneelle tehtävä on kuitenkin auttamattomasti liian vaikea, koska ihminenkään ei erottelua aina pysty tekemään Esimerkki: entäpä jos dokumentit pitäisi vielä syystä tai toisesta yhdistää? Olkoon siis dokumentti, joka listaa laulaja Matti Nykäsen kappaleita ja mäkihyppyennätyksiä. Mistä elementit ITEM nyt erotetaan? <RECORD AUTHOR="Matti Nykänen"> <ITEM LEN="80">pieni mäki</item> <ITEM LEN="3.42">Yllätysten yö</item> </RECORD> 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 333

Kurssin alkupuolella samantyyppiseen ongelmaan törmättiin HTMLelementtien semantiikan (ulkoasun näkökulmasta) kanssa: on tilanteita, jossa elementti P tarkoittaa yhtä ja toisaalla toista. Ongelma ratkaistiin CSSattribuutin CLASS avulla seuraavasti: <P CLASS="std">Tämä on tavallinen tekstikappale</p> <P CLASS="add">Tämä tekstikappale kertoo "lisätietoja"</p> XML ratkaisi kömpelön CLASS-attribuuttien käytön tarjoamalla mahdollisuuden omannimisten (-tyyppisten) elementtien määrittelyyn Edellä ongelma olisi siis voitu ratkaista XML:n avulla vaikkapa muodossa <stdp>tämä on tavallinen tekstikappale</stdp> <addp>tämä on erikoinen tekstikappale</addp> ts. kirjoittamalla "kaikki" tieto suoraan elementin nimeen. Tämä ei kuitenkaan poista ongelmaa, jossa eri kirjoittajat keksivät samannimisiä elementtejä (ja yhdistelevät elementtirakenteitaan) Edellä artisti-mäkihyppääjän tapauksessa ongelma voitaisiin yrittää ratkaista järkevästi keksimällä "tarpeeksi kuvaavia" elementin nimiä, esim. tyyliin <SKIJUMPITEM LEN="80">pieni mäki</skijumpitem> <MUSICITEM LEN="3.42">Yllätysten yö</musicitem> 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 334

Periaatteessa ratkaisu on hyvä, mutta jäljelle jää vielä hankalia ongelmia: - täsmällisistä elementtien nimistä tulee helposti mahdottoman pitkiä (SKIJUMPITEMFOROSSINYKANENSAPPLICATIONATTUTINFINLAND) - ja silti vaarana on, että joku toinen ottaa käyttöön juuri saman elementin eri merkityksessä, koska nimeämiskäytäntöä ei hallinnoida keskitetysti XML Namespaces ("nimiavaruudet") periaatteessa ratkaisee em. ongelmat: 1) elementtien ja attribuuttien nimet nimetään yksikäsitteisesti mv. pitkien tunnistemerkkijonojen avulla (jotka juuri määrittävät nimiavaruuden), 2) nimiavaruudet annetaan erityisen attribuutin avulla, jonka tulkinta on kiinteä (xmlns), 3) pitkien nimien aiheuttamat hankaluudet pyritään minimoimaan ottamalla käyttöön nimille lyhennysmerkinnät (prefiksit) ja 4) tunnistemerkkijonojen "myöntäminen" käyttöön sidotaan olemassa olevaan yksikäsitteiseen tiedon nimeämiskäytäntöön (URI) XML Namespaces tarjoaa oleellisesti mahdollisuuden kiinnittää elementtien ja attribuuttien nimiin yksikäsitteisen nimilapun, jonka avulla kaikkien maailman elementtien ja attribuuttien nimien erottaminen toisistaan on mahdollista 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 335

Esimerkki: XML-nimiavaruuksien käytön avulla ITEM-elementtien erottamisen ongelma ratkeaa nyt esim. muodossa (kun nimiavaruuksien merkitys sovitaan) <RECORD AUTHOR="Matti Nykänen"> <ITEM LEN="80" xmlns="http://matriisi.ee.tut.fi/~onykane/skijump/"> pieni mäki </ITEM> <ITEM LEN="3.42" xmlns="http://matriisi.ee.tut.fi/~onykane/music/"> Yllätysten yö </ITEM> </RECORD> Esimerkki: samaan päästään myös "kvalifioitujen" elementtien prefiksikoodauksen avulla. Tällöin dokumentti tulee esim. muotoon <RECORD AUTHOR="Matti Nykänen" xmlns:ski="http://matriisi.ee.tut.fi/~onykane/skijump/" xmlns:music="http://matriisi.ee.tut.fi/~onykane/music/"> <ski:item LEN="80"> pieni mäki </ski:item> <music:item LEN="3.42" Yllätysten yö </music:item> </RECORD> Jos tarkkoja ollaan, tilanne attribuuttien suhteen jää Namespacesin näkökulmasta tosin vieläkin epäselväksi (aiheeseen palataan pian) 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 336

Peruskäsitteitä XML Namespace tarjoaa siis keinon nimetä kokoelman elementtien ja attribuuttien nimiä jossakin sovelluksessa (dokumentissa). Näitä nimiä kutsutaan ko. sovelluksen sanastoksi ([vocabulary]) Esimerkki: seuraavan dokumentin sanasto on (EXAMPLE, TYPE, STRONG); samannimisten elementtien ja attribuuttien nimet osataan erottaa toisistaan <EXAMPLE TYPE="simple">this is <STRONG/> text</example> Ei-toivottua tilannetta, jossa kahden eri sanaston samoja sanoja käytetään eri merkityksessä kutsutaan törmäykseksi ([collision]) (edellä ITEMit törmäsivät) Spesifikaation "Namespaces in XML" (Namespaces) perusta käsittelee juuri sanastojen nimeämiskäytäntöä tavoitteena törmäysten välttäminen (ks. http://www.w3.org/tr/1999/rec-xml-names-19990114/) XML-nimiavaruus ([XML Namespace]) on kokoelma sovelluksen elementtien ja attribuuttien niminä käytettäviä nimimerkkijonoja, joka identifioidaan URImerkkijonon avulla Nimiavaruuden nimi on sitä vastaavan URI-merkkijonon arvo 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 337

Esimerkki: asetetaan (oletus)nimiavaruus, jonka nimi on "http://matriisi.ee.tut.fi/" <EXAMPLE xmlns="http://matriisi.ee.tut.fi/"></example> Viittaukset nimiavaruuksiin ovat identtisiä mikäli niitä vastaavien nimiavaruuksien nimet ovat tavallisina merkkijonoina samoja URI-merkkijonoilla ei nimiavaruuksien niminä ole nimilappuna toimivan merkkijonon lisäksi muuta tulkintaa (ts. niiden ei esim. ole pakko viitata oikeisiin tiedostoihin verkossa, tms.) Esimerkki: seuraavat merkkijonot viittaavat WWW-selainten "yleisen" URLsemantiikan mukaisesti samaan HTML-dokumenttiin, mutta nimiavaruuksien yhteydessä tarkoittavat eri nimiavaruuksien nimiä matriisi.ee.tut.fi/~onykane/courses/ http://matriisi.ee.tut.fi/~onykane/courses/ Nimiavaruuksien sisältämät nimet esiintyvät XML-dokumenteissa jommassakummassa kahdesta perusmuodostaan: - kvalifioituna nimenä ([qualified name]) tai - lokaalina (kvalifioimattomana) nimenä (koostuen vain nimen lokaaliosasta [local name]) 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 338

Kvalifioitu nimi koostuu kahdesta kaksoispisteellä ":" erotetusta osasta: nimiavaruuden prefiksistä ja lokaaliosasta ([namespace prefix], [local part]) Esimerkki: kvalifioitu nimi elementin nimenä <ex:element>don't let the colon fool you!</ex:element> Kvalifioidussa nimessä on aina täsmälleen yksi kaksoispiste ja se on ylläkuvatussa roolissa Huomaa, että XML 1.0 -spesifikaation näkökulmasta kvalifioitu nimi on "vain XML-nimi" - ts. kaksoispisteellä ei XML 1.0:n näkökulmasta ole erityistä tulkintaa (joskaan kaksoispisteitä ei elementtien ja attribuuttien nimissä siis kannata käyttää, johtuen kaksoispisteen tulkinnasta nimiavaruuksien yhteydessä) Kvalifioidun nimen prefiksi, joka assosioidaan halutun URI-merkkijonon kanssa, valitsee nimiavaruuden Lokaali (kvalifioimaton) nimi sidotaan oletusnimiavaruuteen, perii vanhempansa nimiavaruuden tai ei kuulu mihinkään nimiavaruuteen Kvalifioidun nimen prefiksin (esim. ex) kiinnittäminen halutun nimiavaruuden kanssa suoritetaan XML-attribuutin avulla (esim. xmlsn:ex="nimiavaruuden nimi") 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 339

Nimiavaruusdeklaraation perusteet: oletusnimiavaruudet Nimiavaruusdeklaraatio ([namespace declaration]) suoritetaan XMLdokumentin esiintymäosassa joko xmlns-nimisen attribuutin avulla, tai attribuutin, jonka prefiksi on "xmlns:", avulla. Nämä attribuutit voidaan tuottaa joko suoraan tai välillisesti (kuten mitkä tahansa muutkin XML-attribuutit) Yksinkertaisimmillaan nimiavaruusdeklaraatio annetaan juuri "paljaan" xmlnsattribuutin avulla. Tällöin asetetaan oletusnimiavaruus ([default namespace]) Esimerkki: valitaan nimiavaruus "http://matriisi.ee.tut.fi/~onykane/rakdok/lk_ex327" <EX xmlns="http://matriisi.ee.tut.fi/~onykane/rakdok/lk_ex327"> <CONTENT ATTR="no default namespace for us attributes"> Element content inherits EX's namespace </CONTENT> </EX> Määrittelyn idea on edellä se, että attribuutti xmlns kertoo sen nimiavaruuden nimen, jonka sanastoon määrittelyn vaikutusalueella (määrittelyalueella [scope]) sijaitsevat elementit kuuluvat. Vaikutusalue selviää nimiavaruuden yksikäsitteisten periytymissääntöjen perusteella 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 340

Koska nimiavaruuksien nimet ovat universaaleja (mikä siis on koko homman tavoite), ei pitäisi jäädä epäselvyyttä siitä, mitä elementit EX ja CONTENT "tarkoittavat" (ei törmäyksiä) Namespaces ei kerro miten elementtien semantiikka tulee antaa, vaan osoittaa ainoastaan menetelmän jolla elementeille voidaan valita universaalit nimet. Dokumentin sanaston semantiikka voidaan kertoa esim. sanallisesti ja esimerkkien avulla URI-viittauksen päässä olevassa HTML-dokumentissa, mutta spesifikaatio ei tätä edellytä Edellinen yksinkertainen esimerkki on vain erikoistapaus nimiavaruuksien määrittelystä. Kirjataan esimerkistä joitain huomioita: - sanaston sanojen EX, CONTENT ja ATTR nimet ovat lokaaleja nimiä (ei kvalifioituja) - attribuutti xmlns asettaa oletusnimiavaruuden arvoksi "http://mat ". Nimiavaruus asetetaan elementin EX ja sen lapsielementtien nimiavaruudeksi - koska elementti CONTENT on EX:n sisällä elementti CONTENT perii oletusnimiavaruuden (mutta attribuutti ATTR ei, johtuen sovituista perintäsäännöistä) 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 341

Määrittely Namespaces-spesifikaatio määrittelee nimiavaruuksien käytön syntaktisen rakenteen EBNF-produktioiden muodossa (vrt. XML) Nimiavaruuksien spesifikaatio esittelee 18 produktioita, jotka yhdistetään XML 1.0 -spesifikaation kanssa Osa Namespaces-spesifikaation produktioista "jatkuu XML-spesifikaation produktioina" (joita ei esitellä uudelleen). Osa Namespaces-produktioista taas "päällekirjoittaa" XML 1.0 -produktioita, joten Namespaces tavallaan siis määrittää XML 1.0:n uudelleen! Ao. otteen numerointi seuraa spesifikaatiota [1] NSAttName ::= PrefixedAttName DefaultAttName [2] PrefixedAttName ::= 'xmlns:' NCName [ NSC: Leading "XML" ] [3] DefaultAttName ::= 'xmlns' [4] NCName ::= (Letter '_') (NCNameChar)* /* An XML Name, minus the ":" */ [5] NCNameChar ::= Letter Digit '.' '-' '_' CombiningChar Extender 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 342

Nimiavaruusdeklaraatio annetaan siis tehtävään varatun NSAttNamemuotoisen attribuutin avulla Nimiavaruudet Produktiota PrefixedAttName ([2]) vastaavan attribuutin nimen osa NCName assosioidaan attribuutin arvon saatavan nimiavaruuden nimeä vastaavan nimiavaruuden prefiksiksi ([namespace prefix]) (attribuutin arvo ei tällöin saa olla tyhjä) Nimiavaruuden nimen tulee olla URI-syntaksin mukainen merkkijono (Uniform Resource Identifier ks. esim. http://www.w3.org/addressing/). Nimi on siis pelkkä syntaktinen nimilappu jolla ei ole URIn semantiikkaa (siis ei tarvitse olla, joskin voi olla) Oletusnimiavaruuksien käyttäminen on siis vain yksi tapa, jolla sitoa elementin nimiavaruus. Toinen (monipuolisempi) tapa on tehdä se juuri nimiavaruuksien prefiksien avulla Esimerkki: valitaan nimiavaruus "http://matriisi.ee.tut.fi/" ja sille prefiksi ex <ex:example xmlns:ex="http://matriisi.ee.tut.fi/"> <ex:content ex:attr="ex namespace for me"> ex namespace for me </ex:content> </ex:example> 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 343

Huomaa, että nimiavaruus ex otetaan käyttöön vasta kvalifioitujen elementtien ja attribuuttien nimien muodossa (xmlns:ex-deklaraatio vain esittelee sen) Nimiavaruuden prefiksiä ei ole pakko esitellä siinä elementissä, jossa prefiksiä käytetään, vaan määrittely voidaan antaa myös elementin vanhemmassa Esimerkki: sama esimerkki toisessa muodossa <edi:x xmlns:edi='http://ecommerce.org/schema'> <!-- the "edi" prefix is bound to http://ecommerce.org/schema for the "x" element and contents --> <edi:sub> I'll use namespace whose prefix is edi explicitly! </edi:sub> <sub> I use the same namespace (but instead of declaring it, I inherit it from the element edi:x) </sub> <edi:sub xmlns:edi="http://www/foo"> I overwrite the previous namespace and use my own namespace (and so will my children) </edi:sub> </edi:x> 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 344

Kvalifioitujen (prefiksi) nimien käyttäminen mahdollistaa erityisesti: Nimiavaruudet - nimiavaruudet attribuuteille (attribuuttien nimiavaruus määrätään aina prefiksien avulla) - merkintöjen sieventämisen, jos eri nimiavaruuksiin viitataan "vuorotellen" Attribuutit, joilla ei ole nimiavaruuden prefiksiä eivät kuulu mihinkään nimiavaruuteen. Jos attribuutille halutaan siis määrätä nimiavaruus, pitää se aina tehdä kvalifioidun nimen avulla Esimerkki: sidotaan attribuutin xlink:type nimiavaruus <x xmlns:xlink='http://www.w3.org/xml/xlink/0.9'> No namespace for x, we only declare xlink namespace <sub xlink:type="simple">no namespace for sub</sub> </x> Nimiavaruusdeklaraatio annetaan aina XML-dokumentin esiintymäosassa (DTD:ssä deklaraatio voidaan tuottaa välillisesti antamalla attribuuteille oletusarvoja) Produktiota DefaultAttName ([3]) vastaavan attribuutin arvo valitsee oletusnimiavaruuden ([default namespace]). Tällöin attribuutin arvo voi olla myös tyhjä (mikä tarkoittaa sitä, että nimiavaruutta ei valita lainkaan) 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 345

Periytyminen, määrittelyalue ja attribuutit Nimiavaruus periytyy kvalifioimattomille elementeille Esimerkki: valitaan oletusnimiavaruudeksi "http://matriisi.ee.tut.fi/" <EXAMPLE xmlns="http://matriisi.ee.tut.fi/"> My namespace is the default stated above <CONTENT ATTR="no default namespaces for us attributes"> I inherit EXAMPLE's (default) namespace <SUB xmlns=""> I don't want any namespace! <ITEM>...and I don't inherit any </ITEM> </SUB> </CONTENT> <ITEM>...I inherit EXAMPLE's (default) namespace </ITEM> </EXAMPLE> Kvalifioimattomien elementtien tapauksessa periytyminen on siis suoraviivaista: elementti perii vanhempansa nimiavaruuden ellei toisin mainita 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 346

Jos elementtejä kvalifioidaan, periytyminen on hieman monimutkaisempaa Esimerkki: valitaan oletusnimiavaruudeksi "http://matriisi.ee.tut.fi/" <EXAMPLE xmlns="http://author/default/" xmlns:foo="http://author/foo/"> xmlns:zap="http://author/zap/"> My namespace is the default stated above <foo:content attr="no namespace for me"> I use foo namespace <SUB xmlns=""> I don't use any namespace! </SUB> <SUB zap:attr="my namespace is zap"> I inherit default namespace from EXAMPLE </SUB> </foo:content> <ITEM foo:attr="my namespace is foo"> I inherit the default namespace from EXAMPLE </ITEM> </EXAMPLE> Kuten edellisessä esimerkissä, nimiavaruuksien nimet ja niitä vastaavat kvalifioitujen nimien prefiksit yleensä samaistetaan kielenkäytössä 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 347

Elementin nimiavaruus määräytyy siis joko tämän kvalifioidun nimen, oletusnimiavaruuden tai jälkimmäisen perinnän perusteella Esimerkki: elementin ex nimiavaruuden asettaminen kahdella eri tavalla <!-- CASE 1: declaring default namespace --> <ex xmlns="http://example/ex"> </ex> Nimiavaruudet <!-- CASE 2: declaring explicit namespace prefix and using it --> <myns:ex xmlns:myns="http://example/ex"> </myns:ex> Nimiavaruus periytyy aina kvalifioimattomalle elementille tämän vanhemmilta (vanhemman [perimä] oletusnimiavaruus) ellei elementti itse aseta omaa oletusnimiavaruutta. Kvalifioitu elementti ei koskaan peri nimiavaruutta, vaan prefiksi kertoo sen. Attribuuteilla perintää ei koskaan tapahdu, vaan attribuutin nimiavaruus määräytyy aina kvalifioidun nimen perusteella Tyhjän oletusnimiavaruuden antamisella nimiavaruuksien vaikutus voidaan siis "kytkeä pois päältä" Oletusnimiavaruuksien avulla elementtejä voidaan sitoa nimiavaruuksiin ilman, että niiden nimet täytyy kirjoittaa kvalifioidussa muodossa (tästä on suurta hyötyä esim. DTD:n määrittelyn näkökulmasta) 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 348

Nimiavaruudet ja XML DTD: luvassa käytännön ongelmia Toistaiseksi nimiavaruuksien käsittelyn yhteydessä on puhuttu XMLdokumenteista mutta ei valideista XML-dokumenteista (ts. dokumenteista, jotka sisältävät DOCTYPE-deklaraation ja noudattavat sitä) Miten nimiavaruudet sitten pitää ottaa huomioon validien XML-dokumenttien suhteen? Vastaus: teoriassa ei mitenkään - kaikki XML DTD:stä tähän mennessä sanottu on sellaisenaan voimassa myös nimiavaruuksien suhteen! Tämä tarkoittaa seuraavaa: - nimiavaruudet ja DTD eivät yleensä ole käyttökelpoisia yhdessä - kvalifioidut nimet ovat XML 1.0-spesifikaation näkökulmasta tavallisia nimiä (nimiavaruuden ilmoittava prefiksi ja kaksoispiste on osa nimeä) - attribuutti xmlns on niinikään tavallinen attribuutti muiden joukossa (jonka järkevä tyyppi on yleensä CDATA) Seuraukset dokumenttien tyyppideklaraatioiden näkökulmasta ovat selkeitä, mutta työläitä - jos nimiavaruuksia hyödyntävä dokumentti halutaan määrittää validiksi, pitää kaikki sallitut prefiksikombinaatiot esitellä DTD:ssä 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 349

Esimerkki: seuraava pieni validi XML-dokumentti havainnollistaa nimiavaruuksien ja XML DTD:n välistä suhdetta <?xml version="1.0"?> <!DOCTYPE mydoc [ <!ELEMENT mydoc (foo:ex,zap:ex)> <!ELEMENT foo:ex (#PCDATA zap:ex ex)*> <!ELEMENT zap:ex (#PCDATA)> <!ELEMENT ex (#PCDATA)> <!ATTLIST mydoc xmlns:zap CDATA #IMPLIED xmlns:foo CDATA #IMPLIED> <!ATTLIST ex xmlns CDATA #IMPLIED> ]> <mydoc xmlns:zap="http://author/zap" xmlns:foo="http://author/foo"> <foo:ex> My namespace is foo <zap:ex>my namespace is zap</zap:ex> <ex>i inherit foo namespace</ex> <ex xmlns="http://author/other"> I declare my own default namespace </ex> <ex xmlns="">i don't use any namespace</ex> </foo:ex> <zap:ex>my namespace is zap</zap:ex> </mydoc> Nimiavaruudet 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 350

On kuitenkin erittäin todennäköistä, että tietty prefiksi halutaan aina sitoa tietyn nimiseen nimiavaruuteen. Tällöin prefiksin määräävä attribuuttilistadeklaraatio on ilmeisen järkevää kiinnittää valmiiksi jo DTD:ssä Esimerkki: edellisessä esimerkissä olisi todennäköisesti perusteltua asettaa <!ATTLIST mydoc xmlns:zap CDATA #FIXED "http://author/zap" xmlns:foo CDATA #FIXED "http://author/foo"> Ilmeisesti tilanne on DTD:n näkökulmasta paljon yksinkertaisempi jos tyydytään käyttämään pelkkiä oletusnimiavaruusdeklaraatioita - tällöin hintana on kuitenkin se, että XML-prosessorin mahdollisuudet syntaktisten virheiden löytämiseen heikkenevät entisestään (edellä sentään nimien ja nimiavaruuksien prefiksideklaraatioiden väärinkäyttö huomattiin dokumenttia validoitaessa) Vakioarvojen pakottaminen on itse asiassa niin järkevää, että monet Namespaces-yhteensopivat XML-parserit tätä (vastoin Namespacesspesifikaatiota) vaativatkin (esim. IE5 ja XML Spy) Tilanne on käytännössä todella ongelmallinen; mikäli sovelluksissa tarvitaan monipuolisesti nimiavaruuksia, on järkevämpää määritellä dokumenttiluokan looginen rakenne skeeman avulla (XML Schema) 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 351

Nimiavaruuksien käyttö edellyttää tietenkin että XML-prosessori nimiavaruuksien semantiikan osaa tulkita Nimiavaruudet On erittäin tärkeätä huomata, että edellisissä esimerkeissä XML 1.0- spesifikaation näkökulmasta Namespaces-käsitteet kuuluvat XML 1.0:n ulkopuoliseen maailmaan (esim. "foo:ex" on vain elementin nimi siinä missä "mydoc" on elementin nimi) Erityisesti tämä tarkoittaa sitä, että joissain tilanteissa Namespacesin näkökulmasta kaksi eri XML 1.0:n nimeä "tarkoittaa" samaa asiaa (tarkoittavat saman sanaston sanaa) Esimerkki: eri nimet mutta "uniikin sanaston samat sanat" <foo:ex xmlns:foo="http://author/concept"/> <zap:ex xmlns:zap="http://author/concept"/> Attribuuttien nimien suhteen tämä tarkoittaa sitä, että "XML-syntaksia" on sanastojen näkökulmasta mahdollista rikkoa ilman että XML 1.0-prosessori tajuaa asiaa 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 352

Esimerkki: seuraava on Namespaces-virhe (sama attribuutti ei saa esiintyä alkutagissa kuin kerran) <foo:ex xmlns:foo="http://author/concept"/ xmlns:zap="http://author/concept"/ foo:attr="setting a value" zap:attr="i'm an illegal attribute!"/> XML-dokumenttien prosessoinnin näkökulmasta Namespaces tuo muassaan vielä lisää vaikeuksia: ei-validoiva XML-parseri kun ei välttämättä "näe" aina koko XML-dokumenttia (lähinnä parsittavien ulkoisten entiteettien tapaus ja attribuuteille annettavat oletusarvot DTD:ssä) - tällöin voi käydä niin, että esim. prefiksideklaraatio jää huomiotta ja tuloksena on laiton kvalifioitu nimi Namespaces-yhteensopivat parserit luonnollisestikin yrittävät tarjota ratkaisua ongelmaan (esim. siten, että jokainen prosessointi on validoiva) Esitellään lopuksi Namespaces-tuottosäännöt. Seuraavat produktiot täsmentävät aikaisemmin esiteltyjä käsitteitä ("kvalifioitu nimi") [6] QName ::= (Prefix ':')? LocalPart [7] Prefix ::= NCName [8] LocalPart ::= NCName 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 353

Kvalifioituja nimiä käytetään Namespaces-merkkausdeklaraatiossa kuten "tavallisessakin" DTD:ssä (huomaa päällekkäisyys XML 1.0:n kanssa) [13] doctypedecl ::= '<!DOCTYPE' S QName (S ExternalID)? S? ('[' (markupdecl PEReference S)* ']' S?)? '>' [14] elementdecl ::= '<!ELEMENT' S QName S contentspec S? '>' [15] cp ::= (QName choice seq) ('?' '*' '+')? [16] Mixed ::= '(' S? '#PCDATA' (S? ' ' S? QName)* S? ')*' '(' S? '#PCDATA' S? ')' [17] AttlistDecl ::= '<!ATTLIST' S QName AttDef* S? '>' [18] AttDef ::= S (QName NSAttName) S AttType S DefaultDecl Kvalifioidut nimet vaikuttavat luonnollisesti merkkauksen kirjoittamiseenkin [9] STag ::= '<' QName (S Attribute)* S? '>' [ NSC: Prefix Declared ] [10] ETag ::= '</' QName S? '>' [ NSC: Prefix Declared ] [11] EmptyElemTag ::= '<' QName (S Attribute)* S? '/>' [ NSC: Prefix Declared ] [12] Attribute ::= NSAttName Eq AttValue QName Eq AttValue [ NSC: Prefix Declared ] 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 354

Huomautuksia Namespaces on todella keskeinen spesifikaatio koko XML-stdperheessä: lähes kaikki muu standardoitu rakentuu juuri uniikkien sanastojen idean varaan Ei ole yllättävää, että Namespaces-spesifikaation keskeisenä tavoitteena on, että käytettävien nimiavaruuksien nimet: 1) ovat ainutkertaisia ja pysyviä ja 2) ne omistaa "niitä vastaavia URIa hallinnoiva taho" Mikään virallinen taho ei tietenkään hallitse tätä sanktioiden avulla (vielä?), vaan kyse on käytännöllisestä sopimuksesta ja uskottavuudesta Huomaa, että attribuutin xmlns nimen suhteen ei tapahdu törmäyksiä, koska xml-alkuiset nimet on varattu W3C:n omaan käyttöön Namespacesin oma nimiavaruus on oletusarvoisesti http://www.w3.org/xml/1998/namespace. Tämä sitoo automaattisesti kaikki xml-alkuiset nimet. Nimiavaruuden prefiksi pitää siis antaa Namespacesnimiavaruusdeklaraatiossa kaikille muille prefikseille paitsi merkkijonoille "xml" ja "xmlns" 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 355

XML 1.0 -spesifikaatio ei "tunnista" nimiavaruuksien olemassaoloa, mikä käytännössä näkyy XML DTD-määrittelyjen kömpelyytenä (erityisesti prefiksien osalta). XML 1.0 -prosessori ei siis (välttämättä) tiedä nimiavaruuksista mitään, eikä siten myöskään löydä nimiavaruuksien käyttöön liittyviä virheitä Ikävien yllätysten välttämiseksi kannattaakin käyttää nimiavaruuksien prefikseinä aina spesifikaatioiden antamia esimerkkiprefiksejä, mikäli suinkin mahdollista (ts. jos tämä ei aiheuta törmäyksiä oman sanaston kanssa) Esimerkki: yksinkertainen XML-hypertekstilinkki määritellään tyypillisesti näin: <element xmlns:xlink="http://www.w3.org/1999/xlink"> <mylink xlink:type="simple" xlink:href="def.xml"> See the definition. </mylink> </element> määrittely olisi kuitenkin voitu antaa yhtä hyvin esim. (identtisessä) muodossa ("laiskasti" implementoitu selain ei kuitenkaan nyt välttämättä huomaa linkkiä) <element xmlns:z="http://www.w3.org/1999/xlink"> <mylink z:type="simple" z:href="def.xml"> See the definition. </mylink> </element> Esimerkin vaikutukset ovat selvät: linkit toteuttavan XML-prosessorin näkökulmasta on helpompaa "etsiä avainsanoja" xlink:type jne. kuin toteuttaa XML Namespaces -spesifikaatio (erityisesti kvalifioitujen nimien semantiikka) 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 356

Materiaalin tekijä jorisee ("reflektoi"): mitäs seuraavaksi? Kun tarkoituksena on esitellä XML-standardiperhettä hypermedian näkökulmasta "loogisessa" järjestyksessä, olisi seuraavaksi toisen "ydinspesifikaation", XPathin pedanttisen läpikäymisen vuoro, jne. Kurssin aikataulu ei tähän mahdollisuuksia tarjoa, ikävä kyllä. Kurssin ideana on luoda tikapuut, kiivetä näillä tikapuilla talon katolle ja ihailla maisemaa. Jotta maisemasta ehdittäisiin kurssin puitteissa saada edes jonkinnäköinen aavistus, pitää tahtia jatkossa kiristää. Maiseman ihailuun nyt kannattaa tikapuiden jämäkkyyden kustannuksellakin ilmeisesti pyrkiä. Käytännössä tämä tarkoittaa sitä, että esityksen tarkkuudesta tingitään kurssin loppua kohden entistä enemmän. Suuren Mahtajan XML-standardiperheeseen liittyvän suunnitelman näkökulmasta Namespaces ja XPath ovat vain välietappeja matkalla kohti "korkeampia tavoitteita", kuten esim. XML-hypertekstiä (XLink) ja transformaatioita (XSLT). Tämä on suunta, johon "useimmat" XML-kehittäjät pyrkivät. Motivaationa on tyypillisesti hyvä "hinta/laatu"-suhde; käyttöön saadaan tätä kautta rikasta menetelmäkoneistoa suhteellisen vähäisellä tieto- ja työmäärällä. 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 357

"Paljaan" XML 1.0:n näkökulmasta toinen keskeinen looginen kehityksen suunta on kohti prosessoriohjelmointia. Tällöin ideana on kirjoittaa XML-dokumentteja käsittelevät (ja tulkitsevat) ohjelmat itse. Tähänkään työhön ei tarvitse ryhtyä puhtaalta pöydältä, sillä myös näitä menetelmiä on standardoitu ja parsereihin on tarjolla valmiita ohjelmointirajapintoja (vähentää uudelleenkeksimistä suuresti). Ao. kuva hahmottaa XML-soveltajan työn suunti OMA PROSESSOINTI- TOTEUTUS (ESIM. "SAX vs. DOM") "MUUT RÄÄTÄLÖIDYT SOVELLUKSET" VUOROVAIKUTUS XML LÄHDE- DOKU- MENTTI TRANSFOR- MOINTI (XSLT) RENDEROINTI (ESIM. CSS) XML KOHDE- DOKU- MENTTI RENDEROINTI (ESIM. XSLFO) "KATSELEMINEN & NAVIGOIMINEN" XML-STANDARDIEN MUKAISESTI OMAN RIIPPUMATTOMAN SOVELLUSKEHITYKSEN ALUE: SOVELLUKSET KIRJOITETAAN ITSE (JAVA, C++, VB, Perl, ). TYÖN TUKENA ESIMERKIT JA VALMIIT APIT XML-STANDARDIPERHEEN ALUE: KÄYTTÖSSÄ VALMIITA SOVELLUKSIA JA OHJELMISTOJA (ESIM. SELAIMET JA MUUT XML- JA XSLT-OHJELMISTOT) Visiot on taas visioitu. On aika jatkaa konkreettisempien asioiden käsittelyä 73275 RAKENTEISET DOKUMENTIT (kevät 2003) luentorunko ON 358