Kennet Tast XML-TIETOKANTASOVELLUS
|
|
- Miina Halonen
- 9 vuotta sitten
- Katselukertoja:
Transkriptio
1 Kennet Tast XML-TIETOKANTASOVELLUS Opinnäytetyö Keski-Pohjanmaan ammattikorkeakoulu Utbildningsprogrammet för Informationsteknik Helmikuu 2008
2 Keski-Pohjanmaan ammattikorkeakoulu Tietotekniikan koulutusohjelma TIIVISTELMÄ Työn tekijä: Työn nimi: Kennet Tast XML-tietokantasovellus Päivämäärä: Sivumäärä: liitettä Työn ohjaaja: Ville Hietala Työn valvoja: DI. Mats Albäck Opinnäyte työn tarkoituksena oli luoda XML-tietokantasovellus ja tutkia XMLtietokannan toimintaa ja käyttöä sovelluksesta käsin. Sovellus tehtiin Borland C++ Builder 6.0 -ohjelmointityökalulla ja SEDNA XML-tietokantaa käyttäen. Työ alkoi tutkimalla XML-tekniikkaa ja sen tarkoitusta tiedon välittämiseen. XMLdokumenttien tietosisällön käsittelyyn käytetään monia eri tekniikoita ja tapoja. Vanhempi tekniikka, joka on käytössä vieläkin, on DTD, joka määrittelee XMLdokumentissa esiintyvien tietojen tarkistuksen. Koska DTD:n ominaisuudet eivät riittäneet XML-tiedon käsittelyyn laajemmin, kehiteltiin XML-skeema, joka tarjosi paremmat tiedonkäsittelystandardit kuin DTD. Tutkin eri XML-tietokantoja joita mahdollisesti käyttäisin sovelluksessani. Aloitin etsiskelyn W3C-sivuston XQuery testisivulta, jossa on testattu eri tietokantojen kyselykielen toimivuutta. Koska etsin tietokantaa joka olisi ilmainen käytettäväksi kaupallisissa sovelluksissa ja jossa mahdollisesti tulisi ohjelmointirajapinta C/C++ - kielelle, oli valinta helppoa. Valitsin tietokannan SEDNA Xml Database System joka oli kaikkia näitä ja jonka mukana tulivat vielä hyvät ohjeet. Sovelluksen ohjelmoinnin aloitin tutkimalla ohjelmointirajapintaa, joka tuli SEDNAn mukana. Siellä oli hyvät ohjeet siitä, miten muodostaa yhteys tietokantaan, ja kyselyiden esimerkkejä. Sovelluksessa pyrin käyttämään monia SEDNAn ominaisuuksia, joista voi olla hyötyä. Sovelluksen ohjelmointi sujui hyvin, ja se toimi niin kuin oli tarkoituskin. Avainsanat: XML, W3C, SQL, API, XQuery, XPath, DTD, skeema, DBMS
3 Mellersta Österbottens yrkeshögskola Utbildningsprogrammet för Informationsteknik SAMMANFATTNING Författare: Kennet Tast Arbetets namn: XML-databas tillämpning Datum: Sidantal: bilagor Övervakare: Handledare: Ville Hietala Dipl. Ing. Mats Albäck Lärdomsprovets syfte var att göra en XML-databastillämpning och att studera XML-databasens funktion och användning från ett program. Programmet gjordes med Borland C++ Builder 6.0 programmeringsverktyg och som databas användes SEDNA XML-databas. Arbetet började med att forska XML-teknik och dess betydelse i informationsförmedling. För behandling av XML-dokumentens datainnehåll, används många olika tekniker och sätt. Äldre tekniken som är i användning än i dag är DTD som definierar datagranskningen i XML-dokumenten. För att DTD:s egenskaper räckte inte till en mer invecklad och bredare behandling av XML-dokumentens datainnehåll, utvecklades XML-skema som erbjuder bättre databehandlingsstandarder än DTD. Olika XML-databaser forskades som möjligtvis skulle användas av programmet. Sökandet började från W3C XQuery-testsidan, var olika XML-databasers förmåga av sökspråkets användning finns testade. Meningen var att använda en databas som är gratis även i kommersiella program och att den skulle ha programmeringsskikt åt C/C++, var valet lätt. Valet blev SEDNA XML DATABASE SYSTEMS som uppfyllde kraven och kom med goda instruktioner. Programmeringen började med forskning av programmeringsskikt som kom med SEDNA. Där fanns goda instruktioner att hur man tar kontakt med SEDNA databas och söker information. I tillämpningen användes så mycket som möjligt nyttiga SEDNA egenskaper som man kan ha nytta av. Programmeringen av tillämpningen lyckades bra och den fungerade som den skulle. Nyckelord: XML, W3C, SQL, API, XQuery, XPath, DTD, skema, DBMS
4 CENTRAL OSTROBOTHNIA UNIVERSITY OF APPLIED SCIENCES Degree Programme in Information Technology ABSTRACT Author: Kennet Tast Name of thesis: A XML-Database Application Date: Pages: Appendices Instructor: Supervisor: Ville Hietala Mats Albäck The purpose of the Bachelor s thesis was to make an XML-database software and to study the operation and the use of the XML-database. The application was made with Borland C++ Builder 6.0 and SEDNA was used as the XML-database. At first, the XML-technique and its meaning in transferring information was studied For handling of the XML-document s data many different techniques are used. The older technique that is still in use is DTD, which defines the validation of data that appears in XML-documents. Because the DTD did not have enough features, a new technique was invented. It was called XML-Scheme and it offered better ways of validating XML-data. In the thesis different XML-databases were studied which possibly could be used with the application. The search was started from W3C XQuery web page where different XML-databases had been tested. Because the purpose was to find an XML-database which was free to be used in a commercial application, the choice was SEDNA XML DATABE SYSTEM. It had also very good programming instructions. Developing of the application began by studying the instructions for the Advanced Programming Interface (API). There were good instructions of how to establish a connection with the SEDNA database, also very good examples of how to run queries against the database. In the application many useful SEDNA functions were used which could be important for the future. The programming of the software succeeded well and it functioned as it should. Key words: XML, W3C, SQL, API, XQuery, XPath, DTD, Schema, DBMS
5 SISÄLTÖ 1 Johdanto 1 2 XML XML DTD Skeema Infoset 6 3 KYSELYKIELET XML-kyselyt XPath XQuery 10 4 XML-TIETOKANTA XML-tietokannan tarkoitus XML-tietokannan ominaisuudet 17 5 XML-TIETOKANNAN VALINTA Eri XML-tietokantoja XML-tietokanta SEDNA SEDNAN ominaisuudet SEDNAN arkkitehtuuri SEDNAN datan organisointi 21 6 XML-TIETOKANTASOVELLUS Sovelluksen kuvaus SEDNAN liittäminen projektiin SEDNAN komentojen suorittaminen Yhteyden muodostaminen Transaktiot Kyselyn tiedon palautus Triggerit XMLCtrl -luokka Tietokannan muokkaus XML-dokumenttien ja kokoelmien käsittely Kyselyt 32 7 POHDINTA 34 LÄHTEET LIITTEET 1/2. Pääikkunan otsikkotiedoston lähdekoodi 2/6. Pääikkunan c-tiedoston lähdekoodi 3/1. XMLCtrl-otsikkotiedoston lähdekoodi 4/11. XMLCtrl-c-tiedoston lähdekood
6 1 1 JOHDANTO Tehtävänä oli luoda XML-tietokantasovellus ja tutkia XML-tietokannan käyttöä sekä selvittää, minkälaisia tietokantoja on tarjolla ja löytää ilmainen tietokanta, jota käyttää kaupallisissa sovelluksissa. XML-tietokannalla tarkoitetaan, että XMLdokumentti, joka tallennetaan tietokantaan, pysyy koko ajan samanlaisena eli datasisältö ei muutu. Tarkoituksena oli myös tutkia, minkälaisia kyselykieliä on tarjolla ja miten niitä käytetään. Lisäksi tuli perehtyä XML-tietokantojen sisällyttäminen tavallisiin tietosovelluksiin, ei web-ympäristössä. Opinnäytetyössä tutustuttiin kyselykieliin XPath ja XQuery. Tutkiskelun jälkeen tehtävänä oli luoda paikallinen XML-tietokantasovellus, jolla voisi käsitellä tietokantaa tavallisin menetelmin, kuten lisätä, poistaa, päivittää ja kysellä. Informaation paljous varsinkin internetissä hankaloitti aiheen tutkimista. Oli vaikeaa löytää juuri täsmällistä tietoa, koska kaikkea tietoa oli niin paljon saatavilla. Kirjoja ei löytynyt paljon juuri uusimpien kyselykielien tutkimiseen.
7 2 2 XML 2.1 XML XML (Extensible Markup Language) on kieli, jolla kuvataan tietoa ja joka helpottaa jäsentämään laajoja tietomassoja helpommin. Itse asiassa XML ei ole kieli vaan spesifikaatio merkintä kielen määrittämiseen. (Rusty & Means 2002, 3.) XML-kieli syntyi 90-luvulla. XML:n pääperiaate on, että käyttäjä voi määritellä miten tallentaa melkein minkälaista tietoa tahansa, mitä ohjelmat millä tahansa alustalla voisivat helposti käyttää. (Rusty & Means 2002, 8.) XML-dokumentin sisältö on melkein samanlainen kuin HTML dokumentin; kaikki tieto on elementtien sisällä <text>asd</text>. XML ei kuitenkaan ole mikään HTML-kielen seuraava versio vaan HTML-kieli on tarkoitettu ainoastaan websivujen koodauskieleksi kun taas XML-dokumentti on enemmän tiedon välitykseen tarkoitettu dokumentti. HTML-kielen jälkeen tuli XHTML, joka on HTML-kieli XMLmuodossa. XML-dokumentti on rakenteellinen. (Rusty & Means 2002, 13) XML-dokumentti koostuu tekstistä, usein UTF8-muotoisesta. Sisältö on kirjoitettu sulkujen sisälle, kuten HTML-koodi myös. Dokumentin sisältö noudattaa puurakennetta. Esimerkki XML-dokumentista: <?xml version="1.0" encoding="utf-8"?> <Henkilöt> <Henkilö> <Nimi>Pekka Puupää</Nimi> <Puh> </Puh> </Henkilö> </Henkilöt> XML-dokumentti on rakenteeltaan erittäin selvä, ja lukija käsittää heti, miten dokumentti ja sen sisältö on rakennettu.
8 3 2.2 DTD DTD (Document Type Definition) on määritys mm. XML-dokumentissa käytetystä rakennemäärittelytavasta. DTD määrittelee sallitut muodot elementeille ja attribuuteille, ja tämän seurauksena muodostuu uusi merkintäkieli. (Rusty & Means 2002, 27.) DTD kehitettiin jo kauan ennen XML:ää, joten sen soveltuvuus XML-kieleen on rajattu. DTD:llä pystytään määrittämään, millaisia elementtejä tai attribuutteja kukin elementti saa sisältää ja missä järjestyksessä. Myös keskinäisiä suhteita elementtien ja attribuuttien välillä voidaan määritellä. Rajallisesti voidaan myös määritellä hyväksyttäviä arvoja elementeille ja attribuuteille. (Rusty & Means 2002, 27.) DTD:tä käytetään esimerkiksi kun halutaan, että eri käyttäjien välillä pysyy samanlainen tiedon sisältö. Lisäksi sillä voidaan varmistaa, että ulkopuolelta tuleva data on oikein muotoiltu ja tarkoitukseen sopiva. Myös omaa tietoa voidaan tarkistaa että se on oikein. (Rusty & Means 2002, 28.) DTD ei kuitenkaan tue uusia XML-ominaisuuksia, datasisällön tarkistusta, tietotyyppejä ja oliopohjaista hierarkiaa. Nämä ominaisuudet on otettu huomioon XMLskeemassa. (Rusty & Means 2002, 28.) Esimerkki XML- ja DTD -tiedostosta: XML-tiedosto: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE Henkilöt SYSTEM "c:\xml.dtd"> <Henkilöt> <Henkilö> <Nimi>Pekka Puupää</Nimi> <Puh> </Puh> </Henkilö> </Henkilöt> DTD-tiedosto: <?xml version="1.0" encoding="utf-8"?> <!ELEMENT Puh (#PCDATA)>
9 4 <!ELEMENT Nimi (#PCDATA)> <!ELEMENT Henkilöt ((Henkilö))> <!ELEMENT Henkilö ((Nimi, Puh))> Jos käytetään DTD-määrittelyä XML-dokumentissa, niin XML-dokumenttiin kuuluu laittaa tiedot DTD-tiedostosta dokumentin alkuun kuten XML-dokumentti esimerkissä. DOCTYPE määrittää, missä DTD-tiedosto sijaitsee. DTD-määritys voi olla myös XML-tiedostossa. Esim. <!DOCTYPE Henkilöt SYSTEM "c:\xml.dtd">. ELEMENT Puh (#PCDATA) määrittää <Puh>-elementin sisällön parseroitavaksi tiedoksi. ELEMENT Henkilöt((Henkilö)) määrittää, että elementti <Henkilöt> sisältää lapsi elementin <Henkilö>. ELEMENT Henkilö ((Nimi, Puh)) määrittää, että <Henkilö>-elementti sisältää elementit <Nimi> ja <Puh>. 2.3 Skeema Skeema luotiin DTD:n jälkeen vastaamaan paremmin XML:n vaatimuksiin. Skeeman vaikuttavin parannus DTD:hen on nimiavaruustuki, joka mahdollistaa eri nimiavaruuksien käytön. Skeeman avulla muodostetaan tiedon kanssa XMLdokumentti; tämä on dynaaminen tapa. Katso Kuvio 1. (Rusty & Means 2002, 254.) Skeema voi myös olla kokoelma XML-dokumentteja tai osa toista XMLdokumenttia. Skeema voi myös rajata jonkin tietyn arvon, esimerkiksi elementti <osake määrä> voidaan rajata 0 10, jolloin muita arvoja ei hyväksytä. (Rusty & Means 2002, 254.)
10 5 Nimiavaruuksien hyöty on siinä, että voidaan valita eri tilanteiden mukaan validointiin käytettävää skeemaa, katso Kuvio 2. Nimiavaruuden muu hyöty on se, että voidaan samassa dokumentissa käyttää eri skeemoissa määriteltyjä tietotyyppejä. XML-skeema Data Dokumentin generointi XMLdokumentti KUVIO 1. XML-dokumentin muodostaminen XMLdokumentti Parseri Validi Data XML-skeema Ei validi Datan hylkäys KUVIO 2. Datan muodostaminen XML-dokumentti: <?xml version="1.0" encoding="utf-8"?> <Henkilöt xmlns:xsi=" xsi:nonamespaceschemalocation="c:\xmlschem.xsd"> <Henkilö> <Nimi>Pekka Puupää</Nimi> <Puh> </Puh> </Henkilö> </Henkilöt> Skeema-dokumentti: <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="
11 6 <xs:element name="puh"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:enumeration value=" "/> </xs:restriction> </xs:simpletype> </xs:element> <xs:element name="nimi"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:enumeration value="pekka Puupää"/> </xs:restriction> </xs:simpletype> </xs:element> <xs:element name="henkilöt"> <xs:complextype> <xs:sequence> <xs:element ref="henkilö"/> </xs:sequence> </xs:complextype> </xs:element> <xs:element name="henkilö"> <xs:complextype> <xs:sequence> <xs:element ref="nimi"/> <xs:element ref="puh"/> </xs:sequence> </xs:complextype> </xs:element> </xs:schema> 2.4 Infoset Infoset sisältää osan XML-dokumentista saatavasta tiedosta ja tietoja suhteista toisiinsa. Infoset välittää ainoastaan informaatiosta, joka on XML-dokumentissa eikä XML-syntakseissa, ja se kuvaa elementtien suhteita lapsialkioihin ja sitä mitä ne ovat. Se myös kertoo, ovatko lapsialkiot esimerkiksi merkkialkioita. (Tobin & Cowan )
12 7 3 KYSELYKIELET 3.1 XML-kyselyt XML-kyselytekniikkaa voidaan verrata tavallisissa tietokantasovelluksissa käytettävään SQL-kieleen. XML:n käyttö on kasvanut koko ajan, ja myös itse XMLdokumentit ovat kasvaneet suuriin mittoihin. Nykyään voidaan jo kuvata koko tietokanta XML-dokumentissa, ja se juuri on lisännyt tarvetta omalle kyselykielelle XML-tekniikkaan. Ennen kuin kyselykieliä ei vielä ollut, jouduttiin tiettyä informaatiota hakemaan XML-dokumentista rivi kerrallaan -periaatteella. DOM-komponentteja käytettiin ohjelmistopuolella tähän tehtävään, mutta siellä tuli raja vastaan, koska ne eivät pysty käsittelemään oikein suuria tiedostoja. XPath on yksi vähän vanhempi kyselykieli XML-tekniikkaan, ja se perustuu polkuihin, kuten nimi antaa olettaa. Uusin ja myös paras on XQuery, joka on verrattavissa SQL-kieleen. Sillä voi tehdä tekstikyselyitä, mikä tarkoittaa sitä, että voidaan vaikka etsiä sanaa kissa XML-dokumentista. 3.2 XPath XPath (XML Path Langauge) on kyselykieli XML-dokumenttien tiedon hankkimiseen, ja se luotiin vuonna 1999 (versio 1.0). XPath-versiota on kaksi, 1.0 ja 2.0, joista 2.0 luotiin vuonna XPath on W3C-standardi, ja sen päätarkoitus on osoittaa osa XML-dokumentista polkujen avulla, mutta se myös tarjoaa mahdollisuuden muokata merkkijonoja, numeroita, totuusarvoja ja lisäksi päivämäärävertailuja. XPath sisältää yli 100 sisään rakennettua funktiota. (Melton & Buxton 2006, ) XPath 2.0 on parannettu versio 1.0:sta. Se sisältää enemmän funktioita ja on paljon edistyneempi kuin 1.0. Suurin ero on se että 2.0 tukee rikkaampaa tyyppijärjestelmää. Atomic-tyypit ovat tuettuina kuten XML-skeemassa, ja sillä voidaan
13 8 myös importoida käyttäjän omia laatimia tyyppejä skeemasta. Arvot ovat muuttuneet sekvensseiksi. Alkiokokoelmat on korvattu alkiosekvensseillä, jotka voivat olla missä tahansa järjestyksessä. (Melton & Buxton 2006, ) Versiossa 2.0 voidaan käyttää nyt for -lauseketta kyselyissä, mikä on ollut edistyneempien kyselykielien ominaisuus. XPath:lla ei voi suoraan päivittää XMLdokumentin dataa, mikä on suuri puute varsinkin XML-tietokannoissa. Tiedon päivittämiseen käyttäjä joutuu käyttämään jotain XML-parseria kuten esimerkiksi DOM:ää ja lataamaan ensin XML-dokumentin parseriin ja siellä päivittämään datan ja sen jälkeen lähettämään XML-dokumentin takaisin XML-tietokantaan. (Melton & Buxton. 2006, ) XPath:ssa on seitsemän erilaista alkiota. elementti attribuutti teksti nimiavaruus prosessointiohje kommentti dokumentin juurialkio TAULUKKO 1. XPath -käskyt Ilmaisu Kuvaus alkion nimi Valitsee kaikki lapsialkiot nimetystä alkiosta. / Valitsee juurialkion. // Valitsevat alkiot, ihan sama missä ne sijaitsevat.. Valitsee tämänhetkisen alkion... Valitsee tämänhetkisen alkion Valitsee attribuutin
14 9 Esimerkki ilmaisujen käytöstä alla olevaan XML-tiedostoon: <?xml version="1.0" encoding="utf-8"?> <Henkilöt> <Henkilö> <Nimi>Pekka Puupää</Nimi> <Puh> </Puh> <Ikä>35</Ikä> </Henkilö> </Henkilöt> Henkilöt Valitsee kaikki lapsialkiot <Henkilöt>-alkiosta. /Henkilöt Valitsee juurialkion <Henkilöt>. Henkilöt/Henkilö Valitsee kaikki <Henkilö>-elementit jotka ovat <Henkilöt>alkion lapsia. //Henkilö Valitsee kaikki <Henkilö>-elementit riippumatta siitä missä ne sijaitsevat. Henkilöt//Henkilö Valitsee <Henkilö>-elementit, jotka ovat <Henkilöt>-elementin lapsia riippumatta siitä missä ne ovat Valitsee kaikki attribuutit, joiden nimi on <Nimi>. Predikaatit: Predikaatteja käytetään että löydettäisiin tietty alkio tai alkio, joka sisältää tietyn arvon. Henkilöt/Henkilö[0] Valitsee ensimmäisen <Henkilö>-elementin, joka on <Henkilöt>-elementin lapsi. Henkilöt/Henkilö[last()-1] Valitsee toiseksi viimeisen <Henkilö>-elementin, joka on <Henkilöt>-elementin lapsi. Henkilöt/Henkilö[position<3] Valitsee kaksi ensimmäistä <Henkilö>-elementtiä jotka ovat Henkilöt elementin lapsia. Valitsee kaikki <Henkilö>-elementit, joissa on attribuutti <Nimi>. = Pekka ] Valitsee kaikki <Henkilö>-elementit joissa on attribuutti <Nimi> ja jonka arvo on Pekka. //Henkilö[@Ikä > 25] Valitsee kaikki <Henkilö>-elementit, joissa on attribuutti <Ikä> ja jonka arvo on suurempi kuin 25.
15 10 > 25]/Nimi Valitsee kaikki <Nimi> attribuutit joissa attribuutti <Ikä> on suurempi kuin 25. XPath:ssa voidaan myös etsiä elementtejä tai attribuutteja, joiden nimet eivät ole tiedossa. * sopii kaikkiin sopii kaikkiin attribuutteihin ja node() sopii kaikenlaisiin alkioihin. Esimerkiksi //* valitsee kaikki dokumentin elementit ja //Nimi[@*] valitsee kaikki <Nimi> -elementit joilla on joku attribuutti. Monien polkujen valinta onnistuu myös käyttämällä pystyviivaa esimerkiksi //Henkilö/Nimi //Henkilö/Ikä valitsee kaikki <Henkilö> -elementin <Nimi> - elementit ja <Henkilö> -elementin <Ikä> -elementit. XPath tuntee myös operaattorit suurempi, pienempi, yhtä suuri, suurempi tai yhtä suuri, pienempi tai yhtä pieni ja eri suuri. Myös lisäys-, vähennys-, kerto-, jako- ja MOD -laskut onnistuvat. XPath palauttaa joko merkkijonon, numeron, totuusarvon tai alkiokokoelman. (Melton & Buxton. 2006, 170.) Merkkijono funktioita on myös mukana: string(object) joka muuntaa annetun objektin merkkijonoksi. concat(string,string,string*) liittää yhteen kaksi merkkijonoa. contains(string1,string2) vertailee että sisältääkö string1 string2:sen. normalize-space(string) kaikki alussa ja lopussa olevat tyhjät merkit poistetaan ja useat tyhjät peräkkäiset merkit muunnetaan yhdeksi. (Melton & Buxton. 2006, 170.) 3.3 XQuery XQuery kehitettiin vastaamaan paremmin XML-dokumenttien tiedon hankinnan vaatimuksia. XQuery on kehitetty vastaamaan helposti omaksuttavista käskyistä, joita on helppo ymmärtää, ja sillä pystyy helposti hakemaan tietoa dokumenteista kuten myös tietokannoista. (Melton & Buxton 2006.)
16 11 XQuery-kieltä useasti selitetään, siten että se vastaa samaa kuin mitä SQL on tietokanta-tauluille. XQuery-versioita on kaksi, 1.0 ja 2.0. Versio 1.0 on jatkoversio XPath 2.0:sta. XQuery on peritty XML-kyselykielestä Quilt, joka on puolestaan perinyt ominaisuuksia monista eri kielistä, esimerkiksi seuraavista: XPath 1.0, XQL, XML-QL, SQL ja OQL. XQuery on W3C-standardi. Nykypäivänä suret tietokannat tukevat XQery-kielen käyttöä tiedon haussa, kuten esimerkiksi Microsoft, IBM ja Oracle. XQuery operoi XML-dokumentin abstraktissa loogisessa struktuurissa eikä pintasyntaksissa. Tätä loogista struktuuria kutsutaan tietomalliksi (data model). XQery on niin samanlainen kuin XPath 2.0, että molemmat palauttavat samat tulokset kyselyä tehtäessä. (Melton & Buxton 2006.) XQueryn mielenkiintoinen ominaisuus on, että käyttäjä voi tehdä omia funktioita, joita hyödyntää kyselyissä (XQuery Tutorial. XQuery Functions). XQuery sisältää ominaisuudet, joilla voi muokata dataa, joka sijaitsee XML-tietokannassa, esimerkiksi Update, Delete ja Insert. Esimerkki: for $x in doc("henkilöt.xml")/henkilöt/henkilö where $x/ikä>30 order by $x/nimi return $x/nimi Kyseinen esimerkki valitsee henkilöt, joiden ikä on suurempi kuin 30 ja palauttaa henkilöiden nimet Henkilöt.xml-tiedostosta. for-lause valitsee kaikki <Henkilö>-elementit ja sijoittaa ne muuttujaan $x; for on iteraattori. Where-lause valitsee ainoastaan <Henkilö>-elementit, joissa ikäarvo on suurempi kuin 30. Order by -lause määrittelee lajittelujärjestyksen, ja tässä tapauksessa järjestetään nimen mukaan. Return-lause määrittelee, mitä palautetaan. Nimi-arvot palautetaan tässä tapauksessa.
17 12 for -lausekkeeseen voidaan lisätä myös määritelmiä, kuten to, at ja let. for lausekkeeseen voidaan myös asettaa pilkkuerotin, jolloin voidaan käyttää kaksi hakuehtoa. to-lause määrittää iterointi määrän ja at laskee iterointienmäärän. let määritelmä mahdollistaa muuttujien määritelmän eikä suorita samaa käskyä monta kertaa; let lauseke ei iteroi. in-esimerkki: for $x in (1 to 5) return <test>{$x}</test> Esimerkki iteroi korkeintaan viisi kertaa, vaikka tuloksia olisi enemmän. Tulos: <test>1</test> <test>2</test> <test>3</test> <test>4</test> <test>5</test> at-esimerkki: for $x at $i in doc("henkilöt.xml")/henkilöt/henkilö/nimi return <Henkilö>{$i}. {data($x)}</henkilö> Tulos: < Henkilö >1. Pekka Puupää</Henkilö > < Henkilö >2. Harri Puu</Henkilö > < Henkilö >3. Seppo Monttu</Henkilö > < Henkilö >4. Liisa Leipuri</Henkilö > let-esimerkki: let $x := (1 to 5) return <test>{$x}</test> Tulos: <test> </test> XQuery on erittäin kätevä, jos esimerkiksi halutaan näyttää tulokset HTML-sivulla. Kyselyyn lisätään vain HTML-tagit, ja kysely palauttaa valmiin HTML-sivun.
18 13 Esimerkki palauttaa kyselyn tulokset HTML-listassa: <ul> { for $x in doc("henkilöt.xml")/henkilöt/henkilö/nimi order by $x return <li>{$x}</li> } </ul> Jos halutaan palautus pelkkänä datana eikä data tagien sisällä, niin voidaan käyttää data($x)-käskyä. Esimerkki: <ul> { for $x in doc("henkilöt.xml")/henkilöt/henkilö/nimi order by $x return <li>{data($x)}</li> } </ul> Peruskäskysäännöt: XQuery on case-sensitive XQuery:n elementit, attribuutit ja muuttujien on oltava valideja XML-nimiä. XQuery-merkkijonoarvo voi olla -merkkien tai -merkkien sisällä. XQery-muuttuja on määritelty $-merkillä, jonka jälkeen tulee nimi. XQery-kommentit ovat :-merkkien sisällä, esim. :kommentti: XQuery:ssä voi myös käyttää if-else-then, ehtomäärittelyä. for $x in doc("henkilöt.xml")/henkilöt/henkilö return if ($x/@ikä<18) then <lapsi>{data($x/nimi)}</lapsi> else <aikuinen>{data($x/nimi)}</aikuinen> Funktioden käyttäminen tapahtuu yleensä liittämällä fn sana funktion nimen eteen, kuten fn:string(). Tämä ei ole pakollista, koska fn on oletuksena nimiavaruuden prefiksi joten, fn sanaa ei tarvita.
19 14 TAULUKKO 2. Funktiot Käyttö kohde Funktio Esimerkki Elementti uppercase() <nimi>{uppercase($nimi)}</nimi> Polku substring() doc("henkilöt.xml")/henkilöt/henkilö[substrin g(nimi,1,5)='harri'] let-lause substring() let $nimi := (substring($henkilönnimi,1,4)) Oman funktion kirjoittaminen onnistuu myös kirjoittamalla funktio kyselyyn tai erilliseen kirjastoon. Oman funktion ehdot: Käytä declare-funktiosanaa. Funktion nimen on oltava prefiksoitu. Parametrien datatyypit ovat enimmäkseen samoja kuin XML-skeemassa on määritelty. Funktion on oltava kehystetty {}-merkeillä. Syntaksi: declare function prefix:funktion_nimi($parameter AS datatype) AS returndatatype { (:...funktion koodi... :) }; Esimerkki oman funktion toteuttamisesta kyselyssä: declare function local:minprice( $price as xs:decimal?, $discount as xs:decimal?) AS xs:decimal? { let $disc := ($price * $discount) div 100 return ($price - $disc) }; Funktion kutsuminen: <minprice>{local:minprice($book/price, $book/discount)}</minprice>
20 15 Tiedon lisäämisessä dokumenttiin voidaan käyttää kolmea eri sijoituskäskyä, into,preceding tai following. Seuraavassa on esimerkki insert-käskystä: UPDATE insert <Person id="4"> <Name>Laila Torvi</Name> <Age>44</Age> <Tel> </Tel> </Person> following doc("persons.xml", Person )/Persons
21 16 4 XML-TIETOKANTA XML-tietokannalla tarkoitetaan tietovarastoa, joka sisältää XML-muotoista dataa. Ne määrittävät loogisen mallin XML-dokumenteille, jotka varastoidaan tai noudetaan XML-tietokannasta. Vertailuna voidaan käyttää relaatiotietokantoja, jotka säilyttävät datan taulun riveissä, XML-tietokantojen kantoihin tallennetaan XMLdokumentti/-dokumentteja. XML-tietokantojen päätarkoitus on olla työväline XML-dokumenttien käsittelyssä ja tallennuksessa. Niiden tarkoitus ei ole korvata relaatiotietokantoja. Nykypäivän relaatiotietokannat tukevat myös XML-tiedon tallentamista ja kyselyä. XMLtietokantoja on kahden tyyppisiä, niitä, jotka tallentavat tiedon binäärisenä, ja niitä, jotka tallentavat sen XML-dokumentin muodossa. (Staken 2001.). 4.1 XML-tietokannan tarkoitus Koska maailmassa alkaa olla paljon XML-dokumenttien käsittelyä varsinkin internetympäristössä ja dokumentteja pitäisi pystyä tallentamaan jonnekin, esimerkiksi tietokantaan, niin huomattiin, että relaatiotietokannat ja muut sen hetkiset tietokannat eivät oikein hyvin sopineet siihen tehtävään. Relaatiotietokantoihin kehiteltiin XML-tiedon käsittely-, ja tallennusmekanismeja mutta myös XML-tietokantoja kehiteltiin käsittelemään pelkkiä XML-tietoja. XML-tietokantojen tarkoitus on antaa suora tuki XML-datan tallennukseen. Jos esimerkiksi tallentaisimme XML-dataa relaatiotietokantaan, kuten nykypäivänä on mahdollista, joutuisi XML-datan ensiksi hajottamaan taulujen riveihin ja sarakkeisiin, ja jos datan haluaa ulos relaatiotietokannasta, joutuisi datan ensiksi hakemaan taulujen riveistä ja sarakkeista ja sijoittamaan XML-dokumenttiin. Kyseinen operaatio on aikaa vievää.
22 17 Myös se, että jotkin XML-tietokannat pystyvät hakemaan alkuperäisen XMLdokumentin tietokannasta, on hyvä ominaisuus esimerkiksi lakiasioissa, joissa vaatimuksena on, että dokumentti on alkuperäinen. (Bourret 2005.) Koska XML-tietokannoissa ei tarvitse muunnella dataa edestakaisin on tämän operointi nopeampaa ja tehokkaampaa. Samasta syystä XML-tietokantojen väitetään säästävän sovelluskehitysaikaa ja vähentävän ohjelmoinnin monimutkaisuutta. (Bourret 2005.) 4.2 XML-tietokannan ominaisuudet Kaikki XML-tietokannat eivät ole samanlaisia, mutta niillä kaikilla on yhteisiä ominaisuuksia, kuten datan käsittely, kokoelmat, kyselyt ja päivitykset. Datan käsittely on erilaista kuin relaatiotietokannoissa. Data on tallennettuna XML-muotoon, ja se ei sijaitse tauluissa, taulun riveissä tai taulun sarakkeissa kuten relaatiotietokannoissa. XML-tietokantaan on myös tallennettu XML-datan rakenne, jota hyödynnetään dataa haettaessa tai tallennettaessa. Vaikka käytettäisiin relaatiotietokantaa, jossa on XML-datan tallennusmahdollisuudet, ei SQL:n käyttö olisi yhtä yksinkertaista, kuten se on normaalien taulujen datan käsittelyssä, koska XML-data sisältää myös tiedot XML-datan rakenteesta. (Bourret 2005.) Kokoelmia käytetään, jos halutaan, että kysely ulottuisi moneen XML-dokumenttiin samalla kerralla. Eräät XML-tietokannat eivät vaadi skeemaa XML-dokumenttien tallennukseen, ja siinä tapauksessa tietokantaan voidaan tallentaa minkälaisia XML-dokumentteja tahansa. Skeemasta riippumattomuus tekee XMLtietokannasta joustavamman ja sovelluskehityksestä helpomman, mutta se vaarantaa tiedon eheyden. (Bourret 2005.) XQuery ja XPath ovat nykyään jo tuettuja kyselykieliä XML-tietokannoissa. XQuery:ä voidaan verrata SQL-kieleen, ja sillä voidaan tehdä kaikki tärkeämmät operaatiot XML-datan suhteen, eli datan lisäys, poisto ja päivittäminen onnistuvat, mikä ennen XQueryä ei ollut mahdollista. Kyselyiden suorituskykyä voidaan parantaa luomalla indeksejä tietokantaan. (Bourret 2005.)
23 18 5 XML-TIETOKANNAN VALINTA XML-tietokantaa valittaessa oli ehtona se, että se olisi ilmainen ja lisenssi sallisi käytön kaupallisessa sovelluksessa. Myös ohjelmointirajapinnan saanti C++ Builder -sovelluskehitystyökalulle olisi hyvä, koska sillä teen kyseisen sovelluksen. 5.1 Eri XML-tietokantoja Nykyään on tarjolla monenlaisia XML-tietokantoja, maksullisia ja open source - lisenssiin perustuvia mutta myös täysin ilmaisia. Kaikissa on poikkeavia ominaisuuksia, ja varsinkaan sovellusrajapintoja ei ole tarjolla kaikille ohjelmointi-kielille, mutta eräät tarjoajat ovat ratkaisseet asian tekemällä niin kutsutun Client/Serverominaisuuden, jolloin pystytään käyttämään omaa ohjelmointi-työkalua riippumatta siitä, onko ohjelmointirajapintaa. Yleisin ohjelmointirajapinta, joka löytyy melkein kaikista, on Javalle tarkoitettu. W3C XQuery -testisivulta löysin seuraavat testatut tietokannat: BaseX ei tarjoa ohjelmointi-api:a Berkeley DB XML Open Source, ilmainen jos julkaistaan oma ohjelma koodi exist-db internetympäristöön. Saxon-SA maksullinen Sedna XML Database System ilmainen X-Hive/DB maksullinen XQuantum maksullinen Valitsin SEDNA-tietokannan, koska se oli ilmainen ja siitä löytyi tuki XQuerykysely-kielelle. Myös ohjelmointirajapinta C/C++-kielelle vaikutti valintaan. Ohjeetkin olivat erittäin hyviä. 5.2 XML-tietokanta SEDNA SEDNA XML-tietokannan on kehittänyt venäläinen MODIS-ryhmä ISP RAS (Institute for System Programming, ISP, Russian Academy of Sciences, RAS). Uusin versio SEDNA 2.2 julkaistiin , ja sen kehitys alkoi vuoden 2003 alussa.
24 19 SEDNA on suunniteltu XQuery-kysely-kielen käyttöä ajatellen. (Grinev & Fomichev & Kuznetsov 2004.) SEDNA suunniteltiin pitäen mielessä kaksi tärkeintä tavoitetta: Sen tuli olla täydellinen tietokantajärjestelmä, joka tarjoaa tavallisten tietokantojen palvelut, kuten ulkoisen muistinhallinnan, kysely- ja päivitysominaisuudet, samanaikaisuuden hallinnan, kyselyn optimoinnin jne. Lisäksi sen tuli tarjota ajon aikainen ympäristö XML-datan sovelluksille. (Grinev & Fomichev & Kuznetsov 2004.) SEDNA on ilmainen XML-tietokanta ja suunniteltu yleiseksi kannaksi monille XMLsovelluksille. SEDNA on rakennettu ihan alusta alkaen nopeaksi ja luotettavaksi tallennusvarastoksi ja suuria datamääriä prosessoimaan. SEDNA on täysi tietokantajärjestelmä joka tarjoaa täydelliset tietokantaominaisuudet, kuten kyselyt, päivitykset, transaktiot, elpymisen ja turvallisuuden. (Grinev & Fomichev & Kuznetsov 2004.) 5.3 SEDNAN ominaisuudet SEDNA on avoimeen lähdekoodin perustuva XML-tietokantajärjestelmä, joka on implementoitu C/C++:lla. Lisäksi voidaan käyttää myös Apache-moduulia mutta se noudattaa Apache-lisenssiä 2.0. XQuery-kielen tuki on yksi tärkeimmistä ominaisuuksista, ja se on varmennettu W3C XQuery Test Suite -testissä. (Native XML Database System.) Ominaisuuksiin kuuluu myös täysi tekstihaku, joka perustuu dtsearch-ohjelmaan, joka on maksullinen. SEDNAn tallennusstruktuuri on suunniteltu tehokkaaksi avuksi kyselyihin ja päivityksiin. SEDNA-systeemi ei sisällä alla olevaa relaatiotietokantaa tai muuta vastaavaa. Tallennus perustuu kuvaavaan skeemaan, joka on datasta peritty ja jota kutsutaan DataGuideksi. (Native XML Database System.) SEDNA ei välitä dokumenttien koosta, joten sillä on tehokas tuki kokoelmiin tai ihan yksittäisille dokumenteillekin. Transaktioita voi myös käyttää kuten myös triggereitä, ja tietokannan voi indeksoida, mikä nopeuttaa tiedon hakemista.
25 20 Tietokantaan saa myös määriteltyä turvallisuusasetuksia käyttäjille. SQL-yhteys on mahdollista XQuery:n kautta. (Native XML Database System.) Ohjelmointirajapintoja on seuraaville kielille: Java, C-kieli, Scheme, PHP, Python,.NET ja OmniMark. Myös muille kielille onnistuu implementointi open socket-base client/server -protokollan avulla. (Native XML Database System.) SEDNA on suunniteltu ja implementoitu siirrettäväksi eri järjestelmiin. Tällä hetkellä SEDNA on saatavissa seuraaville järjestelmille: Windows 2000/XP Linux x86 kernel versio 2.4 tai uudempi PowerPC IBM RS6000, Debian Sarge. (Native XML Database System.) 5.4 SEDNAN arkkitehtuuri SEDNA DBMS (DataBase Management System) sisältää seuraavat komponentit: governor on koko järjestelmän keskusyksikkö. Kaikki muut komponentit rekisteröityvät governoriin. Governor tietää, mitkä tietokannat ja transaktiot ovat ajossa ja kontrolloi niitä. listener luo instanssin yhteyskomponentista jokaista asiakasta kohden ja asettaa suoran yhteyden asiakkaan ja yhteyskomponentin väliin. Yhteyskomponentti sisältää asiakkaan session. Se luo instanssin transaktiokomponentista asiakkaan jokaisesta aloita transaktio -pyynnöstä. Katso Kuvio 3. (Grinev & Fomichev & Kuznetsov 2004.)
26 21 KUVIO 3. SEDNAn rakenne. (Grinev & Fomichev & Kuznetsov 2004.) Transaktio(transaction)komponentti sisältää seuraavat kyselynsuorituskomponentit: parseri (parser), optimoija (optimizer) ja suorittaja (executor). Optimoija ottaa kyselyn loogisen esitelmän ja muodostaa optimoidun kyselysuoritussuunnitelman, joka sisältää alemman tason operointeja fyysisen datan struktuureissa puumuodossa. Suorittaja tulkkaa suoritussuunnitelman. Jokainen instanssi tietokantahallinnasta sulkee yksittäisen tietokannan ja koostuu tietokantahallintapalvelusta siten, että indeksihallinta pitää huolen indekseistä, joita tietokanta sisältää, puskurihallinta on vastuussa levyn ja päämuistin välisestä kommunikoinnista ja transaktiohallinta tarjoaa yhteiset yhteyskontrollivälineet. (Grinev & Fomichev & Kuznetsov 2004.) 5.4 SEDNAN datan organisointi SEDNAn datan organisointiin on käytetty suoria osoittimia esittämään XMLdokumentin alkioiden (isäntä, lapsi ja jälkeläinen) yhteyksiä toisiinsa. SEDNA:ssa
27 22 on käytetty kuvaavaa skeemaa tallennusstrategiana, joka perustuu alkioiden klusterioinnin sijaintiin XML:n kuvaamassa skeemassa toisin kuin perspektiivisessä skeemassa, joka tiedetään ennakkoon ja on yleensä määritelty DTD:ssä ja XMLskeemassa. Kuvaava skeema luodaan dynaamisesti ja ylläpidetään datasta. Se esittää perusteellisen ja tarkan rakenteellisen yhteenvedon datasta. (Grinev & Fomichev & Kuznetsov 2004.) Kuvaava skeema XML-datalle on aina puumuodossa. Kuvaava skeema on tarkempi, ja se sallii kuvaavan skeeman tallennusstrategia käytön sellaiselle datalle, jolla ei ole skeemaa. Jokainen skeeman alkio on nimetty XML-alkiolapsen tapaan, esimerkiksi elementti, attribuutti ja teksti ja niillä on osoitin datalohkoihin, missä skeeman alkioita vastaavat alkiot ovat tallennettuina. (Grinev & Fomichev & Kuznetsov 2004.) Jotkut skeeman alkiot alkio tyypin mukaan, ovat myös nimettyjä. Data-lohkot, jotka kuuluvat yhteen skeeman alkioiden kanssa, ovat linkitettyinä osoittimilla kaksisuuntaisessa listassa. Alkiokuvailijat lohkolistassa ovat osittain järjestettyjä dokumenttijärjestyksen mukaan, mikä tarkoittaa, että jokainen alkio kuvailija lohko i:ssä edeltää jokaista alkiota lohko j:ssä dokumenttijärjestyksessä, vain, jos i on pienempi kuin j. (Grinev & Fomichev & Kuznetsov 2004.) Lohkon sisällä alkiot eivät ole järjestyksessä, mikä vähentää yleistä dokumenttijärjestyksen järjestelyä päivityksien sattuessa. (Grinev & Fomichev & Kuznetsov 2004.) Tekstiarvo on teksti alkion sisältö tai attribuutin alkion arvo jne. Tekstiarvon tärkein asia on, että se vastaa muuttujan pituutta. Tekstiarvot ovat tallennettuina lohkoihin perustuen hyvin tiedettyjen slotted-page -struktuuri metodeihin. (Grinev & Fomichev & Kuznetsov 2004.) Osoittimien tallentaminen kaikille lapsille alkiokuvauksessa voi johtaa alkiokuvauksen koon ylittymiseen lohkossa. Välttääkseen tämän SEDNA tallentaa
28 23 ainoastaan osoittimia ensimmäisille kuvaavan skeeman lapsille. Tämä käy ilmi SEDNAn skeemakuvasta, Kuvio 4. (Grinev & Fomichev & Kuznetsov 2004.) KUVIO 4. SEDNA-skeema. (Grinev & Fomichev & Kuznetsov 2004.) Otsikko(label)kenttä sisältää otsikon numeroinnin skeemasta. Vasemman ja oikean lapsiosoittimen merkitys on suoraan eteenpäin. Seuraava lohkossa ja edellisessä lohkossa osoittimet käytetään lohkon sisällä olevien alkioiden linkittämiseen dokumenttijärjestyksen uudelleen konstruoimisen sallimiseen. Seuraava ja edellinen osoitin sallivat uuden dokumenttijärjestyksen konstruoimisen niiden alkioiden kesken, jotka vastaavat samaa skeema-alkiota, jossa lapsi-osoittimia vasen ja oikea käytetään tukemaan dokumentti järjestystä lapsien välissä. Katso kuvio 5. (Grinev & Fomichev & Kuznetsov 2004.)
29 24 KUVIO 5. Yleisen alkion kuvauksen rakenne. (Grinev & Fomichev & Kuznetsov 2004.)
30 25 6 XML-TIETOKANTASOVELLUS 6.1 Sovelluksen kuvaus Sovellus ohjelmoidaan C++ Builder 6 -ohjelmointityökalulla. Sovellus sisältää seuraavat ominaisuudet: tietokannan käsittely luominen ja poistaminen kokoelmien käsittely katsominen, poistaminen ja lisääminen dokumenttien käsittely katsominen, poistaminen, lisääminen ja päivittäminen kysely Xquery/XPath-kyselykielen suorittaminen Sovellus perustuu yhteen pääikkunaan jossa käyttäjä voi suorittaa XML-datan muokkaamista ja muuta XML-tietokantaan liittyvää operointia. katso kuvio 6. Itse funktiot, jotka ovat yhteydessä SEDNA:an, tehdään erilliseen luokkatiedostoon, koska täten voidaan helposti siirtää koodi johonkin toisen projektin käyttöön tarvittaessa. Projektiin liitetään libsedna API -kirjasto joka on C++ Builder 6:een tehty ohjelmointirajapinta, jonka sai SEDNAN sivustolta kopioitua. Myös muut tarvittavat SEDNA-paketit saa sivustolta ilmaiseksi. KUVIO 6. Sovellusikkuna
31 SEDNAN liittäminen projektiin Lisätään projektin asetuksiin polku libsedna_bcb6 kansioon, jotta projekti löytää tarvittavat tiedostot. Katso kuvio 7. KUVIO 7. Kirjaston liittäminen projektiin Projektiin lisätään myös libsedna_bcb.lib-kirjastotiedosto ja libsedna.h-tiedosto sekä myös sp_defs.h. Katso kuvio 8. Tämä kyseinen kirjastotiedosto on tarkoitettu käytettäväksi ainoastaan yksinajosovelluksessa, mutta mukana tulee myös libsednamt-kirjasto joka on tarkoitettu moniajoon. KUVIO 8. Projektitiedostot
32 SEDNAN komentojen suorittaminen SEDNAn komentoja suoritetaan ohjelmointirajapinnan avulla. Ohjelmointirajapinnasta löytyvät kaikki tarvittavat funktiot tietokannan käsittelyyn. Ennen kuin SEDNA:an luodaan yhteys, on muodostettava SednaConnectionmuuttuja, joka sisältää tietoja SEDNA-yhteydestä. Kuviosta 9 nähdään Sedna- Connection-muuttujan sisältämät tiedot. KUVIO 9. SednaConnectionin sisältämät tiedot Yhteyden muodostaminen SEDNA-yhteys muodostetaan käyttämällä SEconnect -käskyä. Parametreinä annetaan osoite, missä SEDNA DBMS sijaitsee, tietokannan nimi, käyttäjänimi ja salasana. Käyttäjän salasanoja voidaan muokata. int SEconnect(SednaConnection* conn, const char* url, const char* db_name, const char* login, const char* password)
33 Transaktiot SEDNAn kyselyt suoritetaan aina transaktioina, eli aina ennen kuin kysely ajetaan, suoritetaan transaktion alkukomento. Transaktioita käytetään tiedon perillemenon varmistukseen. Transaktioita voidaan käyttää ainoastaan yhtä kerralla. Sovelluksia ohjelmoitaessa käytetään SBegin(Sedna ConnectionType) -komentoja ennen itse kyselyn suorittamista ja kyselyn onnistumisen jälkeen kuitataan, että kysely onnistui. res = SEbegin(Conn); if(res!= SEDNA_BEGIN_TRANSACTION_SUCCEEDED) { ShowMessage("Begin transaction failed: " + AnsiString(SEgetLastErrorMsg(Conn))); return -1; } res = SEexecute(Conn, q.c_str()); if(res!= SEDNA_QUERY_SUCCEEDED) { ShowMessage("Query failed: " + AnsiString(SEgetLastErrorMsg(Conn))); return -1; } res = SEcommit(Conn); if(res!= SEDNA_COMMIT_TRANSACTION_SUCCEEDED) { ShowMessage("Commit transaction failed: " + AnsiString(SEgetLastErrorMsg(Conn))); SErollback(Conn); return -1; } Kyselyn tiedon palautus Kysely suoritetaan aina SExecute(ConnectionType, Query text) -komennolla. Kyselyn palautustiedon joutuu iteroimaan palautussekvenssin sisällöstä. Komennolla SEnext(ConnectionType) käyttäjä valitsee seuraavan tiedon. SEget- Data(SednaConnection* conn, char* buf, int bytes_to_read) -komento hakee tiedon buf-muuttujaan.
34 29 while((res = SEnext(Conn))!= SEDNA_RESULT_END) { if (res == SEDNA_ERROR) { ShowMessage("Failed to get next result item from server: " + AnsiString(SEgetLastErrorMsg(Conn))); return -1; } do { bytes_read = SEgetData(Conn, buf2, ); if(bytes_read == SEDNA_ERROR) { ShowMessage("Failed to get result data from server: " + AnsiString(SEgetLastErrorMsg(Conn))); return -1; } } if(bytes_read > 0){ buf2[bytes_read] = '\0'; temp= temp + buf2; } }while(bytes_read > 0); Triggerit Triggerit ovat tapahtuman kuuntelijoita tietokannassa. Kun muutoksia tehdään johonkin dokumenttiin, triggeri havaitsee tapahtuman ja toimii annettujen ohjeiden avulla. Triggerit voidaan yhdistää toimimaan ennen Lisää-, Poista- tai Korvaatapahtumia tai niiden jälkeen. Triggerin pohjimmainen käyttötarkoitus on taata tiedon oikea olemus. Seuraava esimerkki luo uuden triggerin, joka tarkkailee uuden tiedon lisäämistä. Jos henkilön ikä on alle 18 vuotta, lisätään uusi, alkio johon sijoitetaan lapsi-arvo, Jos henkilö on yli tai yhtä kuin 18 vuotta, lisätään uusi alkio johon sijoitetaan aikuinen-arvo. CREATE TRIGGER "tr1" BEFORE INSERT ON doc("persons")//person FOR EACH NODE DO
35 30 { if($new/age < 18) then <person>{attribute id {$NEW/@id}} {$NEW/*} <age-group>lapsi</age-group> </person> else <person>{attribute id {$NEW/@id}} {$NEW/*} <age-group>aikuinen</age-group> </person>; } 6.4 XMLCtrl-luokka XMLCtrl-luokka on dynaaminen, ja se sisältää kaikki funktiot, mitä käytetään liittyen SEDNAn tietokantaan. Kaikki SEDNAan liittyvät funktiot ovat samassa luokassa sen takia, että jos joskus halutaan siirtää funktiot, niin on huomattavasti helpompaa siirtää koko luokka kuin että niitä joutuisi kopioimaan sieltä täältä, katso kuvio 10. KUVIO 10. XmlCtrl-luokka
36 31 Otsikkotiedostoon joudutaan sisällyttämään libsedna.h- ja sp_defs.h-tiedostot. Sen jälkeen voidaan luoda luokan xmlctrl konstruktorin. SednaConnection* Conn on osoitin SEDNAn yhteystyyppiin. Tämä osoitin hoitaa kaikki yhteydet tietokantaan. Start/Stop services -funktio käynnistää tai sammuttaa tarvittavat palvelut, joita SEDNA tarvitsee. SEDNAn mukana tulee ajettavia tiedostoja, jotka hoitavat tietokannan yhteyksiä, katso kuvio 11. Tätä kutsutaan SEDNAn SEDNA DBMS (Data- Base Management System). Nämä tiedostot ajetaan yleensä komentokehotteesta. SEDNA DBMS sisältää seuraavat komponentit (ajettavat tiedostot): se_cdb luo uuden tietokannan se_ddb poistaa tietokannan se_exp export/import/restore se_gov käynnistää SEDNAn serverin ja on pakollinen ajaa se_rc näyttä tietoa SEDNAn komponenttien ajosta se_sm ajaa tietokannan se_smsd pysäyttää tietokannan se_stop pysäyttää SEDNAn se_term voidaan suorittaa tietokantafunktioita käskykehotteen kautta KUVIO 11. SEDNAn komponentit 6.5 Tietokannan muokkaus Tietokannan muokkausominaisuudet ovat tietokannan lisäys, poisto ja valitun tietokannan käyttö. Käyttäjä voi lisätä uuden tietokannan valitsemalla Create databse ja poistaa tietokannan valitsemalla Delete database. Poistamiseen käytetään
37 32 se_ddb.exe-ohjelmaa, joka kuuluu SEDNAn omiin tietokannan hallintasovelluksiin. 6.6 XML-dokumenttien ja kokoelmien käsittely SEDNA-tietokantaan voidaan lisätä XML-dokumentteja joko yksittäisinä tai sitten ne voidaan lisätä johonkin kokoelmaan. Kokoelmassa on se hyöty, että XMLdokumenteissa jotka kuuluvat johonkin kokoelmaan, voidaan suorittaa sama kysely koskemaan kaikkia kokoelmaan kuuluvia dokumentteja. Sovelluksessa voidaan lisätä ja poistaa kokoelmia. Dokumentteja voidaan lisätä johonkin tiettyyn kokoelmaan tai poistaa ne sieltä. Kokoelma listan haku on itse asiassa kysely, joka palauttaa kokoelma listan. for $b in document("$collections")/collections/collection return Samalla tavalla on myös dokumenttien haku toteutettu. for $b in document("$documents")/documents/collection where = [ collection name ] return data($b/document/@name) 6.7 Kyselyt Kyselyitä voidaan suorittaa Query-laatikkoon kirjoittamalla. Laatikon alapuolella on valmiiksi muodostettuja kyselyitä, joita voi käyttää ja muokata. Kyselyitä voi tehdä XPath-, XQuery- ja XUpdate-kielillä. Kuviossa 12 on suoritettu kysely Persons - kokoelmaan ja persons.xml -tiedostoon. Kyselyssä halutaan selvittää olemassa olevat person_id -arvot. Kysely palauttaa tuloksen Document/Query result - kenttään.
38 KUVIO 12. Kyselyn suoritus 33
39 34 7 POHDINTA Minulla ei ollut aikaisempaa kokemusta XML-tietokannoista tai XML-kysely-kielien käytöstä. Ainoastaan XML-dokumentit olivat tuttuja. Kun mietin mahdollisuuksia sijoittaa XML-dokumentteja relaatiotietokantaan, löysin sattumalta tietoa XMLtietokannasta ja sen kyselykielenä käytetystä XQuery-kielestä. XML-dokumenttien tai tiettyjen tietojen haussa tietokannasta minua kiinnosti kovasti se miten hyvin XQuery muistuttaa SQL-kieltä ja voidaanko sillä tosiaankin hakea tietoa tekstin perusteella, puhumattakaan tiedon päivittämisestä. Seuraavaksi kiinnosti selvittää hakunopeutta verrattuna relaatiotietokannan hakunopeuteen. Testattuani asiaa huomasin, että ei nopeus mikään huono ole, vaikka kyllä nykypäivän relaatiotietokannat varmasti vähän nopeampia ovatkin. Hakuajat riippuvat paljolti siitä miten on säätänyt asetuksia XML-tietokannassa, koska siinä voi asettaa käyttöön indeksejä, jotka nopeuttavat hakuaikoja huomattavasti. XML-kyselykielien käyttö oli erittäin vierasta minulle, varsinkin XQuery-syntaksin ulkonäkö näytti aluksi sekavalta. Vähäisen käytön jälkeen XQuery vaikutti varsin hyvältä XML-dokumenttien kyselykieleltä. Kieli sisältää paljon käyttömahdollisuuksia. Sovelluksen ohjelmointi sujui hyvin. Ainoastaan SEDNAn C++ Builderille tarkoitettu kirjasto tuotti ongelmia käännettäessä projektia. Ongelman aiheutti vanhentunut otsikkotiedosto, jota vaihtamalla kääntäminen onnistui SEDNAn mukana tuli erittäin hyvät ohjeet, joista oli erittäin suuri apu ohjelmoidessa sovellusta. XMLtietokantasovellus toimii niin kuin oli tarkoituskin. SEDNA XML-tietokannan käyttöönotto ja käyttö olivat helppoa, ja tämän tapaiset tietokannat tulevat varmasti lisääntymään tulevaisuudessa internet-ympäristössä.
40 35 LÄHTEET Painettu kirja Melton, Jim & Buxton, Stephen Querying XML: XQuery, XPath, and SQL/XML in Context. Rusty Harold & W. Scott Means XML in a Nutshell: 2nd Edition. USA: O'Reilly & Associates. Sähköinen julkaisu Bourret, Ronald. XML And Databases. WWW-dokumentti. Saatavissa: Muutettu:2005. Luettu: Cowan, John & Tobin, Richard. XML Information Set (Secind Edition) W3C Recommendation 4 February WWW-dokumentti. Saatavissa: Muutettu: Luettu: Grinev, Maxim & Fomichev, Andrey & Kuznetsov, Sergey. WWW-dokumentti. Saatavissa: Muutettu: Luettu: Native XML Database System. WWW-dokumentti. Saatavissa: Luettu: Staken, Kimbro. Introduction to Native XML Databases. WWW-dokumentti. Saatavissa: Muutettu:2001. Luettu: XQuery Tutorial. XQuery Functions. WWW-dokumentti. Saatavissa: Luettu:
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
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ä
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
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
Jussi Klemola 3D- KEITTIÖSUUNNITTELUOHJELMAN KÄYTTÖÖNOTTO
Jussi Klemola 3D- KEITTIÖSUUNNITTELUOHJELMAN KÄYTTÖÖNOTTO Opinnäytetyö KESKI-POHJANMAAN AMMATTIKORKEAKOULU Puutekniikan koulutusohjelma Toukokuu 2009 TIIVISTELMÄ OPINNÄYTETYÖSTÄ Yksikkö Aika Ylivieska
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
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)
FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL
FinFamily PostgreSQL 1 Sisällys / Contents FinFamily PostgreSQL... 1 1. Asenna PostgreSQL tietokanta / Install PostgreSQL database... 3 1.1. PostgreSQL tietokannasta / About the PostgreSQL database...
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)
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
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.
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ä
Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.
Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen
HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32
HSMT Tietokannoista Ville Leppänen HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h)
Written by Administrator Monday, 05 September 2011 15:14 - Last Updated Thursday, 23 February 2012 13:36
!!!!! Relaatiotietokannat ovat vallanneet markkinat tietokantojen osalta. Flat file on jäänyt siinä kehityksessä jalkoihin. Mutta sillä on kuitenkin tiettyjä etuja, joten ei se ole täysin kuollut. Flat
Ohjelmointikielet ja -paradigmat 5op. Markus Norrena
Ohjelmointikielet ja -paradigmat 5op Markus Norrena Ko#tehtävä 4 Viimeistele "alkeellinen kuvagalleria". Käytännössä kaksi sivua Yksi jolla voi ladata kuvia palvelimelle (file upload) Toinen jolla ladattuja
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
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman
TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences
TIEDONHALLINTA - SYKSY 2011 Kurssikoodi: Saapumisryhmä: Luento 11 TU00AA48-2002 TU10S1E Hannu Markkanen 22.11.2011 9/10/12 Helsinki Metropolia University of Applied Sciences 1 Indeksit Indeksit Taulun
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
Kirjasto Relaatiotietokannat Kevät 2001. Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina
Kirjasto Kevät 2001 Auvinen Annemari Niemi Anu Harjoitustyö 7.4.2001 Sisällysluettelo 1. Yleiskuvaus... 3 2. Vaatimukset... 3 2.1. Toiminnalliset... 3 2.1.1. Sisäänkirjautuminen... 3 2.1.2. Nimikkeiden
1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä
OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 811122P (5 op.) 12.12.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan
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
SQL - STRUCTURED QUERY LANGUAGE
SQL Peruskomentoja SQL - STRUCTURED QUERY LANGUAGE SQL on tietokantojen käsittelyyn kehitetty kieli Esimerkkejä kielellä hoidettavistaa toiminnoista: Tietokannan rakenteen määrittely ja muuttaminen Kyselyt
Helpottuuko sovellusten välinen integraatio XML:n avulla - kokemuksia ja ratkaisuja, teknologiajohtaja Sauli Tujunen, atbusiness Communications Oyj
SUOMEN KUNTALIITTO Sosiaali- ja terveysyksikkö Helpottuuko sovellusten välinen integraatio XML:n avulla - kokemuksia ja ratkaisuja, teknologiajohtaja Sauli Tujunen, atbusiness Communications Oyj ~ (operatiiviset-/tiedonjakelu-/si~llönhallinta~velluk~et)
Interfacing Product Data Management System
Interfacing Product Data Management System Tekijä: Työn valvoja: Mats Kuivalainen Timo Korhonen Esitelmän sisältö Työn suorituspaikka - Ideal Product Data Oy Käsitteitä Työn tavoitteet Työn tulokset 1/5
Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys
Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Tällä kurssilla on tutustuttu ohjelmistojen mallintamiseen oliomenetelmiä ja UML:ää käyttäen Samaan aikaan järjestetyllä kurssilla on käsitelty
HTML & CSS. HTML (HyperText Markup Language) Antti Koivisto. ! HTML on sivujen kuvauskieli.
HTML & CSS Antti Koivisto HTML (HyperText Markup Language)! HTML on sivujen kuvauskieli.! Se ei ole ohjelmointikieli.! HTML on merkintäkieli, joka koostuu monista merkintä tägeistä ().! Voidaan
Luento 5. Timo Savola. 28. huhtikuuta 2006
UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke
WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa
WWW ja tietokannat WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa tekstiä, kuvia, hyperlinkkejä Staattiset sivut kirjoitettu kerran, muuttaminen käsin ongelmana pysyminen ajantasalla Ylläpito hankalaa,
Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.
2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet
Tietokannan hallinta. Kevät 2004 Jan Lindström R&G Chapter 1
Tietokannan hallinta Kevät 2004 Jan Lindström R&G Chapter 1 Tietokannan hallinta 1. Johdanto (käsitteitä) 2. Tietokannan talletusrakenteet 3. Tietokannan hakemistorakenteet 4. Kyselyiden käsittely ja optimointi
Tietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Taulukon edut Taulukon haitat Taulukon haittojen välttäminen Dynaamisesti linkattu lista Linkatun listan solmun määrittelytavat Lineaarisen listan toteutus dynaamisesti linkattuna
FinFamily Installation and importing data (11.1.2016) FinFamily Asennus / Installation
FinFamily Asennus / Installation 1 Sisällys / Contents FinFamily Asennus / Installation... 1 1. Asennus ja tietojen tuonti / Installation and importing data... 4 1.1. Asenna Java / Install Java... 4 1.2.
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
SQLite selvitysraportti. Juha Veijonen, Ari Laukkanen, Matti Eronen. Maaliskuu 2010
SQLite selvitysraportti Juha Veijonen, Ari Laukkanen, Matti Eronen Maaliskuu 2010 Opinnäytetyö Kuukausi Vuosi 1 SISÄLTÖ 1. YLEISTÄ SQLITE:STA... 2 2. HISTORIA... 2 3. SQLITEN KÄYTTÖ... 3 3.1 SQLiten asennus
Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)
SQL sisältää operaatiot tietokannan sisällön muodostamiseen ja ylläpitoon: insert - uusien rivien vienti tauluun delete - rivien poisto update - rivien muutos 1 Insert lauseella on kaksi muotoa: insert
JavaScript alkeet Esimerkkikoodeja moniste 2 (05.10.11 Metropolia)
JavaScript alkeet Esimerkkikoodeja moniste 2 (05.10.11 Metropolia) Esim 5.1 laskujärjestys operaattorit var tulos = 5 + 4 * 12 / 4; document.write("5 + 4 * 12 / 4 laskutoimituksen tulos
ITKP102 Ohjelmointi 1 (6 op)
ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat
JWT 2016 luento 11. to 21.4.2016 klo 14-15. Aulikki Hyrskykari. PinniB 1097. Aulikki Hyrskykari
JWT 2016 luento 11 to 21.4.2016 klo 14-15 Aulikki Hyrskykari PinniB 1097 1 Viime luennolla o AJAX ja JSON, harjoitustyön tehtävänanto, vierailuluento avoimesta datasta Tänään o APIt rajapinnoista yleisesti
812336A C++ -kielen perusteet, 21.8.2010
812336A C++ -kielen perusteet, 21.8.2010 1. Vastaa lyhyesti seuraaviin kysymyksiin (1p kaikista): a) Mitä tarkoittaa funktion ylikuormittaminen (overloading)? b) Mitä tarkoittaa jäsenfunktion ylimääritys
TIETOKANNAT JOHDANTO
TIETOKANNAT JOHDANTO JOUNI HUOTARI & ARI HOVI 2000-2011 Tieto TAUSTAA Yritykselle tiedot ovat tärkeä resurssi päätöksenteon tukena (JIT) varastointi ja käyttö vaativat investointeja vrt. energia (lähde,
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,
Opettajana Mika Sorsa, mika.sorsa@koudata.fi, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija
Opettajana Mika Sorsa, mika.sorsa@koudata.fi, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija Opintojaksolla: keskitytään relaatiotietokantojen teoriaan ja toimintaan SQL-kieli kyselykielenä
On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)
On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31) Juha Kahkonen Click here if your download doesn"t start automatically On instrument costs
Harjoitustyö: virtuaalikone
Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman
Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen
Chapel TIE-20306 Ryhmä 91 Joonas Eloranta Lari Valtonen Johdanto Chapel on Amerikkalaisen Cray Inc. yrityksen kehittämä avoimen lähdekoodin ohjelmointikieli. Chapel on rinnakkainen ohjelmointikieli, joka
Alkuun HTML5 peliohjelmoinnissa
Paavo Räisänen Alkuun HTML5 peliohjelmoinnissa www.ohjelmoimaan.net Tätä opasta saa vapaasti kopioida ja levittää ei kaupallisissa tarkoituksissa. Sisällysluettelo 1: Alkusanat 2: Alkuun 3: Pelinäkymä
Ohjelmoinnin peruskurssi Y1
Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.
Listarakenne (ArrayList-luokka)
Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen
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
Android ohjelmointi Tunti 2. Käyttöliittymät ja resurssit
Android ohjelmointi Tunti 2 Käyttöliittymät ja resurssit Debug Log luokka mahdollistaa debug tulostamisen ADB:n kautta konsoliin (esim. DDMS:ään) esim. Log.println(Log.INFO, TAG, Tämä on println ); Voidaan
Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Johdanto & yleistä Harri Laine 1. Tietokanta. Tiedosto
Tietokanta Tiedosto Tietokanta (database) jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja Ohjelmointikielissä apumuistiin tallennettuja tietoja käsitellään
Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:
Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Microsoft SQL käyttö Yleistä VisualStudiosta Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen: - sovellushallintaan -
Tietokanta (database)
Tietokanta Tietokanta (database) jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja 1 Tiedosto Ohjelmointikielissä apumuistiin tallennettuja tietoja käsitellään
Lab SBS3.FARM_Hyper-V - Navigating a SharePoint site
Lab SBS3.FARM_Hyper-V - Navigating a SharePoint site Note! Before starting download and install a fresh version of OfficeProfessionalPlus_x64_en-us. The instructions are in the beginning of the exercise.
SQL Buddy JAMK Labranet Wiki
Page 1 of 9 SQL Buddy JAMK Labranet Wiki Sisällysluettelo Yleistä SQL Buddy:sta kotisivu :http://sqlbuddy.com/ SQL Buddy on kevyt hallintatyökalu MySQL-tietokannalle. Järjestelmävaatimukset Serverin vaatimukset
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen
Johdatus rakenteisiin dokumentteihin
-RKGDWXVUDNHQWHLVLLQGRNXPHQWWHLKLQ 5DNHQWHLQHQGRNXPHQWWL= rakenteellinen dokumentti dokumentti, jossa erotetaan toisistaan dokumentin 1)VLVlOW, 2) UDNHQQHja 3) XONRDVX(tai esitystapa) jotakin systemaattista
HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10
HOJ Haja-aiheita Ville Leppänen HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h)
Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.
Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen
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
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
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.
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2009 1 / 33 Valintakäsky if syote = raw_input("kerro tenttipisteesi.\n") pisteet = int(syote) if pisteet >=
RATKI 1.0 Käyttäjän ohje
RATKI RATKI 1.0 Käyttäjän ohje Ohje 0.5 Luottamuksellinen Vastuuhenkilö Petri Ahola Sisällysluettelo 1. Yleistä... 3 1.1. Kuvaus... 3 1.2. Esitiedot... 3 1.3. RATKIn käyttöoikeuksien hankinta... 3 1.4.
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
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................................
Visma Liikkuvan työn ratkaisut Päivitysohje. Pääkäyttäjän opas
Visma Liikkuvan työn ratkaisut Pääkäyttäjän opas Visma Software Oy pidättää itsellään oikeuden mahdollisiin parannuksiin ja/tai muutoksiin tässä oppaassa ja/tai ohjelmassa ilman eri ilmoitusta. Oppaan
CUDA. Moniydinohjelmointi 17.4.2012 Mikko Honkonen
CUDA Moniydinohjelmointi 17.4.2012 Mikko Honkonen Yleisesti Compute Unified Device Architecture Ideana GPGPU eli grafiikkaprosessorin käyttö yleiseen laskentaan. Nvidian täysin suljetusti kehittämä. Vuoden
Toinen harjoitustyö. ASCII-grafiikkaa 2017
Toinen harjoitustyö ASCII-grafiikkaa 2017 Yleistä Tehtävä: tee Javalla ASCII-merkkeinä esitettyä grafiikkaa käsittelevä ASCIIArt17-ohjelma omia operaatioita ja taulukoita käyttäen. Työ tehdään pääosin
jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja
Tietokanta Tietokanta (database) jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja mikä tahansa tietokokoelma? --> erityispiirteitä Tietokanta vs. tiedosto 1
T-76.115 Testiraportti TR-3. ETL-työkalu
T-76.115 Testiraportti TR-3 ETL-työkalu ExtraTerrestriaLs Versio Päivämäärä Tekijä Kuvaus 1.0 14.03.05 Risto Kunnas Ensimmäinen versio 1.1 15.03.05 Risto Kunnas Korjauksia Sivu 1 / 14 Sisällysluettelo
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,
Tietokannanhoitaja DBA (Database Administrator) ja tietokannan hallinta
Tietokannanhoitaja DBA (Database Administrator) ja tietokannan hallinta Jouni Huotari Martti Laiho (materiaali on osa virtuaaliammattikorkeakoulun Tietokantaosaaja-opintokokonaisuutta) opintokokonaisuutta)
7/20: Paketti kasassa ensimmäistä kertaa
Ohjelmointi 1 / syksy 2007 7/20: Paketti kasassa ensimmäistä kertaa Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007
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...
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,
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,
Tietokantakurssit / TKTL
Tietokantakurssit / TKTL Tietokantojen perusteet - tietokannan käyttö: SQL, sovellukset Tietokannan hallinta - tietokannanhallintajärjestelmän ominaisuuksia: tallennusrakenteet kyselyjen toteutus tapahtumien
ECDL Tietokannat. Copyright 2015 ECDL Foundation ECDL Tietokannat Sivu 1 / 7
ECDL Tietokannat Copyright 2015 ECDL Foundation ECDL Tietokannat Sivu 1 / 7 Tavoite Tässä esitellään tutkintovaatimukset moduulille ECDL Tietokannat, joka määrittelee tarvittavat tiedot ja taidot näyttökokeen
Tietokannan hallintajärjestelmän (DBMS) palvelut ja rakenne
HAAGA-HELIA Heti-09 1 (6) Tietokannan hallintajärjestelmän (DBMS) palvelut ja rakenne Tietovarastotekniikan kehittyminen... 2 Tiedostopohjaiset ratkaisut... 2 Tiedoston palvelut... 3 Tiedostopohjaisten
Tiedonlouhinta rakenteisista dokumenteista (seminaarityö)
Tiedonlouhinta rakenteisista dokumenteista (seminaarityö) Miika Nurminen (minurmin@jyu.fi) Jyväskylän yliopisto Tietotekniikan laitos Kalvot ja seminaarityö verkossa: http://users.jyu.fi/~minurmin/gradusem/
TIEDONHALLINNAN PERUSTEET - SYKSY 2013
TIEDONHALLINNAN PERUSTEET - SYKSY 2013 Kurssikoodi: Saapumisryhmä: Luento 5 XX00AA79-3013 TU12S2 Pasi Ranne 11.9.2013 11/9/13 Helsinki Metropolia University of Applied Sciences 1 Tietokannan normalisoinnin
Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen
Esimerkki: Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen Luo tietokanta Koulu. Tietokantaan lisätään 3 taulua. Kurssit-taulu: kurssiid not null primary key INTEGER aineid not
1 Tehtävän kuvaus ja analysointi
Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat
Sukupuu -ohjelma. Ossi Väre (013759021) Joni Virtanen (013760641)
Sukupuu -ohjelma Ossi Väre (013759021) Joni Virtanen (013760641) 7.11.2011 1 Johdanto Toteutimme C -kielellä sukupuuohjelman, johon käyttäjä voi lisätä ja poistaa henkilöitä ja määrittää henkilöiden välisiä
Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta
C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus
GDAL ja WFS: suora muunnos ogr2ogr-ohjelmalla
GDAL ja WFS: suora muunnos ogr2ogr-ohjelmalla Viimeksi muokattu 30. tammikuuta 2012 GDAL tukee WFS-palvelun käyttämistä vektoritietolähteenä yhtenä muiden joukossa. WFS-ajurin käyttöohjeet löytyvät osoitteesta
D B. Tietokannan hallinta - kurssin tavoite. Kurssilla opitaan periaatteet. Edellytyksenä osallistumiselle on Tietokantojen perusteiden hallinta
Tietokannan hallinta - kurssin tavoite Kurssilla opitaan periaatteet fyysisen tietokannan tallennuksesta ja käsittelystä tietokantakyselyiden muuntamisesta fyysisen tietokannan käsittelyoperaatioiksi kyselyn
Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)
HAAGA-HELIA ICT1TA006: Ohjelmointi 1 /5 Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC) (Lähteet: Oracle java jdbc Tutorial, Arvo Lipitsäinen: Tietokannan käsittely JDBC:n
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:
4. Lausekielinen ohjelmointi 4.1
4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja
Java-kielen perusteet
Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero
Testidatan generointi
Testidatan generointi Anu Ahonen Kevät 2008 Tämä työ on tehty Creative Commons -lisenssin alla Työn tarkasti 9.4.2008 Jouni Huotari (JAMK/IT) 1 SISÄLTÖ 1 TYÖN LÄHTÖKOHDAT JA TOTEUTUS...2 2 TESTIDATAN GENEROINTI
Pikaohje formaatin valmistamiseen
Pikaohje formaatin valmistamiseen Esko Otava Oy ver.1.0 Pääikkunasta (tulostusikkunasta) valitaan Cards-Show cards manager Paina Add 2 Paina New Kortinsuunnitteluikkuna on jaettu kolmeen osaan: Vasemmalla
Tieto- ja tallennusrakenteet
Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)
Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto
Muita tietokantaobjekteja Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto Näkymät Näkymä (view) on looginen näyte tietokannan tauluista tai näkymistä Näkymä ei voi sisältää SELECT INTO,