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.
Video. Datakoulu 5.2.2014 Petri Kola: Miltä näyttää hyvä avoin data? (21 minuuttia)
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, *: 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 Open Data.
Koneluettavuus ja datan rakenteisuus
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.
Suomen 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".
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, joiden alla soluissa on eri 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 oleellista erottaa toisistaan formaatit, jotka kuvailevat tiedoston ulkoasua sekä 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 hyvinkin olla rakenteista dataa, eli HTML on käypä vaihtoehto julkaisumuodoksi; suurin osa HTML-sivuista on kuitenkin ulkoasun mukaan tehty, ei tiedon rakenteen ehdoilla.
Ohessa on esimerkki datan ulkoasua ja sisältöä kuvailevien formaattien eroista. XML-formaatti kuvaa nimenomaan 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.
Koneluettavuuden lisäksi hyvä dataformaatti on avointa siinä mielessä, että se ei ole sidottu mihinkään tiettyyn ohjelmistoon. Kysymys on erityisen relevantti datan jatkokäytön kannalta. Tavanomaisella ohjelmoijalla ei välttämättä ole käytössään samoja ohjelmia, joita dataa avaavalla organisaatiolla on. Mikäli data on avattu formaatilla, joka on sidottu näihin ohjelmiin, vaikeuttaa se datan hyödyntämistä. Data ei tällöin ole aidosti avointa.
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 voi suoraan yhdistää muiden kirjastojen dataan. Kannattaa muistaa myös kansainvälinen konteksti ja selvittää, mitä skeemoja alalla yleisesti käytetään.
Datan epätäydellisyys ei saa pelottaa datan avaajaa. Avaaminen on syklinen ja interaktiivinen prosessi: datan voi ensin avata sellaisena kuin se on; sitä voi sitten muokata ja muuttaa saadun palautteen perusteella.
Seuraavaksi esitellään muutamia yleisimpiä avoimia dataformaatteja, joilla dataa voidaan avata.
CSV
CSV (Comma-Separated Values) on yksinkertainen 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ä solujen erottimena käytettävää 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.
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ä sen ulkoasua. XML:ää käytetään usein eri järjestelmien välisessä tiedonsiirrossa sekä 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).
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 webissä web-sivuina.
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.
Tehtävät
- Tehtävä 9. Tutustuminen datan erilaisiin muotoihin
- Tehtävä 12. Datan avaussuunnitelman täydentäminen