Luento 3: Tietorakenteiden esittäminen

Samankaltaiset tiedostot
Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

18. Abstraktit tietotyypit 18.1

Hohde Consulting 2004

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

7/20: Paketti kasassa ensimmäistä kertaa

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Luento 4: XPath ja XLink

Taulukot. Jukka Harju, Jukka Juslin

A TIETORAKENTEET JA ALGORITMIT

Java-kielen perusteet

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Ohjelmointi 1 Taulukot ja merkkijonot

Java-kielen perusteet

Luento 7: XML-ohjelmointirajapinnat

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

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

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Johdatus rakenteisiin dokumentteihin

Algoritmit 2. Luento 5 Ti Timo Männikkö

Tietorakenteet ja algoritmit - syksy

Algoritmit 1. Luento 10 Ke Timo Männikkö

17. Javan omat luokat 17.1

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

Algoritmit 2. Luento 6 Ke Timo Männikkö

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

P e d a c o d e ohjelmointikoulutus verkossa

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

8 XSLT-muunnoskieli XSLT-muunnoskieli

Tieto- ja tallennusrakenteet

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

17. Javan omat luokat 17.1

Luento 12: XML ja metatieto

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

M. Merikanto 2012 XML. Merkkauskieli, osa 2

Algoritmit 2. Luento 5 Ti Timo Männikkö

1. Omat operaatiot 1.1

Lyhyt kertaus osoittimista

Luento 2: XML:n syntaksi

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Tietueet. Tietueiden määrittely

Sisällys. 15. Lohkot. Lohkot. Lohkot

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algoritmit 1. Luento 10 Ke Timo Männikkö

Hohde Consulting 2004

13. Loogiset operaatiot 13.1

Luento 2: Tiedostot ja tiedon varastointi

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

Ohjelmoinnin perusteet Y Python

11.4. Context-free kielet 1 / 17

Java kahdessa tunnissa. Jyry Suvilehto

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Olio-ohjelmointi Javalla

Rakenteiset tietotyypit Moniulotteiset taulukot

Algoritmit 2. Luento 4 To Timo Männikkö

Hohde Consulting 2004

Algoritmit 2. Luento 9 Ti Timo Männikkö

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Oliot ja tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

Sisältö. 2. Taulukot. Yleistä. Yleistä

TIE Principles of Programming Languages CEYLON

Taulukot, silmukat ja muut joka koodin pikku veijarit

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

Osio2: Taulukot Jukka Juslin

Muita linkattuja rakenteita

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

Ehto- ja toistolauseet

Helsingin yliopisto/tktl XML-metakieli XPath

Algoritmit 2. Luento 4 Ke Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

11. Javan valintarakenteet 11.1

Ohjelmoinnin peruskurssien laaja oppimäärä

UML ja luokkien väliset suhteet

Ohjelmoinnin peruskurssien laaja oppimäärä

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet )

Hakemistojen sisällöt säilötään linkitetyille listalle.

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

Transkriptio:

Luento 3: Tietorakenteiden esittäminen AS-0.110 XML-kuvauskielten perusteet Janne Kalliola Tietorakenteiden esittäminen XML-dokumentti puuna Muunnokset muodosta toiseen Perustietorakenteet listat puut verkot muut rakenteet Tietotyyppien kuvaaminen käytännössä rakenteiden yhdistely primitiivityypit www.hohde.com Hohde Consulting 2004 2

XML-dokumentti puuna XML-dokumentti voidaan esittää puumuodossa Sisäkkäiset elementit muodostavat puun rakenteen ulompi elementti on isäsolmu ja sisempi lapsisolmu vierekkäiset elementit ovat samalla tasolla puussa, sisaruksina attribuutit eivät ole lapsia, vaan sisältyvät elementtiä kuvaavaan solmuun tekstisirpaleet, kommentit, käsittelyohjeet ja muut vastaavat rakennepalat esitetään myös puun solmuina näillä ei voi olla lapsisolmuja www.hohde.com Hohde Consulting 2004 3 Puuesimerkki document head ingress body Ping-Pong palloja Hong Kongista... paragraph paragraph picture paragraph url "... "......... align "left" text "Jaavan naavat" www.hohde.com Hohde Consulting 2004 4

Edellinen esimerkki XML-dokumenttina <document> <head>ping-pong-palloja Hong Kongista</head> <ingress>...</ingress> <body> <paragraph>...</paragraph> <paragraph>...</paragraph> <picture url="..." align="left" text="jaavan naavat"/> <paragraph>...</paragraph> </body> <document> www.hohde.com Hohde Consulting 2004 5 Muunnokset muodosta toiseen Dokumentista puuksi: dokumentti luetaan elementti kerrallaan ja jokaisesta elementistä muodostetaan uusi solmu puuhun elementti kiinnitetään isäelementin solmuun Puusta dokumentiksi: puu käydään läpi rekursiivisesti elementin alkuosa tulostetaan ennen lapsisolmuja attribuutit tulostetaan alkuosaan elementin loppuosa tulostetaan lapsisolmujen jälkeen www.hohde.com Hohde Consulting 2004 6

Puurakenteen käyttö Lähes kaikki ohjelmistorajapinnat käyttävät XMLdokumentteja puina tekstimuotoinen dokumentti on helpompi ihmiselle ja sitä on mukava siirtää koneesta toiseen, mutta siinä on paljon turhaa tietoa puumuotoisen dokumentin käsittely on nopeampaa kaikki operaatiot voidaan toteuttaa tietorakenteen muokkaamisina ei tarvetta siirrellä tekstimassoja paikasta toiseen Ohjelmointirajapintoihin tutustuaan myöhemmillä luennoilla www.hohde.com Hohde Consulting 2004 7 Perustietorakenteet

Solmun käsite Suurin osa tietorakenteista liittyy rakenteessa oleviin tietoyksilöihin (solmut, nodes) ja niiden välisiin yhteyksiin (kaaret, arcs) yleensä tietorakenne kannattaa kuvata kuvaamalla sen solmut elementeiksi yhteydet syntyvät joko automaattisesti XML-dokumentin rakenteen mukana tai sitten ne koodataan erikseen solmujen sisällä oleva tieto täytyy myös pystyä kuvaamaan Huomaa, että XML-kuvauksen ja tietorakenteen ei tarvitse sisältää täsmälleen samaa määrää informaatioita Tietorakenne sarjallistetaan XML-dokumentiksi ja XMLdokumentista luodaan tietorakenne Molemmissa prosesseissa ohjelma voi poistaa ja lisätä implisiittistä tietoa www.hohde.com Hohde Consulting 2004 9 Solmun tiedon esittäminen Tällä luennolla ei oteta erityisesti kantaa, kuinka solmun sisältämä tietotyyppi pitäisi esittää esimerkeissä on käytetty yleensä primitiivityyppejä normaalisti tietorakenteissa on kuitenkin monimutkaisempia tyyppejä, kuten olioita tai structeja tällaiset tyypit kuvataan yleensä omina elementtijoukkoina, jotka sijoitetaan solmuelementin sisään tällöin on järkevää sijoittaa koko tyypin kuvaus yhden elementin sisään kuvauksessa täytyy olla joku järkevä syntaksi, jonka avulla tyyppi pystytään sarjallistamaan XML:ksi ja rakentamaan taas XML-koodista asiaa sivutaan hieman luennon lopussa www.hohde.com Hohde Consulting 2004 10

Listat Listat ovat yksinkertaisia listan jokainen solmu sijoitetaan elementiksi juurielementin (tai jonkun muun vastaavan isäelementin sisään) <list> <list-item>item 1</list-item> <list-item>item 1</list-item> <list-item>item 1</list-item> </list> Tämä toteutus ei ota kantaa, onko lista yksin- vai kaksinkertaisesti linkitetty molemmat listatyypit voidaan laatia dokumentin pohjalta Periaatteessa listassa ei edes tarvita erillistä list-item (tms.) elementtiä, vaan tietotyyppielementit voitaisiin luetella peräkkäin www.hohde.com Hohde Consulting 2004 11 Listat viittauksilla Listat voidaan esittää myös yksittäisinä solmuina, jotka viittaavat toisiinsa jokaisella solmuelementillä on id ja viittaus seuraavaan ja/tai edeltävään solmuun solmujen ei tarvitse olla järjestyksessä, mutta tällöin jossakin täytyy kertoa ensimmäisen/viimeisen solmun id <list start-id="node-1"> <list-node id="node-7" next="node-2"... /> <list-node id="node-1" next="node-7"... /> <list-node id="node-2"... /> </list> Tällaisen listan muokkaus XML-työkaluilla on vaikeampaa kuin edellä esitetyn www.hohde.com Hohde Consulting 2004 12

Puut Puut kuvataan, kuten aiemmin opittiin, normaaleina XMLdokumentteina Mikäli kyseessä on joukko puita, metsä, voidaan jokainen puu kuvata omana elementtinään juurielementin alla <forest> <tree> <node>... </node> </tree> <tree>... </tree> </forest> www.hohde.com Hohde Consulting 2004 13 Verkot Verkon syklejä ei pysty kuvaamaan suoraan XML-rakenteella sykli täytyy purkaa viittaukseksi elementistä toiseen eli verkko puretaan mahdollisimman hyvin puuksi ja sykliset viittaukset koodataan attribuuteilla: <graph> <node id="node-17"... /> <node... />... <node> <arc ref-id="node-17"/> </node> </node> </graph> Viittaukset täytyy koodata omiksi elementeikseen, koska niitä voi olla useita yhdestä noodista www.hohde.com Hohde Consulting 2004 14

Verkot, vaihtoehto Toinen tapa kuvata verkkoja on listata ensiksi kaikki verkon solmut ja antaa niille jokaiselle id Tämän jälkeen luetellaan solmujen väliset kaaret <graph> <nodes> <node id="node-1"... />... </nodes> <arches> <arch node-start="node-1" node-end="node-2"/> </arches> </graph> Tällainen ratkaisu mahdollistaa myös suunnattujen verkkojen kuvaamisen Tapa on, kuten listojenkin tapauksessa, hieman hankalampi XML-työkaluille www.hohde.com Hohde Consulting 2004 15 Viittausten tarkistus Viittausten hallinta saattaa muodostua hankalaksi ja XMLdokumentista ei päällisin puolin näe, onko kaikki viittaukset kunnossa Kone voi kuitenkin tarkistaa viittausten järkevyyden osittain automaattisesti XML:ssa attribuutin tyypiksi voidaan määrittää ID, jolloin sen arvon täytyy olla ainutkertainen dokumentin ID-attribuuttien joukossa Siis kaikkien ID-attribuuttien, ei vain samannimisten Attribuutin tyyppi voi olla myös IDREF, jolloin sen täytyy viitata johonkin ID-attribuuttiin Useampaan ID-attribuuttiin voidaan viitata kerralla IDREFStyypillä Jos ehdot eivät täyty, dokumenttia ei voida validoida Huomaa, että nämä säännöt eivät tarkista, että onko viittaus juuri oikeaan elementtiin Tarkistus on vain tekninen www.hohde.com Hohde Consulting 2004 16

Hajautusrakenteet Hash Mapit ynnä muut vastaavat rakenteet puretaan esimerkiksi lista-tyyliseksi dokumentiksi, jossa hash-arvo on tallessa attribuutissa Periaatteessa mikä tahansa muukin kuvaus kelpaa, mutta lista on helpoin Joskus saattaa olla järkevää käyttää puumaista muotoa, esimerkiksi jos hash-avaimet muodostavat hierarkian tai jos hash mapissa on useita kerroksia www.hohde.com Hohde Consulting 2004 17 Unionit ja structit C-kielen unionit ja structit kääntyvät helposti XML:ksi Jokainen unionin ja structin tietotyyppi kuvataan omana elementtinään Elementin nimi voi olla esimerkiksi käytetty tietotyyppi, muuttujan nimi talletaan attribuuttiin ja arvo elementin sisään Mikäli muuttujan tyyppi on struct tai union, vastaava toimenpide suoritetaan uudestaan Unionin XML-dokumenttiin syntyy vain yksi elementti, structille tulevat kaikki määritellyt www.hohde.com Hohde Consulting 2004 18

Oliot Oliot kuvataan vastaavalla tavalla kuin structit, eli jäsenmuuttujien arvo talletetaan Structeissa ei tehdä eroa yksityisten ja julkisten muuttujien välille, joten tämä tieto täytyy lisätä esimerkiksi attribuuttina olion elementteihin Viittaukset olioista toisiin voivat synnyttää suuria dokumentteja Ne voidaan hoitaa myös ID-tyyppisinä viittauksina tai katkaista (vrt. RMI) Oliokielissä on valmiita kirjastoja, jotka pystyvät sarjallistamaan olioita XML-dokumenteiksi Esimerkiksi Java XML Bindings (JAXB) Näissä voi olla rajoituksia tietotyypeille tai luokan määrittelylle www.hohde.com Hohde Consulting 2004 19 Tietotyyppien kuvaaminen käytännössä

Tietorakenteiden yhdistely Yleensä yksittäinen tietorakenne per dokumentti ei ole riittävä ratkaisu Sovellukset käyttävät laajoja tietorakenteita, jotka merkitsevät kokonaisuuksina, ei yksittäisinä paloina Suurempi tietorakenne voidaan sarjallistaa XML:ksi kahdella eri periaatteella: jokainen rakenne sarjallistetaan omaksi alidokumentiksi viittaukset pohjautuvat ID-attribuutteihin rakenteet sarjallistetaan sisäkkäin ei implisiittisiä viittauksia syklit ja toistuvat viittaukset täytyy hoitaa ID-attribuuteilla www.hohde.com Hohde Consulting 2004 21 Lähteminen primitiivityypeistä Jokaisessa ohjelmointikielessä on joukko primitiivityyppejä, joita ei voida pilkkoa pienemmiksi esimerkiksi Javassa näitä tyyppejä ovat: byte, char, short, integer, long, float, double, boolean ja class merkkijono on luokka, samoin taulukot käsitellään luokkina Tietorakenteiden XML-muunnosten rakentaminen helpottuu, jos näille primitiivityypeille on sovittu yksiselitteinen esitystapa tällöin ei tarvitse keksiä joka kerta uutta tapaa kuvata esimerkiksi kokonaislukua www.hohde.com Hohde Consulting 2004 22

Primitiivityyppiesimerkkejä Alla on esitetty muutamia Javan tyyppejä XML-elementteinä <integer>2</integer> <double>3.14159265</double> <boolean>true</boolean> <class name="java.lang.string"> <array length="30" name="str"> <char>t</char> <char>h</char> <char>i</char>... </array> </class> www.hohde.com Hohde Consulting 2004 23 Merkkijonot Merkkijonot eivät ole primitiivityyppejä kovinkaan monessa ohjelmointikielessä niitä käytetään kuitenkin valtavasti niiden kuvaaminen primitiivityyppien avulla on hidasta ja turhaa, koska XML pohjautuu merkkijonoihin Ei siis kannata kikkailla ja kuvata merkkijonoa merkkitaulukkona, jossa jokainen merkki muutetaan erikseen XML-dokumentiksi tämän sijaan määritellään esimerkiksi elementti <string>, joka sisältää koko merkkijonon sisällön www.hohde.com Hohde Consulting 2004 24

Kysymyksiä? Kommentteja?