CSE-A1200 Tietokannat

Samankaltaiset tiedostot
CSE-A1200 Tietokannat

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 32

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

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 39

XML / DTD / FOP -opas Internal

Helsingin yliopisto/tktl XML-metakieli XPath

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

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

Opintosuoritukset. Kaaviokuva

Opiskeluoikeudet. Kaaviokuva

Datatähti 2019 loppu

XML ja SAS. Mitä tänä päivänä voidaan SASista tehdä XML-muotoon

XML - perusteet. Ctl230: Luentokalvot Miro Lehtonen

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

Hohde Consulting 2004

Yhteentoimivuutta edistävien työkalujen kehittäminen

Luento 3: Tietorakenteiden esittäminen

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

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

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

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

XML-saatavuuskysely. XML-tiedoston kuvaus. versio

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke

Koodistopalvelun REST-rajapinnat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

Luento 2: XML:n syntaksi

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke

Ohjelmoinnin perusteet Y Python

XML-merkkaus. Merkkidata, prosessointikomennot, kommentit

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

Tuomiorekisterin ratkaisuhaun kehittäminen

Digitaalisen median tekniikat. JSP ja XML

Poikkeusinfo XML-rajapinnan kuvaus, rajapinnan versio 2 Seasam Group

Varmennepalvelu Rajapintakuvaus Kansallisen tulorekisterin perustamishanke

Tietojen jakelu Skeemat Lokitiedot Kansallisen tulorekisterin perustamishanke

Web-teknologiat. XML-datan kysely Topi Sarkkinen

Tietojen toimittaminen Skeemat Vastaanottokuittaus Kansallisen tulorekisterin perustamishanke

2. PEHMEÄ XHTML XRAJAHTML

Ohjelmoinnin peruskurssi Y1

XML johdatus: DTD. Jaana Holvikivi

Tietojen toimittaminen Skeemat Viestit Kansallisen tulorekisterin perustamishanke

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

Ohjelmoinnin perusteet Y Python

Tietojen jakelu Skeemat Viestit Kansallisen tulorekisterin perustamishanke

Algoritmit 2. Luento 6 To Timo Männikkö

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

A TIETORAKENTEET JA ALGORITMIT

Ohjelmoinnin peruskurssi Y1

Tietojen toimittaminen Skeemat Vastaanottokuittaus Kansallisen tulorekisterin perustamishanke

Ohjelmoinnin peruskurssi Y1

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli (2011) Harri Laine 1. Jäsennys ja sarjallistaminen

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Tietojen jakelu Skeemat Palvelupyyntö Kansallisen tulorekisterin perustamishanke

Hohde Consulting 2004

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

Ohjelmoinnin peruskurssi Y1

Tietojen toimittaminen Skeemat Mitätöintitiedot Kansallisen tulorekisterin perustamishanke

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

Helsingin yliopisto / TKTL XML-Metakieli XML Schema

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

XQuery tietokannan kyselykielenä

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Ohjelmoinnin perusteet Y Python

M. Merikanto 2012 XML. Merkkauskieli, osa 2

Ohjelmoinnin peruskurssi Y1

Tietojen jakelu Skeemat Palvelupyyntö Kansallisen tulorekisterin perustamishanke

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

Tietojen toimittaminen Skeemat Käsittelypalaute Kansallisen tulorekisterin perustamishanke

Ei-yhteydettömät kielet [Sipser luku 2.3]

Helsingin yliopisto/tktl Kyselykielet, s 2006 Relaatiokalkyylit. Harri Laine 1

XML rakenteen suunnittelu. Jaana Holvikivi

HELIA 1 (17) Outi Virkki Tiedonhallinta

Algoritmit 1. Luento 6 Ke Timo Männikkö

Schema ReitinTilaus.xsd

SELECT-lauseen perusmuoto

LASKUTUSAINEISTON MUUTTAMINEN XML-MUOTOON

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

13. Loogiset operaatiot 13.1

Tietojen toimittaminen Skeemat Työnantajan erillisilmoitukset Kansallisen tulorekisterin perustamishanke

Tietojen jakelu Skeemat Viestit Kansallisen tulorekisterin perustamishanke

Ohjelmoinnin peruskurssi Y1

CSE-A1200 Tietokannat

Algoritmit 2. Luento 6 Ke Timo Männikkö

7. Näytölle tulostaminen 7.1

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli

P e d a c o d e ohjelmointikoulutus verkossa

Tietojen toimittaminen Skeemat Mitätöintitiedot Kansallisen tulorekisterin perustamishanke

Muuttujien määrittely

PALKKA-AINEISTON SIIRTOTIEDOSTO

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

8 XSLT-muunnoskieli XSLT-muunnoskieli

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

Transkriptio:

CSE-A1200 Tietokannat Osa kalvoista perustuu Juha Puustjärven luentokalvoihin kurssilta T-76.1143 sekä kurssin oppikirjaan 3.5.2016 CSE-A1200 Tietokannat 3.5.2016 1 / 39

Oppimistavoitteet: tämän luennon jälkeen Osaat selittää, mitä tekemistä XML:llä on tietokantojen kanssa. Tiedät, millainen on XML-dokumentti. Tiedät, miten voidaan määritellä XML-dokumentin rakenne DTD XML Schema Osaat hakea XML-dokumentista tietoa XPath-kyselykielen avulla. CSE-A1200 Tietokannat 3.5.2016 2 / 39

Puolirakenteinen tieto Relaatiotietokannoissa esitetyn tiedon rakenne on hyvin tarkkaan määrätty. Tietokantakaavio määrää, mitä relaatioita tietokantaan kuuluu ja mitä attribuutteja kullakin relaatiolla on. Relaation jokaisella monikolla täytyy olla arvo jokaiselle attribuutille (vähintään NULL). Monesti tarvittaisiin joustavampaa tietomallia, esimerkiksi Samanlaista tietoa pitää yhdistellä useista lähteistä. Eri lähteissä tiedon tarkka esitysmuoto on kuitenkin erilainen. Tietoa jaetaan Webissä useiden eri toimijoiden kesken. Puolirakenteinen tietomalli (semistructured-data model) tarjoaa joustavamman mahdollisuuden esittää tietoa. Tieto on esitetty niin, että se kuvaa itse oman rakenteensa. Rakenne on selvästi joustavampi kuin relaatiomallissa. CSE-A1200 Tietokannat 3.5.2016 3 / 39

XML XML (Extensible Markup Language) on kuvauskieli, jonka avulla voidaan esittää puolirakenteista tietoa sisältäviä dokumentteja. XML-dokumentit koostuvat elementeistä (elements) koostuvat kulmasuluilla merkityistä alku- ja loppumerkinnöistä (tags) ja niiden välissä olevasta leipätekstistä. elementit voivat olla sisäkkäisiä elementin alkumerkintään voidaan liittää attribuutteja, jotka koostuvat avain-arvo-pareista. CSE-A1200 Tietokannat 3.5.2016 4 / 39

Esimerkki XML-dokumentista <?xml version = "1.0" encoding = "utf-8" standalone = "yes"?> <StarMovieData> <Star> <Name>Carrie Fischer</Name> <Address> <Street>123 Maple St.</Street> <City>Hollywood</City> </Address> <Address> <Street>5 Locust Ln.</Street> <City>Malibu</City> </Address> </Star> <Star> <Name>Mark Hamill</Name> <Street>456 Oak Rd.</Street> <City>Brentwood</City> </Star> <Movie> <Title>Star Wars</Title> <Year>1977</Year> </Movie> </StarMovieData> CSE-A1200 Tietokannat 3.5.2016 5 / 39

Selityksiä edellisen kalvon dokumenttiin Ylin rivi määrittelee, että kysymyksessä XML-dokumentti, käytettävän merkistökoodauksen ja sen, että dokumenttiin ei liity erillistä tiedostoa, joka määrittelisi sen rakenteen. Dokumentissa on yksi StarMovieData-elementti, jonka sisällä on kaksi Star-elementtiä ja yksi Movie-elementti. Näiden elementtien sisällä on puolestaan muita elementtejä. Kuten esimerkistä nähdään, elementtien rakenne voi vaihdella: Ensimmäinen Star-elementti sisältää name-elementin lisäksi kaksi Address-elementtiä, mutta toinen Star-elementti sisältääkin suoraan Street- ja City-elementit name-elementin jälkeen. CSE-A1200 Tietokannat 3.5.2016 6 / 39

Attribuutit XML-elementeissä XML-elementit voivat sisältää attribuutteja, jotka ovat attribuutin nimestä ja sen arvosta koostuvia pareja. Attribuutilla voidaan korvata elementin sisällä oleva elementti, joka ei enää sisällä muita elementtejä. Attribuutti liitetään alkumerkinnän yhteyteen. Samaan elementtiin voi kuulua useita attribuutteja. Esimerkiksi elementti <Movie> <Title>Star Wars</Title> <Year>1977</Year> </Movie> voidaan esittää myös <Movie year = "1977"> <Title>Star Wars</Title> </Movie> tai <Movie title = "Star Wars" year = "1977" /> Viimeisessä esimerkissä elementti on tyhjä. Tällöin lopetusmerkintä voidaan korvata aloitusmerkinnän päättävällä /-merkillä. CSE-A1200 Tietokannat 3.5.2016 7 / 39

Hyvämuotoinen XML XML-dokumentti on hyvämuotoinen (well-formed), jos Se alkaa XML-määrittelyllä (kalvon 5 esimerkissä ylin rivi). Se sisältää vain yhden juurielementin (root element), jonka sisällä kaikki muut dokumentin elementit ovat. Jokaista aloitusmerkintää kohti on vastaava lopetusmerkintä (paitsi tyhjissä elementeissä, jotka voidaan päättää aloitusmerkinnän sisällä). Elementit ovat sisäkkäin, eivät ristikkäin. Jos XML-dokumentiksi tarkoitettu dokumentti ei ole hyvämuotoinen, sen ei katsota olevan lainkaan XML-dokumentti. CSE-A1200 Tietokannat 3.5.2016 8 / 39

Välitehtävä Mitkä seuraavista ovat hyvämuotoista XML:ää ja miksi ovat / eivät ole? 1. <?xml version = "1.0" encoding = "utf-8" standalone = "yes"?> <StarMovieData> <Star Name = "Mark Hamill"> <Street>456 Oak Rd.</Street> <City>Brentwood</City> </Star> <Movie> <Title>Star Wars</Title> <Year>1977</Year> </Movie> </StarMovieData> 2. <?xml version = "1.0" encoding = "utf-8" standalone = "yes"?> <StarMovieData> <Star> <Name>Mark Hamill</Name> <Address> <Street>456 Oak Rd.</Street> <City>Brentwood</City> </Star> </StarMovieData> CSE-A1200 Tietokannat 3.5.2016 9 / 39

Välitehtävä jatkuu 3. <?xml version = "1.0" encoding = "utf-8" standalone = "yes"?> <StarMovieData> <Star> <Name>Mark Hamill</Name> <Address /> <Street>456 Oak Rd.</Street> <City>Brentwood</City> </Star> </StarMovieData> 4. <?xml version = "1.0" encoding = "utf-8" standalone = "yes"?> <StarMovieData> <Star> <Name>Mark Hamill</Name> <Address> <Street>456 Oak Rd.</Street> <City>Brentwood</Address></City> </Star> </StarMovieData> CSE-A1200 Tietokannat 3.5.2016 10 / 39

XML-dokumentti puurakenteena XML-dokumentti voidaan esittää myös puurakenteena. Puurakenteessa ulompi elementti on isäsolmu ja sisempi elementti on lapsisolmu. Peräkkäiset elementit ovat saman isäsolmun alla olevia sisaruksia. Attribuutteja ei esitetä erillisinä solmuina, vaan oman elementtinsä solmun sisällä. Leipätekstit esitetään solmuina, joilla ei ole lapsia. XML-dokumentteja automaattisesti käsittelevät ohjelmat käsittelevät dokumentteja hyvin usein puumuodossa. Seuraavan kalvon esimerkkikuvassa elementtien nimet on tallennettu solmuihin. Vaihtoehtoinen tapa on nimetä solmuihin johtavat kaaret elementtien nimillä (ks. oppikirja). CSE-A1200 Tietokannat 3.5.2016 11 / 39

Esimerkki Kalvon 5 XML-dokumentti puurakenteena. StarMovieData Star Star Movie Name Address Address Name Street City Title Year Carrie Fischer Street City Street City Mark Hamill 456 Oak Rd Brentwood Star Wars 1977 123 Maple St. Hollywood 5 Locust Ln. Malibu CSE-A1200 Tietokannat 3.5.2016 12 / 39

Validi XML Hyvämuotoista XML:ää tiukempi vaatimus on se, että dokumentti on validia XML:ää (valid XML). Silloin dokumentin rakenteen pitää olla jonkin erikseen annetun kuvauksen mukainen. Kuvauksessa voidaan määritellä, mitä elementtejä dokumentissa voi esiintyä, ja miten ne voivat sijaita suhteessa toisiinsa (esim. Movie-elementin pitää sisältää yksi Title-elementti ja yksi Year-elementti). Dokumentteja käsittelevät ohjelmat voivat käyttää hyväkseen tietoa dokumenttien sallitusta rakenteesta. Rakenteen määrittelyyn on eri vaihtoehtoja. DTD (document type definition) on vanhempi kieli XML Schema on uudempi tapa, joka sisältää enemmän mahdollisuuksia kuin DTD. CSE-A1200 Tietokannat 3.5.2016 13 / 39

DTD DTD-määrittely ei ole itsessään XML:ää, mutta se määrittelee jonkin XML-dokumentin sallitun rakenteen. DTD-määrittely on muotoa: <!DOCTYPE root-tag [ <!ELEMENT element-name ( components)> more elements ]> jossa root-tag on dokumentin juurielementin nimi ja element-name yhden dokumentin sisältämän elementin nimi. Elementit määritellään ilmauksen!element avulla. Elementistä kerrotaan sen nimi ja sen sisältämät komponentit Esimerkiksi <!ELEMENT Star (Name, Address+, Movies)> kertoo, että Star-elementin sisällä täytyy olla Name-elementti, yksi tai useampi Address-elementti ja Movies-elementti. CSE-A1200 Tietokannat 3.5.2016 14 / 39

DTD, jatkoa Elementin sisältämissä komponenteissa on kaksi erityistapausta: 1. (#PCDATA) kertoo, että elementillä on arvo, joka on tekstiä. Elementillä ei siis ole omia alielementtejä. Esimerkiksi <!ELEMENT City (#PCDATA)> määrittelee, että elementin City arvona on tekstiä. 2. EMPTY (ilman sulkuja) kertoo, että elementti on tyhjä. Sillä ei ole lopetusmerkintää, alielementtejä tai tekstiarvoa. Esimerkiksi määrittelyä <!ELEMENT Foo EMPTY> voi vastata vain elementti <Foo /> (jolla voi kuitenkin olla attribuutteja ja niille arvoja) CSE-A1200 Tietokannat 3.5.2016 15 / 39

DTD, elementtien määrittelyssä käytettäviä merkintöjä Elementtien komponentteja määritellessä voidaan eri operaattoreilla määritellä sitä, kuinka monta kertaa elementti voi esiintyä toisen elementin komponenttina: * elementti voi esiintyä mielivaltaisen määrän kertoja, myös nolla kertaa. + elementti voi esiintyä yhden tai useamman kerran? elementti voi esiintyä nolla tai yksi kertaa elementtien listan kaikkien alkioiden välillä tarkoittaa sitä, että täsmälleen yksi listan alkioista esiintyy, esim. <!ELEMENT Genre (Comedy Drama SciFi Teen)> määrää, että yksi annetusta neljästä vaihtoehdosta täytyy olla elementin Genre alielementtinä. Komponentteja voidaan ryhmitellä suluilla. Esim. <!ELEMENT Address (Street, (City Zip))> määrää, että Address-elementin alielementteinä on Street ja sen jälkeen joko City tai Zip CSE-A1200 Tietokannat 3.5.2016 16 / 39

Esimerkki DTD-tiedostosta <!DOCTYPE Stars [ <!ELEMENT Stars (Star*)> <!ELEMENT Star (Name, Address+, Movies)> <!ELEMENT Name (#PCDATA)> <!ELEMENT Address (Street, City)> <!ELEMENT Street (#PCDATA)> <!ELEMENT City (#PCDATA)> <!ELEMENT Movies (Movie*)> <!ELEMENT Movie (Title, Year)> <!ELEMENT Title (#PCDATA)> <!ELEMENT Year (#PCDATA)> ]> CSE-A1200 Tietokannat 3.5.2016 17 / 39

Käytettävän DTD:n määrittely Se, että XML-dokumentti noudattaa jonkin DTD:n mallia, voidaan kertoa kahdella vaihtoehtoisella tavalla: 1. Sisällytetään DTD-määrittely XML-tiedostoon (ennen XML-koodia) 2. Kerrotaan, mihin tiedostoon käytetty DTD-määrittely on tallennettu XML-tiedoston alussa, esimerkiksi: <?xml version = "1.0" encoding = "utf-8" standalone = "no"?> <!DOCTYPE Stars SYSTEM "star.dtd"> standalone = "no" kertoo, että käytetään erillistä DTD:tä. Seuraavalla rivillä on määritelty tiedosto, johon käytetty DTD on tallennettu. CSE-A1200 Tietokannat 3.5.2016 18 / 39

Attribuuttien määrittely DTD:ssä voidaan myös määritellä, mitä attribuutteja elementillä on ja mitkä ovat niiden tyyppejä seuraavasti: <!ATTLIST element-name attribute-name type> Mahdolliset tyypit: CDATA attribuutin tyyppi on merkkijono Luetultu tyyppi: mahdolliset arvot (merkkijonot) on listattu. Lista on ympäröity suluilla ja vaihtoehtoiset arvot on erotettu -merkillä. Attribuutti voi olla joko pakollinen tai vapaaehtoinen #REQUIRED tyypin jälkeen määrittelee attribuutin pakolliseksi. #IMPLIED tyypin jälkeen määrittelee attribuutin vapaaehtoiseksi. Esimerkki: <!ELEMENT Movie EMPTY> <!ATTLIST Movie title CDATA #REQUIRED year CDATA #REQUIRED genre (comedy drama scifi teen) #IMPLIED > Esimerkin mukainen XML-rivi <Movie title = "Star Wars" year = "1977" genre = "scifi" /> CSE-A1200 Tietokannat 3.5.2016 19 / 39

XML Schema XML Schema on uudempi, DTD:lle vaihtoehtoinen tapa esittää XML-dokumentteja. XML Schema tarjoaa enemmän mahdollisuuksia kuin DTD, esimerkiksi: Alielementtien määrälle voi asettaa tarkempia rajoituksia Elementtien tyypeissä on enemmän valinnanvaraa, esimerkiksi kokonais- ja liukuluvut XML Schemalla kirjoitettu XML-dokumentin rakenteen määrittely on itsessään XML-dokumentti. CSE-A1200 Tietokannat 3.5.2016 20 / 39

XML Schema -määrittelyn rakenne XML Schema-määrittely käyttää sivulla http://www.w3.org/2001/xmlschema määriteltyä nimiavaruutta. Käytetty nimiavaruus määritellään dokumentin alussa. Dokumentin rakenne on seuraava: <?xml version = "1.0" encoding = "utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema">... </xs:schema> Toisella rivillä attribuutin xmlns (XML namespace) arvo määrittelee, että alku- ja loppumerkinnöissä etuliite xs: tarkoittaa, että sitä seuraava nimi tulkitaan XML Scheman sääntöjen mukaan. CSE-A1200 Tietokannat 3.5.2016 21 / 39

XML Schema: elementtien määrittely Elementti määritellään seuraavasti: <xs:element name = element name type = element type> constraints and / or structure information </xs:element> Tyyppi voi olla joko yksinkertainen tai kompleksi. Yksinkertaisia tyyppejä ovat esimerkiksi xs:integer, xs:decimal, xs:string ja xs:boolean Esimerkkejä elementtien määrittelyistä: <xs:element name = "Title" type = "xs:string" /> <xs:element name = "Year" type = "xs:integer" /> Yksinkertaista tyyppiä olevilla elementeillä ei voi olla alielementtejä. CSE-A1200 Tietokannat 3.5.2016 22 / 39

XML Schema: kompleksit tyypit Komplekseilla tyypeillä voi olla erilaisia muotoja, mutta kaikkein yleisin on jono elementtejä. Kompleksien tyyppien avulla voidaan siis määritellä elementtejä, joilla on alielementtejä. Alielementtien pitää esiintyä siinä järjestyksessä, kun ne on listattu määrittelyssä, ellei käytetyillä avainsanoilla ole muuta määrätty. Saman alielementtien peräkkäisten esiintymien lukumäärälle voidaan asettaa ehtoja attribuuttien minoccurs ja maxoccurs avulla: Elementin on esiinnyttävä peräkkäin vähintään minoccurs kertaa. Elementti saa esiintyä peräkkäin korkeintaan maxoccurs kertaa. Jos näiden attribuuttien arvoja ei ole määritelty, oletusarvo on molemmille yksi. CSE-A1200 Tietokannat 3.5.2016 23 / 39

XML Schema: kompleksi tyypin määrittely Määrittely silloin, kun tyyppi muodostuu jonosta elementtejä. <xs:complextype name = <xs:sequence> list of definitions </xs:sequence> </xs:complextype> type name> <xs:sequence>:n tilalla voidaan käyttää esimerkiksi <xs:choice>:a. Tällöin täsmälleen yhden listassa olevista alielementeistä pitää sisältyä määriteltävään elementtiin. Alielementin peräkkäisten esiintymien lukumäärää pystyy säätämään attribuuttien minoccurs ja maxoccurs avulla. CSE-A1200 Tietokannat 3.5.2016 24 / 39

XML Schema: esimerkki kompleksin tyypin määrittelystä <?xml version = "1.0" encoding = "utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:complextype name = "movietype"> <xs:sequence> <xs:element name = "Title" type = "xs:string" /> <xs:element name = "Year" type = "xs:integer" /> </xs:sequence> </xs:complextype> <xs:element name = "Movies"> <xs:complextype> <xs:sequence> <xs:element name = "Movie" type = "movietype" minoccurs = "0" maxoccurs = "unbounded" /> </xs:sequence> </xs:complextype> </xs:element> </xs:schema> CSE-A1200 Tietokannat 3.5.2016 25 / 39

XML Schema: esimerkin selityksiä Aluksi on määritelty tyyppi movietype. Määrittelyssä kerrotaan, että tyypin elementeissä esiintyy peräkkäin yksi Title-alielementti ja yksi Year-alielementti. Myös alielementtien tyypit on määritelty. Seuraavaksi kerrotaan, että elementti Movies sisältää peräkkäisiä tyyppiä movietype olevia Movie-elementtejä. Movie-elementtejä voi olla peräkkäin mielivaltainen määrä. CSE-A1200 Tietokannat 3.5.2016 26 / 39

XML Schema: attribuuttien määrittely Kompleksilla tyypillä voi olla attribuutteja. Attribuutti määritellään seuraavasti: <xs:attribute name = attribute name type = type name other information about the attribute /> Esimerkki 1: <xs:attribute name = "year" type = "xs:integer" default = "0" /> Määrittelee attribuutin year, jonka tyyppi on kokonaisluku ja oletusarvo 0. <xs:attribute name = "year" type = "xs:integer" use = "required" /> Määrittelee kokonaislukuarvoisen attribuutin year, mutta niin, että elementillä (jolle attribuutti on määritelty) on pakko olla arvo tälle attribuutille. CSE-A1200 Tietokannat 3.5.2016 27 / 39

XML Schema: kalvon 25 esimerkki muokattu käyttämään attribuutteja <?xml version = "1.0" encoding = "utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:complextype name = "movietype"> <xs:attribute name = "title" type = "xs:string" use = "required" /> <xs:attribute name = "year" type = "xs:integer" use = "required" /> </xs:complextype> <xs:element name = "Movies"> <xs:complextype> <xs:sequence> <xs:element name = "Movie" type = "movietype" minoccurs = "0" maxoccurs = "unbounded" /> </xs:sequence> </xs:complextype> </xs:element> </xs:schema> CSE-A1200 Tietokannat 3.5.2016 28 / 39

Lisää määrittelymahdollisuuksia Edellä on esittetty vain joitakin XML Scheman tarjoamia mahdollisuuksia. Oppikirjassa (3. painos) on esitetty lisää, esimerkiksi Yksinkertaisten tyyppien arvoalueiden määrääminen. Elementtien avainten määrittely. Elementtien viiteavainten määrittely. CSE-A1200 Tietokannat 3.5.2016 29 / 39

XML:n kyselykielet On määritelty joukko ohjelmointikieliä, joiden avulla on helppo käsitellä XML-dokumentteja, esimerkiksi hakea niistä haluttua tietoa. esimerkiksi: XPath: kieli, jonka avulla voidaan kuvata samanlaisten polkujen joukkoa XML-dokumenttia vastaavassa puurakenteessa. XQuery: XPathin laajennos, jossa on jotain SQL-tyyppisiä piirteitä. Mahdollistaa esimerkiksi iteraatiot joukkojen yli, alikyselyt ym. XSLT: Kehitetty alunperin esittämään XML-dokumenttien sisältöä HTML-dokumentteina. Kielellä pystyy kuitenkin tekemään myös kyselyitä, ja sen ilmaisuvoima on suunnilleen sama kuin XQueryn. Tällä luennolla tutustutaan lyhyesti XPathiin. CSE-A1200 Tietokannat 3.5.2016 30 / 39

XPath: perusteita XPath olettaa, että kaikki arvot joita se tuottaa ja joita muodostetaan välivaiheissa, koostuvat alkioiden jonosta. Alkio voi olla 1. Primitiivistä tyyppiä oleva arvo (esim. kokonaisluku, desimaaliluku, boolean tai merkkijono) 2. Solmu, jonka mahdollisista tyypeistä esitellään tässä seuraavat: Dokumentti: tiedosto, joka sisältää XML-dokumentin. Tiedostosta voi olla annettu esimerkiksi joko paikallinen nimi (polku) tai URL. Elementti: XML-elementti, johon kuulu alku- ja loppumerkintä (jos se on) ja kaikki niiden välissä, esim. alielementit. Attribuutti Tiedostosta voi tehdä dokumenttisolmun ilmauksella doc( file name) esimerkiksi doc("elokuvat.xml") doc("/usr/matti/elokuvat.xml") doc("www.cs.hut.fi/~matti/elokuvat.xml") CSE-A1200 Tietokannat 3.5.2016 31 / 39

X-Path-lauseke X-Path-lausekkeen avulla voidaan hakea XML-dokumenttia vastaavasta puusta kaikki lausekkeessa määriteltyjä polkuja vastaavat solmut ja näiden solmujen alipuut. Polku alkaa yleensä puun juuresta (jota merkitään /-merkillä) ja etenee lausekkeessa nimettyjen solmujen kautta. Eri tason solmujen nimet on erotettu toisistaan /-merkillä. Esimerkiksi lauseke /StarMovieData/Star/Name palauttaa kalvon 12 puurakenteesta (tai kalvon 5 XML-dokumentista) tuloksen <Name>Carrie Fischer</Name> <Name>Mark Hamill</Name> Lausekkeeseen voi liittää myös muita osia, joita esitellään seuraavilla kalvoilla. CSE-A1200 Tietokannat 3.5.2016 32 / 39

X-Path-lauseke, jatkoa Kaksi kauttaviivaa peräkkäin (//) tarkoittaa "tämä solmu tai mikä tahansa sen jälkeläinen". Esimerkiksi lauseke /StarMovieData/Star//Street palauttaa kalvon 5 XML-dokumentista listan, jossa on kaikki Star-elementtien sisällä olevat Street-elementit siitä riippumatta, ovatko ne Address-elementin sisällä vai eivät: <Street>123 Maple St.</Street> <Street>5 Locust Ln.</Street> <Street>456 Oak Rd.</Street> Lauseke //City palauttaa kaikki dokumentin City-elementit siitä riippumatta, kuinka syvällä tasolla ne ovat. CSE-A1200 Tietokannat 3.5.2016 33 / 39

Muunnettu esimerkki XML-dokumentista <?xml version = "1.0" encoding = "utf-8" standalone = "yes"?> <StarMovieData> <Star> <Name>Carrie Fischer</Name> <Address Street = "123 Maple St." City = "Hollywood" /> <Address Street = "5 Locust Ln." City = "Malibu" /> </Star> <Star> <Name>Mark Hamill</Name> <Street>456 Oak Rd.</Street> <City>Brentwood</City> </Star> <Movie Year = "1977"> <Title>Star Wars</Title> </Movie> </StarMovieData> (Käytetään seuraavilla kalvoilla joidenkin XPath-esimerkkien yhteydessä.) CSE-A1200 Tietokannat 3.5.2016 34 / 39

Attribuutit XPath-lausekkeissa XPath-lausekkeilla voidaan hakea myös haluttujen attribuuttien arvoja. Esimerkiksi lausekkeen /StarMovieData/Star/Address/@City kalvon 34 XML-dokumentissa on "Hollywood" "Malibu" CSE-A1200 Tietokannat 3.5.2016 35 / 39

XPath: villikortit Merkin * avulla voidaan ilmaista "mikä tahansa nimi". Esimerkiksi lauseke /StarMovieData/* palauttaa kalvon 34 XML-dokumentista kaikki juurielementin alielementit (kaksi Star- ja yhden Movie-elementin). lauseke /StarMovieData/Movie/@* palauttaa kaikkien Movie-elementtien kaikkien attribuuttien arvot. CSE-A1200 Tietokannat 3.5.2016 36 / 39

Siirtymät Tähän asti esitetyissä lausekkeissa solmusta on siirretty sen lapsisolmuun tai muihin jälkeläisiin. Siirtymien (Axes) avulla voi liikkua vapaammin. Joitakin esimerkkejä mahdollisista siirtymistä: child:: siirrytään lapsisolmuun. attribute:: solmun attribuutti Esimerkiksi aikaisemmin käytetty /StarMovieData/Star/Address/@Street on lyhennys merkinnälle /child::starmoviedata/child::star/child::address/attribute::street parent:: siirrytään vanhempaan next-sibling:: siirrytään mihin tahansa oikealla puolella olevaan sisarukseen. previous-sibling:: siirrytään mihin tahansa vasemmalla puolella olevaan sisarukseen. decendant-or-self:: vastaa //merkintää. CSE-A1200 Tietokannat 3.5.2016 37 / 39

Ehdot XPath-lausekkeissa Ehtoja voidaan esittää lausekkeissa hakasulkujen [] sisässä. Esimerkki1: /StarMovieData/Star[//City = "Malibu"]/Name palauttaa kalvon 12 XML-dokumentista niiden näyttelijöiden Name-alielementit, joilla tai joiden jälkeläisellä on City-alielementti, jonka arvona on Malibu. Esimerkki2: /StarMovieData/Movie[@Year = "1977"]/Title palauttaa kalvon 34 XML-dokumentista niiden elokuvien Title-alielementit, joiden Year-attribuutin arvo on 1977. Muita ehtoja Kokonaisluku i hakasulkujen sisässä tarkoittaa solmun i:nnettä lasta, esimerkiksi [2] tarkoittaa solmun toista lasta. Jos ehto on vain jonkin elementin nimi T yksistään, niin ehto [T] on tosi vain elementeille, joilla on yksi tai useampi T-alielementti. Jos ehto on vain jonkin attribuutin nimi A yksistään @-merkin kanssa, niin ehto [@A] on tosi vain elementeille, joilla on arvo attribuutille A. CSE-A1200 Tietokannat 3.5.2016 38 / 39

Huomaa Jos kyselyn tuloksena on elementti (eikä attribuutin arvo), niin myös elementin alku- ja loppumerkinnät kuuluvat kyselyn tulokseen. CSE-A1200 Tietokannat 3.5.2016 39 / 39