Você está na página 1de 27

DB2 Express-C 9 Banco de Dados Relacional/XML Nativo

Marcelo Maruyama Diniz (marcelomd@comp.ufscar.br) DC UFSCar 09/11/2006

XML

EXtensible Markup Language Linguagem de marcao para descrio de dados. O usurio define suas prprias tags de acordo com a semntica desejada. Pode ser validado segundo a forma com uma DTD ou um XML Schema.

Exemplo
<?xml version="1.0" encoding="ISO-8859-1"?> <alunos>
<aluno ra="1">
<nome>Dbora</nome> <cidadeOrigem>Fortaleza</cidadeOrigem> <curso>Cincia da Computao</curso> <condicao status=rico />

</aluno> <aluno ra="2">


<nome>Carla</nome> <cidadeOrigem>Olinda</cidadeOrigem> <curso>Biologia</curso> <condicao status=pobre />

</aluno>

</alunos>

Regras

Toda tag aberta deve ser fechada Uma tag pode ser vazia <tag/> Cada tag pode conter subtags, formando uma estrutura em rvore Cada tag pode conter atributos Todo documento XML deve ter uma tag raiz

Criao de tabelas com campos XML

Utilizando o Centro de Controle, escolher o tipo do campo como XML

Utilizando o CLP CREATE TABLE [tabela]( campo1 xml, ... )

Tabelas com XML


create table items ( id int primary key not null, brandname sku srp ) create table clients( id int primary key not null, name status ) varchar(50), varchar(10), int, decimal(7,2), varchar(30), itemname varchar(30),

comments xml

contactinfo xml

Documento XML Comentario


Tabela Items, campo Comments

Documento XML Cliente


Tabela Clients, campo Contactinfo

Insero de dados XML


INSERT INTO tabelaEx (campoInt, campoXML) values (1, <dado>algumDado</dado>) IMPORT FROM arqDescricao.del OF DEL XML from pathParaArqsXML INSERT INTO tabelaEx

Insero de dados XML


Onde: arqDescricao.del tem os dados e referncias para arquivos XML a serem includos, separados por vrgula. pathParaArqsXML o caminho onde os arquivos XML referenciados esto.

Descrever os caminhos completos!

Insero de dados XML Exemplo


Arquivo arqDescricao.del na pasta C:\
4,<XDS FIL='aluno1.xml'/>, 5,<XDS FIL='aluno2.xml'/>

Arquivo aluno1.xml na pasta C:\temp


<?xml version="1.0" encoding="ISO-8859-1"?> <aluno ra="1"> <nome>Dbora</nome> <cidadeOrigem>Fortaleza</cidadeOrigem> <curso>Cincia da Computao</curso> <condicao status="rico" /> </aluno>

IMPORT FROM C:\arqDescricao.del" OF DEL XML FROM C:\temp" INSERT INTO tabelaEx

XPath

Linguagem para navegar em documentos XML. Contm funes pr-definidas para manipulao dos dados. H 7 tipos de ns: elemento, atributo, texto, namespace, instruo de processamento, comentrio e n root.

XPath

Caminhos completos para especificar elementos ou atributos @ usado para especificar um atributo text() usado para especificar o texto dentro de um elemento n

XPath /dept/@bldg /dept/employee/@id /dept/employee/name / dept/employee/name/text()

Resultado 101 901 902 <name>Peter Pan</name> <name>John Doe</name> Peter Pan John Doe

<dept bldg=101> <employee id=901> <name>John Doe</name> <phone>408 555 1212</phone> <office>344</office> </employee> <employee id=902> <name>Peter Pan</name> <phone>408 555 9918</phone> <office>216</office> </employee> </dept>

XPath

* usado como caractere curinga. // indica o prprio n ou qualquer um de seus descendentes

XPath /dept/employee/*/text()

Resultado John Doe 408 555 1212 344 Peter Pan 408 555 9918 216 901 902 Peter Pan John Doe <phone>408 555 1212</phone> <phone>408 555 9918</phone>

<dept bldg=101> <employee id=901> <name>John Doe</name> <phone>408 555 1212</phone> <office>344</office> </employee> <employee id=902> <name>Peter Pan</name> <phone>408 555 9918</phone> <office>216</office> </employee> </dept>

/dept/*/@id //name/text()

/dept//phone

XPath

Predicados so utilizados dentro de [...] [n] seleciona o n-simo filho do n

<dept bldg=101> <employee id=901> <name>John Doe</name> <phone>408 555 1212</phone> <office>344</office> </employee> <employee id=902> <name>Peter Pan</name> <phone>408 555 9918</phone> <office>216</office> </employee> </dept>

XPath /dept/employee[@id="902"]/name /dept[@bldg="101"]/employee[office > "300"]/name //employee[office="344" OR office="216"]/@id /dept/employee[2]/@id

Resultado <name>Peter Pan</name> <name>John Doe</name> 901 902 902

XPath

. representa o n atual .. representa o n pai

<dept bldg=101> <employee id=901> <name>John Doe</name> <phone>408 555 1212</phone> <office>344</office> </employee> <employee id=902> <name>Peter Pan</name> <phone>408 555 9918</phone> <office>216</office> </employee> </dept> Resultado <name>Peter Pan</name> <office>344</office> <office>344</office> 101 101

XPath /dept/employee/name[../@id="902"] /dept/employee/office[. > "300"] /dept/employee[office > "300"]/office /dept/employee[name="John Doe"]/../@bldg /dept/employee/name[. = "John Doe"]/../../@bldg

SQL/XML

SQL com extenso XML. Permite consultar ns especficos de documentos XML armazenados em campos de uma tabela, ao invs de recuperar apenas o documento inteiro. Utiliza sintaxe do XPath. Funes bsicas

xmlexists xmlquery xmltable

SQL/XML
xmlexists: as linhas retornadas contm um documento XML com o valor especificado. Retorna verdadeiro ou falso.
select name from clients
where xmlexists($c/Client/Address[zip = 95116] passing clients.contact as c)

Seleciona o campo nome da tabela clients de todas as linhas que tem um documento XML no campo contact com n pai Client, n filho Address e n neto zip com valor 95116

SQL/XML
xmlquery: retorna elementos do documento XML
select xmlquery($c/Client/email passing contact as c) from clients where status = Gold

Seleciona os ns email filhos do n Client do documento XML no campo contact da tabela clients sendo o campo status igual a Gold.
Para selecionar o texto do n email, utilizar text()

SQL/XML
xmltable: retorna uma tabela relacional a partir de documentos XML.
select t.comment#, i.itemname, t.customerID, Message
from items i, xmltable($c/Comments/Comment passing i.comments as c columns Comment# integer path CommentID, CustomerID integer path CustomerID, Message varchar(100) path Message) as t

Converte os ns Comment do documento XML no campo comments da tabela items numa tabela de nome t com colunas Comment# (para o n CommentID), CustomerID (para o n CustomerID) e Message (para o n Message)

XQuery

Linguagem para consultar documentos XML. Utiliza sintaxe do XPath. Retorna sequncias de dados XML. Expresso iniciada com xquery

XQuery
For: itera por uma sequncia Let: atribui uma varivel a uma sequncia Where: estabelece condio Order: reordena itens Return: monta o resultado da xquery

SQL/XML
Utilizando o FLWOR com SQL/XML
Select name, xmlquery(for $e in $c/Client/email[1] return $e Passing contact as c) From clients Where status = Gold

Retorna o nome e o resultado da xmlquery. xmlquery checa o campo contact de cada linha da tabela clients cujo campo status seja igual a Gold e, para cada um deles, retorna o primeiro n email.

XQuery
XQuery para recuperar os contatos do cliente (campo contact XML)
Xquery db2-fn:xmlcolumn(CLIENTS.CONTACT) (argumento precisa ser maisculo!) db2-fn:xmlcolumn: funo com parmetro que identifica a tabela e o campo XML Equivalente Select contact from clients

XQuery - Exemplos
xquery For $y in db2-fn:xmlcolumn(CLIENTS.CONTACT)/Client/fax Return $y

Resultado: <fax>4081112222</fax> <fax>5559998888</fax>

XQuery - Exemplos
xquery for $y in db2-fn:xmlcolumn(CLIENTS.CONTACT)/Client/Address order by $y/zip return $y xquery db2-fn:xmlcolumn(CLIENTS.CONTACT)/Client/Address[zip=95116]

Bibliografia

XPath, SQL/XML e XQuery

www.w3schools.com/xpath/default.asp www.w3schools.com/xquery/default.asp www-128.ibm.com/developerworks/db2/library/techarticle/dm-0511melnyk/ www-128.ibm.com/developerworks/db2/library/techarticle/dm-0604saracco/ www.redbooks.ibm.com/abstracts/SG247315.html

Você também pode gostar