5 Erilaiset datan muodot
Oppimistavoitteet: Tutustumme konkreettisesti erilaisiin taulukkomuotoisiin ja rakenteisiin datan tallennusmuotoihin (kuten CSV ja XML) sekä metadatan tallennusmuotoihin (kuten JSON). Käsittelemme koneluettavuutta ja ohjelmistoriippumattomuutta tallennusformaattien laadun näkökulmasta.
Eri dataformaatteja on suuret määrät ja niiden paljous saattaa hämmentää. Vieraalta näyttäviä dataformaatteja ei kuitenkaan kannata pelästyä. Datan avaaminen ei vaadi niiden täydellistä osaamista. On kuitenkin hyvä tietää, millaisia dataformaatteja on olemassa, ja osata erottaa rakenteinen, datan sisältöä kuvaava data ei-rakenteisesta ulkonäköä kuvaavasta.
KUVATEKSTI: Eri dataformaatit sopivat eri tilanteisiin. Pääsääntöisesti data on joko taulukkomuotoista tai rakenteista. Näihin kannattaa käyttää eri dataformaatteja. Selitykset: --: ei sovellu, X: soveltuu, O: soveltuu osittain.
Sopivimman formaatin löytää parhaiten kokeilemalla. Dataformaatin valinnassa tärkeimmät kriteerit ovat koneluettavuus sekä esitysmuodon avoimuus; datan käsittelyä ei saa sitoa jonkin toimittajan ohjelmistoihin. Perusformaatit ovat jo vanhoja ja vakiintuneita, mutta niihin liittyvät hyvät käytännöt kehittyvät koko ajan. Tästä syystä kannattaa seurata alan julkaisuja ja tarvittaessa korjata omien tietoaineistojen muotoja.
Lisätietoja dataformaateista on Suomen Liikenne- ja viestintäministeriön julkaisussa Julkinen Data: johdatus tietovarantojen avaamiseen.
Koneluettavuus
Koneluettavuus tarkoittaa yksinkertaisesti sitä, että tietokoneohjelma voi lukea tietoaineiston sisällön ilman käsityötä, jolloin datan hyödyntäminen ja jatkokäyttö on helppoa. Koneluettavuuden avulla voidaan moni toiminto automatisoida, joka mahdollistaa esimerkiksi datan erilaiset visualisoinnit ja monimutkaisetkin sovellukset.
Liikenne- ja viestintäministeriö on tiivistänyt koneluettavuuden näin: "Peukalosääntönä koneluettavuudelle voidaan pitää sitä, että etevä ohjelmoija kykenee verrattain lyhyessä ajassa tekemään ohjelman, joka automaattisesti hakee datan internetistä, lukee sen ohjelman muistiin ja tulostaa uudelleen muokattuna vaikkapa älypuhelimen näytölle".
Koneluettavuuden lisäksi hyvä dataformaatti on avointa siinä mielessä, että se ei ole sidottu mihinkään tiettyyn ohjelmistoon. Kysymys on relevantti datan jatkokäytössä. Tavanomaisella ohjelmoijalla ei välttämättä ole käytössään samoja ohjelmistoja kuin dataa avaavalla organisaatiolla. Mikäli data on avattu formaatilla, joka on sidottu näihin ohjelmistoihin, se vaikeuttaa datan hyödyntämistä. Data ei tällöin ole aidosti avointa.
CSV
CSV (Comma-Separated Values) on yksinkertainen ja datan avaamisessa usein käytetty tiedostoformaatti, jolla voidaan julkaista taulukoita. CSV on vanha tiedostotyyppi, jonka vahvuutena ovat yksinkertaisuus, luettavuus sekä hyvä yhteensopivuus monien ohjelmien kanssa. Datan jatkokäyttäjät suosivat CSV-tiedostoja, koska ne voidaan avata melkein millä tahansa taulukkolaskentaohjelmalla, jonka jälkeen dataa on helppo muokata.
CSV-muotoista dataa on mahdollista myös tuoda ulos taulukkolaskentaohjelmista, esimerkiksi Excelistä, jonne taas on helppo tuoda dataa eri tietojärjestelmistä. (FC Sovelto Oyj & Forum Virium Helsinki 2012. Helsinki Region Infoshare – Avoimen datan julkaisutekniikat pilottikoulutusmateriaali.)
CSV-tiedosto koostuu arvoista, jotka erotetaan toisistaan pilkuin. Taulukossa yhdellä rivillä olevat sarakkeiden arvot tulevat pilkuin eroteltuna yhdelle riville. Seuraavan rivin sarakkaiden arvot tulevat seuraavalle riville.
KUVATEKSTI: Esimerkkidataa CSV-muodossa sekä visualisoituna taulukoksi (esimerkki otettu Wikipediasta).
CSV:n ongelma on, että soluja erottavaa pilkkua käytetään osassa maailmaa myös desimaaliluvuissa. Tätä voi kiertää käyttämällä soluerottimena puolistettä tai tabulaattoria (jota joskus kutsutaan TSV-muodoksi, tab-separated values).
Selvyyden vuoksi kannattaa CSV-tiedostoissa pitäytyä tietyissä hyvissä käytännöissä:
- tiedoston enkoodausmuotona utf-8
- soluerottimena pilkku, desimaalierottimena aina piste
- jokaisessa tiedostossa vain yksi taulukko
- ensimmäisellä rivillä taulukon sarakkeiden nimet
CSV-tiedoston toimivuutta voi testata esimerkiksi CSV Lint -työkalun tai sivuston avulla. Testityökalu kertoo, onko data koneluettavaa vai tulisiko sitä vielä siivota.
Datan rakenteisuus
Koneluettavuuteen liittyy myös termi datan rakenteisuus. Eräs tapa lähestyä rakenteisuutta on hahmottaa se datana, jonka voi esittää laskentataulukossa (kuten Excel, LibreOffice Calc) sarakkeissa ja riveissä.
Esimerkki rakenteisesta aineistosta on taulukko, jonka sarakeotsikoihin on merkitty auton nopeus ja polttoaineen kulutus. Otsikoiden alla soluissa on autojen nopeuksia ja kulutusarvoja. Jos sama sisältö olisi verkkosivulla HTML-kielellä pelkkänä tekstinä, ei kyse olisi rakenteisesta aineistosta. Tällainen aineisto ei olisi koneluettavaa: kone ei voi itsenäisesti erottaa, milloin puhutaan auton nopeudesta ja milloin polttoaineen kulutuksesta. Tarvitaan siis selkeästi ilmaistu rakenne, joka kertoo tietokoneohjelmalle, mitkä luvut kertovat nopeudesta ja mitkä kulutuksesta.
On siis olennaista erottaa toisistaan formaatit, jotka kuvailevat tiedoston ulkoasua ja formaatit, jotka kuvailevat itse dataa. Esimerkiksi PDF- ja docx-muotoiset tiedostot sekä valtaosa HTML-sivuista kuvailee tiedostoissa ja sivuilla olevien tekstien ja muiden elementtien ulkoasua eikä niiden rakennetta. Tästä syystä ne eivät ole helposti koneluettavia formaatteja, eivätkä siksi avoimen datan julkaisuun kelpaavia. Oikeaoppisesti tehty HTML5-sivu voi kuitenkin olla rakenteista dataa.
Aineistoa täydentävä ja vapaaehtoisesti katsottavissa oleva puheenvuoro vuoden 2014 Avoin julkishallinnon data -mestarikurssilta.
Antti Poikola: Koneluettava rakenteellinen data from Open Knowledge Finland on Vimeo.
Ohessa on yllä olevassa Poikolan puheenvuorossakin esiintyvä esimerkki datan ulkoasua ja sisältöä kuvailevien formaattien eroista. XML-formaatti kuvaa datan sisältöä. Tekstissä niin sanotut tagit kertovat ensinnäkin, että “tässä alkaa kirja” (<kirja>) ja “tähän loppuu kirja” (</kirja>). Tämän lisäksi kirjalla on tekijä, joka alkaa (<tekija>) ja loppuu (</tekija>) jne.
HTML-teksti taas kertoo, että “tästä alkaa kappale” (<p>) ja “tähän loppuu kappale” (</p>). Kappaleen sisällä on yksi rivi, joka on lihavoitu: “tästä alkaa lihavoitu teksti” (<b>) ja “tähän loppuu lihavoitu teksti” (</b>), jonka jälkeen vaihtuu rivi (<br/>) jne.
XML kuvaa datan sisältöä:
<kirja>
<tekija> Julius Caesar</tekija>
<nimi>Gallian sota</nimi>
<kustantaja>Karisto</kustantaja>
</kirja>
HTML kuvaa dokumentin ulkoasua ja rakennetta:
<p>
<b>Julius Caesar</b><br/>
Gallian sota <br/>
Karisto<br/>
</p>
HTML5-kielellä voitaisiin samanaikaisesti kuvata dokumentin ulkoasu sekä rakenne, jokseenkin seuraavaan tapaan:
<p about=”#book”>
<b property=”book:author”>Julius Caesar</b><br/>
<span property=”book:title”>Gallian sota</span> <br/>
<span property=”book:publisher”>Karisto</a><br/>
</p>
KUVATEKSTI: Kuvitteellinen esimerkki, joka on kirjoitettu XML-, HTML- ja HTML5-muotoihin.
Datan skeema
Dokumentissa kerrottavat tiedot (yllä olevassa XML-esimerkissä: kirjan kirjoittaja, nimi sekä kustantaja) muodostavat datan skeeman. Datan skeemalla voi olla tärkeä merkitys jatkokäytön kannalta. Mikäli useat kirjastot maailmassa käyttävät sellaista skeemaa, jossa kerrotaan kunkin kirjan tiedot yhtenevällä tavalla, kannattaa kaikkien kirjastojen käyttää tätä samaa skeemaa. Mikäli yksittäinen kirjasto päätyy omaan skeemaan, ei sen dataa voida suoraan yhdistää muiden kirjastojen dataan. Kannattaa muistaa myös kansainvälinen konteksti ja selvittää, mitä skeemoja alalla yleisesti käytetään.
Seuraavaksi esitellään CSV:n rinnalla muutamia yleisimpiä avoimia dataformaatteja, joilla dataa voidaan avata.
XML
XML (Extensible Markup Language) on rakenteisen sisällön kuvauksen standardimuoto. HTML-kielet on nykyisin määritelty XML-skeemoina (Aiemmat HTML-versiot olivat SGML-skeemoja. XML on kehitetty SGML:stä.), mutta ne kuvaavat monesti sekä sisältöä että ulkoasua. XML:ää käytetään usein eri järjestelmien välisessä tiedonsiirrossa ja tietojen tallennusmuotona. XML:lle on määritelty eritasoisesti standardoituja skeemoja eli kieliä, joista esimerkkejä ovat HTML 5 ja vaikkapa KML (Googlen lanseeraama karttatiedon merkintäkieli).
JSON
JSON (JavaScript Object Notation) on XML:ää kevyempi, mutta siihen verrattava tekstipohjainen tiedonsiirtoformaatti. Se on ohjelmointikielistä riippumaton ja myös ihmisen luettavissa, joskin nimensäkin mukaan sen käyttö on erityisen helppoa verkkoselainten JavaScript-koodissa.
JSON ja XML ovat lähes aina vaihdannaisia keskenään. Jos data on tuotettu toisessa muodossa, se voidaan konvertoida koneellisesti toiseksi ja takaisin. Valinta XML:n ja JSON:n välillä ei siis ole kriittinen, sillä myös datan hyödyntäjät voivat muuntaa datan formaatista toiseen. Kannattaa kuitenkin miettiä, tuottavatko potentiaaliset jatkokäyttäjät ehkä perinteisempiä tietojärjestelmiä (jolloin XML on heille luontevampi dataformaatti) vaiko ketterämpiä mobiilisovelluksia (jolloin JSON on luontevampi valinta).
Aineistoa täydentävä ja vapaaehtoisesti katsottavissa oleva puheenvuoro vuoden 2014 Avoin julkishallinnon data -mestarikurssilta.
Petri Kola: CSV ja JSON from Open Knowledge Finland on Vimeo.
TDP
TDP (Tabular Data Package) on yksinkertainen käytäntö datan julkaisuun, jossa yhdistetään data ja metadata yhteen pakettiin. Paketissa on data CSV-muodossa ja JSON-muotoinen dataa kuvaava metatietotiedosto datapackage.json. Yhdessä paketissa voi olla useita datatiedostoja.
Käytännössä data julkaistaan CSV-muodossa (tietyin nimeämis- ja enkoodauskäytännöin) ja sen metadata JSON-muodossa. Tiedostot paketoidaan yhteen zip-pakettiin ja nimetään tiettyjen käytäntöjen mukaan. Useimpien ohjelmointitaitoisten on todennäköisesti helppoa avata, ymmärtää ja ottaa käyttöön TDP-standardia noudattava paketti.
RDF
RDF (Resource Description Framework) on XML-pohjainen rakenteinen tietoformaatti, jota käytetään HTML-pohjaisissa ympäristöissä ja semanttisen webin sovelluksissa. RDF on käyttökelpoinen tekniikka metadatan lisäämiseen, kun data julkaistaan ensisijaisesti netissä web-sivuina.
Aineistoa täydentävä ja vapaaehtoisesti katsottavissa oleva puheenvuoro vuoden 2014 Avoin julkishallinnon data -mestarikurssilta.
Teemo Tebest: kartta-aineistojen käytettävyys datajournalistin näkökulmasta from Open Knowledge Finland on Vimeo.
Tiivistelmä
Tietoaineistot ovat pääasiassa joko taulukoita tai rakenteista dataa. Taulukot tallennetaan yleensä CSV-muotoon, rakenteinen data taas XML- tai JSON-muotoon. Tietoaineistojen metadata kirjoitetaan joko JSON- tai XML-muotoon (koska metadata itsessään on rakenteista dataa). Taulukkomuotoisen datan paketointiin on CSV:tä ja JSON:ia yhdistävä TDP-standardi.