HELIA TIKO-05 XML ja tietokannat 1 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho

Samankaltaiset tiedostot
HELIA TIKO-05 XML ja tietokannat 1 ( 24) ICT03D Tieto ja tiedon varastointi Martti Laiho

HELIA TIKO-05 XML ja tietokannat 1 ( 18) ICT03D Tieto ja tiedon varastointi Martti Laiho

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 K2009

XQuery tietokannan kyselykielenä

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

HELIA 1 (14) Outi Virkki Tiedonhallinta

HELIA TIKO-05 1 (22) ICT03D Tieto ja tiedon varastointi E.Räty, O.Virkki

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto

MUITA TIETOKANTAOBJEKTEJA NÄKYMÄT, SYNONYYMIT, INDEKSOINTI, VALTUUDET JA SYSTEEMIHAKEMISTO

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

SQL - STRUCTURED QUERY LANGUAGE

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Tietokannanhoitaja DBA (Database Administrator) ja tietokannan hallinta

Tietokantakurssit / TKTL

3. Taulujen määrittely ja muuttaminen

Lohdutus - tietokantadokumentti

3. TAULUJEN MÄÄRITTELY JA MUUTTAMINEN

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Relaatiomalli ja -tietokanta

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

CSE-A1200 Tietokannat

HELIA 1 (13) Outi Virkki Tietokantasuunnittelu

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

HELIA 1 (15) Outi Virkki Tiedonhallinta

Sovellusarkkitehtuurit

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

Hohde Consulting 2004

1. a) Laadi suoraviivaisesti kyselyä vastaava optimoimaton kyselypuu.

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

TIETOKANTOJEN PERUSTEET OSIO 11 MARKKU SUNI

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

Kari Aalto Saariston IT

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

Joko tunnet nämän Oracle10g SQL:n piirteet? Kari Aalto Saariston IT

HELIA 1 (14) Outi Virkki Tiedonhallinta

LINUX-HARJOITUS, MYSQL

Denormalisointia turvallisesti. Ougf syysseminaari Pörssitalo Helsinki Timo Raitalaakso

Digitaalisen median tekniikat. JSP ja XML

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

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

Tiedonhallinnan perusteet. H11 Ovien ja kulun valvontajärjestelmän tietokanta

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

TIETOKANNAT JOHDANTO

HELIA 1 (11) Outi Virkki Tiedonhallinta

RDBMS - Yhteyskäytännöt

TIETOKANNANHOITAJA DBA (DATABASE ADMINISTRATOR) JA TIETOKANNAN HALLINTA

Oraclen syvin ydin. Pertti Eiskonen Yleisradio Oy Tietokanta-asiantuntija. OUGF syysseminaari 2002 Sivu 1

2. Käsiteanalyysi ja relaatiomalli

Tietokannat II -kurssin harjoitustyö

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

SELECT-lauseen perusmuoto

HELIA TIKO-05 1 ( 12) ICT03D Tieto ja tiedon varastointi Martti Laiho

Tiedonhallintajärjestelmän rakenne ja Suorituskyky

TIETOKANTOJEN PERUSTEET MARKKU SUNI

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

HELIA 1 (14) Outi Virkki Tiedonhallinta

XML and databases 246

TIETOKANTOJEN PERUSTEET OSIO 14 MARKKU SUNI

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

D B. Kyselypuut ja ekvivalenssi

Tietokannan hallinta. Kevät 2004 Jan Lindström R&G Chapter 1

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta]

Samanaikaisuuden hallinta. Optiot transaktionaalisissa työnkuluissa

HELIA 1 (17) Outi Virkki Tiedonhallinta

Tällä viikolla. Kotitehtävien läpikäynti Aloitetaan Pelifirman tietovaraston suunnittelu Jatketaan SQL-harjoituksia

Tietohakemisto ja Transaktionkäsittely

TIEDONHALLINTA - SYKSY Luento 8. Saapumisryhmä: Pasi Ranne /9/13 Helsinki Metropolia University of Applied Sciences

HELIA 1 (16) Outi Virkki Tietokantasuunnittelu

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

HAAGA-HELIA Heti-09 1 (14) ICT05: Tiedonhallinta ja Tietokannnat O.Virkki Transaktionkäsittely

EXEC SQL BEGIN DECLARE SECTION

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

15. Ohjelmoinnin tekniikkaa 15.1

Näkymät ja tiedon suojaus

HAAGA-HELIA TIKO - Heti09 1 (22) ICT05 Tiedonhallinta ja Tietokannat E.Räty, O.Virkki, M.Laiho

Interfacing Product Data Management System

D B. Tietokannan hallinta - kurssin tavoite. Kurssilla opitaan periaatteet. Edellytyksenä osallistumiselle on Tietokantojen perusteiden hallinta

Written by Administrator Monday, 05 September :14 - Last Updated Thursday, 23 February :36

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Järjestelmäarkkitehtuuri (TK081702)

Helsingin yliopisto/tktl Tietokantojen perusteet, s 2007 SQL:n perusteet. Harri Laine 1. SQL tietokantakieli. SQL tietokantakieli

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

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

käännös käännösvaiheessa tarkasettaan linkitys

Ohjelmoinnin jatkokurssi, kurssikoe

HELIA 1 (21) Outi Virkki Tietokantasuunnittelu

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 SQL-perusteet. Harri Laine 1. SQL tietokantakieli

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

Transkriptio:

HELIA TIKO-05 XML ja tietokannat 1 ( 23) XML ja tietokannat Miksi XML-dokumentteja tietokannassa? Unicode-merkistö ja XML-tietorakenne mahdollistavat yleispätevän alustariippumattoman tiedon talletusrakenteen ja sanomarakenteen tietojen välitykseen eri sovellusten kesken. Merkkipohjainen XML-dokumentti ei kuitenkaan sellaisenaan ole mikään tietokantaratkaisu. Pelkkä dokumentti ei pysty suojaamaan tietoja asiattomalta käytöltä tai muutoksilta kuten tietokanta. Se ei pysty samanaikaisuuden ja transaktioiden hallintaan ja vähänkin laajemman XML-dokumentin käsittely on hidasta. Kertaluontoinen validointi XML Schemaa käyttäen ei suojaa dokumenttia jatkuvasti eikä edes validoitaessa turvaa yksittäisen dokumentin tietojen eheyttä muiden dokumenttien tai tietokantojen tietojen kesken. Turvallisen, tehokkaan ja muuhun tiedonhallintaan integroivan infrastruktuurin XML-dokumenteilla tarjoaa oikea tietokantajärjestelmä. Client-side XML Ennen kuin DBMS-järjestelmiin alettiin toteuttamaan varsinaista XML-tiedon talletusta yksinkertainen tapa tallettaa XML-dokumentti perinteisessä relaatiotietokannassa oli tallettaa dokumentti relaatiotaulun rivin ns. CLOB-tyyppiä olevaan sarakkeeseen, ks kuva 1. CLOB tulee sanoista Character Larger OBject ja se on SQL-standardin määrittämä isojen merkkijonojen talletusmuoto. Sellaisenaan tämä ei tarjonnut tukea XML-dokumentin jäsentävään käsittelyyn, vaan käsittely oli tehtävä sovellusohjelmissa tietokannan ulkopuolella. Toinen vaihtoehto oli jäsentää XML-dokumentin tiedot sovellusohjelmassa ja tallettaa tiedot ohjelmallisesti jakaen ne eri tauluihin (shredding, decomposition) ja vastaavasti koostaen (composition) XML-dokumentti aina sitä tarvittaessa ohjelmallisesti relaatiotauluista. XML document Application CLOB column shredding into relational tables CLOB value Kuva 1 Ohjelmallinen talletus CLOB-sarakkeeseen tai ositus relaationaalisiin tauluihin

HELIA TIKO-05 XML ja tietokannat 2 ( 23) Varsin pitkälle ja vähällä ohjelmoinnilla nämä relaatiotietokantatietojen ja XML-dokumenttien sovellusohjelmissa tehtävät konversiot saadaan toteutettua esimerkiksi Microsoftin.NETarkkitehtuurissa ADO.NETin XML-palveluina. Java-arkkitehtuureissa XML-dokumenttien ohjelmallinen käsittely tapahtuu SAX-algoritmilla tai DOM-puuna. SAX-algoritmissa dokumentti luetaan kertaalleen läpi käsitellen sen kiinnostavat osat, mutta tallentamatta sitä sovelluksen muistiin. DOM-mallissa XMLdokumentin tiedot ladataan ohjelman muistiin hierarkkiseksi puurakenteeksi, jossa voidaan navigoida puun polkuja pitkin ja päivittää puuta. Päivitetty DOM-puu voidaan serialisoida (eli kirjoittaa tiedostoon) XML-dokumentiksi. DOM-mallin soveltamista massiivisten XMLdokumenttien käsittelyyn rajoittaa puurakenteen vaatima tila sovelluksen rajallisessa muistiavaruudessa. Javan tietokantaliittymä JDBC 3 API on vielä täysin suuntautunut perinteisten SQL-taulujen käsittelyyn, mutta JDBC 4 tulee huomioimaan myös XML-dokumenttien käsittelyn SQLstandardin XML-laajennusten mukaisesti. Sovellusohjelmissa toteutetut muunnosratkaisut kuormittavat edelleen vastausaikoja ja DBMSjärjestelmätoimittajat ovat nyt lähteneet toteuttamaan aitoa XML-tukea itse tietokantajärjestelmissä. Server-side XML, arkkitehtuureja ja standardeja XML-dokumenttien tietokantaratkaisuiksi on kehitetty erityisiä XML-tietokantoja, mm. Software AG:n Tamino-järjestelmä. Näiden ongelmana on niiden tietojen erillisyys valtavirran SQL-pohjaisten tietokantojen tiedoista. Toistaiseksi XML-tietokantajärjestelmät eivät ole olleet kaupallisia menestyjiä. Hierarkkinen tietomalli tietokannassa ei ole uusi asia. Jo ennen relaatiotietokantoja käytössä oli hierarkkiseen malliin perustuvia järjestelmiä, joista merkittävin ja edelleen käytössä oleva on IBM:n IMS DB. Tämä tunnetaan käsittelykielensä Data Language I mukaan myös nimellä DLI. Huom. Toisen merkittävän relaatiotietokantoja edeltävän tietokanta-arkkitehtuurin muodostavat verkkomalliin perustuvan ANSI:n Codasyl-standardin mukaiset järjestelmät, joiden vaikutus näkyy nykyisissä oliotietokantajärjestelmissä. Relaatiomallin isä E.F. Codd kehittikin relaatiomallin itse asiassa yksinkertaistamaan tietokantojen käsittelyä vapauttaen ohjelmoijat tietokantanavigoinnista. Tästä voidaan nyt olla montaa mieltä. Navigointi ohjelmointimallina on tullut takaisin XPath, XQuery ja oliotietokantaohjelmointiin. Myös uusi SQL-standardi ja sitä toteuttavat Object-Relational DBMS-järjestelmät ovat ottaneet eroa puhtaaseen relaatiomalliin SQL:n olio- ja XMLlaajennuksilla. SQL:2003-standardin XML-laajennus on määritetty sen osassa 14 SQLXML [sqlp14]. Tämä määrittää XML-tietotyypin käytettäväksi SQL-taulun sarakkeen tietotyyppinä sekä joukon funktioita, joilla XML-dokumentti (tai tämän osa, XML-fragmentti) tai XML-näkymä

HELIA TIKO-05 XML ja tietokannat 3 ( 23) voidaan rakentaa (composition) SQL-taulujen tiedoista. Näistä XML-julkaisufunktioita (publishing functions) ovat seuraavat: XMLAGG: luo XML-elementtien kokoelmasta XML-elementtimetsän. Tällä voidaan koota XML-dokumenttia useammalta tauluriviltä löytyvistä XML-elementeistä. XMLATTRIBUTES: generoi SQL-kyselyn palauttamat tiedot XML elementin attribuuteiksi XMLCOMMENT: generoi XML-kommentin XMLCONCAT: konkatenoi kaksi tai useampia XML-fragmenttia yhdeksi merkkijonoksi XMLELEMENT: generoi XML-elementin valitun solmun lapsielementiksi muodossa <elementname>value<elementname> XMLFOREST: generoi relationaalisesta arvojoukosta XML-elementtien metsä -listan ("forest") XMLNAMESPACES: määrittää XML-elementeille käytettävät nimiavaruudet XMLPARSE: generoi merkkijonosta XML-fragmentin tehden sille XML-syntaksitarkistuksen, mutta ei validoi tätä. XMLPI: generoi XML-dokumenttiin sen käsittelykohjeen (processing instruction) XMLSERIALIZE: serialisoi XML-dokumentin merkkijonoksi Esimerkki 1: (sovitettu lähteestä [Ste04]) Seuraava SQLXML-lauseke XMLELEMENT (NAME asiakas, XMLELEMENT (NAME asno, Customers.CustomerID), XMLELEMENT (NAME nimi, Customers.CustomerName) voisi tuottaa yhdestä Customers-taulun rivin sarakkeista CustomerID ja CustomerName seuraavan asiakas-elementin: <asiakas> <asno>wilmk<asno> <nimi>wilman Kala<nimi> <asiakas> SQL:2003-standardi on XML-käsittelyn osalta vielä kovin keskeneräinen ja sen kehittämistä jatketaan. Seuraava SQLXML versio (2006?) tuntee jo XQuery-kyselykielen ja määrittää osin tätä hyödyntäviä funktioita, joita ovat alustavasti seuraavat [sqlp14]: XMLTABLE: määrittää relationaalisen näkymän XML-dokumenteista? XMLTEXT: XMLCAST: generoi XQueryn tuottamasta yhden tekstisolmun tuloksesta XML-arvon. määrittää conversion XML-tyypistä merkkijonoksi tai merkkijonon XMLtyypiksi XMLDOCUMENT: generoi XQuery-kyselyn tuloksesta XML-dokumentin XMLEXISTS: testaa onko XQuery-kyselyn tulos ei-tyhjä XMLITERATE: XQuery-tuloksen läpikäynti tauluna XMLVALIDATE: validoi XML-dokumentin XMLQUERY: suorittaa XQuery-kyselyn. SQL-standardi ei perinteisesti ota kantaa talletusrakenteisiin, joten XML-tietotyypin talletus- (esimerkiksi mahdollinen shredding) ja indeksointiratkaisut ovat DBMS-järjestelmän toimittajan päätettävissä. SQL:2003-standardi ei ota vielä kantaa myöskään XML-dokumentin osien päivitykseen eikä XML-dokumentin näyttämiseen SQL-näkymänä. XML-dokumentin tulee olla hyvin muodostettu (well-formed). XML-dokumentin rakenne voidaan määrittää XML Scheman kuvauksena ja dokumenttia, joka noudattaa osoittamaansa

HELIA TIKO-05 XML ja tietokannat 4 ( 23) XML Schemaa sanotaan validiksi (valid). SQL:2003:n XML-tietotyyppi takaa, että XMLsarakkeeseen talletettu dokumentti on hyvin muodostettu. SQL-tunnusten ja XML-tunnusten muodostussäännöt ja merkistöt eivät ole täysin vastaavat joten SQL:2003-standardi määrittää tunnusten kuvautumisia varten kuvautumissäännöt (mapping). XML Schema on SQL-kieltä ilmaisuvoimaisempi tietotyyppien sallittujen arvojen määrityksessä. Arvojen yhteensopivuus vastaavien SQL-tietotyyppien arvojen kanssa on rajattavissa XML Scheman facet-määrityksillä ja sqlxml-nimiavaruuden annotaatioilla. SQL:2003 määrittää myös miten SQL-taulu kuvautuu XML-dokumentiksi ja miten sen metadata kuvautuu XML Schemaksi. XML Scheman sijainti määritetään URL-määrellä, joka voi paikallinen tai Internet-osoite. SQL-standardi ei kuitenkaan vielä ota kantaa siihen miten XML Schema toteutetaan paikallisesti tietokannassa. XQuery Varsinainen XML-standardien kehitys tapahtuu avoimena W3C:n toimesta ja tämä ei ota kantaa näiden tietokantatoteutuksiin, mutta keskeiset tietokantatoimittajat ovat alkaneet seuraamaan tätä kehitystä tuotteissaan. W3C:n XML Scheman ja XML-kyselykielen XQuery kehityksessä ovat mukana IBM, Oracle ja Microsoft ja viimeksimainitut ovat tehneet XQuery:stä jo uusiin DBMS-versioihinsa omat toteutuksensa. XQuery standardi ei sinänsä edellytä tietokantatoteutusta ja sitä toteuttavia editoreja on useita. Tunnetuimpia toteutuksia on Altovan XMLSpy n XQuery. XQuery-kyselyn ns. FLWOR-rakenne (for-let-where-order by-return) muistuttaa SQL:n SELECT-lausetta, mutta sen toiminta perustuu navigointiin. Kyselyn tulos rakennetaan RETURN-määreellä, jossa voidaan kuvata XML-fragmentti. Ohitamme tässä yhteydessä XQueryn tarkemman esittelyn, mutta jonkin kuvan kielestä antaa seuraava esimerkki 2. Esimerkki 2: (sovitettu lähteestä [Ste04]) Edellä esitellyn esimerkin 1 tulos voitaisiin tuottaa seuraavalla XQuery-kyselyllä: FOR $c IN doc( Customers )rowcustomers WHERE $ccustomerid = WILMK RETURN <asiakas> <asno>($ccustomerid)<asno> <nimi>($ccustomername)<nimi> <asiakas> Tässä muuttuja $c on eräänlainen elementtikursori, joka käy läpi IN-määreen elementtijoukon ja josta käsin voidaan polkulausekkeilla osoittaa ja poimia RETURN-osaan muita elementtejä ja näiden attribuutteja.

HELIA TIKO-05 XML ja tietokannat 5 ( 23) Server-side XML-toteutuksia Tarkastelemme seuraavassa DB2 UDB 8.2:n, Microsoft SQL Server 2005:n ja Oracle 10gR2:n XML-toteutuksia. Verrattuna SQL-standardin näiden toteutukset poikkeavat melkoisesti toisistaan. Keskeinen suunnitteluongelma on XML-sarakkeen talletusratkaisu: CLOB vai SQL-tauluihin purettu toteutus. XML document CLOB XML column CLOB value XML column shredding into nested tables side tables kuva 2. XML-sarakkeen CLOB tai shredded toteutus CLOB-pohjaiset ratkaisut mahdollistavat XML-dokumentin lukemisen alkuperäisessä asussa (DOM fidelity), kun taas koostettaessa dokumenttia uudelleen tauluista menetetään tietosisällön kannalta merkityksettämiä whitespace -merkkejä, jotka voivat vaikuttaa dokumentin ulkoasuun. XML Scheman paikallinen talletus ja XML-sarakkeen vahva tyyppitystapa XML Schema - sidonnalla on kaikissa erilainen. Kaikki tarkastellut DBMS-järjestelmät tarjoavat mahdollisuuksia XML-dokumentin indeksointeihin ja dokumentin osien päivityksiin ainakin shredded-ratkaisuissa. SQLXML-julkaisufunktioiden toteutuksissa on eroja. SQL Server käyttää näiden asemesta omaa SELECT FOR XML ratkaisuaan.

HELIA TIKO-05 XML ja tietokannat 6 ( 23) DB2 XML Extender ja Information Integration (lähde [db2ext]) DB2:n XML Extender on ensimmäisiä XML-tiedon relaatiotietokantatoteutuksia. Siinä XML-dokumentti voidaan toteuttaa SQL-taulun joko XMLVARCHAR-tyyppisessä (user-defined) UDT-sarakkeessa (pituus korkeintaan 32672 tavua), XMLCLOB-tyyppisessä UDT-sarakkeessa (pituus korkeintaan 2 GB) tai XMLFILE viittauksen osoittamassa ulkoisessa XML-tiedostossa. XML-sarakkeen elementit ja attribuutit voidaan toteuttaa indeksoitavissa aputauluissa (side table), joihin mäppäys tapahtuu Document Access Definition (DAD) kuvaustiedostojen perusteella. DAD-kuvausten perusteella XML-dokumentti voidaan myös tuottaa uudelleen aputauluista. XML-dokumenttien schemat ovat aikaisemmin perustuneet DTD_REF-kuvaustauluun talletettuihin DTD-määrityksiin, mutta nykyisin DB2 XML Extender tukee myös XML Scheman käyttöä. XML Schema talletetaan paikalliseen tiedostoon tietokannan ulkopuolelle ja rekisteröidään DBMS:n käyttöön XML-muotoisella DAD-tiedostolla. XML-dokumentin osia voidaan päivttää Extenderin valmiilla talletetuilla proseduureilla. Talletetussa XML-dokumentissa voidaan navigoida XPath-viittauksilla, XML-dokumentista voidaan tuottaa uusia XML-dokumentteja XLST-muunnoksilla. DB2 XML Extender ei vielä versiossa 8.2 ainakaan dokumentoi SQL-standardin SQLXMLmäärityksiä. Lähteen [Ste04] mukaan IBM tulee toteuttamaan SQLXML:n mukaisen natiivin XML-tietotyypin ja jukaisufunktiot, kun SQLXML-standardi on valmiimpi. Osa SQLXML funktioista on toteutettu funktiolla XML2CLOB ja talletetuilla proseduureilla. DB2 Information Integrator (II) on IBM:n middleware ohjelmisto, jolla voidaan toteuttaa heterogeeninen hajautettu kyselytietokanta (fedarated database), jonka data source jäseninä voi olla esimerkiksi DB2-, Oracle- ja SQL Server instansseja. Integrator mahdollistaa myös XML Wrapperin käytön, jolla voidaan käsitellä XML-dokumenttia relationaalisesti NICKNAME-rakenteilla (vertaa SQL Serverin OPENXML-funktio).

HELIA TIKO-05 XML ja tietokannat 7 ( 23) SQL Server 2005 (ks. DBTech Pro XML and Databases workshop Heliassa 20.4.2005) Microsoft on toteuttanut SQL Server 2005:ssä XML-tietotyypin XML-nimisenä. SQLXMLfunktioita Microsoft ei kuitenkaan ole toteuttanut, vaan SQL-taulujen tiedon julkaisu XMLmuodossa ja XML-näkymien kautta toteutetaan Microsoftin omalla SELECT-lauseiden FOR XML-optioilla. SELECT dname as "Name", loc as "Location", (SELECT empno as "employeenumber", (SELECT ename as "Name", job as "Title", mgr as "Manager", CONVERT(CHAR(10),hiredate,20) as "StartDate", sal as "Salary", comm as "Commission" FROM Emp e -- <e>... <e> WHERE Employee.empno = e.empno FOR XML AUTO, TYPE, ELEMENTS) FROM Emp Employee WHERE Employee.deptno = Department.deptno FOR XML AUTO, TYPE, ROOT('EmployeeList')) FROM Dept Department FOR XML AUTO, ELEMENTS -- ~ XMLForest(...) -- ~ XMLAgg(XMLElement("Employee", XMLAttributes ("employeenumber"))) -- ~ XMLElement("EmployeeList" -- ~ XMLElement("Department") GO Kuva 3. XML-dokumentin generointi sisäkkäisillä SELECT FOR XML -lauseilla Microsoft on toteuttanut myös XML-dokumentin kuvautuvuuden SQL-näkymäksi OPENSQLfunktiolla. CREATE TABLE PublishedMedia (ISBN int PRIMARY KEY, Title varchar(50), Publisher varchar(50)) GO CREATE PROCEDURE [dbo].[xml_insert] (@doc NTEXT) AS BEGIN declare @idoc int -- Create the internal representation exec sp_xml_preparedocument @idoc OUTPUT, @doc -- SELECT statement using OPENXML rowset provider INSERT INTO PublishedMedia SELECT * FROM OPENXML (@idoc, 'BooksBook', 1) WITH (ISBN int '@ISBN', Title varchar(50) '@Title', Publisher varchar(50) '@Publisher') -- Remove the internal representation EXEC sp_xml_removedocument @idoc END GO Kuva 4. OPENXML-esimerkki

HELIA TIKO-05 XML ja tietokannat 8 ( 23) XML-tietotyypin validointi perustuu tietokantaan SCHEMACOLLETION-rakenteisiin tallettuihin XML Schemoihin. table id strongly typed XML column: col XML(schemaCollection) XML documents in the table: <doc1 xmlns= <doc1> <doc1 xmlns= <doc1> <docn xmlns= <docn> schemacollection <schema <schema> schema versions or different schemas <scheman <scheman> Kuva 5. Vahvasti tyypitetty XML-sarake XML-dokumentin osia voidaan päivittää XML-sarakkeiden XML DML kielilaajennuksen modify-metodeilla ja dokumenttia voidaan tutkia XML-sarakkeiden query-metodilla, jossa kyselylause kirjoitetaan XQuery-kielellä. Microsoftin XQuery-toteutuksessa ei ole XQueryn LET-määrettä.

HELIA TIKO-05 XML ja tietokannat 9 ( 23) Oracle XML DB (ks. DBTech Pro XML and Databases workshop Heliassa 21.4.2005 http:myy.helia.fi~dbmsseminarsdbtechprows4day2oracle10xmldb.pdf) Oraclen XML DB on monipuolisin ja lähinnä SQL-standardin SQLXML-osaa oleva XMLtoteutus. XML-dokumentti voidaan toteuttaa XMLtype-tyyppisessä SQL-taulun sarakkeessa. Dokumenttien validointi perustuu XML Schema-määrityksiin, jotka on talletettu XML DB:n repositoryyn. XML DB:n repository on kannassa toteutettu tiedostojärjestelmä, jota voidaan käsitellä XML DB:n HTTP-palvelujen kautta WebDAV-protokollalla tai XML DB:n FTPpalvelun kautta. Kuva 6. Oracle XML DB:n talletusratkaisut ja saantitavat lähde: [Ada05] Oracle XML DB Developer s Guide, 10g Release 2 XML-sarakkeen talletusratkaisu voi perustua CLOB-pohjaiseen toteutukseen tai Oraclen Nested Tables rakenteeksi kutsumaan aputaulu-pohjaiseen toteutukseen (native structured XML storage). Nested Tables ratkaisu voidaan generoida XML Schemaan lisättyjen annotaatioden ohjaamana.

HELIA TIKO-05 XML ja tietokannat 10 ( 23) Nested Tables toteutuksessa voidaan hyödyntää indeksejä ja päivittää dokumentin osia XPath-pohjaisesti. DBMS muuntaa käsittelyn SQL-pohjaiseksi ja käyttää suoritussuunnitelman laskemiseen SQL-optimoijaa. Oraclen toteutuksessa XML-dokumenttien eheyttä voidaan valvoa UNIQUE ja FOREIGN KEY rajoitteilla. Foreign Key määreet voivat viitata myös SQL-tauluihin. Seuraavat esimerkit on poimittu Oraclen XML-demosta, missä purchaseorder-taulu on XMLtype-tyyppiä eli se on luotu komennolla CREATE TABLE purchaseorder OF XMLType ; (ilman sarakemäärityksiä) ja sinne talletetaan ostotilausten XML-dokumentteja. ALTER TABLE purchaseorder ADD CONSTRAINT reference_is_unique UNIQUE (XMLDATA."Reference") Tämä määrittää dokumenttien Reference-elementit yksikäsitteisiksi siten ettei samaa arvoa voi esiintyä missään muussa taulun dokumentissa! ALTER TABLE purchaseorder ADD CONSTRAINT user_is_valid FOREIGN KEY (XMLDATA."User") REFERENCES scott.emp(ename) Tämä määrittää User-elementin arvot viiteavaimiksi, joiden arvojen täytyy löytyä jostakin Scott-käyttäjän EMP-taulun rivin ename-sarakkeesta. Oracle 10gR2 toteuttaa kaikki SQLXML-standardin julkaisufunktiot (myös lähteen [sqlp14] alustavat laajennukset) ja on toteuttanut seuraavat laajennukset: XMLSEQUENCE: palauttaa XMLtype-kokoelman, jota voidaan käsitellä SELECT-lauseessa tauluna. XMLROOT: luo parametrina saamastaan XML-elementistä XML-dokumentti-instanssin, jossa XML-elementin eteen on lisätty XML-prolog. XML-dokumentin käsittelyyn Oracle on toteuttanut seuraavat SQLXML-funktiot: existsnode: palauttaa arvon 1 (true), jos XML-documentista löytyy parametrina annettu XPath-lausekkeen osoittama solmu, ja muuten 0 (false). extract: palauttaa XPath-lausekkeen osoittaman solmun XML-dokumenttina tai usean solmun joukon XML-fragmenttina. extractvalue: poimii Xpath-lausekkeen osoittaman solmun tekstiarvon SQL:n vastaavaan tietotyyppiin muunnettuna. updatexml: päivittää uudet arvot parametrina annettujen XPath-lausekkeiden osoittamille solmuille XML-dokumentissa. Oracle on lisäksi toteuttanut XML-dokumenttien käsittelyyn myös erillisiä PLSQL paketteja, joista esimerkiksi DBMS-SQLGEN on tarkoitettu XML-dokumenttien generointiin ja DBMS_XDB käsittelee XML DB:n repositoria. Oraclen versiossa 10gR2 on myös XQuery-kielen tuki itsenäisenä XQUERY-komentona sekä SQL-lauseissa käytettävänä SQLXML-standardin (luonnoksen) mukaisena XMLQueryfunktiona. Oracle on toteuttanut myös SQLXML-standardin (luonnoksen) mukaisen

HELIA TIKO-05 XML ja tietokannat 11 ( 23) XMLTable-funktion, jolla XMLQueryn tulos muunnetaan virtuaaliseen SQL-tauluun ja tätä voidaan edelleen käyttää SQL-lauseissa taululausekkeena. Oracle XML DB toteuttaa XML SQL duaalisuuden (XMLSQL duality) periaatteen eli XML-dokumentteihin voidaan luoda SQL-näkymät ja SQL-tauluihin voidaan luoda XMLnäkymät. Näin XQuery-kyselyjä voidaan kohdistaa myös SQL-tauluihin. Oraclen XQuery-toteutuksissa on käytettävissä seuraavat nimiavaruudet: lähde: Oracle XML DB Developer s Guide, taulukko 17-1 Näistä ora-nimiavaruudesta löytyy käteviä Oracle funktiolaajennuksia, joista ora:view toteuttaa SQL-taululle automaattisesti XML-näkymän siten että riveistä tulee ROWelementtejä ja sarakkeista elementtejä, joiden nimet kirjoitetaan isoilla kirjaimilla. XQUERY on uusi SQLPlus-komento. Se ei toimi vanhoilla SQLPlus-versioilla (esim 9.2) eikä JDBC-yhteyksillä. Seuraava Oracle 10gR2:n isqlplus:lla ajettu XQUERY-esimerkki listaa Scott-käyttäjän EMP-taulusta kaikki osaston 10 työntekijät: SET LONG 1000 SET LINESIZE 200 XQUERY for $e in ora:view("emp") where $erowdeptno= 10 return $e Result Sequence <ROW><EMPNO>9901<EMPNO><ENAME>DRAKE<ENAME><JOB>MANAGER<JOB><MGR>7839<MGR><HIREDATE>1981-09-01<HIREDATE><SAL>4000<SAL><COMM>0<COMM><DEPTNO>10<DEPTNO><ROW> <ROW><EMPNO>7782<EMPNO><ENAME>CLARK<ENAME><JOB>MANAGER<JOB><MGR>7839<MGR><HIREDATE>1981-06-09<HIREDATE><SAL>2450<SAL><DEPTNO>10<DEPTNO><ROW> <ROW><EMPNO>7839<EMPNO><ENAME>KING<ENAME><JOB>PRESIDENT<JOB><HIREDATE>1981-11- 17<HIREDATE><SAL>5000<SAL><DEPTNO>10<DEPTNO><ROW> <ROW><EMPNO>7934<EMPNO><ENAME>MILLER<ENAME><JOB>CLERK<JOB><MGR>7782<MGR><HIREDATE>1982-01- 23<HIREDATE><SAL>1300<SAL><DEPTNO>10<DEPTNO><ROW>

HELIA TIKO-05 XML ja tietokannat 12 ( 23) ja seuraava kysely sarakkeiden empno, ename ja sal tiedot niistä, joiden palkka on yli 3000 dollaria XQUERY for $e in ora:view("emp") where $erowsal > 3000 return <emp> {$erowempno}{$erowename}{$erowsal} <emp> XMLQueryEsimerkkinä XMLQuery-funktion käytöstä tarkastelemme kyselyä, joka listaa kaikkien osastojen tiedot DEPT-taulusta SELECT XMLQuery(' for $d in ora:view("dept") order by $drowdeptno return $d' returning content) AS output FROM DUAL OUTPUT <ROW><DEPTNO>10<DEPTNO><DNAME>ACCOUNTING<DNAME><LOC>NEW YORK<LOC><ROW> <ROW><DEPTNO>20<DEPTNO><D NAME>RESEARCH<DNAME><LOC>DALLAS<LOC><ROW> <ROW><DEPTNO>30<DEPTNO><DNAME>SALES<DNAME><LOC>CHICAGO <LOC><ROW> <ROW><DEPTNO>40<DEPTNO><DNAME>OPERATIONS<DNAME><LOC>BOSTON<LOC><ROW> DUAL on Oraclen virtuaalinen yhden rivin taulu, jota hyödynnetään yleisesti pelkkiä funktioita tai systeemitietoja kuten esimerkiksi CURRENT_DATE listattaessa. Seuraava XMLQuery-liitosesimerkki listaa niiden työntekijöiden nimen ja osastonimen niiltä, joiden palkka on yli 3000 dollaria, tehden jokaiselle työntekijälle oman <emp>-elementin ja tulossarakkeista elementin attribuutit: SELECT XMLQuery(' for $e in ora:view("emp"), $d in ora:view("dept") where $erowdeptno = $drowdeptno and $erowsal>3000 order by $erowempno return <emp ename="{$erowename}" dept="{$drowdname}">' returning content) AS output FROM DUAL OUTPUT <emp ename="king" dept="accounting"><emp><emp ename="drake" dept="accounting"><emp>

HELIA TIKO-05 XML ja tietokannat 13 ( 23) SQL-taulujen XML-näkymän kautta tai Nested Tables tauluihin talletettuihin XMLdokumentteihin kohdistuvat XPath- ja XQuery-kyselyt kääntyvät Oracle XML DB:n sisäisessä esitysmuodossa SQL-lauseiksi joille Oraclen optimoija ratkaisee lopullisen suoritussuunnitelman. Jos edellinen esimerkki ajetaan AUTOTRACE-tilassa, saadaan tästä seuraava suoritussuunnitelmaraportti: Seuraava esimerkki näyttää miten XMLQuery voi käsitellä suoraan XML-dokumenttitiedostoja (lähde: Oracle XML DB Developer s Guiden [Ada05] XQuerya esittelevä luku 17). Luodaan ensin XML DB:n repositoryn hakemistoon public XML-dokumentit emps.xml ja depts.xml: DECLARE res BOOLEAN; empsxmlstring VARCHAR2(300):= '<?xml version="1.0"?> <emps> <emp empno="1" deptno="10" ename="john" salary="21000"> <emp empno="2" deptno="10" ename="jack" salary="310000"> <emp empno="3" deptno="20" ename="jill" salary="100001"> <emps>'; deptsxmlstring VARCHAR2(300):= '<?xml version="1.0"?> <depts> <dept deptno="10" dname="administration"> <dept deptno="20" dname="marketing"> <dept deptno="30" dname="purchasing"> <depts>'; BEGIN res := DBMS_XDB.createResource('publicemps.xml', empsxmlstring); res := DBMS_XDB.createResource('publicdepts.xml', deptsxmlstring); END;

HELIA TIKO-05 XML ja tietokannat 14 ( 23) Seuraavassa SELECT-lauseen XMLQuery-funktiolla tulostetaan XQuery-kyselyn tulos. Kysely hakee emps.xml-dokumentista työntekijät, joiden vuosipalkka on yli 100000 dollaria, ja tulostaa näiden nimet sekä liitoksella haetun osaston nimen depts.xml-dokumentista: SELECT XMLQuery('for $e in doc("publicemps.xml")empsemp let $d := doc("publicdepts.xml")dept[@deptno = $e@deptno]@dname where $e@salary > 100000 order by $e@empno return <emp ename="{$e@ename}" dept="{$d}">' RETURNING CONTENT) FROM DUAL; XMLQUERY('FOR$EINDOC("PUBLICEMPS.XML")EMPSEMPLET$D:=DOC("PUBLICDEPTS.XML") -------------------------------------------------------------------------------- <emp ename="jack" dept="administration"> <emp ename="jill" dept="marketing">

HELIA TIKO-05 XML ja tietokannat 15 ( 23) XSL XSLT Oracle XML DB tarjoaa infrastruktuurin myös XSL XSLT-käsittelyyn. Oracle XML DB tarjoaa 3 tapaa käyttää XSL-prosessointia: SQL-funktion XMLtrasform XMLType:n metodin transform( ) PLSQL paketin DBMS_XSLPROCESSOR Nämä kaikki odottavat sekä muokattavan XML-dokumentin että muokkausta ohjaavan XSLtyylisivun olevan XMLType-objekteja jossakin XML DB:n taulussa tai XML-dokumentteina XML DB:n repositorissa. Nämä tietokantaan talletetut dokumentit voivat olla täysin samanlaisia kuin ne olisivat tavallisessa tiedostomuodossa. Muunnoksen tuloksen oletetaan myös olevan validi XHTML-dokumentti eli sekä validi XML- että validi HTML-dokumentti. Muunnoskäsittely tapahtuu tietokantapalvelimessa optimoituna. XML Schema -pohjaisten dokumenttien osalta XML DB voi luottaa näiden validisuuteen ja käsiteltävä virtuaalinen DOM-puu voidaan instantioida muistiin "lazy load"-pohjaisesti vain sitä mukaa kuin tarvitaan. Tämä säästää sekä tarvittavaa muistia että prosessointityötä. CREATE TABLE xml_tab id number, xmlcol XMLType) XMLType COLUMN xmlcol XMLSCHEMA"<url>" ELEMENT "<elementname>" DBMS_XMLSCHEMA.RegisterSchema url XML Schema doc xml_tab id xmlcol INSERT XML doc CREATE TABLE xsl_tab id number, stylesheet XMLType) xsl _tab id stylesheet 1 INSERT SELECT XMLTransform( X.xmlcol, (SELECT stylesheet FROM xsl_tab WHERE id = 1)).getStringVal( ) AS result FROM xml_tab X XSL doc result XML doc Kuva xslt. Skenaario XML Schema -pohjaisen dokumentin XSLT-käsitelystä * * *

HELIA TIKO-05 XML ja tietokannat 16 ( 23) Lähteet: [Ste04] Steegmans et al: XML for DB2 Information Integration, IBM Redbooks, 2004 [db2ext] DB2 XML Extender Administration and Programming, Version 8.2, IBM, 2004 [Ada05] Drew Adams: Oracle XML DB Developer s Guide, 10g Release 2, Oracle, 2005 [sqlp14] SQL-200n Part 14 XML-Related Specifications (SQLXML), draft 2005-11-04 [sqlx05] http:www.sqlx.org (6.12.2005)

HELIA TIKO-05 XML ja tietokannat 17 ( 23) Harjoitukset Info9-palvelimen TUX2-instanssiin on toteutettu Oraclen XML-demon rakenteita ja ICT03- käyttäjille on järjestetty riittävät XML-harjoituksen käyttöoikeudet. XQueryn tuki on toteutettu vasta Oracle 10gR2:sta alkaen, joten sitä ei nyt kokeilla. Harjoitus 1. Käynnistä isqlplus istunto tunnuksellasi selaimella osoitteesta http:info9.helia.fi:7780isqlplus Kokeile ajaa seuraavat komennot. Selitä mitä tapahtuu, miksi ja miten korjaisit. Huom: Oracle 9.2 edellyttää, että XML-dokumentti muunnetaan XMLTYPE-funktiolla ensin XMLType-tyyppiseksi ennen kuin se voidaan kirjata XMLType-tyyppiseen sarakkeeseen. Oracle 10gR2:sta lähtien XMLTYPE-funktion käyttö ei ole enää tarpeen. CREATE TABLE mytab ( id INT PRIMARY KEY, xml XMLtype ) ; INSERT INTO mytab (id, xml) VALUES (1, XMLTYPE('<?xml version="1.0"?><blah>')); INSERT INTO mytab (id, xml) VALUES (2, XMLTYPE('<?xml version="1.0"?><blah><blah>')); INSERT INTO mytab (id, xml) VALUES (3, XMLTYPE('<?xml version="1.0"?><blah>')); INSERT INTO mytab (id, xml) VALUES (4, XMLTYPE('<hello>')); INSERT INTO mytab (id, xml) VALUES (5, XMLTYPE('<?xml version="1.0"?><hello>hello world!<hello>')); INSERT INTO mytab (id, xml) VALUES (6, XMLTYPE('<?xml version="1.0"?><t1>liirum<t2><t1>laarum<t2>')); INSERT INTO mytab (id, xml) VALUES (7, XMLTYPE('<?xml version="1.0"?><t1>laarum<t1><t2>liirum<t2>')); INSERT INTO mytab (id, xml) VALUES (8, XMLTYPE('<t1>liirum<t2>laarum<t2><t1>')); SELECT * FROM mytab; ROLLBACK;

HELIA TIKO-05 XML ja tietokannat 18 ( 23) Harjoitus 2. Kokeile myös seuraavia komentoja. Miten nämä eroavat harjoituksen 1 komennoista? CREATE TABLE myxml OF XMLtype ; INSERT INTO myxml VALUES (XMLTYPE('<?xml version="1.0"?><blah>')); INSERT INTO myxml VALUES (XMLTYPE('<?xml version="1.0"?><blah>')); INSERT INTO myxml VALUES (XMLTYPE('<hello>')); INSERT INTO myxml VALUES (XMLTYPE('<?xml version="1.0"?><hello>hello world!<hello>')); INSERT INTO myxml VALUES (XMLTYPE('<?xml version="1.0"?> <t1>liirum<t2><t1>laarum<t2>')); SELECT * FROM myxml; ROLLBACK; Harjoitus 3. CLOB ja XMType sarakkeiden suoritusaikavertailu. Seuraava testi on poimittu Sean Dillonin Oracle Magazine MarchApril 2005 artikkelista Which Storage XML? -- XML as a CLOB drop table xmlclobs; drop table xmldocs; CREATE TABLE xmlclobs ( xmlclobs CLOB ); CREATE TABLE xmldocs ( x XMLtype ); set serveroutput on; DECLARE l_start timestamp; l_elapsed interval day to second(4); BEGIN l_start := systimestamp; for i in 1.. 1000 loop INSERT INTO xmlclobs VALUES ('<?xml version="1.0"?><blah>'); end loop; l_elapsed := systimestamp - l_start; dbms_output.put_line('clob:' to_char(l_elapsed)); l_start := systimestamp; for i in 1.. 1000 loop insert into xmldocs values (xmltype( '<?xmlversion="1.0"?> <blah>'));

HELIA TIKO-05 XML ja tietokannat 19 ( 23) end loop; l_elapsed := systimestamp - l_start; dbms_output.put_line('xmltype:' to_char(l_elapsed)); END; -- XML Using Object-Relational Storage -- Tähän tarvitaan ALTER SESSION oikeus alter session Set events='31098 trace name context forever' -- talletetaan XML Schema People.xsd XML DB:n repositoryyn DECLARE res BOOLEAN; schemastring VARCHAR2(1000):= '<?xml version="1.0"?> <xsd:schema xmlns:xsd="http:www.w3.org2001xmlschema" xmlns:xsi="http:www.w3.org2001xmlschema-instance"> <xsd:element name="person" type="persontype"> <xsd:complextype name="persontype"> <xsd:sequence> <xsd:element name="firstname"> <xsd:simpletype> <xsd:restriction base="xsd:string"> <xsd:maxlength value="30"> <xsd:restriction> <xsd:simpletype> <xsd:element> <xsd:element name="lastname"> <xsd:simpletype> <xsd:restriction base="xsd:string"> <xsd:maxlength value="50"> <xsd:restriction> <xsd:simpletype> <xsd:element> <xsd:element name="dateofbirth" type="xsd:datetime"> <xsd:sequence> <xsd:complextype> <xsd:schema>'; BEGIN res := DBMS_XDB.createResource('publicPeople.xsd', schemastring); END; -- rekisteröidään XML Schema: BEGIN DBMS_XMLSCHEMA.registerSchema ('http:localhost:8080publicpeople.xsd', xdburitype('publicpeople.xsd').getclob(), TRUE,TRUE,FALSE,TRUE ); End;

HELIA TIKO-05 XML ja tietokannat 20 ( 23) -- tehdään uudet taulut drop table xmlclobs; drop table xmldocs; -- CREATE TABLE xmlclobs ( xmlclobs XMLtype ); -- CREATE TABLE xmldocs OF XMLtype xmlschema "http:localhost:8080publicpeople.xsd" element "Person"; -- mitataan 1000 dokumentin lisäyksen aika set serveroutput on; DECLARE l_xml xmltype; l_start timestamp; l_elapsed interval day to second(4); BEGIN l_xml := xmltype( '<?xml version="1.0"?> <Person xmlns:xsi="http:www.w3.org2001xmlschema-instance" xsi:nonamespaceschemalocation= "http:localhost:8080publicpeople.xsd"> <FirstName>Sean<FirstName> <LastName>Dillon<LastName> <DateOfBirth>1971-05-18<DateOfBirth> <Person>'); -- l_start := systimestamp; for i in 1.. 1000 loop INSERT INTO xmlclobs VALUES ( l_xml ); end loop; l_elapsed := systimestamp - l_start; dbms_output.put_line('xmlclobs:' to_char(l_elapsed)); -- l_start := systimestamp; for i in 1.. 1000 loop INSERT INTO xmldocs VALUES ( l_xml ); end loop; l_elapsed := systimestamp - l_start; dbms_output.put_line('xmldocs:' to_char(l_elapsed)); END; Tässä nähdään myös esimerkki Oraclen PLSQL-kielen ohjelmointiominaisuuksista. Harjoitus 4. Testataan XML Scheman vaikutusta lisättäessä XML-dokumentteja seuraavilla komennoille edellisen tehtävän tauluun xmldocs: -- tyhjennetään taulu ensin DELETE FROM xmldocs;

HELIA TIKO-05 XML ja tietokannat 21 ( 23) COMMIT; -- kokeillaan lisäyksiä INSERT INTO xmldocs VALUES( '<?xml version="1.0"?> <Person xmlns:xsi="http:www.w3.org2001xmlschema-instance" xsi:nonamespaceschemalocation= "http:localhost:8080publicpeople.xsd"> <FirstName>Mickey<FirstName> <LastName>Mouse<LastName> <DateOfBirth>1930-01-01<DateOfBirth> <Person>') INSERT INTO xmldocs VALUES( '<?xml version="1.0"?> <Person xmlns:xsi="http:www.w3.org2001xmlschema-instance" xsi:nonamespaceschemalocation= "http:localhost:8080publicpeople.xsd"> <FirstName>Minny<FirstName> <LastName>Mouse<LastName> <DateOfBirth>1935-05-01<DateOfBirth> <Person>') INSERT INTO xmldocs VALUES( '<?xml version="1.0"?> <Person xmlns:xsi="http:www.w3.org2001xmlschema-instance" xsi:nonamespaceschemalocation= "http:localhost:8080publicpeople.xsd"> <FirstName>Sean<FirstName> <LastName>Connery<LastName> <DateOfBirth>1940-13-18<DateOfBirth> <Person>') INSERT INTO xmldocs VALUES( '<?xml version="1.0"?> <Person xmlns:xsi="http:www.w3.org2001xmlschema-instance" xsi:nonamespaceschemalocation= "http:localhost:8080publicpeople.xsd"> <LastName>Connery<LastName> <FirstName>Sean<FirstName> <DOB>1940-05-18<DOB> <Person>') INSERT INTO xmldocs VALUES( '<?xml version="1.0"?> <Person xmlns:xsi="http:www.w3.org2001xmlschema-instance" xsi:nonamespaceschemalocation= "http:localhost:8080publicpeople.xsd"> <FirstName>Donald<FirstName> <LastName>Duck<LastName> <BirthPlace>Hollywood<BirthPlace> <DateOfBirth>1930-12-24<DateOfBirth> <Person>')

HELIA TIKO-05 XML ja tietokannat 22 ( 23) Laadi vielä yksi komento, jolla lisäät jonkun uuden henkilön tiedot xmldocs-tauluun.

HELIA TIKO-05 XML ja tietokannat 23 ( 23) Harjoitus 5. Kokeillaan XPath-kyselyjä ja päivityksiä: -- onko tällaista dokumenttia? SELECT existsnode(value(x), 'Person[FirstName="Mickey"]') FROM xmldocs X -- keitä nämä ovat? SELECT extract(object_value,'personfirstname') FROM xmldocs WHERE existsnode(object_value,'person[lastname="mouse"]') = 1 -- päivitetään Mickeyn syntymäpäivä UPDATE xmldocs SET OBJECT_VALUE = updatexml(object_value,'persondateofbirthtext()','1930-12-08') WHERE existsnode(object_value,'person[firstname="mickey"]') = 1 Huom. OBJECT_VALUE on pseudosarake (pseudocolumn) jota voidaan käyttää (oliopohjaisen) XMLtype taulun aliasnimenä Oracle 10gR2:ssa korvaten aikaisemman value(x) -aliasnimen. Harjoitus 6. XMLSQL Duality luodaan SQL-näkymä xmldocs-taulun XML-dokumentteihin CREATE OR REPLACE VIEW People_View (fname, lname, DOB) AS SELECT extractvalue(value(p),'personfirstname'), extractvalue(value(p),'personlastname'), extractvalue(value(p),'persondateofbirth') FROM xmldocs p DESCRIBE People_View SELECT * FROM People_View Harjoitus 7. *** Sovella harjoituksia 3 ja 4 siten, että kopioit XML Scheman, lisäät siihen ID-elementin (kokonaislukutyyppiä), lisäät ID-elementit harjoituksen 4 XML-dokumentteihin ja näille uuden taulun, jossa sovelletaan muokkaamaasi XML Schemaa ja johon määrität ID-elementin yksikäsitteiseksi (unique) koko taulussa. Laadi myös yksikäsitteisyyden testaava tupladokumentti.