XML-muunnokset mobiilitelevision ohjelmaoppaissa. Hannes Karhumaa

Koko: px
Aloita esitys sivulta:

Download "XML-muunnokset mobiilitelevision ohjelmaoppaissa. Hannes Karhumaa"

Transkriptio

1 XML-muunnokset mobiilitelevision ohjelmaoppaissa Hannes Karhumaa Tampereen yliopisto Informaatiotieteiden yksikkö Tietojenkäsittelyoppi / Vuorovaik. teknologia Pro gradu -tutkielma Ohjaaja: Marko Junkkari Kesäkuu 2012

2 ii Tampereen yliopisto Informaatiotieteiden yksikkö Tietojenkäsittelyoppi Hannes Karhumaa: XML-muunnokset mobiilitelevision ohjelmaoppaissa Pro gradu -tutkielma, 43 sivua, 17 liitesivua Kesäkuu 2012 XML on merkkauskieli, joka on yleinen myös metadatan kuvaamisessa. Yksi esimerkki tällaisesta metadatasta on television ohjelmatiedot. Mobiilitelevision standardi DVB-H sisältää ohjelmaoppaita, joissa on muun datan ohella tiedot lähetysverkon sisältämistä kanavista ja niihin liittyvistä ohjelmatiedoista XML-muodossa. XMLTV on yleiskäyttöinen dataformaatti, jossa kuvataan television ohjelmatietoja XML-formaatissa. Joskus television metadataa täytyy muuntaa formaatista toiseen. Silloin kun sekä lähdedata että tulosdata esitetään XML-formaatissa, puhutaan XMLmuunnoksista (engl. XML transformations). Muunnoksia voidaan tehdä esimerkiksi SAX-tekniikalla tai XML-muunnoskielillä. Yleisimpiä XML-muunnoksiin käytettäviä kieliä ovat XSLT ja XQuery, mutta myös monia muita kieliä on kehitetty. Lisäksi on toteutettu visuaalisia työkaluja muunnosten tekemiseen. Yksi mielenkiintoinen kysymys XML-muunnoksiin liittyen on se, voidaanko XML-muunnokset tehdä samalla kertaa molempiin suuntiin kahden XML-formaatin välillä. Ohjelmoijan kannalta XML-muunnostekniikoissa kiinnostavaa on tehokkuus sekä se, kuinka monimutkaista tai vaikeaa ohjelmointi on. Tässä tutkimuksessa tutustutaan XML-muunnostekniikoihin, toteutetaan muunnokset XMLTV-formaatista OMA BCAST ESG -formaattiin ja järjestetään koe, jossa erilaisilla kyselykielillä tehtyjen XML-muunnosten ja XML-kirjastojen toteutusten yhdistelmien tehokkuutta verrataan toisiinsa. Avainsanat ja -sanonnat: XML, mobiili-tv, DVB-H, XML-muunnokset, XSLT, XQuery, SAX.

3 iii Sisällys 1. Johdanto Mobiilitelevisio ja ohjelmaoppaat Muut mobiilitelevisio-standardit Mobiilitelevision historiaa Mobiilitelevision lähetystekniikka Ohjelmaoppaat Päätelaitteet Mobiili-tv-sovellukset XML-formaatin käyttämisestä ohjelmatietojen välittämiseen XML-kieli XML-skeemat XMLTV-formaatti OMA BCAST ESG -standardi XML-muunnostekniikat XML-muunnokset XPath XSLT XQuery SAX-tekniikka ja DOM Muut muunnoskielet XML-liukuhihnat ja XProc Kaksisuuntaiset XML-muunnokset Visuaaliset XML-muunnostyökalut Tutkimusaineisto ja koejärjestelyt Valmistelut Käytetyt aineistot Käytetyt ohjelmat ja ohjelmointitekniikat Koejärjestelyt Tulokset Tekniikoiden suoritusaikojen vertailua Työläys ja vaikeus ohjelmoijan kannalta Yhteenveto Viiteluettelo Liitteet

4 1 1. Johdanto Mobiilitelevisio on televisio kannettaville päätelaitteille. Joissakin mobiili-tv-järjestelmissä, kuten esimerkiksi DVB-H-järjestelmässä [DVB-H, 2004], palveluoppaiden metadata välitetään XMLmuotoisena. Palveluoppaassa kuvataan lähetysjärjestelmän sisältö, muun muassa siihen sisältyvät kanavat ja ohjelmat. Metadalla tarkoitetaan kuvailevaa tietoa, eli tietoa tietosisällöistä. Toisinaan metadataa täytyy tuottaa joistakin muista lähteistä, jotka voivat olla myös XML-muotoisia. XML [W3C, 2008] on laajennettavissa oleva merkkauskieli, jolla voidaan kuvailla sekä dokumentin rakenne että sisältö. XML-transformaatiot eli muunnokset tarjoavat tavan muuntaa XML-dataa formaatista toiseen. Niiden tuottaminen voidaan tehdä perinteisesti SAX-jäsentimen tai DOM-tekniikan avulla. SAXjäsennin toteutetaan tapahtumapohjaisella ohjelmointirajapinnalla, joka antaa XML-dokumentin osista tietoa peräkkäisessä järjestyksessä [SAX, 2012]. DOM-tekniikassa XML-dokumentista luodaan muistiin puumuotoinen tietorakenne, jonka avulla voidaan hakea osia dokumentista. DOMpuusta voidaan myös poistaa osia tai lisätä niitä [W3C, 2004c]. Toisaalta voidaan käyttää myös tekniikoita, jotka perustuvat XML-kyselykieliin, kuten XSLT ja XQuery. XPath-polkuilmaisut [W3C, 2011b] ovat näissä tärkeänä osana. XSLT-kielessä muunnostapahtumat kuvataan XMLformaatissa [W3C, 1999b]. Muunnokset tehdään XSLT:ssä mallinteilla (template), joilla valitaan tietoa XML-dokumentista ja määritellään tulosteen muoto. XQuery-kielessä syntaksi on perinteisten ohjelmointikielten kaltainen ja siinä voidaan määritellä funktioita [W3C, 2010a]. XQuery-kieleen on kehitetty myös laajennuksia, jotka helpottavat XML-muunnosten tekemistä. Tämän työn tarkoituksena on esitellä erilaisia XML-muunnoksien tapoja ja vertailla niitä, käyttäen esimerkkinä mobiilitelevision ohjelmaoppaita. Tutkimusongelmana on sopivimman XMLmuunnostekniikan valinta. Ongelmaan liittyy ensinnäkin XML-muunnoksia tekevän henkilön kokemus erilaisista ohjelmointitekniikoista, joten tähän paneudutaan erittelemällä eri tekniikoiden vaatimuksia vaikeuden ja työläyden kannalta. Toinen aspekti on tehokkuus, jota mitataan tässä tutkielmassa vertailemalla tietyn XML-datan muunnoksiin kuluvaa aikaa erilaisilla muunnostekniikoilla. Kolmas tutkimuskysymys on se, mitä uudenlaisia tekniikoita on kehitetty ja voitaisiin jatkossa kehittää, jotta XML-muunnoksien tekeminen olisi mahdollisimman helppoa ja tehokasta. Luvussa 2 kerrotaan mobiilitelevisiostandardeista ja niihin liittyvistä ohjelmaoppaista. Luvussa tutustutaan tarkemmin ympäri maailmaa käytettyyn DVB-H-standardiin ja sen lähetystekniikkaan. Tarkemmin luodaan katsaus DVB-H-järjestelmän ohjelmaoppaisiin ja siihen, miten XML-kieltä niissä käytetään. Lopuksi esitellään lyhyesti päätelaitteita ja sitä, mihin ohjelmaoppaiden tietoja käytetään mobiili-tv-sovelluksissa. Luvussa 2 kuvaillaan siis televisio-ohjelmien matka lähetysjärjestelmään syöttämisestä loppukäyttäjän ruudulle asti DVB-H -järjestelmässä. Luku 3 esittelee XML-merkintäkielen ja tämän työn esimerkkeinä käytettävät XML-formaatit. XML-kielen rakenteen lisäksi luodaan katsaus siihen, miten XML-skeemoilla voidaan kuvata

5 2 XML-dokumentin rakenne. Näistä tärkeimpinä mainitaan DTD ja W3C Schema. Seuraavaksi esitellään yleiskäyttöinen television ohjelmatietoja kuvaava XML-formaatti XMLTV ja kerrotaan tarkemmin DVB-H-järjestelmien ohjelmaoppaita kuvaavasta OMA BCAST ESG -standardista ja sen XML-formaatista. Lopuksi käsitellään sitä, mitä eroja näiden kahden formaatin välillä on ja sitä minkälaisia operaatioita tarvitaan muunnosten tekemiseen formaatista toiseen. Luvun 4 alussa käsitellään XML-muunnoksia yleisesti. Sitten esitellään XML-kyselykieli XPath, jota käytetään osana useissa XML-muunnoskielissä. Tällaisista kielistä esitellään ensimmäisinä XSLT ja XQuery, joiden käyttämisestä esitellään ja annetaan televisio-ohjelmien formaattien muuntamisesta esimerkkejä kyseisillä kielillä. Sitten kerrotaan primitiivisemmistä XML-datan käsittelemiseen tarkoitetuista menetelmistä, SAX-jäsentimestä ja DOM-puurakenteesta, ja esitetään ohjelmointiesimerkkejä SAX-tekniikan käytöstä XMLTV-formaatin muuntamiseen. Seuraavaksi käsitellään hieman vähemmän tunnettuja XML-kyselykieliä XDuce, CDuce ja XML- QL. Seuraavaksi kerrotaan XML-liukuhihnatekniikasta ja siihen käytettävästä XProc-kielestä. Kaikki tähän asti esitellyt XML-muunnostekniikat toimivat vain yhteen suuntaan formaatista toiseen, joten seuraavaksi pohditaan kaksisuuntaisia XML-muunnoksia. Lopuksi luodaan katsaus XML-muunnoksien tekemistä helpottaviin visuaalisisiin muunnostyökaluihin. Luvussa 5 on tietoa työtä varten tehdystä tutkimuksesta, jossa kokeiltiin käytännössä XMLmuunnosten tekemistä ja mitattiin erilaisten toteutusten tehokkuutta suoritusaikojen muodossa. Luvussa kuvaillaan käytetyt aineistot, käytetyt ohjelmat ja ohjelmointitekniikat. Lopuksi esitellään koejärjestelyt ja niissä käytetyt ohjelmakirjastojen ja ohjelmakooditoteutusten yhdistelmät. Luvussa 6 kerrotaan edellisessä luvussa kuvaillun tutkimuksen tuloksista, havainnollistetaan tehokkuustulokset, analysoidaan niitä hieman ja pohditaan tulosten merkittävyyttä. Tehokkuuden lisäksi pohditaan sitä, minkälaisia erilaiset XML-muunnostekniikat ovat ohjelmoijan kannalta, punnitaan vaikeusastetta ja työläyttä. Lisäksi mietitään, mikä ohjelmointitekniikka sopii kokeneemmalle ja vähemmän kokeneelle ohjelmoijalle. Lopuksi luvussa 7 on yhteenveto, jossa tiivistetään kokemuksia XML-muunnostekniikoiden käyttämisestä mobiilitelevision ohjelmaoppaiden muunnoksiin. Lisäksi pohditaan, että mitä muita tekniikoita voitaisiin kehittää ja miten saada XML-muunnoksia helpommiksi käyttäjän kannalta ja toisaalta tehokkaammiksi koneille suorittaa. 2. Mobiilitelevisio ja ohjelmaoppaat Mobiilitelevisio on televisio kannettaville päätelaitteille. Päätelaitteella tarkoitetaan laitetta, joka ottaa televisiosignaalin vastaan ja esittää televisiolähetyksen käyttäjälleen. Euroopassa yleisin mobiilitelevision standardi on DVB-H (Digital Video Broadcasting Handheld). DVB-standardeja on erilaisia eri lähetystavoille: DVB-T maanpäällisissä antenniverkoissa, DVB-C kaapeliverkoissa ja DVB-S satelliittiverkoissa. DVB-H eroaa muista DVB-standardeista paremmin kannettaville päätelaitteille sopivien ominaisuuksiensa ansiosta [DVB-H, 2004]. Lisäksi erona on se, että DVB-

6 3 H-järjestelmässä ohjelmatiedot välitetään XML-formaatissa, kun taas muissa DVB-järjestelmissä binääridatana EIT-taulussa (event information table). Palveluoppaassa (electronic service guide, ESG) kuvataan DVB-H-järjestelmän sisältö, joka näytetään käyttäjälle. Tämä sisältää kanavat, niiden ohjelmatiedot ja paljon teknistä dataa, jonka perusteella päätelaite osaa esittää videon ja äänen oikein. Ohjelmatiedot käyttäjälle näyttää elektroninen ohjelmaopas (electronic program guide, EPG). Siinä kanavia ja niiden ohjelmatietoja kuvauksineen voidaan selata graafisella käyttöliittymällä. DVB-H-järjestelmä sopii paremmin mobiileille laitteille sen takia, että siinä ensinnäkin saavutetaan pienempi virrankulutus, koska dataa lähetetään aikaviipaloituna (time-slicing). Toiseksi virheenkorjaus on sovitettu paremmin mobiililähetyksiin sopivaksi. Koska käytetään IP-tekniikkaa, voidaan käyttää myös internet-palveluita silloin, kun päätelaite ei ole DVB-H-lähetyksen kuuluvuusalueella [DVB-H, 2004]. Lisäksi DVB-H-järjestelmässä on käytetty parempaa kuvan pakkaustekniikkaa kuin perinteisissä digi-tv-verkoissa, sillä H264-pakkaustapa käyttää lähetyksissä käytettävän bittivirran tehokkaammin kuin vanhemmissa DVB-järjestelmissä käytetty MPEG-2. Videokuvan resoluutio on myös yleensä pienempi mobiilitelevisiossa. DVB-H-verkossa ohjelmaoppaat kuvataan XML-muodossa, kun taas muissa DVB-standardeissa ne esitetään binäärisenä datana. Mobiilitelevision kritiikkinä voisi esittää sen, että useimmiten siinä ei ole toteutettu ohjelmien tallentamista. Useimmiten ihmiset haluavat nykyaikana katsoa ohjelmia muulloin kuin niiden lähetysaikoina. YLE Areenan tapaiset sovellukset, joissa voidaan valita milloin tahansa katsottava ohjelma, vievät varmasti myös suosiota mobiilitelevisiolta. Varsinkin kun otetaan huomioon, että tällaisia sovelluksia on toteutettu mobiililaitteillekin Muut mobiilitelevisio-standardit Kansainvälisesti käytetään myös muita mobiili-tv-standardeja kuten ISDB-T, ATSC-M/H, T-DMB, ja FLO. Kiinassa on myös kehitetty CMMB (China Mobile Multimedia Broadcasting), jonka on sanottu olevan hyvin paljon DVB-H-standardin kaltainen [Rohde & Schwarz, 2012]. Ohjelmatietojen välitystavat eri järjestelmissä ovat vaihtelevia. ISDB-T:ssä (Japanissa 1seg) käytetään ohjelmatietojen välittämiseen merkkipohjaista EIT-taulua samaan tapaan kuin DVBjärjestelmissä yleensä [Dibeg, 2007]. Siinä tosin on kehitetty muun muassa hätätiedotteiden välittämiseen XML-pohjainen standardi BML (Broadcast Markup Language). ATSC-M/H - järjestelmässä käytetään samantyyppistä palveluopasmäärittelyä kuin DVB-H-standardissakin eli sekin on kuvattu XML-formaatilla [ATSC, 2009]. MediaFLO on Qualcomm-yhtiön kehittämä mobiili-tv-järjestelmä, joka on ollut käytössä etenkin Pohjois-Amerikassa [Rohde & Schwarz, 2012]. DVB-T2 [DVB-T2, 2012] on toisen sukupolven maanpäällisten DVB-televisioverkkojen standardi. Siinä voidaan myös lähettää mobiilitelevisiokanavia terrestriaali- ja kaapeliverkkojen lisäksi. DVB-T2-verkoissa ohjelmatiedot esitetään myös binäärisenä datana EIT-taulussa [DVB-T2, 2012].

7 Mobiilitelevision historiaa Suomessa DVB-H -lähetykset toimivat vain suurimmissa kaupungeissa. Viimeisenä mobiilitelevisio-operaattorina Suomessa toimi DNA [DNA, 2012] ja se lopetti lähetykset vuonna 2012 [Digita, 2012]. DNA-verkossa oli loppuvaiheessa viisi TV-kanavaa ja lisäksi radiokanavia [DNA, 2012]. DVB-T2-standardin lähetykset on jo aloitettu Suomessa [DNA, 2009]. Niissä myös mobiililähetykset olisivat mahdollisia. DVB-H-standardia on käytetty monissa Euroopan maissa, ja lisäksi esimerkiksi Etelä- Afrikassa, Iranissa ja Yhdysvalloissa [Rinnetmäki, 2008]. Nokia kehitti alkuvaiheessa oman ESGmäärittelynsä, OAI:n (Open Air Interface) [OAI, 2005]. Myöhemmin OMA (Open Mobile Alliance) kehitti BCAST-standardin [OMA-BCAST, 2009] Mobiilitelevision lähetystekniikka Kuva 1. Ohjelmatietojen matka alkupisteestä mobiili-tv-sovellukseen päätelaitteessa. Mobiilitelevision lähetyksessä tarvitaan sovelluksia, jotka muodostavat ohjelmaoppaat lähetettäviksi ohjelmavirtaan. Lähetysverkko muodostaa kokonaan digitaalisen sillan lähetyspäästä mobiililaitteeseen toteutettuun mobiili-tv-sovellukseen, kuten kuvan 1 kaaviosta nähdään. Kuvasta nähdään, kuinka lähetysketjun alkupäässä olevat TV-kanavat antavat ohjelmavirtansa palveluntarjoajille, jotka hoitavat palvelun myymisen kuluttajille. Suomalaisessa DVB-H-verkossa palveluntarjoajana toimi loppuvaiheessa DNA. Verkko-operaattorin vastuulla on televisiosignaalin välittäminen. Suomessa tämän tehtävän suorittaa Digita. Lähetys voi olla yksisuuntaista lähetyspäästä mobiililaitteeseen (broadcasting) tai kaksisuuntaista (unicasting), jolloin mobiililaite kysyy tietoa palvelimelta ja vastaanottaa sitä [DVB-H, 2004]. DVB-H -lähetyksissä voidaan siirtyä internet-verkon kautta lähetettävään lähetykseen, kun signaalitaso broadcast-verkossa menee liian heikoksi. Tämä voi johtua esimerkiksi siitä, että käyttäjä on poistunut lähetysverkon alueelta tai sijaitsee sellaisessa paikassa, jossa päätelaitteen antenni ei pysty vastaanottamaan tarpeeksi vahvaa signaalia.

8 Ohjelmaoppaat Ohjelmaoppaassa kuvaillaan lähetysverkkoon kuuluvat asiat. Näitä ovat ensinnäkin lähetettävät kanavat. Kanavat voivat televisiokanavien lisäksi esimerkiksi radiokanavia tai datakanavia (filecast channel) [DVB-H, 2004], joilla voidaan lähettää mobiili-tv-sovellukselle lisätietoja kuten mainoksia tai ostettavia VOD-videoita (Video On Demand). Kanavat voivat olla maksullisia tai vapaita. Maksukanavapaketit, niiden hinnat ja kestot kuvaillaan ohjelmaoppaassa. Kanavilla voi olla kanavalogoja ohjelmaoppaassa. Kanavat sisältävät ohjelmia, joilla on nimi, kuvaus, alkamisaika ja loppumisaika. Lisäksi niissä voi olla tiedot ohjelman lajityypistä (genre) ja ikärajasta, jota voidaan käyttää ohjelman näyttämisen estämiseen alaikäisille. Ohjelmaoppaat esitetään XML-formaatissa, joka voi sisältää myös binääristä dataa. Data lähetetään säiliöissä (container) ja se jakautuu fragmentteihin [DVB-H, 2004]. Fragmentit ovat XML-elementtejä, jotka kuvaavat ohjelmaoppaan osia, kuten kanavia ja ohjelmia. Säiliöllä tarkoitetaan osioita, joihin fragmentit pakataan datakarusellissa (data carousel) tapahtuvaa tiedonsiirtoa varten. Standardeja ohjelmaoppaiden välittämiseen on useita, mutta yleisin käytettävä standardi on nykyään OMA BCAST, jota tässä tutkielmassa käytetään esimerkkinä. Ohjelmaoppaat voidaan pakata, jolloin saavutetaan pienempi kaistankulutus lähetysverkossa [Rinnetmäki, 2008]. Ohjelmaoppaassa voidaan määritellä myös interaktiivisia palveluja [OMA-BCAST, 2009]. Tämä tarkoittaa sitä, että käyttäjä voi osallistua ohjelman sisältöön esimerkiksi lähettämällä tekstiviestin, sähköpostiviestin tai soittamalla puhelun. Tällaisesta voisi olla esimerkkinä Idolsäänestys. Tällöin ohjelmaoppaassa olisi määritelty, mihin numeroon äänestykseen liittyviä tekstiviestejä voi lähettää ja mihin aikaan. Tämän perusteella mobiili-tv-sovellus osaisi näyttää käyttöliittymässään interaktiivisen elementin, jolla äänestykseen osallistuminen onnistuu Päätelaitteet Mobiilitelevisiojärjestelmässä päätelaitteet ottavat vastaan televisiosignaalin ja esittävät sen käyttäjälle. Päätelaitteet voivat olla matkapuhelimia tai muita laitteita. Päätelaitteet toimivat yleensä yhteen vain yhden mobiilitelevision teknisen standardin kanssa. Yleisin DVB-H-laitteiden valmistaja on Nokia. Nokialla on ollut erilaisia antenniratkaisuja päätelaitteissaan. Nokia N96 - puhelimessa on sisäänrakennettu antenni [Nokia, 2012b]. Nokian 5330 Mobile TV Editionissa antennina toimivat standardiin 3,5 millimetrin liitäntään kytkettävät kuulokkeet [Nokia, 2012c]. Mobiili-tv voi sisältyä myös lisälaitteeseen, kuten esimerkiksi Nokia N8 -laitteen USB-liitäntään kytkettävään malliin [Nokia, 2012a]. Esimerkki muista laitteista on Drifta [DsTV, 2012], joka vastaanottaa DVB-H-lähetystä ja lähettää sitä WLAN-yhteyden kautta eteenpäin. Mobiilitelevisiota voidaan tällöin katsoa tietokoneeseen, tablettiin tai älypuhelimeen asennetulla sovelluksella Mobiili-tv-sovellukset Mobiilitelevisiosovellus on päätelaitteessa toimiva sovellus, jonka käyttöliittymällä käyttäjä voi katsoa televisiota ja kontrolloida katseluun liittyviä asioita. Se voi olla valmiiksi asennettuna käyttöjärjestelmän mukana päätelaitteessa, kuten joissakin Nokian puhelimissa. Toisaalta se

9 6 voidaan asentaa päätelaitteeseen jälkeenpäin. Sovelluksessa voidaan muun muassa vaihtaa katseltavaa kanavaa ja selata tietoja esitettävistä ohjelmista. Kuva 2. Esimerkki ohjelmatiedoista Nokia 5530 TV Edition puhelimen mobiili-tv-sovelluksessa (kuva otettu Tampereella helmikuussa 2012). Ohjelmaoppaassa näytetään graafisesti kanavat ja niiden ohjelmatiedot, kuten kuvasta 2 nähdään. Ohjelman valitsemalla siitä saa lisätietoa, kuten loppumisajan ja kuvauksen. Sovelluksissa voi olla myös käyttöliittymä kanavapakettien ostamiseen ja ikärajojen asettamiseen. Yleensä ikäraja voidaan lukita tai poistaa PIN-koodilla, jota kysytään kun yritetään katsoa sisältöä, jota ei ole sallittu. Lisäksi on olemassa ohjelmointirajapinta omien mobiili-tv-sovellusten tekemiseen. Sen nimi on JSR-272 (Java Specification Request) ja sitä käytetään Java-kielellä [Motorola and Nokia, 2008]. JSR-272-sovellukset ovat Java Mobile Edition -sovelluksia ja niitä voidaan asentaa yleisimmin Symbian-käytttöjärjestelmään. Rajapinnat mahdollistavat käytännössä kaikki samat asiat, joita natiivisovellukset tekevät. Lisäksi voidaan toteuttaa lisäominaisuuksia, esimerkiksi mainoksien näyttämistä, käyttäjän toimien seuraamista (user monitoring) tai videopalveluita. Interaktiiviset

10 7 palvelut, kuten esimerkiksi tekstiviestiäänestys, voidaan myös toteuttaa mobiili-tv-sovelluksen käyttöliittymässä. JSR-272-ohjelmointirajapintaa käytettäessä voidaan ohjelmatiedot hakea QueryComposerluokkaa käyttäen. Tätä luokkaa käyttäen yksinkertaisia kyselyitä voidaan yhdistellä loogisilla operaattoreilla toisiinsa, jolloin saadaan monimutkaisempia kyselyitä [Motorola and Nokia, 2008]. Yksinkertaiset kyselyt muodostetaan asettamalla haettava ominaisuus, haettava arvo ja hakuperuste, kuten seuraavasta esimerkistä voidaan todeta. Query q1, q2, q3; q1 = QueryComposer.equivalent(CommonMetadataSet.SERVICE_NAME, "TV2"); q2 = QueryComposer.contains(CommonMetadataSet.PROGRAM_NAME, uutiset ); q3 = QueryComposer.and(q1,q2); ProgramEvent[] programs = ServiceGuide.getDefaultServiceGuide().findPrograms(q3); Näin haettaisiin kanavalta TV2 kaikki ohjelmat, joiden nimi sisältää merkkijonon uutiset. Mielenkiintoinen tutkimuskysymys on se, että voidaanko XML-muotoisten ohjelmatietojen hakemiseen JSR-272 -kirjaston sisäisessä toteutuksessa käyttää hyväksi esimerkiksi XQuery-kieltä, jolloin QueryComposer-luokan tuottamat kyselyoliot muunnettaisiin XML-kyselykielen koodiksi. Tämä jätetään kuitenkin jatkotutkimukseksi. 3. XML-formaatin käyttämisestä ohjelmatietojen välittämiseen 3.1. XML-kieli XML-kieli on puolirakenteisen informaation esittämiseen tarkoitettu kieli. Sen juuret ovat SGMLkielessä (Standard Generalized Markup Language), jonka kehitti Charles Goldfarb 1970-luvulla. SGML:n monimutkaisuus kuitenkin esti Tidwellin [2001] mukaan sen yleistymisen. SGML tuli kuitenkin tunnetummaksi, kun Tim Berners-Lee kehitti hypertekstisivujen kuvauskielen HTML:n. XML-kielessä elementit koostuvat kulmasulkeiden sisään kirjoitetuista tageista, jotka ilmaisevat elementin nimen. Tageja ovat alkutagi ja lopputagi, joiden nimien täytyy olla elementissä samat [W3C, 2008]. Elementeissä voi olla attribuutteja, jotka kirjoitetaan alkutagin sisään. Attribuutilla on nimi ja arvo. Elementin sisältönä voi olla dataa tai toisia elementtejä. Elementeillä voi olla sisäkkäisiä elementtejä, jolloin XML-dokumentit muodostavat hierarkisen puurakenteen. Validissa XML-dokumentissa alkutagilla tulee aina olla vastaava lopputagi oikealla hierarkiatasolla. Alkutagi on kulmasulkeiden välissä, esimerkiksi <channel>. Lopputagi on muuten sama, mutta siinä on ennen tagia kauttaviiva, </channel>. Elementti voi myös olla tyhjä, jolloin lopputagia ei ole ja alkutagi päättyy kauttaviivaan, esimerkiksi <channel/> [W3C, 2008]. Attribuutit

11 8 ovat nimi-arvopareja ja ne erotetaan toisistaan laittamalla välilyönti väliin. Attribuutit merkitään kirjoittamalla ensin attribuutin nimi, laittamalla väliin yhtäsuuruusmerkki ja sitten lainausmerkkien väliin attribuutin arvo, esimerkiksi <channel id="tv1">. Elementin sisällä voi olla merkkidataa (CDATA eli character data) tai toisia elementtejä. Seuraavassa esimerkissä näkyvät molemmat: <channel id="tv1"> <display-name lang="fi">tv1</display-name> </channel> Hyvinmuodostettu (well-formed) XML-dokumenti tarkoittaa sitä, että dokumentti vastaa täysin XML-kielen syntaksia. Tässä vaaditaan esimerkiksi se, että alkutagin ja lopputagin tulee aina olla samalla tasolla hierarkiassa. Seuraavassa esimerkissä nähdään tilanne, jossa näin ei ole. <channel><program></channel></program> Yllä olevan esimerkin kaltainen rakenne ei siis olisi mahdollinen. Kanavaelementin tulee päättyä vasta, kun sen kaikki lapsielementit on päätetty. Lisäksi tagien pitää olla aina kirjoitettu samalla merkkikoolla. Jos alkutagi on <channel>, ei lopputagi voi olla esimerkiksi </Channel>. Tagien nimet eivät saa sisältää kiellettyjä erikoismerkkejä, eivätkä ne saa alkaa numerolla. Vaatimuksena on myös se, että dokumentilla tulee aina olla yksi juurielementti, jonka alla kaikki muut elementit ovat. Merkit <, > ja & kuuluvat XML-syntaksin erikoismerkkeihin, eikä niitä voida sisällyttää esimerkiksi attribuuttien tai elementtien tekstisisältöihin. Jos kuitenkin halutaan esittää esimerkiksi merkki & tekstissä, se pitää kirjoittaa muodossa "&". Kommentit esitetään XML-dokumenteissa kirjoittamalla tagin alkuun huutomerkki ja kaksi viivaa, sitten varsinainen kommenttiosa tekstinä ja loppuun taas kaksi viivaa. Kommenttia ei pidetä varsinaisena dokumentin sisältönä, vaan vain ihmislukijalle tarkoitettuna ymmärtämistä helpottavana aspektina. Seuraava esimerkki sisältää kommentin. <!-- Tämä on kommentti --> XML-tiedostoissa voidaan käyttää monia eri merkistöjä [W3C, 2008]. Merkistöllä tarkoitetaan määrittelyä, joka kertoo miten binäärikoodaus tulkitaan jonkin kirjoitusjärjestelmän merkeiksi. Käytettävä merkkikoodaus esitetään yleensä ensimmäisellä rivillä, samalla kun ilmoitetaan käytettävä XML-versio: <?xml version='1.0' encoding='iso '?> Tässä esimerkissä on käytetty merkistöä, joka on tarkoitettu erityisesti länsimaisille kielille. Mikäli samalla merkistöllä pitää esittää lisäksi esimerkiksi venäjää, arabiaa ja japania, voidaan käyttää

12 9 UTF-8-koodausta. Sillä voidaan esittää kaikki Unicode-merkit, jolloin käytössä on yli eri merkkiä [IETF, 2003]. Television ohjelmatietojen kohdalla UTF-8 on hyvä valinta merkistöksi sen takia, että ohjelmatietoja kuvataan useilla eri kielillä ympäri maailmaa. Näin saadaan kerralla hyvä valinta merkistöksi ilman, että sitä täytyisi vaihdella maakohtaisesti XML-skeemat XML-skeemat kuvaavat XML-dokumentin rakenteen. Skeemoja voidaan käyttää dokumenttien validoinnissa, jolloin testataan onko dokumentti oikein muotoiltu. Skeemassa määritellään esimerkiksi se, mitä elementtejä ja attribuutteja dokumentissa saa olla ja mitä pitää olla. Lisäksi voidaan määritellä elementtien lukumääriä ja hierarkiapuun rakennetta. Tietotyyppejä voidaan myös määritellä. Erona W3C:n XML-skeemassa [W3C, 2004b] ja DTD:ssä (Document Type Definition) [W3C, 2008] on se, että XML-skeema on itsessään XML-formaatissa, kun taas DTD ei ole. XMLskeema on W3C:n kehittämä XML-rakennekuvauskieli, joka tunnetaan myös nimellä XSD (XML Schema Document). XML-skeemassa on erikoisena piirteenä se, että siinä voidaan määritellä attribuuteille ja elementtien sisällöille tietotyyppejä. Tietotyypit voivat olla esimerkiksi merkkijonoja, boolean-arvoja tai päivämääriä. XMLTV:n skeema on määritelty DTD-formaatissa [XMLTV, 2008], kun taas OMA BCAST ESG:ssä on käytetty W3C:n skeemamääritystä [OMA- BCAST, 2009]. Seuraava esimerkki sisältää osan viimeksi mainitusta. <xs:element name="service" type="servicetype"/> <xs:complextype name="servicetype"> <xs:sequence> <xs:element name="protectionkeyid" type="protectionkeyidtype" minoccurs="0" maxoccurs="unbounded"/> <xs:element name="servicetype" type="servicetyperangetype" minoccurs="0" maxoccurs="unbounded"/> <!-- Start of program guide information --> <xs:element name="name" type="languagestring" maxoccurs="unbounded"/> <xs:element name="description"

13 10 type="languagestring" minoccurs="0" maxoccurs="unbounded"/> <xs:element name="audiolanguage" type="audioortextlanguagetype" minoccurs="0" maxoccurs="unbounded"/> <xs:element name="textlanguage" type="audioortextlanguagetype" minoccurs="0" maxoccurs="unbounded"/> <xs:element name="parentalrating" type="parentalratingtype" minoccurs="0" maxoccurs="unbounded"/> <xs:element name="targetuserprofile" type="targetuserprofiletype" minoccurs="0" maxoccurs="unbounded"/> <xs:element name="genre" type="genretype" minoccurs="0" maxoccurs="unbounded"/> <xs:element name="extension" type="extensiontype" minoccurs="0" maxoccurs="unbounded"/> <!-- End of program guide information --> <xs:element name="previewdatareference" type="previewdatareferencetype" minoccurs="0" maxoccurs="unbounded"/>

14 11 <xs:element name="broadcastarea" type="broadcastareatype" minoccurs="0"/> <xs:element name="termsofuse" type="termsofusetype" minoccurs="0" maxoccurs="unbounded"/> <xs:element name="privateext" type="privateexttype" minoccurs="0"/> </xs:sequence> <xs:attribute name="id" type="xs:anyuri" use="required"/> <xs:attribute name="version" type="xs:unsignedint" use="required"/> <xs:attribute name="validfrom" type="xs:unsignedint" use="optional"/> <xs:attribute name="validto" type="xs:unsignedint" use="optional"/> <xs:attribute name="globalserviceid" type="xs:anyuri" use="optional"/> <xs:attribute name="weight" type="xs:unsignedshort" use="optional" default="65535"/> <xs:attribute

15 12 name="basecid" type="xs:string" use="optional"/> <xs:attribute name="emergency" type="xs:boolean" use="optional" default="false"/> </xs:complextype> </xs:element> Esimerkissä näkyy pieni osa kanavaelementin määrittelystä. Siinä nähdään kompleksin tietotyypin määrittely (ServiceType), esiintymien lukumäärän määrittely (minoccurs, maxoccurs), tietotyyppien käyttö (type-attribuutti) ja elementin valinnaisuuden tai pakollisuuden määrittely (useattribuutti). Elementti xs:sequence määrittelee alielementit järjestyksessä, xs:element elementit ja xs:attribute attribuutit. DTD:ssä esiintymien lukumäärät esitellään symboleilla +, * ja?. Plus-symboli tarkoittaa sitä, että elementtiä täytyy olla yksi, mutta saa olla enemmänkin. Merkki * puolestaan tarkoittaa mitä tahansa määrää, eli nolla tai enemmän. Kysymysmerkki ilmaisee valinnaisen esiintymisen, eli elementti voi olla esiintymättä tai esiintyä vain kerran. Elementti!ELEMENT määrittelee elementit ja!attlist niiden attribuutit. Seuraavassa esimerkissä määritellään XMLTV-formaatin kanavaelementti DTD:llä. <!ELEMENT channel (display-name+, icon*, url*) > <!ATTLIST channel id CDATA #REQUIRED > <!ELEMENT display-name (#PCDATA)> <!ATTLIST display-name lang CDATA #IMPLIED> <!ELEMENT url (#PCDATA)> Myös muita XML-skeemakieliä on kehitetty, kuten RELAX NG. Siinä erikoisuutena on se, että dokumentin rakenne voidaan kuvata joko XML-formaatissa tai niin sanotulla kompaktilla syntaksilla, jonka kehittämisessä on saatu inspiraatiota Backus-Naur-muodosta ja säännöllisistä lausekkeista [OASIS, 2001] XMLTV-formaatti XMLTV [XMLTV, 2008] on XML-formaatti, joka on kehitetty television ohjelmatietojen esittämiseen. Sitä käytetään esimerkiksi avoimen lähdekoodin kotiviihdesovelluksissa, kuten MythTV-videontallennusjärjestelmässä. Kyseisellä XML-formaatilla kuvataan ohjelmatiedot, joita näytetään käyttäjälle ohjelmaoppaassa joko ruudulla tai web-selaimessa. Näiden perusteella käyttäjä

16 13 voi katsella ohjelmia tai ajastaa ohjelmille nauhoituksia. XMLTV-sovellus osaa jäsentää television ohjelmatietoja niitä sisältäviltä nettisivuilta, Suomessa esimerkiksi telkku.com, ja muodostaa niistä XMLTV-formaattia noudattavia tiedostoja. Tällainen tiedosto voidaan tuoda esimerkiksi MythTVjärjestelmän tietokantaan, jolloin ohjelmatietoja voidaan hyödyntää. Suomessa XMLTVsovelluksella ohjelmatietoja haettaessa etuna on se, että ohjelmia löytyy vähintään kolme viikkoa eteenpäin, kun tv-verkkojen EIT-datassa ohjelmatietoja on yleensä vain 7 päivää. Kuva 3. XMLTV-formaatin perusrakenne puumallina esitettynä. DTD-skeemasta löytyvää tietoa on tästä kaaviosta poistettu paljon selkeyden vuoksi. XMLTV-formaatissa juurielementtinä on tv. Sen lapsina ovat kanavat ja ohjelmat, kuten kuvan 3 puukaaviosta selviää. Kanavat esitetään aluksi. Kanavan tärkeimmät tiedot ovat uniikki id, joka identifioi kanavan, ja kanavan nimi. Mobiili-tv:n kannalta tärkeä on myös kanavalogo, sillä sitä käytetään monesti mobiilitelevisiosovelluksien ohjelmaopaskäyttöliittymissä. Ohjelmat kuvataan samoin omina elementteinään ja niissä channel-attribuutti on sama kuin jonkin kanavan id, jotta kanava ja ohjelma saadaan linkitettyä toisiinsa. Seuraavassa esimerkissä nähdään kanavien ja ohjelmatietojen XML-rakenne. <channel id="action.canalplus.se"> <display-name lang="sv">canal+ Action</display-name> <icon src=" se.png"/> </channel> <programme start=" " stop=" " channel="action.canalplus.se"> <title lang="sv">ninja Assassin</title>

17 14 <desc lang="sv">som barn omhändertas Raizo av en hemlig organisation kallad Ozunu. I många år tränas han och blir en av världens farligaste lännmördare. Men då Ozanuklanen kallblodigt avrättar hans vän vänder han sin läromästare ryggen och försvinner, fast besluten att en dag utkräva hämnd.</desc> <credits> <director>james McTeigue</director> <actor>rain</actor> <actor>naomie Harris</actor> <actor>ben Miles</actor> </credits> <date>2009</date> <category lang="en">movie</category> <category lang="en">action</category> <video> <aspect>4:3</aspect> </video> <audio> <stereo>surround</stereo> </audio> <rating system="vchip"> <value>tv-14</value> </rating> </programme> Ohjelmatiedot sisältävät attribuutin channel, jolla viitataan kanavaelementtiin. Tämä tarkoittaa sitä, että ohjelma esitetään kyseisellä kanavalla. Lisäksi esimerkistä huomataan, että XMLTVformaatissa on sellaistakin dataa, jota ei BCAST-formaatissa esitetä, kuten tiedot ohjaajasta ja näyttelijöistä sekä video- ja äänijärjestelmistä. Näitä tietoja ei tarvitse BCAST-formaattiin muuntaa OMA BCAST ESG -standardi Kuva 4 havainnollistaa OMA BCAST ESG -standardin rakennetta, jossa elementtejä Service, Content ja PreviewData käytetään kanavien, ohjelmien ja kanavalogojen kuvaamiseen. Vasemmalla olevan Provisioning-taulun tarkoitus on palveluoppaan maksullisten osien määrittely. Administrative-osio kertoo tietoja palveluoppaan datasta ja Access palveluiden saatavuudesta sekä päätelaitteilta vaadittavista teknisistä ominaisuuksista.

18 15 Kuva 4. OMA BCAST ESG -standardin fragmenttirakenne [OMA-BCAST, 2009].

19 16 Kuva 5. OMA BCAST ESG -standardin XML-rakenne yksinkertaistettuna niiltä osin, kuin sitä on käytetty tässä tutkielmassa. Kuva 5 havainnolistaa OMA BCAST ESG -standardin XML-rakennetta. Siitä huomataan, että OMA BCAST ESG [OMA-BCAST, 2009] on rakenteeltaan hyvin samanlainen kuin XMLTV. Siinäkin kanavat ja ohjelmat esitetään omina elementteinään. Erona XMLTV-formaattiin on se, että id-linkkiä ohjelman ja kanavan välillä ei esitetä samanlaisella rakenteella. Lisäksi nähdään, että kanavalogo esitetään omana elementtinään, kun XMLTV-formaatissa se sijaitsee kanavaelementin sisällä. Seuraavasta esimerkistä huomataan, että kanavan elementin sisällä on ServiceReferenceelementti, jonka idref-attribuutti kertoo kanavan, johon ohjelma liittyy. Kun tehdään muunnoksia XML-formaatista toiseen, täytyy tällaiset rakenteelliset erot huomioida. <Service id="ipdc.com/4041" version="5" validfrom=" " validto=" " globalserviceid="ipdc.com/4041" weight="1" servicecontentprotection="true" basecid="4041"> <ServiceType>1</ServiceType> <Name xml:lang="eng">nta Plus</Name>

20 17 </Service> <Content id="ipdc.com/99126" version="0" validfrom=" " validto=" " globalcontentid="ipdc.com/99126"> <ServiceReference idref="ipdc.com/4041"/> </Content> XMLTV-formaatissa kanavan logo on elementtinä kanavaelementin sisällä, kun BCASTformaatissa kanavalogo tulee erilliseksi elementiksi, johon viitataan kanavaelementin sisältä. Eroja on myös siinä, että lähes kaikki elementtien ja attribuuttien nimet ovat erilaisia, kuten voidaan huomata vertaamalla seuraavaa esimerkkiä aiemmin esitettyyn XMLTV-esimerkkiin. <Service...>... <PreviewDataReference idref="ipdc.com/4803" usage="2"/> </Service> <PreviewData id="ipdc.com/4803" version="0" validfrom=" " validto=" "> <Picture> <PictureURI>4803.jpg</PictureURI> <MIMEType>image/jpeg</MIMEType> <AlternativeText>Picture cannot be shown</alternativetext> </Picture> <AccessReference idref="ipdc.com/4008" usage="0"/> </PreviewData> Kahdessa formaatissa on eroja myös tietotyypeissä. BCAST-formaatissa päivämäärät esitetään XML-skeeman mukaisesti datetime-tietotyypillä [W3C, 2004a], joka noudattaa ISO standardia [ISO, 2004]. XMLTV-formaatissa noudatetaan vain kyseisen standardin perusmuotoa. Esimerkki XMLTV-formaatin päivämäärästä olisi seuraava: Tämä muutettuna BCAST-formaatin päivämääräksi olisi T02:40:00Z. Kirjain Z tarkoittaa sitä, että käytetään UTC-aikastandardia (Coordinated Universal Time). Kirjainta T käytetään yhdistämään päivämäärä ja kellonaika toisiinsa.

21 Tiivistäen voidaan luetella erilaiset perusmuunnokset formaattien välillä: 18 Elementtien nimien vaihtaminen Attribuuttien nimien vaihtaminen Dataformaattien muuntaminen Elementin muuntaminen toiselle hierarkiatasolle Elementtien lisääminen Elementtien poistaminen Attribuuttien poistaminen Datan siirtäminen attribuutista elementin merkkidataksi Datan siirtäminen merkkidatasta attribuutin sisään. Yllä kuvattujen lisäksi XML-formaattien välillä voi olla muunkinlaisia eroja. 4. XML-muunnostekniikat 4.1. XML-muunnokset XML-muunnoksilla (XML transformation) tarkoitetaan prosessia, jossa XML-dataa muunnetaan formaatista toiseen. Tämä tapahtuu valitsemalla alkuperäisestä XML-formaatista tiettyjä osia ja sijoittamalla niitä tulosdokumentissa joihinkin kohtiin. Tämä voidaan nähdä uuden dokumentin luomisena valituista lähdedokumentin osista tai alkuperäisen dokumentin muokkaamisena osia poistamalla, vaihtamalla ja lisäämällä. XML-dokumenttien erot voivat olla semanttisia, syntaktisia ja rakenteellisia. Semanttiset erot tarkoittavat sitä, että sama informaatio on esitetty erilaisilla nimillä tai erilainen informaatio samoilla nimillä. Syntaktiset erot voivat olla esimerkiksi erilaisia kieliä (suomi, englanti) tai erilaisten mittayksiköiden käyttöä (mailit, kilometrit). Rakenteelliset erot ovat sitä, että data on esitetty eri kohdissa XML-dokumentin hierarkiapuussa. Lisäksi sama data voi olla esitetty elementin nimessä, attribuutin nimessä tai jomman kumman data-arvona XPath XPath [W3C, 1999a] on kieli tiedon hakemiseen XML-dokumenteista. XPath-kielessä käytetään polkuilmaisuja XML-dokumenttien osien hakemiseen. XPath-ilmaisu voi palauttaa neljää eri tietotyyppiä. Ne ovat solmujen joukko, boolean-arvo, numero tai merkkijono. Yksinkertainen esimerkki kanavien nimien hakemiseksi esitetään seuraavaksi: /tv/channel/display-name/text() Tässä /tv on juurisolmu ja /channel ja /display-name alisolmuja hierarkiapuussa. Ilmaisu text() kuuluu solmutesteihin, joilla haetaan jotakin tiettyä nimeä tai tietotyyppiä XML-dokumentista.

22 19 Testillä text() haetaan solmun merkkidataa. Jos haluttaisiin hakea kanavien nimiin liittyvät kieliattribuutit, ne haettaisiin seuraavasti: Ät-merkki tarkoittaa attribuuttia. XPath-kyselyssä voidaan tehdä myös yleisempiä kyselyjä. Jos haluttaisiin esimerkiksi hakea kaikki display-name -elementit riippumatta siitä minkä solmun alisolmuja ne ovat, voidaan tehdä seuraavan esimerkin polkuilmaisulla. /tv//display-name Kaksi kauttaviivaa tarkoittaa siis mitä tahansa juurisolmun alisolmua. XPath-ilmaisuissa akseli (axis) tarkoittaa liikkumissuuntaa XML-dokumentissa. Solmun vanhempiin voitaisiin esimerkiksi viitata akselimäärityksellä parent. Se voidaan kirjoittaa myös.., joka on esimerkki akselin lyhennetystä syntaksista. Ilmaisu /tv//display-name/parent::url voidaan siis ilmaista myös //tv//display-name/../url. Tämä ilmaus hakee elementin vanhemmasta elementtiä url. Akselimäärittelyitä on paljon muitakin. Vanhempien ja lapsien lisäksi voidaan hakea esimerkiksi elementin kaikki attribuutit. XPath-kielessä voidaan käyttää jokerimerkkiä tietojen hakemiseen. Jos haluttaisiin hakea kaikki sen hetkisen kontekstin lapsielementit, voitaisiin käyttää ilmaisua, jossa jokerimerkki on polkumäärittelyn lopussa: /tv/* Tämä esimerkki hakisi kaikki juurielementin tv lapset. Jokerimerkkiä voidaan käyttää myös attribuuttien hakemiseen. /tv/channel/@* Näin saadaan haettua kaikkien kanavaelementtien kaikki attribuutit. Predikaateilla voidaan suodattaa haettavaa tietoa. Predikaatit esitetään hakasulkeiden sisällä XPath-ilmaisun perässä. Predikaatti palauttaa boolean-arvon tosi tai epätosi, ja sen perusteella päätetään, otetaanko dokumentin solmu tulosjoukkoon vai ei. Predikaatit voivat olla joko yksinkertaisia testejä, eli arvojen testauksia, tai ne voidaan ilmaista funktiokutsuina. Numeerisia arvoja voidaan myös testata, <3 testaisi onko id-attribuutti pienempi kuin kolme. Jos esimerkiksi haluttaisiin hakea vain kanava, jonka nimi on TV7, se tapahtuisi testaamalla kanavan nimi predikaatissa seuraavasti: /tv/channel[display-name="tv7"]

23 20 XPath-kielessä on myös lukuisia sisäänrakennettuja funktioita. Esimerkiksi merkkijonofunktioilla voidaan hakea merkkijonoista osia, yhdistää niitä ja niin edelleen. Funktioilla voidaan tehdä operaatioita sekvensseille eli elementtien kokoelmille. Nämä funktiot sisältävät esimerkiksi lisäämisen, poistamisen ja elementin hakemisen sekvenssistä. Lisäksi on matemaattisia funktioita, kuten itseisarvo ja pyöristys, sekä funktioita datatyyppien muunnosten tekemiseen. Tällä hetkellä yleisin käytössä oleva XPath-kielen versio on 1.0, mutta versio 2.0 on myös kehitetty. Siihen on kehitetty joitakin uusia ilmauksia ja datatyyppejä, nimiavaruudet, uusia operaattoreita ja funktioita XSLT XSLT [W3C, 1999b] on deklaratiivinen XML-muunnosten tekemiseen tarkoitettu kieli, joka on samalla myös funktionaalinen ohjelmointikieli. Huomattava ero funktionaalisissa ohjelmointikielissä verrattuna proseduraalisiin on se, että niissä muuttujien arvoja ei voi jälkikäteen muuttaa. Tämä vastaa karkeasti muuttujan käsitettä matematiikassa. Kun muuttuja X on saatu ratkaistua, sen arvo ei enää muutu laskutoimituksen aikana. XSLT-kieltä kirjoitetaan XML-muodossa. XSLT-prosessori ottaa syötteenä XMLdokumentteja ja XSLT-tiedostoja (stylesheet). Näiden perusteella se tulostaa tulosdokumentteja, jotka voivat olla XML-muotoisia tai myös mitä tahansa muuta formaattia. XML-dokumenttien osien valintaan XSLT:ssä voidaan käyttää XPath-polkuilmaisuja. Alkuun XSLT-dokumentissa voidaan valita tulosteen muoto: <xsl:output method="xml" indent="yes"/> Tässä tapauksessa se on XML-formaattia ja tuloste myös sisennetään. Tulosteen muoto voisi olla myös tekstiä. Varsinaiset muunnokset tehdään mallinteilla (template), joilla valitaan tietoa XMLdokumentista ja määritellään tulosteen muoto. Seuraavaksi nähdään esimerkki mallineesta, jolla muunnetaan XML-dataa formaatista toiseen. <xsl:template match="tv"> <xsl:for-each select="channel"> <Service> <ServiceType>1</ServiceType> <xsl:for-each select="display-name"> <Name xml:lang="{@lang"> <xsl:value-of select="text()"/> </Name> </xsl:for-each> </Service>

24 21 </xsl:for-each> </xsl:template> Yllä on yksinkertainen esimerkki XMLTV:n kanavien muuttamiseksi BCAST ESG -formaattiin. Elementti xsl:template valitsee XML-dokumentista elementtejä ja sen sisällä luodaan tuloselementti. Elementin match-attribuutissa voidaan käyttää XPath-polkuilmaisuja. Forsilmukoita voidaan tehdä xsl:for-each elementillä. Elementti xsl:value-of hakee tietoja XMLtagista palauttaen varsinaisen arvon XML-elementin sijasta. Ehtolauseisiin kuuluvia if-lauseita voidaan tehdä elementillä xsl:if. Sen test-attribuutti kertoo varsinaisen testin. Jos testi on totta, ifelementin lapsielementteinä olevat XSLT-elementit prosessoidaan. <xsl:if > 2 > Yllä olevassa esimerkissä testataan onko id-attribuutti suurempi kuin kaksi. Huomataan, että koska XSLT-kieltä kirjoitetaan XML-muodossa, pitää suurempi kuin -merkistä käyttää erilaista muotoa >. Elementti xsl:choose on muuten samanlainen kuin xsl:if, mutta siinä voi olla useampi vaihtoehto. Siinä elementillä voi olla lapsielementti xsl:when, jossa tehdään samanlainen testi kuin if-elementissä. Jos mikään when-lauseista ei täsmää, voidaan määritellä xsl:otherwise-elementti, joka prosessoidaan siinä tapauksessa. Tällainen tapaus nähdään seuraavassa esimerkissä: <xsl:choose> <xsl:when < 2 > <!-- Tehdään jotakin --> </xsl:when> <xsl:when > 5 > <!-- Tehdään jotakin toista --> </xsl:when> <xsl:otherwise> <!-- Tehdään jotakin ihan muuta --> </xsl:otherwise> </xsl:choose> Elementtiä xsl:template voidaan XSLT:ssä käyttää myös funktiona, jolle voidaan antaa parametreja ja palauttaa arvo, joka voidaan sijoittaa muuttujaan. <!-- Muuttaa XMLTV:n päivämäärän BCAST:n vaatimaan formaattiin. -- > <!-- Esim > T02:40:00Z --> <xsl:template name="convertdate">

25 22 <xsl:param name="d"/> <xsl:variable name="date" select="concat(substring($d,1,4),'- ',substring($d,5,2),'-',substring($d,7,2))"/> <xsl:variable name="clock" select="concat(substring($d,9,2),':',substring($d,11,2 ),':',substring($d,13,2))"/> <xsl:value-of select="concat($date,'t',$clock,'z')"/> </xsl:template> Yllä on esimerkki siitä, kuinka xsl:templatella voidaan muuttaa XMLTV-tyyppinen päivämäärä ja aika BCAST ESG -standardin vaatimaan muotoon. Tätä mallinetta kutsuttaisiin seuraavalla tavalla. <xsl:variable name="start"> <xsl:call-template name="convertdate"> <xsl:with-param name="d" </xsl:call-template> </xsl:variable> Parametriksi annetaan tässä tapauksessa arvo nykyisen elementin attribuutista ja funktion tulos sijoitetaan esiteltyyn muuttujaan start. Jatkossa muuttujaa start voidaan käyttää ilmaisulla $start. XSLT:stä on tehty myös versio 2.0, jossa eräinä uusina ominaisuuksina ovat mahdollisuus käyttää XPathin versiota 2.0, tuki useampien tulosdokumenttien luomiselle ja omien funktioiden esitteleminen uudella xsl:function -elementillä. XSLT:tä voidaan myös itse laajentaa esimerkiksi Java-metodilla [Tidwell, 2001]. Tämä tapahtuisi luomalla metodi Java-koodissa ja kutsumalla sitä seuraavasti. <xsl:template match="int" xmlns:foo="java:com.bar.foo"> <qux> <xsl:value-of select="foo:baz()"/> </qux> </xsl:template> Esimerkissä luodaan paketin com.bar luokka Foo ja sitten kutsutaan sen metodia baz(), jonka paluuarvo sijoitetaan elementin qux sisään.

26 XQuery XQuery [W3C, 2010a] on XML-kyselykieli, joka on samalla myös funktionaalinen ohjelmointikieli, kuten XSLT. Erona XSLT-kieleen on se, että XQueryssä ei käytetä XML-formaattia kielen syntaksin esittämiseen. Toisaalta on kehitetty XQueryX-formaatti, jolla XQuery-kyselyitä voidaan esittää XML-muodossa. XQuery:ssä käytetään FLWOR-ilmauksia, jotka ovat saaneet vaikutteita SQL-kielestä. FLWOR tulee sanoista FOR, LET, WHERE, ORDER BY, RETURN. XQueryn edeltäjänä voidaan pitää Quilt-kieltä, jossa on samantyyppinen for-let-where-return -syntaksi [Robie et al. 2000]. XQuery-kielessä voidaan ohjelmoida funktioita, jotka ottavat sisään muuttujia argumentteina ja palauttavat paluuarvoja. Funktiota voidaan sijoittaa eri nimiavaruuksiin. XQueryssä käytetään XML-dokumenttien osien hakemiseen XPath-ilmaisuja. Muuttujia voidaan esitellä, mutta ne ovat XSLT:n tapaan funktionaalisen ohjelmointikielen muuttujia eli niiden arvoja ei voida jälkikäteen muuttaa. On kuitenkin kehitetty XQueryn lisäosa nimeltä XQuery Scripting Extension [W3C, 2010b], jonka avulla onnistuvat esimerkiksi muuttujien arvojen päivittäminen ja while-silmukat. declare namespace bcast = "bcast"; declare function bcast:channel($c,$id,$cc) { <Service id="ipdc.com/{$id" version="0" globalserviceid="ipdc.com/{$id" weight="{$id" basecid="{$id"> <ServiceType>1</ServiceType> {for $n in $c/display-name return <Name xml:lang="{$n/@lang">{$n/text()</name> ; <PreviewDataReference </Service> idref="ipdc.com/{$id+$cc" usage="2"/> Esimerkissä käytetään nimiavaruutta ja määritellään oma funktio. Kyseinen funktio ottaa parametreinaan XML-elementin muuttujassa $c, uudelle elementille käytettävän id:n muuttujassa $id ja kaikkien kanavien lukumäärän $cc, jota käytetään kanavalogon uniikin id:n laskemiseen.

27 24 Funktiossa käytetään myös for-silmukkaa aaltosulkeiden sisällä, jolloin sen tulostus tulee palautettavan XML-elementin sisään. Funktiossa käytetään myös muuttujia for-silmukan sisällä, sekä funktion saamia attribuuttimuuttujia esimerkiksi kanavalogon id:n laskemiseen. XQuery-kielessä voidaan käyttää doc-funktiota määrittelemään se, että mitä dokumenttia käsitellään. doc('xmltv_example.xml')/tv Näin saadaan haettua juurielementti tv tiedostosta xmltv_example.xml. Where-osiossa voidaan määritellä se, mitä tietoa haetaan jostakin tietystä solmujen joukosta. Order-osiossa taas voidaan määritellä miten tulokset järjestetään. Seuraavassa esimerkissä haetaan kanavat, joiden id-attribuutti on suurempi kuin viisi. Tulosjoukossa kanavat järjestetään nimensä mukaisesti aakkosjärjestykseen. for $x in /tv/channel where $id > 5 order by $x/display-name/text() return $x XQuery-kieleen on tehty laajennuksia, kun on ajateltu sen tarvitsevan lisäominaisuuksia. XQuery Update Facility [W3C, 2011a] on XQuery-kielen laajennus, jonka ideana on tarjota työkalut XML-dokumenttien muuttamiseen. Sen perusoperaatiot ovat lisääminen (insert), poistaminen (delete), solmun tai solmun lapsien vaihtaminen (replace) ja uudelleen nimeäminen (rename). On huomattava, että sillä voidaan muuttaa suoraan XML-dokumenttien sisältöä tai voidaan tehdä kopio XML-dokumentin elementistä ja palauttaa se muutettuna, jolloin alkuperäinen XML-dokumentti jää ennalleen. Seuraavan esimerkin funktiossa on käytetty kopioimismenetelmää, jolloin parametrina saadusta solmusta tehdään kopio, jota muutetaan ja jonka funktio palauttaa. Siinä muutetaan XMLTV-muotoinen kanavaelementti OMA BCAST ESG -tyyppiseksi poistamalla, lisäämällä ja nimeämällä uudelleen elementin solmuja ja attribuutteja. declare namespace bcast = "bcast"; declare function bcast:channel($a) { copy $c := $a modify ( rename node $c as "Service", insert node <ServiceType>1</ServiceType> into $c, delete node $c/icon, insert node <PreviewDataReference idref="0" usage="2"/>

28 25 ; into $c, insert node (attribute { 'a' { 5, 'text', <e/>) into $c ) return $c XQuery and XPath Full Text [W3C, 2011b] on laajennus, jolla saadaan ominaisuudet kokotekstin hakuun. Yleensä tekstihakua tehdään dokumenteista tai sivuista, jotka sisältävät sanoja, jolloin palautetaan sivut tai viitteet niihin. XML-tekstihaussa on kuitenkin se ero, että otetaan huomioon XML-dokumentin rakenne ja voidaan hakea esimerkiksi joistakin tietyistä XML-elementeistä. /tv/programme/title[. ftcontains "uutiset" ] Näin voitaisiin hakea XMLTV-muotoisesta dokumentista kaikki ohjelmat, joiden nimi sisältää merkkijonon "uutiset". Tämä hakisi siis esimerkiksi sellaiset ohjelmat kuin "Viittomakieliset uutiset" ja "Seitsemän uutiset". Edistyneemmissä kyselyissä voidaan esimerkiksi vaikuttaa sanojen järjestykseen, määrään, kaikkien annettujen sanojen esiintymiseen tai vain joidenkin. Koska XQuery on oletusarvoisesti funktionaalinen ohjelmointikieli, ei siinä voida muuttujien arvoja muuttaa niiden määrittelyn jälkeen. Tämä voi esimerkiksi mobiilitelevision ohjelmaoppaiden muunnoksissa aiheuttaa ongelmia sen takia, että jokaiselle fragmentille pitäisi generoida oma, uniikki numeerinen id. Tämä onnistuisi helpoiten pitämällä globaalia muuttujaa, jota kasvatettaisiin aina yhdellä, kun tulosdokumenttiin on luotu uusi fragmentti. Tämän kuitenkin mahdollistaa XQuery Scripting Extension, joka tuo XQuery-kieleen muuttujien arvojen muuttamisen lisäksi esimerkiksi while-silmukat [W3C, 2010b]. Seuraavana esitetään esimerkki XQuery-skriptistä, jolla luodaan Fibonaccin luvut, jotka ovat pienempiä kuin sata. Fibonaccin luvut muodostuvat laskemalla yhteen kaksi edellistä lukua, jolloin saadaan seuraavan luvun arvo. block { declare $a as xs:integer := 0; declare $b as xs:integer := 1; declare $c as xs:integer := $a + $b; declare $fibseq as xs:integer* := ($a, $b); while ($c < 100) { $fibseq := ($fibseq, $c); $a := $b; $b := $c;

29 26 ; $c := $a + $b; $fibseq; Yllä olevasta esimerkistä huomataan, kuinka muuttujat esitellään declare-ilmaisulla ja muuttujien arvoja muutetaan while-silmukan sisällä. Tätä tekniikkaa voitaisiin käyttää BCAST ESG - standardin mukaisia fragmenttien uniikkeja id:tä generoidessa. Voitaisiin käyttää esimerkiksi yhtä globaalia muuttujaa, jota päivitettäisiin aina yhdellä, kun luodaan uusi fragmentti SAX-tekniikka ja DOM SAX (Simple API for XML) [SAX, 2012] on ohjelmointirajapinta XML-dokumenttien jäsentämiseen (parsing). Se on tapahtumapohjainen rajapinta eli se antaa XML-dokumentin osista tietoa ohjelmoijan määrittelemille metodeille peräkkäisessä järjestyksessä. SAX antaa elementtien kohdalla tiedon elementin alkamisesta, elementin merkkidatasta ja elementin loppumisesta. Elementin alkamisen kohdalla voidaan lukea elementtiin liittyvät attribuutit ja niiden arvot. private String currentpath = public void startelement(string uri, String localname, String qname, Attributes attributes) throws SAXException { currentpath += "/" + public void endelement(string uri, String localname, String qname) throws SAXException { currentpath = currentpath.substring(0,currentpath.lastindexof("/")); Tässä yksinkertaisessa esimerkissä käytetään XPath-tyyppistä polkuilmaisua pitämään lukua siitä, missä kohtaa XML-dokumentin hierarkiapuussa mennään. Elementin alussa kauttaviiva ja elementin nimi lisätään nykyiseen polkuun, joka on ohjelman alussa asetettu tyhjäksi merkkijonoksi. Elementin lopussa viimeinen kauttaviivalla erotettu elementin nimi poistetaan polusta, jolloin ollaan taas ajan tasalla siinä, missä kohdassa mennään. Tätä polkuilmaisua voidaan

30 27 käyttää hyväksi esimerkiksi merkkijonodataa haettaessa. Seuraavassa esimerkissä haetaan XMLTV:n kanavaelementistä kanavan public void characters(char[] ch, int start, int length) throws SAXException { if(currentpath.equals("/tv/channel/display-name")) { String channelname = new String(ch, start, length).trim(); Kanavan nimeen liittyvä kieliattribuutti haetaan seuraavasti. Tässä "lang" on kanavan nimen kieliattribuutin public void startelement(string uri, String localname, String qname, Attributes attributes) throws SAXException { currentpath += "/" + qname; if(currentpath.equals("/tv/channel/display-name")) { String channelnamelang = attributes.getvalue("lang"); SAX-tekniikassa ei ole ominaisuuksia uuden XML-dokumentin muodostamiseen, joten tulosdokumentti voidaan muodostaa yksinkertaisesti tulostamalla tekstiä suoraan tiedostoon. Tämä voidaan tehdä esimerkiksi endelement-metodissa, jossa yksi XML-elementti päättyy. Tarvittavat tiedot pitää tallentaa muistiin elementin prosessoinnin ajaksi, jotta ne voidaan elementin lopussa tulostaa tulosdokumenttiin. Esimerkissämme tämä olisi XMLTV:n kanavaelementin päättyminen, jolloin tulostetaan saadut tiedot BCAST ESG -muodossa. Seuraavaksi annetaan esimerkki BCAST ESG:n kanavalogoelementin muodostamisesta. Toisin kuin esimerkiksi XQuery-kielessä, voidaan Javassa muuttujien arvoja muuttaa vapaasti ja näin käyttää uniikeille id-arvoille juoksevaa numeroa, jota kasvatetaan aina yhdellä, kun tehdään uusi fragmentti. Lisäksi voidaan lisätä ohjelmakoodia kuten if-lauseita tarpeen mukaan tarvittaviin kohtiin.

31 28 currentid++; out.println("\t<previewdatareference idref=\"ipdc.com/" + currentid + "\" usage=\"2\"/>"); out.println("</service>"); // Tekee kanavalogoelementin. Tiedoston nimi haetaan urlista ja mime-tyyppi päätellään out.println("<previewdata id=\"ipdc.com/" + currentid + "\" version=\"0\">"); out.println("\t<picture>"); String filename = iconsrc.substring(iconsrc.lastindexof('/')+1); String prefix = filename.substring(filename.lastindexof('.')+1); out.println("\t\t<pictureuri>" + filename + "</PictureURI>"); String mime = ""; if(prefix.equals("jpg")) { mime = "jpeg"; else { mime = prefix; out.println("\t\t<mimetype>image/" + mime + "</MIMEType>"); out.println("\t\t<alternativetext>picture cannot be shown</alternativetext>"); out.println("\t</picture>"); out.println("\t<accessreference idref=\"ipdc.com/" + (currentid+50000) + "\" usage=\"0\"/>"); out.println("</previewdata>"); DOM (Document Object Model) [W3C, 2004c] on puupohjainen malli XML-dokumenteille. Sillä voidaan XML-dokumentin hierarkiapuusta hakea tietoa ja toisaalta voidaan myös koota kokonaan uusi puu ja tehdä siitä XML-dokumentti. Lisäksi voidaan muuttaa alkuperäistä DOM-puuta esimerkiksi poistamalla ja lisäämällä elementtejä. XML-muunnosten tekeminen on siis täysin mahdollista myös DOM-tekniikalla. SAX-jäsentimen ja DOM-tekniikan tärkein ero on se, että SAX on ohjelmointitekniikaltaan tapahtumapohjainen ja DOM puupohjainen. Uudemmissa DOMversioissa on kehitetty myös tapoja hakea tietoja DOM-puusta XPath-ilmaisuilla.

32 29 DOM-mallissa XML-dokumentin osat kuvataan rajapinnoilla, joiden esi-isä on solmu (Node). Sen alitapauksia ovat dokumentti (Document), elementti (Element), attribuutti (Attr), tekstiosio (Text) ja kommentti (Comment). Kun XML-dokumentti jäsennetään DOM-jäsentimellä, se luo tarvittavat oliot, jotka ovat muotoa Element, Attr ja niin edelleen riippuen siitä, minkälaista osaa dokumentista ne esittävät. Nämä oliot luodaan puun muotoiseen tietorakenteeseen. Jokaisella elementtioliolla voi olla tiettyjä ominaisuuksia ja lapsia. Koska DOM-mallia käytettäessä dokumentti jäsennetään kokonaan, ennen kuin varsinaista ohjelman suoritusta voi tapahtua, tässä voi suurien dokumenttien kohdalla kestää varsin kauan [Tidwell, 2001]. Kun DOM-puu on luotu, voidaan siinä kulkea kysymällä ensin juurielementtiä ja sitten sen lapsia, joiden lapsiin päästään käsiksi. XML-muunnoksia voidaan tehdä myös luomalla kokonaan uusi puu muistiin XML-dokumentista luodun puun avulla. Lopuksi tämä muistiin luotu puu voidaan tallentaa tiedostoon Muut muunnoskielet XDuce [Hosoya and Pierce, 2003] on staattisesti tyypitetty ohjelmointikieli, joka on tarkoitettu nimenomaan XML-datan käsittelyyn. Staattisesti tyypitetyllä ohjelmointikielellä tarkoitetaan tässä kieltä, jossa dokumentit tai niiden osat vastaavat aina skeemaansa. Tällä pyritään estämään se, että epävalideja dokumentteja tai XML-prosessointikoodia ei pääse ikinä syntymään. XDuce-kielessä on kehitetty oma, säännöllisiin lausekkeisiin perustuva tyyppijärjestelmä, jolla XML-dokumenttien rakenne kuvataan [Hosoya and Pierce, 2003]. Tulevissa esimerkeissä käsitellään dokumenttia, jonka rakenne on seuraava. <addrbook> <person> <name>haruo Hosoya</name> < >hahosoya</ > < >haruo</ > </person> <person> <name>jerome Vouillon</name> <tel> </tel> < >vouillon</ > </person> <person> <name>benjamin Pierce</name> < >pierce</ > </person> </addrbook>

33 30 Se kuvattaisiin XDuce-tyyppinä näin: type Addrbook = addrbook[person*] type Person = person[(name,tel?,addr* )] type Name = name[string] type Tel = tel[string] type Addr = addr[string] Tästä huomataan, että määritelmän rakenne on hyvin samantapainen DTD-skeeman kanssa. Saman dokumentin DTD olisikin seuraavanlainen. <!ELEMENT addrbook (name,tel?,addr*)*> <!ELEMENT name #PCDATA> <!ELEMENT tel #PCDATA> <!ELEMENT addr #PCDATA> XDuce-kielessä voidaankin ladata myös DTD-skeemoja ja muuntaa niitä XDuce-tyypeiksi. XMLmuunnokset XDuce-kielellä tehdään määrittelemällä funktioita, joissa käytetään operaattoria "->" ilmaisemaan muunnosta vasemmalla olevasta arvosta oikealla olevaan. Seuraavaksi annetaan esimerkki XDucen muunnosfunktiosta, joka palauttaa esimerkkidokumentin henkilöitä, mutta niin, että otetaan vain puhelinnumero. Se koostuu kolmesta tapauksesta, joita käsitellään. Ensimmäisessä on sekvenssi, joka koostuu nimestä, osoitteesta ja puhelinnumerosta. Nimi ja puhelinnumero otetaan ja kutsutaan lopulle funktiota rekursiivisesti. Toisessa tapauksessa puhelinnumero ei ole osoitteen jälkeen, joten kutsutaan loppua taas rekursiivisesti. Kolmannessa tapauksessa lopetetaan rekursio palauttamalla tyhjä lista silloin, kun lista on tyhjä. fun mktellist (val e as (Name,Addr,Tel?)*) : (Name,Tel)* = match e with name[val n], addr[val a], tel[val t], val rest -> name[n], tel[t], mktellist(rest) name[val n], addr[val a], val rest -> mktellist(rest) () -> () CDuce [Benzaken et al., 2003] on samantapainen kieli kuin XDuce, josta se lainaa monia ominaisuuksia kuten tyyppijärjestelmän. Se kuitenkin lisää myös muitakin kuin XML-tyyppejä.

34 31 Lisäksi se tukee esimerkiksi funktioiden ylikuormittamista, iteraattoreita sekvenssien ja puiden käsittelyyn [Benzaken et al., 2003]. XDuce ja CDuce vaikuttavat hieman vaikeasti opittavilta kieliltä, sillä ne ovat syntaksiltaan hieman erilaisia kuin perinteiset ohjelmakielet. Tämä on voinut olla osittain syynä siihen, että ne eivät ole ikinä yleistyneet samaan tapaan kuin XQuery ja XSLT. Toisaalta jälkimmäisillä kielillä on myös W3C-organisaation standardin asema, joten ne ovat varmasti senkin takia yleistyneet käytössä enemmän kuin yliopistomaailmassa syntyneet XDuce ja CDuce. XML-QL [Deutch et al., 1999] on hieman relaatiotietokantojen SQL-kyselykielen tapainen XML-kyselykieli. Siinä käytetään SELECT-WHERE -rakennetta kyselyjen muotoilemiseen. XMLmuunnoksia voidaan tehdä lisäämällä loppuun CONSTRUCT-osa, jossa muotoillaan tulos, kuten XQuery-kielen return-osassa. XML-QL-kielessä muuttujat merkitään samalla tavalla kuin XSLT- ja XQuery-kielissä, eli niissä on dollarimerkki ($) muuttujan nimen edessä. Erikoista on se, että WHERE-osassa esitetään haettava tieto XML-muodossa ja muuttujat sijoitetaan haluttuihin kohtiin rakenteessa. Annetut elementtimallit (patterns) sovitetaan annettuihin dokumentteihin [Lehtonen, 2011]. WHERE <channel id="$id"> <display-name lang="$lang">$name</display-name> <icon src="$iconsrc"/> </channel> IN "xmltv_example.xml" CONSTRUCT <Service id="ipdc.com/1" basecid="1" globalserviceid="ipdc.com/1" weight="1" version="0"> <ServiceType>1</ServiceType> <Name xml:lang="$lang">$name</name> </Service> Yllä nähdään esimerkki XML-QL-kyselykielellä tehdystä XML-muunnoksesta, jossa muunnetaan XMLTV-muotoinen kanavaelementti OMA BCAST ESG -tyyppiseksi kanavaelementiksi. XMLmuunnosten kannalta hyvä asia tässä kielessä on se, että samalla kertaa nähdään selkeästi sekä syöte-elementin että tuloselementin rakenne. Lisäksi nähdään se, miten muuttujat sijoittuvat syötedokumentissa ja mihin kohtaan ne sijoitetaan tulosdokumentissa. XML-QL on kohtuullisen vanha kyselykieli, jonka dokumentaatio on tehty vuonna XML-QL ei ole kuitenkaan yleistynyt käytössä, eikä siitä juuri löydy käyttökelpoisia toteutuksia. Yksi toteutuksista on Perlkielellä toteutettu XML::QL, joka vaikutti ainakin yksinkertaisten kyselyiden tekemiseen

35 32 toimivalta. XML-QL on toiminut yhtenä esikuvista sekä XQuerylle että XSLT:lle, jotka ovat syrjäyttäneet sen XML-liukuhihnat ja XProc XML-liukuhihna (XML pipeline) [Wikipedia, 2012] koostuu XML-prosesseista, jotka on linkitetty peräkkäin. Prosessit voivat olla erityisesti XML-muunnoksia ja XML-validointeja. Otetaan muunnokset T1 ja T2, jolloin syötedokumentti kulkee ensin muunnoksen T1 läpi ja sen syötedokumentti annetaan lähdedokumentiksi muunnokselle T2. XML-dokumentin käsittelemiseen käytetään mikro-operaatioita. Niitä ovat uudelleennimeäminen, korvaaminen, lisääminen, poistaminen, uusien elementtien lisääminen ja elementtien järjestyksen vaihtaminen. Ensimmäinen operaatioiden ryhmä on lineaariset operaatiot. Dokumenttioperaatiot käsittelevät dokumenttia kokonaisuutena. Identiteettimuunnos (identity transform) tarkoittaa lähdedatan kopioimista sellaisenaan ilman muutoksia. Muita dokumenttioperaatioita ovat dokumenttien vertaileminen, muunnos XSLT-dokumenttia käyttäen ja XML-dokumentin jakaminen useampaan dokumenttiin. Sekvenssioperaatiot on tarkoitettu useamman dokumentin sisältävän sekvenssin käsittelyyn. Näitä ovat dokumenttien määrän laskeminen, sekvenssin kopioiminen, sekvenssin jakaminen osiin ja sekvenssin sisällyttäminen yhteen tai useampaan dokumenttiin. Toinen operaatioiden ryhmä on epälineaariset operaatiot. Ehtolause tarkoittaa sitä, että yksi muunnos suoritetaan, jos ehtolause on tosi ja toinen, jos se ei ole. Silmukoita käytetään muunnoksien jatkuvaan tekemiseen, kunnes jokin ehto täyttyy. Dokumentti voidaan syöttää myös useampiin muunnoksiin, jotka voivat tapahtua samanaikaisesti. Useampia dokumentteja voidaan aggregoida yhdeksi dokumentiksi. Yksi osa epälineaarisista operaatioista on poikkeuksien hallinta. Sillä tarkoitetaan toisen prosessin suorittamista mahdollisen virhetilanteen sattuessa. XProc [W3C, 2010c] on W3C:n suositus vuodelta 2010 XML-liukuhihnan toteuttavaksi XML-muunnoskieleksi. Kielen syntaksi noudattaa XML-formaattia. Siinä voidaan käyttää XPathpolkuilmaisuja mikro-operaatioiden suorittamiseen. Niihin voidaan käyttää XPath-kielen versiota 1.0 tai 2.0. XProc muodostuu askeltyypeistä (step type), askelista (step), syöteporteista (input port), tulosporteista (output port), muuttujista ja parametreista. XProcin ydinaskelet ovat liukuhihnoja, dokumenttisekvenssejä käsitteleviä for-silmukoita, ehtolauseita, ryhmittelylauseita ja poikkeuksien käsittelyitä (try/catch). Muunnosten tekemiseen voidaan käyttää XProcin standardia askelkirjastoa. Esimerkiksi attribuutin lisääminen elementtiin tapahtuisi käyttämällä elementtiä p:add-attribute. Dokumentaatiossa se on määritelty tällä tavalla: <p:declare-step type="p:add-attribute"> <p:input port="source"/> <p:output port="result"/> <p:option name="match"

36 33 required="true"/> <!-- XSLTMatchPattern --> <p:option name="attribute-name" required="true"/> <!-- QName --> <p:option name="attribute-prefix"/> <!-- NCName --> <p:option name="attribute-namespace"/> <!-- anyuri --> <p:option name="attribute-value" required="true"/> <!-- string --> </p:declare-step> Yksi perusaskelista on XSLT-tiedostojen käyttäminen muunnosten tekemiseen: <p:xslt> <p:input port="stylesheet"> <p:document href="stylesheet.xsl"/> </p:input> </p:xslt> Tässä nähdään esimerkki XSLT-dokumentin käytöstä XProc-liukuhihnan sisällä Kaksisuuntaiset XML-muunnokset Perinteisiä XML-muunnoskieliä, kuten XQuery ja XSLT, käytettäessä XML-muunnos tapahtuu vain yhteen suuntaan formaatista toiseen. Jos haluttaisiin tehdä muunnos myös toiseen suuntaan, pitäisi kirjoittaa toinen ohjelma siihen tarkoitukseen. Esimerkiksi mobiilitelevision ohjelmatietojen kohdalla voisi joskus olla mahdollista muuntaa XML-dataa esimerkiksi BCAST ESG -formaatista myös takaisin XMLTV-formaattiin. Kaksisuuntaisiin XML-muunnoksiin onkin kehitetty erilaisia tekniikoita. BiXid [Kavanaka and Hosoya, 2006] on XML-muunnoskieli, jota käytettäessä tarvitsee kirjoittaa vain yksi ohjelma molempiin suuntiin tapahtuvaa XML-muunnosta varten. Siinä käytetään jo aiemmin esitellyn XDuce-kielen tyylisiä säännöllisiin lausekkeisiin perustuvia malleja. XDuce-kielessä käytetään yksisuuntaista nuolioperaattoria ilmaisemaan muunnosta sen vasemmalla puolella olevasta formaatista oikealla puolella olevaan [Hosoya and Pierce, 2003]. BiXid laajentaa

37 34 tämän esittelemällä operaattorin "<->" eli kaksisuuntaisen nuolen, jolloin muunnos tapahtuu molempiin suuntiin [Kavanaka and Hosoya, 2006]. Seuraavassa esimerkissä muunnetaan relaatiolla item henkilöelementti korttielementiksi, lisäksi on esitetty molempien XML-formaattien perusrakenne. Relaatiossa nimi ilmoitetaan muuttujalla n, osoite muuttujalla a ja sijainti muuttujalla l. Kyselyn where-osa määrittelee sen, että osoite ja sijainti ovat yhteydessä toisiinsa relaatiolla address_content, jota ei ole tässä määritelty. relation item = person[name[var n as String], address[var a]*] <-> card[person-name[var n as String], location[var l]*] where address_content(a, l) <person> <name/> <address/> </person> <card> <person-name/> <location/> </card> BiXJ [Liu et al., 2005] on erilainen lähestymistapa kaksisuuntaisiin XML-muunnoksiin. Se on Javakirjasto, jota voidaan käyttää olemassa olevien XML-muunnosten muuntamiseen kaksisuuntaisiksi. Tämä voidaan tehdä sekä XQuery-kielellä että XSLT:llä tehdyille muunnoksille. Kyseinen Javakirjasto tarjoaa metodit eteenpäin ja taaksepäin tapahtuviin XML-muunnoksiin. Se ei kuitenkaan tee esimerkiksi XQuery-kyselystä toista XQuery-kyselyä, joka tekisi muunnoksen toiseen suuntaan. Sen sijaan kyselyt muunnetaan kirjaston omaan XML-muotoiseen BiX-formaattiin, jota voidaan käyttää muunnosten tekemiseen molempiin suuntiin. Käytännössä tämä tapahtuu [BiXJ, 2012] ensin muuntamalla XQueryn toteuttavalla Galaxohjelmalla XQuery-kyselyn XQuery-ydinilmaisut (XQuery core expression). Tämän jälkeen kysely voidaan muuntaa X2B-kirjastolla BiX-formaattiin, jota käyttämällä voidaan tehdä XMLmuunnokset molempiin suuntiin Visuaaliset XML-muunnostyökalut VXT [Pietriga et al., 2001] on visuaalinen ohjelmointikieli, joka on erityisesti suunniteltu XMLmuunnosten tekemiseen. Siinä on interaktiivinen ympäristö, jonka tarkoituksena on vapauttaa

38 35 käyttäjä monimutkaisista mentaalisista malleista, jotka liittyvät datan rakenteeseen. Siinä muunnokset määritellään enimmäkseen visuaalisesti mallilla, joka on pitkälti XSLT:n tapainen. Muunnokset voidaan tallentaa XSLT-muodossa tai Circus-lähdekoodina. Circus on ohjelmointikieli, joka on tarkoitettu yleisesti datan rakenteiden muuntamiseen. Se sopii myös XMLdokumenttien muunnosten tekemiseen [Vion-Dury et al., 2002]. VXT:n käyttöliittymässä XML-dokumentit ja niiden skeemat voidaan esittää puurakenteena, jossa elementit esitetään neliöinä, attribuutit kolmioina ja elementtien sisällöt vinöneliöinä. Puiden lisäksi voidaan käyttää puukarttoja (treemap), joissa sisäkkäiset elementit esitetään vanhempiensa sisällä olevina pienempinä neliöinä. Kuva 6. XMLTV-formaatti yksinkertaistettuna esitettynä treemap-kuvaajalla. VXT-järjestelmässä muunnokset ilmaistaan visuaalisilla mallinsovitusilmauksilla (Visual Pattern-Matching Expression, VPME). Niitä voidaan pitää filttereinä, jotka valitsevat tietoa lähdedokumentista. VPME-ilmaukset rakennetaan pääosin visuaalisesti graafisella käyttöliittymällä. Muunnosoperaatioissa on kolme vaihtoehtoa; kopio, tekstiarvon siirtäminen ja sääntöjen soveltaminen. Jokainen edellämainituista esitetään käyttöliitymässä omana ikoninaan [Pietriga et al., 2001]. Pietrigan ja kumppanien [2001] mukaan visuaalisissa ohjelmointikielissä ei ole helppoa kuvata silmukoita. Niinpä VXT:ssä yritetään piilottaa silmukoiden tekeminen käyttäjältä mahdollisimman hyvin. Myös ehtolausekkeiden määrittely onnistuu VXT-kielessä visuaalisesti. XQBE (XQuery By Example) on visuaalinen ympäristö, joka mahdollistaa XQuery-kyselyiden muodostamisen visuaalisesti [Braga et al., 2005]. Sen suunnittelutavoitteena on ollut se, että vähemmän kokeneet XQuery-käyttäjät voivat tuottaa sillä kyselyitä ja kokeneemmat voivat nopeuttaa kyselyiden tekemistä.

39 36 Kuva 7. XML-muunnos XMLTV-formaatista OMA BCAST ESG -formaattiin XQBEsovelluksella. XQBE-ohjelman käyttöliittymässä XML-dokumentin rakenne kuvataan puumallina, joka voidaan rakentaa itse tai tehdä automaattisesti DTD-määrityksen tai XML-skeeman avulla. Lähdedokumentti rakennetaan vasemmalle ja kohdedokumentti oikealle. Kuvassa 7 nähdään XMLTV-formaatin kanavaelementti, jonka nimielementit on muutettu OMA BCAST ESG - formaatin vastaavaksi elementiksi. Elementtien ja niiden sisältöjen vastaavuudet ilmaistaan vetämällä kaari lähdedokumentista kohdedokumenttiin. Käyttöliittymässä on painike, jolla voidaan tuottaa visuaalista kyselyä vastaava XQuery-kysely, joka voidaan myös ajaa tarvittaessa käyttöliittymästä. Tarjolla on myös kaupallisia tuotteita visuaaliseen XML-muunnosten tekemiseen. Stylus Studio [Stylus Studio, 2012] on integroitu kehitysympäristö (Integrated Development Environment, IDE), joka sisältää useita työkaluja XML-dokumenttien käsittelyyn. Näihin työkaluihin sisältyy useita XML-muunnoksiin tarkoitettuja työkaluja, esimerkisi relaationaalisten SQL-tietokantojen datan muuntamiseksi XML-muotoon. Kiinnostavin tämän työn kannalta on XML-to-XML Mapper, jolla voidaan tehdä XML-muunnoksia formaatista toiseen. Tämä tapahtuu antamalla ensiksi formaattien kuvaukset, joko XML-skeemana tai esimerkkidokumentin avulla. Näiden perusteella molemmat dokumentit kuvataan puurakenteina ruudun molemmilla puolilla. XML-muunnoksien tekemiseen tarjotaan graafinen käyttöliittymä, jossa voidaan vetää viivoja lähdedokumentin halutuista osista

40 37 kohdedokumentin haluttuihin osiin. Ohjelma generoi muunnokset joko XQuery- tai XSLTmuodossa, jotka näytetään ja päivitetään graafisessa käyttöliittymässä sitä mukaa, kun muunnoksia tehdään. Kuva 8. Altova MapForce -ohjelman tarjoama työkalu visuaaliseen XML-muunnoksen suunnitteluun. Altova MapForce [Altova, 2012] on datan muuntamiseen tarkoitettu työkalu, joka tukee XML:n lisäksi relaatiotietokantoja ja monia muita dataformaatteja. Se on XML-muunnosten tapauksessa käyttöliittymältään hyvin samantapainen kuin Stylus Studio. Siinä voidaan XQueryn ja XSLT:n lisäksi tallentaa muunnokset ohjelmointikielillä, kuten Java, C# ja C++, toteutettuina. Kaupalliset XML-muunnoksiin tarkoitetut sovellukset vaikuttavat erittäin käyttökelpoisilta ainakin perusmuunnosten tekemiseen. Niistä ei kuitenkaan löydy tukea esimerkiksi merkkijonooperaatioiden tekemiseen visuaalisesti, joten ymmärrystä XML-kyselykielten ohjelmointiominaisuuksista kuitenkin tarvitaan. Mobiilitelevision mobiilioppaiden tapauksessa myös BCAST ESG -formaatin fragmenttien uniikkien id:den generointi olisi tarpeen, eikä sekään onnistu kyseisillä visuaalisilla työkaluilla muuten kuin editoimalla itse tuotettua koodia käsin.

Hohde Consulting 2004

Hohde Consulting 2004 Luento 5: XQuery AS-0.110 XML-kuvauskielten perusteet Janne Kalliola XQuery XQuery uudet funktiot sekvenssit muuttujat Iterointi järjestys suodatus järjestäminen Ehtorakenteet Muita toimintoja www.hohde.com

Lisätiedot

P e d a c o d e ohjelmointikoulutus verkossa

P e d a c o d e ohjelmointikoulutus verkossa P e d a c o d e ohjelmointikoulutus verkossa XML-kielen perusteet Teoria ja ohjelmointitehtävät XML-kielen perusteet 3 Sisältö YLEISKATSAUS KURSSIN SISÄLTÖIHIN... 7 YLEISKATSAUS KURSSIN SISÄLTÖIHIN...

Lisätiedot

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

Sisältö. XML, XHTML ja CSS XML XML. XML:n ja HTML:n ero. XML kieliä XML XHTML CSS XSL. T Hypermediadokumentin laatiminen 2002 , XHTML ja CSS T-111.361 Hypermediadokumentin laatiminen 2002 XHTML CSS XSL Sisältö EXtensible Markup Language W3C Recommendation helmikuu 1998 SGML:n osajoukko Standard Generalized Markup Language Kevyempi

Lisätiedot

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

XML prosessori. XML prosessointi. XML:n kirjoittaminen. Validoiva jäsennin. Tapahtumaohjattu käsittely. Tapahtumaohjattu käsittely. XML prosessointi Miten XML dokumentteja luetaan ja kirjoitetaan XML prosessori lukee ja välittää XML dokumentin sovellukselle. Se sisältää entieettikäsittelijän (mahdollisesti) XML jäsentimen Sovellus

Lisätiedot

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti Teknillinen korkeakoulu 51 Vaatimusmäärittely Ohjelma-ajanvälitys komponentti Versio Päiväys Tekijä Kuvaus 0.1 21.11.01 Oskari Pirttikoski Ensimmäinen versio 0.2 27.11.01 Oskari Pirttikoski Lisätty termit

Lisätiedot

Digitaalinen Televisio

Digitaalinen Televisio Digitaalinen Televisio Digitaalinen Televisio 1. Lähetystekniikka ja standardit 2. MHP 3. Interaktiivinen Televisio 4. Vastaanottimet 5. Tulevaisuuden trendit Lähetystekniikka ja standardit DVB = Digital

Lisätiedot

DNA MOBIILI TV - YLEISET KÄYTTÖOHJEET

DNA MOBIILI TV - YLEISET KÄYTTÖOHJEET DNA MOBIILI TV - YLEISET KÄYTTÖOHJEET Mobiili-tv-palvelua käytetään puhelimen mobiili-tv-sovelluksella. Tässä dokumentissa kuvatut toiminnallisuudet ovat esimerkkejä tiettyjen puhelinmallien toiminnallisuuksista.

Lisätiedot

Web-teknologiat. XML-datan kysely Topi Sarkkinen

Web-teknologiat. XML-datan kysely Topi Sarkkinen Web-teknologiat XML-datan kysely Topi Sarkkinen Sisältö XML (lyhyesti) XPath XQuery XSLT XML Extensible Markup Language Ihmisten ja koneiden luettava metakieli, jolla voidaan määritellä muitakin kieliä

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

XSLT - ohjelmoinnin perusteet. Jaana Holvikivi Metropolia

XSLT - ohjelmoinnin perusteet. Jaana Holvikivi Metropolia XSLT - ohjelmoinnin perusteet Jaana Holvikivi Metropolia Johdanto: Muunnetaan XML-dokumentti HTML-muotoon (transformation)

Lisätiedot

CSE-A1200 Tietokannat

CSE-A1200 Tietokannat CSE-A1200 Tietokannat Osa kalvoista perustuu Juha Puustjärven luentokalvoihin kurssilta T-76.1143 sekä kurssin oppikirjaan 3.5.2016 CSE-A1200 Tietokannat 3.5.2016 1 / 39 Oppimistavoitteet: tämän luennon

Lisätiedot

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1 Digitaalisen median tekniikat JSP ja XML 28.4.2004 Harri Laine 1 JSP hyvin lyhyesti JSP on Java-pohjainen skriptikieli JSP:llä laadittu sivu käännetään java-servletiksi (sivun toteutus vastaa servlettiluokan

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

M. Merikanto 2012 XML. Merkkauskieli, osa 2

M. Merikanto 2012 XML. Merkkauskieli, osa 2 XML Merkkauskieli, osa 2 Esimerkki: XML-dokumentti resepti maitokaakao

Lisätiedot

Digitaalisen median tekniikat. JSP ja XML

Digitaalisen median tekniikat. JSP ja XML Digitaalisen median tekniikat JSP ja 28.4.2004 Harri Laine 1 JSP hyvin lyhyesti JSP on Java-pohjainen skriptikieli JSP:llä laadittu sivu käännetään java-servletiksi (sivun toteutus vastaa servlettiluokan

Lisätiedot

1. Palvelun yleiskuvaus... 2. 2. Edut asiakkaille... 2. 3. Palvelun tilaaminen, käyttö ja soveltuvat päätelaitteet... 3. 3.1 Tilaus...

1. Palvelun yleiskuvaus... 2. 2. Edut asiakkaille... 2. 3. Palvelun tilaaminen, käyttö ja soveltuvat päätelaitteet... 3. 3.1 Tilaus... 1 (6) DNA MOBIILI TV - PALVELUKUVAUS SISÄLTÖ 1. Palvelun yleiskuvaus... 2 2. Edut asiakkaille... 2 3. Palvelun tilaaminen, käyttö ja soveltuvat päätelaitteet... 3 3.1 Tilaus... 3 3.2 Tilauksen lopetus...

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

Opintosuoritukset. Kaaviokuva

Opintosuoritukset. Kaaviokuva Opintosuoritukset Opintosuoritukset-tiedonsiirtoskeema. XML-skeema jonka avulla voidaan siirtää useita opintosuoritusten tietoja kerralla. Skeeman voi myös lukea sisään muihin skeemoihin jolloin myös yksittäisiä

Lisätiedot

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet A271117, Tietokannat Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: Leon Atkinson: core MySQL Ari Hovi: SQL-opas TTY:n tietokantojen perusteet-kurssin

Lisätiedot

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

XML kielioppi. Elementtien ja attribuuttien määrittely. Ctl230: Luentokalvot Miro Lehtonen XML kielioppi Elementtien ja attribuuttien määrittely Ctl230: Luentokalvot 11.10.2004 Miro Lehtonen Dokumenttien mallinnus Säännöt dokumenttityypeille 3Mahdollisten dokumenttirakenteiden määrittely Samassa

Lisätiedot

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A4000 - Kandidaatintyö ja seminaari

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A4000 - Kandidaatintyö ja seminaari LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A4000 - Kandidaatintyö ja seminaari Alkuraportti Avoimen lähdekoodin käyttö WWW-sovelluspalvelujen toteutuksessa Lappeenranta, 30.3.2008,

Lisätiedot

Poikkeusinfo XML-rajapinnan kuvaus, rajapinnan versio 2 Seasam Group

Poikkeusinfo XML-rajapinnan kuvaus, rajapinnan versio 2 Seasam Group 1.10.2010 1(15) Poikkeusinfo XML-rajapinnan kuvaus, rajapinnan versio 2 Seasam Group Graanintie 7 Tel. + 358 15 338 800 FIN-50190 MIKKELI Fax + 358 15 338 810 VERSIOHISTORIA Versio Pvm Tekijä Selite 1.0

Lisätiedot

Luento 12: XML ja metatieto

Luento 12: XML ja metatieto Luento 12: XML ja metatieto AS-0.110 XML-kuvauskielten perusteet Janne Kalliola XML ja metatieto Metatieto rakenne sanasto Resource Description Framework graafikuvaus XML Semanttinen Web agentit 2 1 Metatieto

Lisätiedot

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

6 XML-työkalut 1. 6 XML-työkalut 6 XML-työkalut 1 6 XML-työkalut XML:n periaatteiden tutustumisen jälkeen on helpompi tutustua XML-dokumenttien käsittelyyn ja katseluun suunniteltuja työkaiuja. XML:n yleistymisen pahin pullonkaula on

Lisätiedot

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

XML, XHTML ja CSS. T-111.361 Hypermediadokumentin laatiminen. Mikko Pohja XML, XHTML ja CSS T-111.361 Hypermediadokumentin laatiminen Mikko Pohja Sisältö XML Yleensä Eri kieliä XHTML CSS XSL XML EXtensible Markup Language W3C Recommendation helmikuu 1998 SGML:n osajoukko Standard

Lisätiedot

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

WWW-ohjelmoinnin kokonaisuus. WWW-OHJELMOINTI 1 Merkkauskielet. Merkkauskielten idea. Merkkauskielet (markup languages) Merkkauskielten merkitys WWW-OHJELMOINTI 1 WWW-ohjelmoinnin kokonaisuus SGML, XML, HTML WWW-selaimen sovellusohjelmointi WWW-palvelimen sovellusohjelmointi Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 26.10.2000

Lisätiedot

TIETOKONE JA TIETOVERKOT TYÖVÄLINEENÄ

TIETOKONE JA TIETOVERKOT TYÖVÄLINEENÄ Kuva 1 Ville Ranta ville.p.j@student.jyu.fi TIETOKONE JA TIETOVERKOT TYÖVÄLINEENÄ 20.4.2016 Sisällysluettelo 1. Digitaalitelevisio... 1 1.1. Maanpäällisten digitaalilähetysten standardit eri maissa...

Lisätiedot

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä: Linux-harjoitus 6 Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä: http://www.mysql.com/, MySQL-tietokantaohjelman kotisivu. http://www.mysql.com/doc/en/index.html,

Lisätiedot

Zeon PDF Driver Trial

Zeon PDF Driver Trial Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin

Lisätiedot

Ctl160 Tekstikorpusten tietojenkäsittely p.1/15

Ctl160 Tekstikorpusten tietojenkäsittely p.1/15 Ctl160 490160-0 Nicholas Volk Yleisen kielitieteen laitos, Helsingin yliopisto Ctl160 490160-0 p.1/15 Lisää säännöllisistä lausekkeista Aikaisemmin esityt * ja + yrittävät osua mahdollisimman pitkään merkkijonoon

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

XML-datan kysely. Topi Sarkkinen. Seminaarityö. Helsinki HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

XML-datan kysely. Topi Sarkkinen. Seminaarityö. Helsinki HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos XML-datan kysely Topi Sarkkinen Seminaarityö Helsinki 18.3.2015 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta Fakultet

Lisätiedot

SELECT-lauseen perusmuoto

SELECT-lauseen perusmuoto SQL: Tiedonhaku SELECT-lauseen perusmuoto SELECT FROM WHERE ; määrittää ne sarakkeet, joiden halutaan näkyvän kyselyn vastauksessa sisältää

Lisätiedot

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA341 Funktio-ohjelmointi 1, kevät 2008 TIEA34 Funktio-ohjelmointi, kevät 2008 Luento 3 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 2. tammikuuta 2008 Ydin-Haskell: Syntaksi Lausekkeita (e) ovat: nimettömät funktiot: \x

Lisätiedot

Harjoitus 1 -- Ratkaisut

Harjoitus 1 -- Ratkaisut Kun teet harjoitustyöselostuksia Mathematicalla, voit luoda selkkariin otsikon (ja mahdollisia alaotsikoita...) määräämällä soluille erilaisia tyylejä. Uuden solun tyyli määrätään painamalla ALT ja jokin

Lisätiedot

Opiskeluoikeudet. Kaaviokuva

Opiskeluoikeudet. Kaaviokuva Opiskeluoikeudet Opiskeluoikeuksien tiedonsiirtoskeema. XML-skeema jonka avulla on tarkoitus siirtää useiden opiskeluoikeuksien tiedot kerralla. Skeeman voi myös lukea sisään muihin skeemoihin jolloin

Lisätiedot

Maxivision Go käyttöliittymän ohje

Maxivision Go käyttöliittymän ohje Maxivision Go käyttöliittymän ohje Rekisteröityminen käyttöliittymään Käynnistyessään Viihdeboksi kysyy Maxivision tunnuksia. Nämä ovat samat tunnukset joilla kirjaudut my.maxivision.fi sivustolle. Syötä

Lisätiedot

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

SÄHKE-hanke. Tekninen mallintaminen SÄHKE-metatietojen XML Schema 04.02.2005 1 (5) SÄHKE-hanke SÄHKE-metatietojen XML Schema Versio ja pvm Laatinut Tarkpvm Tarkastanut Hyvpvm Hyväksynyt 2.0 / 04.02.2005 Anneli Rantanen 15.02.2005 Markus Merenmies 18.02.2005 Ohjausryhmä

Lisätiedot

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki PERL TIE-20306 Principles of Programming Languages Ryhmä 4: Joonas Lång & Jasmin Laitamäki 1. Johdanto Perl on ohjelmointikielten perhe, johon kuuluu Perl 5 ja Perl 6. Kielet ovat kuitenkin erilliset ohjelmointikielet

Lisätiedot

Helsingin yliopisto/tktl XML-metakieli XPath

Helsingin yliopisto/tktl XML-metakieli XPath XML-perusrakenteen ympärille on kehitetty tekniikoita ja standardeja kuvaamaan XML-rakenteisen tiedon käsittelyä sekä tietojen välisiä kytkentöjä. Näissä keskeinen tarve on pystyä osoittamaan operaatioiden

Lisätiedot

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

Lisätiedot

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas Tiedonhallinnan perusteet Viikko 1 Jukka Lähetkangas Kurssilla käytävät asiat Tietokantojen toimintafilosofian ja -tekniikan perusteet Tiedonsäilönnän vaihtoehdot Tietokantojen suunnitteleminen internetiä

Lisätiedot

Hohde Consulting 2004

Hohde Consulting 2004 Luento 6: XSLT AS-0.110 XML-kuvauskielten perusteet Janne Kalliola XSL Transformations XSLT tyylisivun rakenne mallineet nykyinen solmu Edistyneemmät piirteet toisto muuttujat nimetyt mallineet ehdolliset

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

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

9.16 XSLT ja nimiavaruudet (1/3): literaali oletusnimiavaruus 9.16 XSLT ja nimiavaruudet (1/3): literaali oletusnimiavaruus XSL-muunnos voi tietenkin tuottaa myös tiettyyn nimiavaruuteen liittyviä kohdedokumentteja (tarvitaan aina jo esim. XHTML-sovelluksissa!) Helpoimmillaan

Lisätiedot

Yhteentoimivuutta edistävien työkalujen kehittäminen

Yhteentoimivuutta edistävien työkalujen kehittäminen Yhteentoimivuutta edistävien työkalujen kehittäminen Semantiikkaa organisaatioiden välisen tiedonvaihdon helpottamiseksi Mikael af Hällström, Verohallinto Esityksen sisältö Taustatekijöitä (OKM:n hallinnonala,

Lisätiedot

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

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

Lisätiedot

www.hohde.com Hohde Consulting 2004

www.hohde.com Hohde Consulting 2004 Luento 14: Kertaus AS-0.110 XML-kuvauskielten perusteet Janne Kalliola Kertaus XML nimiavaruus validointi XML:n käyttö tietorakenteiden kuvaus ohjelmointi XML-pohjaiset kielet peruskielet muut kurssilla

Lisätiedot

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö Tekijät: Eemeli Honkonen Joni Metsälä Työ palautettu: SISÄLLYSLUETTELO: 1 SEMINAARITYÖN KUVAUS... 3 2 TIETOKANTA... 3 2.1 MITÄ TIETOKANNAT SITTEN OVAT?... 3

Lisätiedot

XML-saatavuuskysely. XML-tiedoston kuvaus. versio 1.3.3 04.02.2008

XML-saatavuuskysely. XML-tiedoston kuvaus. versio 1.3.3 04.02.2008 XML-saatavuuskysely XML-tiedoston kuvaus versio 1.3.3 04.02.2008 Ecom Oy 2004-2008 XML-saatavuuskysely Versio 1.3.3 2/15 Sisällysluettelo Historia...3 Rakenteen hierarkinen esitys...4 Elementtien kuvaukset...5

Lisätiedot

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta. Tehtävä 63. Kirjoita oma versio funktiosta strcmp(),joka saa parametrinaan kaksi merkkiosoitinta. Tee ohjelma, jossa luetaan kaksi merkkijonoa, joita sitten verrataan ko. funktiolla. Tehtävä 64. Kirjoita

Lisätiedot

Luento 4: XPath ja XLink

Luento 4: XPath ja XLink Luento 4: XPath ja XLink AS-0.110 XML-kuvauskielten perusteet Janne Kalliola XPath ja XLink XPath lausekkeet joukko-oppi askeleet siirtymät solmutestit ehdot funktiot XPathin käyttö XLink XML Base XPointer

Lisätiedot

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

StanForD-XML. Juha-Antti Sorsa, Tapio Räsänen, Vesa Imponen Projektiryhmä StanForD-XML Juha-Antti Sorsa, Tapio Räsänen, Vesa Imponen Rahoittajat Koskitukki Oy, Metsähallitus, Metsäliitto Osuuskunta, Pölkky Oy, Stora Enso Oyj, UPM- Kymmene Oyj, Vapo Timber Oy, Yksityismetsätalouden

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

Tuomiorekisterin ratkaisuhaun kehittäminen

Tuomiorekisterin ratkaisuhaun kehittäminen 25.5.2012 Sivu 1 Muutoshistoria Versio Päiväys Tekijä Kuvaus 0.1 15.2.2012 NMu Luonnos korjattujen ratkaisujen tietojen välittämisen muutoksesta 0.2 12.3.2012 NMu Lisätty uusia metatietokenttiä 0.3 25.5.2012

Lisätiedot

Luku 8. Aluekyselyt. 8.1 Summataulukko

Luku 8. Aluekyselyt. 8.1 Summataulukko Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa

Lisätiedot

Extensible Stylesheet Language (XSL)

Extensible Stylesheet Language (XSL) Extensible Stylesheet Language (XSL) Tyylitiedostojen määrittely Ctl230:Luentokalvot 25.10.2004 Miro Lehtonen Johdanto Dokumenttien muotoilu tyylitiedostoilla 3XML: yleistetty merkkaus Kuvaa sisällön muttei

Lisätiedot

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 81122P (4 ov.) 30.5.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

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

Vaasan yliopiston toimintaa tukevat informaatiopalvelut ovat käytettävissä WWW:n kautta. 1. Julkaisutoiminnan peruskysymyksiä a) Mieti kohderyhmät b) Mieti palvelut c) Mieti palvelujen toteutus Vaasan yliopiston toimintaa tukevat informaatiopalvelut ovat käytettävissä WWW:n kautta. PALVELUKOKONAISUUDET:

Lisätiedot

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke Versio 1.05 Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke Tietojen toimittaminen Skeemat Käsittelypalautteen kysely 2 (8) Versiohistoria Versio Päivämäärä

Lisätiedot

Varmennepalvelu Rajapintakuvaus Kansallisen tulorekisterin perustamishanke

Varmennepalvelu Rajapintakuvaus Kansallisen tulorekisterin perustamishanke Versio 1.0 Varmennepalvelu Rajapintakuvaus Kansallisen tulorekisterin perustamishanke Varmennepalvelu Rajapintakuvaus 2 (13) Versiohistoria Versio Päivämäärä Kuvaus 1.0 Dokumentti julkaistu. Varmennepalvelu

Lisätiedot

Harjoitus 2 (viikko 45)

Harjoitus 2 (viikko 45) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista lisätä static-määre operaatioidesi otsikoihin, jotta ohjelmasi kääntyvät. Muista noudattaa hyvän

Lisätiedot

Tiedonsiirto- ja rajapintastandardit

Tiedonsiirto- ja rajapintastandardit Tiedonsiirto- ja rajapintastandardit Viitekehys Julkishallinnon perustietovarantojen rajapinnat (PERA) työryhmän tulokset valmiit syksyllä 2011 Määrittelee teknisen arkkitehtuuriratkaisun tietovarantojen

Lisätiedot

DXL Library ja DXL-kielen olemus. Pekka Mäkinen Pekka.Makinen@softqa.fi SoftQA Oy http/www.softqa.fi/

DXL Library ja DXL-kielen olemus. Pekka Mäkinen Pekka.Makinen@softqa.fi SoftQA Oy http/www.softqa.fi/ DXL Library ja DXL-kielen olemus Pekka Mäkinen Pekka.Makinen@softqa.fi SoftQA Oy http/www.softqa.fi/ DOORS extension Language DXL on DOORSin laajennuskieli, jolla voidaan kehittää lisätoiminnallisuutta.

Lisätiedot

XML Technologies and Applications - harjoitustyö -

XML Technologies and Applications - harjoitustyö - XML Technologies and Applications - harjoitustyö - TURUN YLIOPISTO Informaatioteknologian laitos Tietojenkäsittelytiede Harjoitustyö Helmikuu 2009 Jyri Lehtonen (72039) jyri.lehtonen@utu.fi (yksin tehty

Lisätiedot

Paikkatiedot ja Web-standardit

Paikkatiedot ja Web-standardit Paikkatiedot ja Web-standardit Ossi Nykänen Tampereen teknillinen yliopisto (TTY), Digitaalisen median instituutti (DMI), Hypermedialaboratorio W3C Suomen toimisto Esitelmä Hyvin lyhyt versio: World Wide

Lisätiedot

XML / DTD / FOP -opas Internal

XML / DTD / FOP -opas Internal XML / DTD / FOP -opas Internal Reviewed: - Status: pending approval Approved by: - Author: Sakari Lampinen Revision: 1.0 Date: 15.10.2000 1 Termit DTD (data type definition) on määrittely kielelle, niinkuin

Lisätiedot

etunimi, sukunimi ja opiskelijanumero ja näillä

etunimi, sukunimi ja opiskelijanumero ja näillä Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

NELLI-Tunnis. Käyttäjän tunnistus NELLI-tiedonhakuportaalissa yleisissä kirjastoissa. Versio 1.0. 16.5.2006 Ere Maijala Kansalliskirjasto

NELLI-Tunnis. Käyttäjän tunnistus NELLI-tiedonhakuportaalissa yleisissä kirjastoissa. Versio 1.0. 16.5.2006 Ere Maijala Kansalliskirjasto NELLI-Tunnis Käyttäjän tunnistus NELLI-tiedonhakuportaalissa yleisissä kirjastoissa Versio 1.0 16.5.2006 Ere Maijala Kansalliskirjasto Sisällysluettelo Johdanto...3 Tekniikka...3 Esimerkit...4 XML-Skeema...5

Lisätiedot

1. Skannaus ja tekstintunnistus (OCR) verkkoskannerilta

1. Skannaus ja tekstintunnistus (OCR) verkkoskannerilta M-Files OCR M-Files OCR:n avulla voidaan skannattavalle paperidokumentille tehdä tekstintunnistus skannerista riippumatta. Tällöin tekstiä sisältävät kuvat tunnistetaan varsinaisiksi tekstimerkeiksi, jonka

Lisätiedot

3. Muuttujat ja operaatiot 3.1

3. Muuttujat ja operaatiot 3.1 3. Muuttujat ja operaatiot 3.1 Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit.

Lisätiedot

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2 PERUSLASKUJA Matemaattisten lausekkeiden syöttäminen: Kirjoita ilman välilyöntejä /+^2 Kirjoita muuten sama, mutta ota välilyönti :n jälkeen / +^2 Kopioi molemmat matematiikka-alueet ja liiku alueen sisällä

Lisätiedot

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Tekninen määrittely: Editori Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Sisällysluettelo 1. Johdanto...4 1.1. Tarkoitus ja kattavuus...4 1.2. Tuote ja ympäristö...4 1.3. Määritelmät,

Lisätiedot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit. 3. Muuttujat ja operaatiot Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi.. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit. Arvojen

Lisätiedot

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö Algoritmit 1 Luento 7 Ti 31.1.2017 Timo Männikkö Luento 7 Järjestetty binääripuu Binääripuiden termejä Binääripuiden operaatiot Solmun haku, lisäys, poisto Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017

Lisätiedot

XQuery tietokannan kyselykielenä

XQuery tietokannan kyselykielenä XQuery tietokannan kyselykielenä Miro Lehtonen 31.10.2007 OUGF-syysseminaari Tietojenkäsittelytieteen laitos Sisältö Johdanto XQueryn perusteet + esimerkkejä Oracle ja XQuery Miro Lehtonen, XQuery tietokannan

Lisätiedot

XML-datan tiivistys mobiilitelevision palveluoppaissa. Mikael Rinnetmäki

XML-datan tiivistys mobiilitelevision palveluoppaissa. Mikael Rinnetmäki XML-datan tiivistys mobiilitelevision palveluoppaissa Mikael Rinnetmäki Tampereen yliopisto Tietojenkäsittelytieteiden laitos Tietojenkäsittelyoppi Pro gradu -tutkielma Ohjaaja: Erkki Mäkinen Toukokuu

Lisätiedot

Tietojen jakelu Skeemat Lokitiedot Kansallisen tulorekisterin perustamishanke

Tietojen jakelu Skeemat Lokitiedot Kansallisen tulorekisterin perustamishanke Versio 1.0 Tietojen jakelu Skeemat Lokitiedot Kansallisen tulorekisterin perustamishanke Tietojen jakelu Skeemat Lokitiedot 2 (15) Versiohistoria Versio äivämäärä Kuvaus 1.0 12.6.2017 Dokumentti julkaistu.

Lisätiedot

Tietojen jakelu Skeemat Palvelupyyntö Kansallisen tulorekisterin perustamishanke

Tietojen jakelu Skeemat Palvelupyyntö Kansallisen tulorekisterin perustamishanke Versio 1.05 Tietojen jakelu Skeemat Palvelupyyntö Kansallisen tulorekisterin perustamishanke Tietojen jakelu Skeemat Palvelupyyntö 2 (11) Versiohistoria Versio Päivämäärä Kuvaus 1.0 12.6.2017 Dokumentti

Lisätiedot

17/20: Keittokirja IV

17/20: Keittokirja IV Ohjelmointi 1 / syksy 2007 17/20: Keittokirja IV Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/10 Tavoitteita

Lisätiedot

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008 Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT Jouni Huotari S2008 2 Proseduurit Ohjelmamoduuleita, jotka voidaan tallettaa tietokantaan (DBMS:n tietohakemistoon)

Lisätiedot

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009 PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009 PROSEDUURIT Ohjelmamoduuleita, jotka voidaan tallettaa tietokantaan (DBMS:n tietohakemistoon)

Lisätiedot

JHS 183 Julkisen hallinnon palvelujen tietomalli ja ryhmittely verkkopalveluissa Liite 3 XML-skeeman kuvaus ja esimerkit

JHS 183 Julkisen hallinnon palvelujen tietomalli ja ryhmittely verkkopalveluissa Liite 3 XML-skeeman kuvaus ja esimerkit JHS 183 Julkisen hallinnon palvelujen tietomalli ja ryhmittely verkkopalveluissa Liite 3 XML-skeeman kuvaus ja esimerkit Versio: 05.03.2013 Julkaistu: 28.2.2013 Voimassaoloaika: toistaiseksi Sisällys 1

Lisätiedot

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke Versio 1.0 Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke Tietojen toimittaminen Skeemat Käsittelypalautteen kysely 2 (7) Versiohistoria Versio Päivämäärä

Lisätiedot

AntenniTV kaikkialle, kaikkiin päätelaitteisiin

AntenniTV kaikkialle, kaikkiin päätelaitteisiin AntenniTV kaikkialle, kaikkiin päätelaitteisiin Cable Days 17.4.2012 Vesa Erkkilä vesa.erkkila(a)digita.fi MobiiliTV vai TV mobiililaitteissa? Erillisen broadcast-verkon (esim. DVB-H) kautta toteutettu

Lisätiedot

LINUX-HARJOITUS, MYSQL

LINUX-HARJOITUS, MYSQL LINUX-HARJOITUS, MYSQL Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä: http://www.mysql.com/, MySQL-tietokantaohjelman kotisivu. http://www.mysql.com/doc/en/index.html,

Lisätiedot

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 17.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.2.2010 1 / 41 Sanakirja Monissa sovelluksissa on tallennettava rakenteeseen avain arvo-pareja. Myöhemmin rakenteesta

Lisätiedot

Johdatus rakenteisiin dokumentteihin

Johdatus rakenteisiin dokumentteihin -RKGDWXVUDNHQWHLVLLQGRNXPHQWWHLKLQ 5DNHQWHLQHQGRNXPHQWWL= rakenteellinen dokumentti dokumentti, jossa erotetaan toisistaan dokumentin 1)VLVlOW, 2) UDNHQQHja 3) XONRDVX(tai esitystapa) jotakin systemaattista

Lisätiedot

Action Request System

Action Request System Action Request System Manu Karjalainen Ohjelmistotuotantovälineet seminaari HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos 25.10.2000 Action Request System (ARS) Manu Karjalainen Ohjelmistotuotantovälineet

Lisätiedot

Suomalaisen julkishallinnon Vetuma-palvelu Vetuma-palvelun SAML-kutsurajapinnan metadata-tiedosto Versio: 3.5

Suomalaisen julkishallinnon Vetuma-palvelu Vetuma-palvelun SAML-kutsurajapinnan metadata-tiedosto Versio: 3.5 Suomalaisen julkishallinnon Vetuma-palvelu Vetuma-palvelun SAML-kutsurajapinnan metadata-tiedosto Versio: 3.5 Vetuma Verkkotunnistus ja -maksaminen Sisällysluettelo 1. Johdanto... 3 2. Metadata määrityksen

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML AJAX-konsepti AJAX Asynchronous JavaScript And XML Viimeisin muoti-ilmiö web-ohjelmoinissa, termi Ajax tuli käyttöön vuoden 2005 aikana Joukko teknologioita, joiden avulla voidaan toteuttaa uudenlaisen

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tällä luennolla Algebralliset tietotyypit Hahmonsovitus (pattern matching) Primitiivirekursio Esimerkkinä binäärinen hakupuu Muistattehan...

Lisätiedot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014 Yhtälönratkaisusta Johanna Rämö, Helsingin yliopisto 22. syyskuuta 2014 Yhtälönratkaisu on koulusta tuttua, mutta usein sitä tehdään mekaanisesti sen kummempia ajattelematta. Jotta pystytään ratkaisemaan

Lisätiedot