1 / 38

T3MM65 RAKENTEISET DOKUMENTIT Pläjäys 2

T3MM65 RAKENTEISET DOKUMENTIT Pläjäys 2. Heikki Hietala HAAGA-HELIA Syksy 2009. What’s in a namespace?. Nimiavaruudessa on kyse siitä, että kaksi XML-sovellusta voi vahingossa käyttää samoja tunnisteita. Arabia tekee Teema-lautasia Canal+ markinoi satelliittilautasia

iona
Download Presentation

T3MM65 RAKENTEISET DOKUMENTIT Pläjäys 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. T3MM65RAKENTEISET DOKUMENTITPläjäys 2 Heikki Hietala HAAGA-HELIA Syksy 2009

  2. What’s in a namespace? • Nimiavaruudessa on kyse siitä, että kaksi XML-sovellusta voi vahingossa käyttää samoja tunnisteita. • Arabia tekee Teema-lautasia • Canal+ markinoi satelliittilautasia • Jos nimiavaruuksista ei huolehdittaisi, Prisma tms. jälleenmyyjä saattaisi myydä lautasia sekaisin • Jumalaton pizzavati vs. Urheilukanavan näkyvyys posliinilautaselta vastaanotettuna?

  3. Oletetaan että… • Arabia myy Teemaa: <lautanen> <malli>Teema</malli> <koko>22 cm</koko> <väri>valkoinen</väri> </lautanen> • Canal+ myy satelliittivastaanotinta: <lautanen> <malli>Samsung Outer Space</malli> <koko>222 cm</koko> <väri>harmaa</väri> </lautanen>

  4. … ja sitten Prisma tilaa… <tilaus> <lautanen> <malli>Teema</malli> <koko>22 cm</koko> <väri>valkoinen</väri> </lautanen> <lautanen> <malli>Samsung Outer Space</malli> <koko>222 cm</koko> <väri>harmaa</väri> </lautanen> </tilaus>

  5. Tilaus ei oikein onnistu • Yksikäsitteisyys ei ole enää voimassa • Tilauksen tavarat menevät sekaisin • Vain siinä tapauksessa, että yksikään jälleenmyyjä ei tilaa tavaraa molemmilta, voidaan tällaiset määrittelyt hyväksyä • Tilanteiden turvaksi on nimiavaruus, namespace.

  6. Namespace tulee jostakin Namespace URIhttp://www.namespace-uri.com • Namespace URI (Uniform Resource Identifier) on useimmiten URL (Uniform Resource Locator) eli normaali HTTP-osoite • Koska URI on yksikäsitteinen, koko sen määräämä namespace on yksikäsitteinen • URIssa ei tarvitse oikeasti olla yhtään mitään. • Tiedoston käsittelyn aikana osoitteesta ei haeta mitään. • Silti on hyvä käyttää sellaista URIa joka on hallinnassa. Prefix nsp: nsp:element1 nsp:element2 nsp:element3

  7. Takaisin Arabiaan • Sovitaanpa että namespace-määritys on xmlns:ara=”http://www.arabia.fi/2005/ns” • Eli siis koko XML: <ara:lautanen xmlns:ara=”http://www.arabia.fi/2005/ns” > <ara:malli>Teema</ara:malli> <ara:koko>22 cm</ara:koko> <ara:väri>valkoinen</ara:väri> </ara:lautanen>

  8. Entä Canal+…? • Siellä namespace-määritys on ”xmlns:cpl=”http://www.canalplus.fi/xml” • Eli siis koko XML: <cpl:lautanen xmlns:cpl=”http://www.canalplus.fi/xml”> <cpl:malli>Teema</cpl:malli> <cpl:koko>22 cm</cpl:koko> <cpl:väri>valkoinen</cpl:väri> </cpl:lautanen>

  9. … No nyt Prisma tilaa… <tilaus xmlns:cpl=”http://www.canalplus.fi/xml xmlns:ara=”http://www.arabia.fi/2005/ns”> <ara:lautanen> <ara:malli>Teema</ara:malli> <ara:koko>22 cm</ara:koko> <ara:väri>valkoinen</ara:väri> </ara:lautanen> <cpl:lautanen> <cpl:malli>Samsung Outer Space</cpl:malli> <cpl:koko>222 cm</cpl:koko> <cpl:väri>harmaa</cpl:väri> </cpl:lautanen> </tilaus> • Eli kaksi namespacea yhdessä tilauksessa on mahdollista, jopa pakollista jos on sekaantumisen vaara • Kun ne julistetaan juurielementissä, ne ovat käytössä kaikkialla

  10. Default namespace • Onhan se tuskaa kirjoittaa se namespace prefix joka paikkaan, jos yhdellä pärjää • Siksi voi määrittää default namespacen juurielementtiin, josta se peritään lapsielementteihin <lautanen xmlns=”http://www.arabia.fi/xml”> <malli>Teema</malli> <koko>22 cm</koko> <väri>valkoinen</väri> <lautanen> • Default namespacessa ei ole prefixiä • Yksittäisen elementin voi silti määrittää kuuluvaksi johonkin toiseen namespaceen

  11. Namespace ja attribuutit • Namespacet koskevat myös elementtien attribuutteja • Poikkeus on se, että default namespace ei koske attribuutteja • Jos siis haluaa olla tasan varma nimien yksikäsitteisyydestä, täytyy attribuuttien namespace määrittää myös: <cpl:malli cpl:vuosi=”1973”>Samsung Outer Space</cpl:malli>

  12. Validointi • Validointi on tarpeen siksi, että ilman validointia ei voida sopia standardeista • Autojen varaosien jakelu sadan jälleenmyyjän kanssa olisi todella vaikeaa, jollei ensin sovita miten osista puhutaan • Validointiin tarvitaan joko DTD (Document Type Definition) tai skeema (XML schema) • Ne joko liitetään osaksi itse XML-tiedostoa tai sitten XML:ään liitetään tieto siitä, mistä validointimäärittelyt löytyvät

  13. Esimerkki validointitarpeesta <tilaus> <id>1020</id> <nimi>Jakopään hihna</nimi> <hinta>110 e</hinta> </tilaus> • on periaatteessa sama validi rakenne kuin <tilaus id=”1020”> <nimi>Jakopään hihna</nimi> <hinta>110 e</hinta> </tilaus> • Mutta vaikka juurielementti on tilaus, ID menee väärään paikkaan, koska toisessa se on attribuutti ja toisessa elementti

  14. Mitä validoinnissa tarkastetaan? • Sekvenssi • Missä järjestyksessä elementit esiintyvät • Keskinäiset suhteet • Vanhempi-lapsi ja sisäkkäisyyssuhteet • Tietotyypit • Elementeissä ja attribuuteissa • Validoinnin hoitaa parseri • Parseri ottaa validointitiedot ja vertaa varsinaista dataa validointiin

  15. Skeeman ja DTD:n edut • DTD tai skeema on kuin rakennepiirustus toimivalle XML-dokumentille • Uusi käyttäjä pystyy heti luomaan oikeanlaisia tiedostoja • DTD ja skeema varmistavat, että kaikki XML-tiedoston käyttäjät ymmärtävät asiat samalla tavalla • DTD ja skeema varmistavat, että sovellukset saavat käyttöönsä toimivaa XML:ää

  16. DTD  XML Skeema • DTD:n puolesta • Laajalle levinnyt, paljon osaajia • Vanhatkin parserit tunnistavat • Käytössä monissa sovelluksissa kaikkialla • Helpohko oppia • DTD:tä vastaan • Epästandardi syntaksi (skeema on XML:ää) • Tietotyypit rajallisia • Nimiavaruuksia ei tueta • Perimys puuttuu, suljettu järjestelmä

  17. DTD  XML Skeema • Skeeman puolesta • XML-syntaksi • Rikkaat tietotyypit (… Bill Gates?) • Käyttäjän määrittelemät tietotyypit • Nimiavaruuksien tuki • Perimys tietotyypeissä • Skeemaa vastaan • Rajallinen parserituki • Hankalampi oppia

  18. Kumpaa kannattaa käyttää? • Jos tarve on yksinkertainen, DTD riittää • Nopeampi kehittää ja helpoissa sovelluksissa aivan riittävä • Jos data on tekstipohjaista, DTD riittää • Jos haluat määritellä omia tietotyyppejä, skeema on ainoa vaihtoehto • Jos kehitysaika on rajallinen, DTD riittää • Mutta skeemalla on paremmat jatkokehitysmahdollisuudet

  19. Sananen parsereista • Niitä on kahdenlaisia, validoivia ja ei-validoivia. • Lark, XP, HEX ja Expat eivät validoi • http://www.textuality.com/Lark/ • MSXML, Xerces, XMLBooster ja Larval validoivat • http://xml.apache.org/xerces-j/ • Skeemaa eivät kaikki vanhemmat parserit tunnista

  20. DTD ei siis ole hyönteismyrkky • DTD on ensimmäinen XML:n validointiin tarkoitettu standardi • W3C:n spesifikaatio XML 1.0 esitteli DTD:n • Ei pidä sotkea Document Type Definitionia (DTD)Document Type Declarationiin (DTD). • DTD voi olla osa XML:ää tai ulkoinen tiedosto johon viitataan.

  21. DTD:n osat • Kaikki DTD:n avainsanat AINA SUURAAKKOSIN • Kaikkien avainsanojen eteen aina !-merkki • Alkuun <!DOCTYPE <!DOCTYPE root-element SYSTEM ”filename.dtd”> • Viittaa filename.dtd-tiedostossa olevaan DTD:hen • Jos DTD on mukana XML:ssä, tehdään näin: <!DOCTYPE root-element [element-declarations]>

  22. Funtsitaanpa elokuvaa <filmi nimi=”Blues Brothers”> <ohjaaja>John Landis</ohjaaja> <kirjoittaja>Dan Aykroyd</kirjoittaja> <vuosi>1980</vuosi> <kesto>133</kesto> <muuta/> </filmi> • Ihan siis normaalia XML:ää • Kun lisätään DTD, saadaan…

  23. Ta-DAA! Eikun DTD! <?xml version=”1.0” encoding=”iso-8859-1”?> <!DOCTYPE filmi [ <!ELEMENT filmi (ohjaaja, kirjoittaja, vuosi, kesto, muuta)> <!ATTLIST filmi nimi #CDATA #REQUIRED> <!ELEMENT ohjaaja (#PCDATA)> <!ELEMENT kirjoittaja (#PCDATA)> <!ELEMENT vuosi (#PCDATA)> <!ELEMENT kesto (#PCDATA)> <!ELEMENT muuta EMPTY> ]> <filmi nimi=”Blues Brothers”> <ohjaaja>John Landis</ohjaaja> <kirjoittaja>Dan Aykroyd</kirjoittaja> <vuosi>1980</vuosi> <kesto>133<kesto> <muuta/> </filmi>

  24. Elementtien julistaminen • Yleinen syntaksi on <!ELEMENT element-name (content-type)> • < ja > ovat välttämättömät • !ELEMENT on avainsana, joka kertoo julistuksen alkavan • Element-name on julistettava elementti • Content-type kertoo mitä elementti sisältää • Se voi kertoa myös, että elementillä on lapsia <!ELEMENT film (ohjaaja, kirjoittaja, vuosi, kesto, muuta)>

  25. Tyhjät elementit • HTML:ssä on esim <BR> ja <HR>, jotka ovat tyhjiä elementtejä, vain attribuutteja sisältäviä • XML:ssä vastaavaan tarvitaan DTD-määre <!ELEMENT muuta EMPTY> • Ideana on käyttää tällaista tyhjää elementtiä vain olemaan olemassa, esim. <!ELEMENT oscar EMPTY> • voisi olemassaolollaan kertoa, onko filmi saanut Oscarin.

  26. Merkkidataelementit • Kaksivaihtoehtoa - CDATA ja PCDATA • Jos data ei sisällä mitään erikoisuuksia, kuten <, >, =, voidaan käyttää Parsed Character Dataa. Silloin parseri yrittää tulkita kaiken elementin sisältämän datan. <!ELEMENT ohjaaja (#PCDATA)> <ohjaaja>John Landis</ohjaaja> • Kaikista erikoismerkeistä on tehtävä entiteettejä &lt; &gt; ja niin edelleen, muuten parseri käsittää että alkaa uusi tagi. • Jos taas haluaa liittää elementtiin esim. HTML-ohjauksia (typerä idea sinällään), on pakko sanoa <!ELEMENT ohjaaja (#CDATA)> <ohjaaja><b>John Landis</b></ohjaaja> • Nyt parseri sivuuttaa ohjaaja-elementin datan eikä tulkitse sitä

  27. Yksilapsiset (kiinalaiset) elementit • Jos elementissä on vain yksi lapsielementti, syntaksi menee <!ELEMENT filmi (nimi)> --- <filmi> <nimi>Blues Brothers</nimi> </filmi> • Tämä DTD sanoo, että vain yksi nimi-elementti on luvallinen. Eli siis <filmi> <nimi>Blues Brothers</nimi> <nimi>Blues Brothers 2000</nimi> </filmi> • generoi virheen.

  28. Monilapsiset elementit • DTD on sekventiaalinen systeemi. Elementtien julistamisjärjestyksellä on siis väliä. <!ELEMENT element-name (child-element-name1, child-element-name2, child-element-name3)> • DTD on sekventiaalinen systeemi. Elementtien julistamisjärjestyksellä on siis väliä. <!ELEMENT filmi (ohjaaja, kirjoittaja, vuosi, kesto, muuta)> • Jokaisella filmi-elementillä on mahdollista olla nämä kersat, tässä järjestyksessä. • Kun lapset on lueteltu, ne on myös julistettava.

  29. Lasten julistaminen <!DOCTYPE filmi [ <!ELEMENT filmi (ohjaaja, kirjoittaja, vuosi, kesto,muuta)> <!ELEMENT ohjaaja (#PCDATA)> <!ELEMENT kirjoittaja (#PCDATA)> <!ELEMENT vuosi (#PCDATA)> <!ELEMENT kesto (#PCDATA)> <!ELEMENT muuta EMPTY> ]> • EMPTY-avainsanaa ei tarvitse laittaa sulkuihin • Muista, että DTD ei ole suositus vaan määräys. Lasten järjestystä ei voi XML:ssä vaihtaa ilman virheilmoituksia. • Eihän KELAkaan anna lapsilisää siten, että vaihtaa perheessä paikkaa pikkuveljen kanssa.

  30. Kaksoset ja muut monikkoperheet • Puhutaanpa Dan Aykroydin filmeistä <filmi> <nimi>Blues Brothers</nimi> <nimi>Blues Brothers 2000</nimi> <nimi>Ghostbusters</nimi> <nimi>Ghostbusters 2</nimi> </filmi> • DTD:ssä tämä olisi <!ELEMENT element-name (child-element-name+) <!ELEMENT filmi (nimi+)

  31. Jos et tiedä montako lasta on… <!ELEMENT element-name (child-element-name*)> • Mahdollistaa sen, että etukäteen ei tiedä montako lasta pitää olla (nolla, yksi, monta) • Kysymysmerkki on nolla tai yksi, mutta ei monta • Vaikkapa julkaisu videona ja DVD:nä: <!ELEMENT filmi (… julkaisu*) • Nyt voidaan sanoa <filmi nimi=”Blues Brothers”> <ohjaaja>John Landis</ohjaaja> <kirjoittaja>Dan Aykroyd</kirjoittaja> <vuosi>1980</vuosi> <kesto>133<kesto> <muuta/> <julkaisu>VHS</julkaisu> </filmi>

  32. Voidaan myös sanoa <filmi nimi=”Blues Brothers”> <ohjaaja>John Landis</ohjaaja> <kirjoittaja>Dan Aykroyd</kirjoittaja> <vuosi>1980</vuosi> <kesto>133<kesto> <muuta/> </filmi> TAI <filmi nimi=”Blues Brothers”> <ohjaaja>John Landis</ohjaaja> <kirjoittaja>Dan Aykroyd</kirjoittaja> <vuosi>1980</vuosi> <kesto>133<kesto> <muuta/> <julkaisu>VHS</julkaisu> <julkaisu>DVD</julkaisu> <julkaisu>Betamax</julkaisu> </filmi>

  33. Mutually exclusive children, eli riitaiset perheet • Joskus lapset eivät mahdu samaan autoon • XML:ssä on keino valita vain yksi muutamasta arvosta <!ELEMENT element-name (child-element-name | child-element-name | child-element-name)> <!ELEMENT julkaisumaa (sf|sv|no|dk)> <!ELEMENT sf EMPTY> <!ELEMENT sv EMPTY> <!ELEMENT no EMPTY> <!ELEMENT dk EMPTY>

  34. Mutual exlusive käytössä • Mahdollinen: <julkaisu> <sv/> <julkaisu> • Ei mahdollinen: <julkaisu> <sv/> <sf/> <julkaisu>

  35. Yhteiset säännöt kaikille lapsille <!ELEMENT element-name (child-element-name, child-element-name2, child-element-name3)*> • Antaa kaikille kolmelle lapselle tuntemattoman lukumäärän. • Samoin <!ELEMENT filmi ((ohjaaja, kirjoittaja)+, (vuosi, kesto)?, muuta)> • Määrittää yhden tai useamman ohjaajan, nolla tai yhden vuoden ja keston. Huomautus: • On olemassa myös avainsana ANY, mutta sen käyttäminen nollaa DTD:n antamat edut • Älä siis määritä <!ELEMENT element-name ANY> • ANYn ainoa hyvä puoli on ettei parseri ronki sitä

  36. Attribuuttien julistaminen • Attribuutitkin on julistettava: <filmi nimi=”Natsat” id=”102”> • DTD: <!ATTLIST element-name attribute-name attribute-type default-value> • Jos haluat sanoa, että filmi-elementin nimi-attribuutti on pakollinen: <!ATTLIST filmi nimi CDATA #REQUIRED> • Useita attribuutteja: <!ATTLIST filmi nimi CDATA #REQUIRED studio CDATA #REQUIRED jakelija CDATA>

  37. Attribuuttien tyypit • CDATA Merkkidataa ilman koodauksia • Enumerated luettelo arvoista • ID yksilöivä nimi • IDREF tiedostossa oleva viittausnimi • Käytetään viittausten luomiseen dokumenttien välillä • IDREFS viittaus tyyliin yksi-moneen • ENTITY ennalta määrätty entiteetti • DTD:ssä julistettu, esim. lyhenteen avaava teksti • ENTITIES useampia entiteettejä • NMTOKEN Jokin XML-nimi • NMTOKENS Useita nimiä

  38. Attribuuttien käyttö • Normaali tapaus <!ATTLIST filmi nimi CDATA #REQUIRED> • Ei siis voi ottaa arvoa <i>Natsat</i> • Luetteloidut arvot <!ATTLIST julkaisu kuvasuhde (1.33 | 1.85 | 2.35) REQUIRED#> <julkaisu kuvasuhde=”1.33”> on oikein <julkaisu kuvasuhde=”1.33:1”> ei ole oikein

More Related