Top Banner
HELIA – TIKO-05 XML ja tietokannat 1 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 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 CLOB column CLOB value shredding into relational tables XML document CLOB column CLOB value shredding into relational tables Application Kuva 1 Ohjelmallinen talletus CLOB-sarakkeeseen tai ositus relaationaalisiin tauluihin
23

XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

Jun 11, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

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

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.

XMLdocument

CLOBcolumn

CLOBvalue

shredding into relational tables

ApplicationXMLdocument

CLOBcolumn

CLOBvalue

shredding into relational tables

Application

Kuva 1 Ohjelmallinen talletus CLOB-sarakkeeseen tai ositus relaationaalisiin tauluihin

Page 2: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 2 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 Varsin pitkälle ja vähällä ohjelmoinnilla nämä relaatiotietokantatietojen ja XML-dokumenttien sovellusohjelmissa tehtävät konversiot saadaan toteutettua esimerkiksi Microsoftin .NET-arkkitehtuurissa 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 XML-dokumentin 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 XML-dokumenttien 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 SQL-standardin XML-laajennusten mukaisesti. Sovellusohjelmissa toteutetut muunnosratkaisut kuormittavat edelleen vastausaikoja ja DBMS-jä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ä DL/I.

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 XML-laajennuksilla. SQL:2003-standardin XML-laajennus on määritetty sen osassa 14 ”SQL/XML” [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ä

Page 3: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 3 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 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 SQL/XML-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 SQL/XML 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: generoi XQueryn tuottamasta yhden tekstisolmun tuloksesta XML-arvon. XMLCAST: määrittää conversion XML-tyypistä merkkijonoksi tai merkkijonon XML-

tyypiksi 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

Page 4: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 4 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 XML Schemaa sanotaan validiksi (valid). SQL:2003:n XML-tietotyyppi takaa, että XML-sarakkeeseen 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”)/row/Customers WHERE $c/CustomerID = ”WILMK” RETURN <asiakas>

<asno>($c/CustomerID)</asno> <nimi>($c/CustomerName)</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.

Page 5: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 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.

XMLdocument

CLOB/ XMLcolumn

CLOBvalue

XMLcolumn shredding into

”nested tables” /”side tables”

XMLdocument

CLOB/ XMLcolumn

CLOBvalue

XMLcolumn 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.

SQL/XML-julkaisufunktioiden toteutuksissa on eroja. SQL Server käyttää näiden asemesta omaa SELECT FOR XML –ratkaisuaan.

Page 6: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

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

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 SQL/XML-määrityksiä. Lähteen [Ste04] mukaan IBM tulee toteuttamaan SQL/XML:n mukaisen natiivin XML-tietotyypin ja jukaisufunktiot, kun SQL/XML-standardi on valmiimpi. Osa SQL/XML 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).

Page 7: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

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

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ä. SQL/XML-funktioita Microsoft ei kuitenkaan ole toteuttanut, vaan SQL-taulujen tiedon julkaisu XML-muodossa 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.empnoFOR XML AUTO, TYPE, ELEMENTS) -- ~ XMLForest(...)

FROM Emp EmployeeWHERE Employee.deptno = Department.deptnoFOR XML AUTO, TYPE, -- ~ XMLAgg(XMLElement("Employee", XMLAttributes ("employeeNumber")))

ROOT('EmployeeList')) -- ~ XMLElement("EmployeeList"FROM Dept DepartmentFOR XML AUTO, ELEMENTS -- ~ 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 OPENSQL-funktiolla.

CREATE TABLE PublishedMedia(ISBN int PRIMARY KEY, Title varchar(50), Publisher varchar(50))

GO

CREATE PROCEDURE [dbo].[xml_insert] (@doc NTEXT)ASBEGINdeclare @idoc int-- Create the internal representationexec sp_xml_preparedocument @idoc OUTPUT, @doc-- SELECT statement using OPENXML rowset providerINSERT INTO PublishedMedia

SELECT * FROM OPENXML (@idoc, '/Books/Book', 1)WITH (ISBN int '@ISBN',

Title varchar(50) '@Title',Publisher varchar(50) '@Publisher')

-- Remove the internal representationEXEC sp_xml_removedocument @idocENDGO

Kuva 4. OPENXML-esimerkki

Page 8: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 8 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 XML-tietotyypin validointi perustuu tietokantaan SCHEMACOLLETION-rakenteisiin tallettuihin XML Schemoihin.

strongly typed XML column:col XML(schemaCollection)table

XML documentsin the table:

schemaCollection

<schema ……

</schema>

<schemaN ……

</schemaN>

<doc1 xmlns=……

</doc1>

<doc1 xmlns=……

</doc1>

<docN xmlns=……

</docN>

id

schema versionsor different schemas

strongly typed XML column:col XML(schemaCollection)table

XML documentsin the table:

schemaCollection

<schema ……

</schema>

<schemaN ……

</schemaN>

<doc1 xmlns=……

</doc1>

<doc1 xmlns=……

</doc1>

<docN xmlns=……

</docN>

id

schema versionsor different schemas

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ä.

Page 9: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

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

Oracle XML DB (ks. DBTech Pro XML and Databases workshop Heliassa 21.4.2005 http://myy.helia.fi/~dbms/seminars/dbtechprows4/Day2/Oracle10XmlDb.pdf)

Oraclen XML DB on monipuolisin ja lähinnä SQL-standardin SQL/XML-osaa oleva XML-toteutus. 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 FTP-palvelun 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.

Page 10: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 10 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 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 SQL/XML-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 SQL/XML-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ä PL/SQL 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ä SQL/XML-standardin (luonnoksen) mukaisena XMLQuery-funktiona. Oracle on toteuttanut myös SQL/XML-standardin (luonnoksen) mukaisen

Page 11: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 11 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 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 (XML/SQL duality) periaatteen eli XML-dokumentteihin voidaan luoda SQL-näkymät ja SQL-tauluihin voidaan luoda XML-nä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 ROW-elementtejä 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 $e/ROW/DEPTNO= 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>

Page 12: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 12 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 ja seuraava kysely sarakkeiden empno, ename ja sal tiedot niistä, joiden palkka on yli 3000 dollaria

XQUERY for $e in ora:view("emp") where $e/ROW/SAL > 3000 return <emp> {$e/ROW/EMPNO}{$e/ROW/ENAME}{$e/ROW/SAL} </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 $d/ROW/DEPTNO 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 $e/ROW/DEPTNO = $d/ROW/DEPTNO and $e/ROW/SAL>3000 order by $e/ROW/EMPNO return <emp ename="{$e/ROW/ENAME}" dept="{$d/ROW/DNAME}"/>' returning content) AS output FROM DUAL /

OUTPUT

<emp ename="KING" dept="ACCOUNTING"></emp><emp ename="DRAKE" dept="ACCOUNTING"></emp>

Page 13: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 13 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 SQL-taulujen XML-näkymän kautta tai Nested Tables –tauluihin talletettuihin XML-dokumentteihin 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('/public/emps.xml', empsxmlstring); res := DBMS_XDB.createResource('/public/depts.xml', deptsxmlstring); END;

Page 14: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 14 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 / 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("/public/emps.xml")/emps/emp

let $d := doc("/public/depts.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("/PUBLIC/EMPS.XML")/EMPS/EMPLET$D:=DOC("/PUBLIC/DEPTS.XML") -------------------------------------------------------------------------------- <emp ename="Jack" dept="Administration"/> <emp ename="Jill" dept="Marketing"/>

Page 15: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 15 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 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( ) • PL/SQL paketin DBMS_XSLPROCESSOR

Nämä kaikki odottavat sekä muokattavan XML-dokumentin että muokkausta ohjaavan XSL-tyylisivun 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ä.

XML doc

XML Schemadoc

DBMS_XMLSCHEMA.RegisterSchema

url

CREATE TABLE xml_tabid number,xmlcol XMLType)XMLType COLUMN xmlcolXMLSCHEMA"<url>"ELEMENT "<elementname>"

xml_tabid xmlcol

INSERT

CREATE TABLE xsl_tabid number,stylesheet XMLType)

xsl _tabid stylesheet

XSL docINSERT

SELECT XMLTransform(X.xmlcol,(SELECT stylesheet FROM xsl_tabWHERE id = 1)).getStringVal( )

AS resultFROM xml_tab X

1

XML doc

result

XML doc

XML Schemadoc

DBMS_XMLSCHEMA.RegisterSchema

url

CREATE TABLE xml_tabid number,xmlcol XMLType)XMLType COLUMN xmlcolXMLSCHEMA"<url>"ELEMENT "<elementname>"

xml_tabid xmlcol

INSERT

CREATE TABLE xsl_tabid number,stylesheet XMLType)

xsl _tabid stylesheet

XSL docINSERT

SELECT XMLTransform(X.xmlcol,(SELECT stylesheet FROM xsl_tabWHERE id = 1)).getStringVal( )

AS resultFROM xml_tab X

1

XML doc

result

Kuva xslt. Skenaario XML Schema -pohjaisen dokumentin XSLT-käsitelystä

* * *

Page 16: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 16 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 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 (SQL/XML), draft 2005-11-04 [sqlx05] http://www.sqlx.org (6.12.2005)

Page 17: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

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

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:7780/isqlplus 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;

Page 18: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 18 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 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 March/April 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/>'));

Page 19: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 19 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 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.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-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('/public/People.xsd', schemaString); END; / -- rekisteröidään XML Schema: BEGIN DBMS_XMLSCHEMA.registerSchema ('http://localhost:8080/public/People.xsd', xdbURIType('/public/People.xsd').getClob(), TRUE,TRUE,FALSE,TRUE ); End; /

Page 20: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 20 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 -- tehdään uudet taulut drop table xmlclobs; drop table xmldocs; -- CREATE TABLE xmlclobs ( xmlclobs XMLtype ); -- CREATE TABLE xmldocs OF XMLtype xmlschema "http://localhost:8080/public/People.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.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://localhost:8080/public/People.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 PL/SQL-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;

Page 21: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 21 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 COMMIT; -- kokeillaan lisäyksiä INSERT INTO xmldocs VALUES( '<?xml version="1.0"?> <Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://localhost:8080/public/People.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.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://localhost:8080/public/People.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.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://localhost:8080/public/People.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.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://localhost:8080/public/People.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.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://localhost:8080/public/People.xsd"> <FirstName>Donald</FirstName> <LastName>Duck</LastName> <BirthPlace>Hollywood</BirthPlace> <DateOfBirth>1930-12-24</DateOfBirth> </Person>') /

Page 22: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 22 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 Laadi vielä yksi komento, jolla lisäät jonkun uuden henkilön tiedot xmldocs-tauluun.

Page 23: XML ja tietokannat - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict03d/rdbms/mats/XML_ja_tietokannat.pdf · HELIA – TIKO-05 XML ja tietokannat 5 ( 23) ICT03D Tieto ja tiedon

HELIA – TIKO-05 XML ja tietokannat 23 ( 23) ICT03D Tieto ja tiedon varastointi Martti Laiho 11.5.2006 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,'/Person/FirstName') 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,'/Person/DateOfBirth/text()','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. XML/SQL Duality luodaan SQL-näkymä xmldocs-taulun XML-dokumentteihin CREATE OR REPLACE VIEW People_View (fname, lname, DOB) AS SELECT extractValue(value(p),'/Person/FirstName'), extractValue(value(p),'/Person/LastName'), extractValue(value(p),'/Person/DateOfBirth') 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”.