3 XML Schema: datatyypit

Samankaltaiset tiedostot
Helsingin yliopisto / TKTL XML-Metakieli XML Schema

XML-metakieli, k

2 XML Schema: johdanto ja rakenteiden perusteet

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

Rakenteisten dokumenttien jatkokurssi, syksy 2006

2 XML Schema: johdanto ja rakenteiden perusteet

Schema Asiakasprofiili.xsd

4 XML Schema: tyyppihierarkiat ja avaimet

Schema ReitinTilaus.xsd

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

P e d a c o d e ohjelmointikoulutus verkossa

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

Tekninen rajapinta Zip-tiedosto sovelluskehittäjälle Kansallisen tulorekisterin perustamishanke

Tekninen rajapinta Zip-tiedosto sovelluskehittäjälle Kansallisen tulorekisterin perustamishanke

Sosiaalihuollon asiakasasiakirjojen tietomallinnus Tietomallit teknisen asiakirjamäärittelyn näkökulmasta

Julkishallinnon XML-skeemat v0.5 JHS-suositus

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

RDF ja RDFS. 8 RDF ja RDFS

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

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Tietueet. Tietueiden määrittely

RAKENNEKUVAUSTEN HYÖDYNTÄMINEN KONFIGUROINTITIEDOSTOJEN VALIDOINNISSA. Aki Ollenberg

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

12 Dokumenttiluokan toteuttamisesta

JUHTA Julkisen hallinnon tietohallinnon neuvottelukunta

GML-mallinnus. 1 Johdanto 1/27. Paikkatietojen mallintaminen tiedonsiirtoa varten. Liite III

JHS 170 Julkishallinnon XML-skeemat

Tutkitaan sitten HTML-dokumenttien anatomiaa, jotta päästään käsiksi rakenteisten dokumenttien käsitteistöön esimerkkien kautta.

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

è è è RDF-perusteet 7 RDF-perusteet

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

Säännöllisten kielten sulkeumaominaisuudet

Johdatus rakenteisiin dokumentteihin

Paikkatiedot metsäkeskussanomissa soveltamisohjeet

Muodolliset kieliopit

StanForD-XML. Juha-Antti Sorsa, Tapio Räsänen, Vesa Imponen

Tieto- ja tallennusrakenteet

uv n, v 1, ja uv i w A kaikilla

Ohjelmoinnin peruskurssien laaja oppimäärä

Semanttinen Web. Ossi Nykänen Tampereen teknillinen yliopisto (TTY), DMI / Hypermedialaboratorio W3C Suomen toimisto

Schema Palveluprofiili.xsd

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

Luku 3. Listankäsittelyä. 3.1 Listat

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013

Luento 12: XML ja metatieto

Sosiaalihuollon asiakirjastandardi kehittyy. Konstantin Hyppönen Erikoissuunnittelija Tietojenkäsittelytieteen laitos Kuopion yliopisto

HAME PostGIS-tietokanta

7. Näytölle tulostaminen 7.1

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

ITKP102 Ohjelmointi 1 (6 op)

Opiskelijan pikaopas STACK-tehtäviin. Lassi Korhonen, Oulun yliopisto

Tietorakenteet ja algoritmit - syksy

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Hohde Consulting 2004

Kompleksilukujen kunnan konstruointi

Tietojen jakelu Skeemat Palvelupyyntö Kansallisen tulorekisterin perustamishanke

Monadeja siellä, monadeja täällä... monadeja kaikkialla? TIES341 Funktio ohjelmointi 2 Kevät 2006

JHS 162 Paikkatietojen mallintaminen tiedonsiirtoa varten Liite 3 GML-mallinnus

Kvarkki XUA: sähköisen allekirjoituksen määritys 1 (6) V 1.0. Kvarkki XUA: sähköisen allekirjoituksen määritys

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

ITKP102 Ohjelmointi 1 (6 op)

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke

Tehtävä 2: Säännölliset lausekkeet

9.16 XSLT ja nimiavaruudet (1/3): literaali oletusnimiavaruus

Kuva-aineistojen arkisto XUA-allekirjoituksen määritys

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

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

Ontologiat merkitysten mallintamisessa: OWL. Eeva Ahonen

Johdatus Ohjelmointiin

Tuomiorekisterin ratkaisuhaun kehittäminen

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

Lukujonon raja-arvo 1/7 Sisältö ESITIEDOT: lukujonot

6 XML-työkalut 1. 6 XML-työkalut

Korpusten käsittely clt131, P Luento 3

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Paikkatiedot ja Web-standardit

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet

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

Massahaun tulosten tulkintaa

Ohjelmoinnin peruskurssien laaja oppimäärä

TIEA341 Funktio-ohjelmointi 1, kevät 2008

5.5 Jäsenninkombinaattoreista

Tietojen jakelu Skeemat Palvelupyyntö Kansallisen tulorekisterin perustamishanke

Tentti erilaiset kysymystyypit

Rakenteiset tietotyypit Moniulotteiset taulukot

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Tietojen toimittaminen Skeemat Vastaanottokuittaus Kansallisen tulorekisterin perustamishanke

Funktiot. funktioita f : A R. Yleensä funktion määrittelyjoukko M f = A on jokin väli, muttei aina.

Ohjelmointi 1 C#, kevät 2013,

Tentti erilaiset kysymystyypit

Ohjelmoinnin peruskurssien laaja oppimäärä

Modulaariset tietosisältömäärittelyt Tilannekatsaus

Varmennepalvelu Rajapintakuvaus Kansallisen tulorekisterin perustamishanke

Arvosanatietojen siirto oppilaitoksista opintopolkuun 2017

Transkriptio:

3 XML Schema: datatyypit XML Schema esittelee DTD-kieleen verrattuna jotakin aivan uutta: datatyypin käsitteen. Datatyyppi on pohjimmiltaan merkkijono jonka rakenne voidaan testata kuten elementinkin. Keskeinen ero piilee siinä että datatyyppi ei sisällä "merkkausta". Tämä tiivistää tiedonesitystä merkittävästi sovelluksissa (mutta vastapainona tuo lisää määrityksiä prosessoriohjelmoijien huoleksi). xsd:date Asiat eivät tietenkään ole käsitteellisesti uusia esim. tietokantojen parissa toimineille, mutta rakenteisen dokumentaation näkökulmasta tämä (yleiskäyttöinen) aluevaltaus on erittäin tervetullut. MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 53

3.1 Välisoitto Standardoitujen datatyyppien käyttö tiivistää viestejä merkittävästi...samalla rakenteeton osa tietoa voidaan kutistaa olemattomiin (vrt. RD suunnittelu ja rakenne/ tietue/ ja "dataelementit") Epäsuorana tuloksena tekstinpätkä elementin sisällä ei enää olekaan vain jokin merkkijono, vaan merkkijono jolla on tarkka rakenne (ja siten merkitys!) MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 54

3.2 Datatyypit ja niiden käyttö Ns. yksinkertainen tietotyyppi on siis pohjimmiltaan merkkijono jonka rakenne voidaan asettaa datatyyppiin (datatype) vedoten <purchaseorder orderdate="1999-10-20"> <shipto country="us"> <name>alice Smith</name> <state>ca</state> <zip>90952</zip> </shipto> </purchaseorder> Yksinkertaisia tietotyyppejä määritellään pääpiirteissään seuraavasti: - valitsemalla suoraan Schema-standardin esimääritelty datatyyppi (builtin datatype), - määrittelemällä oma tietotyyppi (johtamalla uusi yksinkertainen tietotyyppi valitusta esimääritellystä datatyypistä), tai - johtamalla uusi tyyppi itse määritellystä tietotyypistä MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 55

3.3 Esimääritellyt datatyypit Asettaa tyyppihierarkian Hierarkia kertoo mitä standardityyppejä skeemat voivat käyttää...sekä mikä on rajoitteiden käytön luonnollinen hierarkia (esim. 2:lla alkava "8- bittinen luku" kannattaa johtaa unsignedshortista) MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 56

3.4 Yksinkertaisten tietotyyppien johtaminen Uuden yksinkertaisen tietotyypin johtaminen (esim. SKU tai USState) voidaan suorittaa kolmella eri tavalla: - rajoittamalla olemassa olevaa yksinkertaista tietotyyppiä sopivasti (ns. fasettien avulla) - rakentamalla lista olemassa olevista yksinkertaisista tietotyypeistä - yhdistelemällä olemassa olevia yksinkertaisia tietotyyppejä Edellä "olemassa oleva tietotyyppi" voi siis tarkoittaa joko skeemastandardin esimääriteltyä datatyyppiä tai itse määriteltyä yksinkertaista tietotyyppiä (huomaa rekursio määritelmässä) Tarkastellaan seuraavaksi kutakin tapaa lähemmin MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 57

3.5 Tyyppimäärittelyn perusteet (1/5): arvot ja tunnisteet Täsmällisemmin tarkasteltuna, kukin datatyyppi määrittelee kolmikon: - value space: mitä arvoja datatyyppi voi saada (esim. 100) - lexical space: miten ko. arvo voidaan esittää (esim. "100", "1.0E2") - set of facets: luonnehtii edellisiä (esim. <maxinclusive value="200"/>) Yksinkertaisen tietotyypin määrittely lähtee liikkeelle tyyppikirjastosta - ks. http://www.w3.org/tr/xmlschema-0/#creatdt Tarkastellaan esimerkkiä, määritellään kokonaislukutyyppi [10, 200]: <xsd:simpletype name="myinteger"> <xsd:restriction base="xsd:integer"> <xsd:mininclusive value="10"/> <xsd:maxinclusive value="200"/> </xsd:restriction> </xsd:simpletype> Ts. valittiin xsd:integer ja sovellettiin fasetteja mininclusive ja maxinclusive MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 58

3.6 Tyyppimäärittelyn perusteet (2/5): fasetit Esimerkki ns. hahmoihin pohjautuvasta fasetista: <xsd:simpletype name="sku"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-[a-z]{2}"/> </xsd:restriction> </xsd:simpletype> Arvojoukko voidaan myös esim. luetella: <xsd:simpletype name="usstate"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="ak"/> <xsd:enumeration value="al"/> </xsd:restriction> </xsd:simpletype> Tyyppikirjastolle on määritelty toistakymmentä fasettia: length, minlength, maxlength, pattern, enumeration, whitespace, maxinclusive, maxexclusive, mininclusive, minexclusive, totaldigits, fractiondigits, ks. http://www.w3.org/tr/xmlschema- 0/#SimpleTypeFacets MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 59

3.7 Tyyppimäärittelyn perusteet (3/5): listat Yksinkertaisia tietotyyppejä on itse asiassa "kolmea" lajia. Näitä ovat: - atomaarisen tietotyypit (atomic, esim. SKU ja USState edellä) ja - listat (list, esimääriteltyjä listoja ovat vain legacy-tyypit NMTOKES, IDREFS ja ENTITIES) - yhdisteet (union, esim. "SKU tai IDREFS") Kolmas tietotyyppi määritellään aina suhteessa kahteen edellä mainittuun Järkevä listarakenne määritellään siis aina itse, esim. <xsd:simpletype name="listofmyinttype"> <xsd:list itemtype="myinteger"/> </xsd:simpletype> Sallittu esiintymä on esim. <listofmyint>15 20 200 145</listOfMyInt> MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 60

3.8 Tyyppimäärittelyn perusteet (4/5): listan erotinmerkki Huom*. Koska listan erotinmerkkinä toimii tyhjämerkki, ei ole järkevää rakentaa listoja esim. tyypistä xsd:string (miksi?) Listoihin voidaan soveltaa seuraavia fasetteja: length, minlength, maxlength, pattern ja enumeration - huomaa että fasetti kohdistuu listaan eikä sen sisältöön! Esim. (Pulmia siis syntyisi jos USState sallisi esim. nimen "New York" *) <xsd:simpletype name="usstatelist"> <xsd:list itemtype="usstate"/> </xsd:simpletype> <xsd:simpletype name="sixusstates"> <xsd:restriction base="usstatelist"> <xsd:length value="6"/> </xsd:restriction> </xsd:simpletype> MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 61

3.9 Tyyppimäärittelyn perusteet (5/5): yhdisteet Yksinkertaisia (ei-atomaarisia) tietotyyppejä voidaan siis rakentaa myös yhdistelemällä listoja ja atomaarisia tietotyyppejä Esimerkiksi: <xsd:simpletype name="zipunion"> <xsd:union membertypes="usstate listofmyinttype"/> </xsd:simpletype> Seurauksena sallitaan esiintymät (kun zip tyyppiä zipunion): <zips>ca</zips> <zips>95 77 145</zips> <zips>ak</zips> Sudenkuoppa piilee listojen ymmärtämissä; esim. seuraavaa ei nyt sallita: <zips>95 77 CA 145</zips>...koska "95 77 CA 145" ei ole sallittu arvo USState-tyypille, eikä sallittu listofmyinttype-tyypille Yhdisteille on käytössä fasetit: pattern ja enumeration MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 62

3.10 Yksityiskohta: Pattern-fasetti ja säännölliset lausekkeet Fasettien tärkeä erikoistapauksen muodostaa hahmo (pattern) Hahmo määrittelee säännöllisen lausekkeen jonka avulla voidaan pienen ohjelmanpätkän tavoin kuvata yksinkertaisen tietotyypin sallittu arvo, esim. <simpletype name='mystring'> <restriction base='string'> <pattern value='a.*z'/> </restriction> </simpletype> Skeemastandardi määrittelee tehtävään oman kielensä, mutta se muistuttaa suuresti tuttuja Perl/Posix regexp-kieliä - ks. http://www.w3.org/tr/2004/rec-xmlschema-2-20041028/datatypes.html#regexs Hahmo kiinnittyy tutkittavan merkkijonon alkuun ja loppuun (vrt. /^A.*Z$/); kelluva hahmo voidaan kuitenkin esittää helposti: <pattern value='.*a.*z.*'/> MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 63

3.11 Säännöllisten lausekkeiden perusteet Piste. esittää mitä tahansa merkkiä (nyt lausekkeet alleviivattuina) Erikoismerkitön teksti tulkitaan atomaariseksi hahmoksi (esim. kissa ) Hahmo voi sisältää vaihtoehtoisia haaroja (esim. kissa koira ) Erikoismerkit esitetään kenoviivan (ns. escape characters) avulla (esim. \\ tarkoittaa merkkiä \ ja \( vasenta sulkua ( ) Sulut ryhmittelevät tekstiä (esim. (kissa koira)kala ) Kertojilla?, *, +, {a,b}, {c} voidaan ilmoittaa toistokerrat Merkkiryhmät ilmoitetaan hakasuluilla (esim. [aza-b] ja [^@] ), nämä voivat myös sisältää Unicode-osioiden nimiä Standardi määrittelee myös usein tarvittavia merkkikategorioita (esim. \d, \{Nd}, \{Lu} ja \p{isbasiclatin} ) Muista myös XML-kieliopin vaatima koodaus! (esim. a&b a&b ) MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 64

3.12 Skeemastandardin oma tyyppikirjasto (1/2): perusteet Koska esimääritellyt datatyypit eivät yksin riitä arkisten sovellusten rakentamiseen, skeemasuositus asettaa (yksinkertaisia ja kompleksisia tyyppejä sisältävän) yleiskäyttöisen tyyppikirjaston (type library) - ks. http://www.w3.org/tr/xmlschema-0/#import (ja kohta 5.4.1.) - ja http://www.w3.org/2001/03/xmlschema/typelibrary.xsd Tyyppikirjasto sisältää tyyppejä seuraaviin kategorioihin jaoteltuna:, - text, array, list, math, quantity, binary Ikävä kyllä, tyyppikirjasto on turhauttavan suppea; se ei ole valmis saati kattava; (optimistinen) perusidea on että kirjasto täydentyy ajan myötä jolloin nimiavaruudet kiinnitetään standardoitavien tyyppien osalta (ja vain näiden osalta!) Koska tyyppikirjaston voi määritellä "kuka tahansa", voidaan toki soveltaa kuitenkin myös muiden kuin W3C:n skeematyöryhmän tyyppikirjastoja MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 65

3.13 Skeemastandardin oma tyyppikirjasto (2/2): esimerkki Tarkastellaan esimerkkinä math-kirjastosta löytyvää tyyppiä complexnumber...<xs:complextype name="complexnumber">... <xs:sequence> <xs:element name="real" type="realpart"/> <xs:element name="imaginery" type="imaginerypart"/> </xs:sequence> </xs:complextype> <xs:simpletype name="realpart"> <xs:restriction base="xs:decimal"/> </xs:simpletype> <xs:simpletype name="imaginerypart"> <xs:restriction base="xs:decimal"/> </xs:simpletype>... Sinänsä yksinkertaisen määrittelyn soveltaminen jättää avoimia kysymyksiä: - onko oman sovelluksen oikeasti järkevää käyttää nimiä real ja imaginery? - tyyppikirjasto ei määrittele kohdenimiavaruutta; tarkoitus on että complexnumber voidaan sisällyttää (include) mv. kohdenimiavaruuteen itse määritellyn skeeman osana onko tämä mielekästä? MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 66

3.14 Huomioita Omien tietotyyppien määrittely on periaatteessa hyvin yksinkertaista Skeemakielen tekninen monimutkaisuus huomioiden, on kuitenkin järkevää esim. yksinkertaisen tietotyypin määrittelyn yhteydessä: - määritellä oman tyyppi aluksi "informalisti" (esim. selitysten, esimerkkien ja diagrammien avulla) - kirjoittaa vastaava tyyppimäärittely XML-skeemana - ja testata että kirjoitettu tyyppimäärittely todellakin vastaa aiottua (sisältäen sekä testiajoja että pohdintaa)...muuten käy helposti niin että kirjoitettu tyyppi on esim. liian salliva tai sen järkevä tulkinta ei onnistukaan (vrt. xsd:string ja listat) Yksinkertaisten tietotyyppien määrittelylle ja esimääritellyille datatyypeille löytyy käyttöä myös XML-skeemojen ulkopuolelta MATHM-57200 RAKENTEISTEN DOKUMENTTIEN JATKOKURSSI (syksy 2005) - ON 67