Oracle XML DB - Conceitos iniciais

37
Banco de Dados XML Diego A. Lusa, Mateus H. Dal Forno Universidade de Passo Fundo ProgramadeP´osGradua¸c˜ ao em Computa¸c˜ ao Aplicada - PPGCA 14 de novembro de 2014 1 / 37

Transcript of Oracle XML DB - Conceitos iniciais

Page 1: Oracle XML DB - Conceitos iniciais

Banco de Dados XML

Diego A. Lusa,Mateus H. Dal Forno

Universidade de Passo FundoPrograma de Pos Graduacao em Computacao Aplicada - PPGCA

14 de novembro de 2014

1 / 37

Page 2: Oracle XML DB - Conceitos iniciais

Sumario

1. Conceitos Basicos

2. Oracle XML DB

2 / 37

Page 3: Oracle XML DB - Conceitos iniciais

XML - eXtensible Markup Language

I Linguagem criada para descrever dados

I E uma linguagem de marcacao que nao apresenta um conjunto detags pre-definidas

I E extensıvel e muito utilizada na Web e em arquiteturas SOA

Exemplo<?xml version="1.0" encoding="UTF-8"?>

<alunos>

<aluno>

<nome>Fulano</nome>

<sobrenome>de Tal</sobrenome>

<matricula>112233</matricula>

</aluno>

</alunos>

3 / 37

Page 4: Oracle XML DB - Conceitos iniciais

XML - namespaces

I E um metodo utilizado para evitar conflitos de nome dos elementosno XML

I Qualifica o elemento

I Um nome qualificado (QName) e composto pelo namespace + nomedo elemento, no formado {Namespace}:nome

I Utiliza-se prefixos para facilitar o uso de namespaces

I Por convencao, um namespace e declarado no formado de uma URI

4 / 37

Page 5: Oracle XML DB - Conceitos iniciais

XML - namespaces

Exemplo<?xml version="1.0" encoding="UTF-8"?>

<alunos xmlns="http://upf.br/alunos">

<mstr:aluno xmlns:mstr="http://upf.br/mestrado">

<nome>Fulano</nome>

</mstr:aluno>

<grd:aluno xmlns:gdr="http://upf.br/graduacao">

<nombre>Fulano</nombre>

</grd:aluno>

<doc:aluno xmlns:doc="http://upf.br/doutorado">

<name>Fulano</name>

</doc:aluno>

</alunos>

5 / 37

Page 6: Oracle XML DB - Conceitos iniciais

XML Schema

I Define a estrutura de um determinado de uma arquivo XML

I Consiste na definicao da hierarquia e dos tipos de dados que podemser utilizados nas instancias XML

I Prove um mecanismo para validacao da estrutura de uma instanciaXML

I Alternativa para o DTD (Document Type Definition)

6 / 37

Page 7: Oracle XML DB - Conceitos iniciais

XML Schema

Exemplo<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:mstr="http://upf.br/mestrado" targetNamespace="http://upf.br/mestrado"

attributeFormDefault="qualified">

<xsd:complexType name="aluno">

<xsd:sequence>

<xsd:element name="nome" minOccurs="1" maxOccurs="1" />

<xsd:element name="sobrenome" minOccurs="0" maxOccurs="1" />

<xsd:element name="matricula" minOccurs="0" maxOccurs="1" />

</xsd:sequence>

</xsd:complexType>

</xsd:schema>

7 / 37

Page 8: Oracle XML DB - Conceitos iniciais

XPath

I Linguagem utilizada para localizar informacoes em arquivos XML

I Oferece um conjunto de operadores e uma sintaxe formal de consulta

I Utiliza-se a hierarquia do schema definido para gerar as consultas

I E utilizada conjuntamente a linguagem XSLT

Exemplo/alunos/aluno[0]/nome/text()

/alunos/*:aluno[name = ’Fulano’ and age>10]/id

/alunos/doc:aluno/matricula

/catalogo/album[@artista="Yanni"]

/catalogo/album[@artista="Yanni" and @ano=2014]

8 / 37

Page 9: Oracle XML DB - Conceitos iniciais

XQuery

I XQuery e o SQL para colecoes XML

I Utiliza um conjunto especıfico de funcoes e utiliza a XPath como umdos recursos

I Acronimo FLOWR (pronuncia-se Flower):

for: Itera sobre uma colecao de dadoslet: Declara variaveis e atribui a elas valoreswhere: E uma condicao aplicada a selecao da colecaoorder by: Ordena a saıdareturn: Retorna os valores desejados

9 / 37

Page 10: Oracle XML DB - Conceitos iniciais

XQuery

Exemplofor $x in doc("gastos.xml")/gastos/rio-grande-sul/passo-fundo

where $x/total>30.000 and $x/ano = 2014

order by $x/total descending

return $x/total

10 / 37

Page 11: Oracle XML DB - Conceitos iniciais

XSLT - EXtensible Stylesheet Language Transformations

I Utilizada para transformar documentos XML entre diferentesestruturas

I Utiliza XPath para navegar entre a estrutura do documento de origem

I Oferece diversas funcoes nativamente

11 / 37

Page 12: Oracle XML DB - Conceitos iniciais

XSLT - EXtensible Stylesheet Language Transformations

Exemplo<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<html>

<body>

<h2>Convidados</h2>

<ul>

<xsl:for-each select="eventos/evento[@nome=’ERBD’]/convidados/convidado">

<li><xsl:value-of select="nome"/></li>

</xsl:for-each>

</ul>

</body>

</html>

</xsl:template>

</xsl:stylesheet>

12 / 37

Page 13: Oracle XML DB - Conceitos iniciais

Oracle XML DB

13 / 37

Page 14: Oracle XML DB - Conceitos iniciais

Caracterısticas basicas

I E um conjunto de tecnologias para banco de dados Oracle, voltadasa:

Armazenamento de dados XMLCriacao de dados em formato XMLAcesso, busca, validacao, transformacao, conversao e indexacao dedados XML

I Incluıdo como parte do Oracle Database a partir da versao Oracle9iRelease 2 (9.2)

I Prove meios para interoperar SQL e XML

14 / 37

Page 15: Oracle XML DB - Conceitos iniciais

XMLType

I Tipo de dado SQL nativo criado para armazenar documentos XML

I Pode-se utiliza-lo como coluna, variavel ou argumento em funcoes eprocedimentos

I Tambem e possıvel criar uma tabela do tipo XMLType

I Apenas estruturas XML bem formadas sao aceitas pelo tipo XMLType

I Adicionalmente, os documentos podem ser validados com um XSD

15 / 37

Page 16: Oracle XML DB - Conceitos iniciais

Criacao das tabelas e usuario

Exemplo--Opcional

CREATE USER xmldb_example identified BY xmldb;

GRANT CONNECT,resource TO xmldb_example;

CREATE TABLE xml_documento (

doc_id NUMBER NOT NULL,

descricao varchar2(200) NOT NULL,

documento xmltype NOT NULL,

CONSTRAINT pk_xml_documento PRIMARY KEY(doc_id)

);

CREATE TABLE xml_documento_objeto OF xmltype;

16 / 37

Page 17: Oracle XML DB - Conceitos iniciais

Insercao de dados

Exemploinsert into xml_documento values (

1, ‘Turma 2013’, XMLTYPE(

’<?xml version="1.0"?>

<crs:cursos xmlns:crs="http://upf.br/cursos">

<cr:curso tipo="mestrado" xmlns:cr="http://upf.br/cursos/curso">

<alunos>

<aluno>

<nome>Fulano</nome>

<matricula>12345</matricula>

</aluno>

<aluno>

<nome>Ciclano</nome>

<matricula>34512</matricula>

</aluno>

</alunos>

</cr:curso>

<cr:curso tipo="doutorado" xmlns:cr="http://upf.br/cursos/curso">

<alunos>

<aluno>

<nome>Fulano 2</nome>

<matricula>doc12345</matricula>

</aluno>

<aluno>

<nome>Ciclano 2</nome>

<matricula>doc34512</matricula>

</aluno>

</alunos>

</cr:curso>

</crs:cursos>’)

); 17 / 37

Page 18: Oracle XML DB - Conceitos iniciais

Insercao de dados

Exemploinsert into xml_documento_objeto values (XMLTYPE(

’<?xml version="1.0"?>

<crs:cursos xmlns:crs="http://upf.br/cursos">

<cr:curso tipo="mestrado" xmlns:cr="http://upf.br/cursos/curso">

<alunos>

<aluno>

<nome>Fulano</nome>

<matricula>12345</matricula>

</aluno>

<aluno>

<nome>Ciclano</nome>

<matricula>34512</matricula>

</aluno>

</alunos>

</cr:curso>

<cr:curso tipo="doutorado" xmlns:cr="http://upf.br/cursos/curso">

<alunos>

<aluno>

<nome>Fulano 2</nome>

<matricula>doc12345</matricula>

</aluno>

<aluno>

<nome>Ciclano 2</nome>

<matricula>doc34512</matricula>

</aluno>

</alunos>

</cr:curso>

</crs:cursos>’));

18 / 37

Page 19: Oracle XML DB - Conceitos iniciais

Atualizacao de dados

I Parametros do procedimento updateXML:

xmltype instance: Instancia XMLxpath string: Expressao XPath que identifica o valor a ser atualizadovalue expr: Novo valornamespace string: Declaracao dos namespaces utilizados na XPath

Exemploselect * from XML_DOCUMENTO_OBJETO;

-- Atualizando primeiro aluno do mestrado

update XML_DOCUMENTO_OBJETO o set o.object_value =

updateXML(o.OBJECT_VALUE,’/cs:cursos/c:curso[@tipo="mestrado"]/alunos/aluno[1]/nome/text()’,

’Aluno atualizado’,’xmlns:c="http://upf.br/cursos/curso" xmlns:cs="http://upf.br/cursos"’);

19 / 37

Page 20: Oracle XML DB - Conceitos iniciais

Atualizando dados

I Para inserir novos valores dentro da estrutura do XML pode-seutilizar os procedimentos:

insertChildXMLinsertChildXMLBeforeinsertChildXMLAfterappendChildXML

I Dentre os argumentos do procedimento esta a expressao XPath queindica o ponto exato da insercao

20 / 37

Page 21: Oracle XML DB - Conceitos iniciais

Atualizacao de dados

I Parametros do procedimento insetChildXML:

xmltype instance : Instancia XMLxpath string: Expressao XPath que identifica onde inserir o novo valorchild expr: Subexpresao XPath referente ao que sera inseridovalue expr: Fragmento de XML, do tipo XMLType, que ira compor oque foi definido em child exprnamespace string: Declaracao dos namespaces utilizados na XPath

Exemplo--Inserindo novo aluno de mestrado

update XML_DOCUMENTO_OBJETO o set o.object_value =

insertChildXML(o.OBJECT_VALUE,’/cs:cursos/c:curso[@tipo="mestrado"]/alunos’,’aluno’,XMLType(’

<aluno>

<nome>Novo aluno inserido</nome>

<matricula>mst:12345</matricula>

</aluno>

’),

’xmlns:c="http://upf.br/cursos/curso" xmlns:cs="http://upf.br/cursos"’);

21 / 37

Page 22: Oracle XML DB - Conceitos iniciais

Atualizacao de dados

I Parametros do procedimento insertChildXMLbefore:

xmltype instance : Instancia XMLxpath string: Expressao XPath que identifica o elemento paichild expr: Expressao XPath - Inserir antes de quem?value expr: Fragmento de XML, do tipo XMLType, que a ser inseridonamespace string: Declaracao dos namespaces utilizados na XPath

Exemplo--Inserindo novo curso

update XML_DOCUMENTO_OBJETO o set o.object_value = insertChildXMLbefore(o.OBJECT_VALUE,

’/cs:cursos’,--quem eh o pai

’c:curso[@tipo="doutorado"]’,--em relacao a quem?

XMLType(’

<c:curso tipo="graduacao" xmlns:c="http://upf.br/cursos/curso">

<alunos>

<aluno/>

</alunos>

</c:curso>

),-- o que?

’xmlns:c="http://upf.br/cursos/curso" xmlns:cs="http://upf.br/cursos"’);

22 / 37

Page 23: Oracle XML DB - Conceitos iniciais

Atualizacao de dados

I Parametros do procedimento insertChildXMLafter:xmltype instance : Instancia XMLxpath string: Expressao XPath que identifica o elemento paichild expr: Expressao XPath - Inserir depois de quem ?value expr: Fragmento de XML, do tipo XMLType, a ser inseridonamespace string: Declaracao dos namespaces utilizados na XPath

Exemploupdate XML_DOCUMENTO_OBJETO o set o.object_value = insertChildXMLafter(o.OBJECT_VALUE,

’/cs:cursos’,

’c:curso[@tipo="doutorado"]’,

XMLType(’

<c:curso tipo="fundamental" xmlns:c="http://upf.br/cursos/curso">

<alunos>

<aluno/>

</alunos>

</c:curso>

’),-- o que?

’xmlns:c="http://upf.br/cursos/curso" xmlns:cs="http://upf.br/cursos"’);

23 / 37

Page 24: Oracle XML DB - Conceitos iniciais

Atualizacao de dados

I Parametros do procedimento appendChildXML:

xmltype instance : Instancia XMLxpath string: Expressao XPath que onde inserir o novo fragmentvalue expr: Fragmento de XML, do tipo XMLType, a ser inseridonamespace string: Declaracao dos namespaces utilizados na XPath

Exemplo--Adicionando aluno ao curso

update XML_DOCUMENTO_OBJETO o set o.object_value = appendChildXML(o.OBJECT_VALUE,

’/cs:cursos/c:curso[@tipo="fundamental"]/alunos’,--em relacao a quem?

XMLType(’

<aluno>

<nome>Fulano do fundamental</nome>

<matricula>1111</matricula>

</aluno>

’),-- o que?

’xmlns:c="http://upf.br/cursos/curso" xmlns:cs="http://upf.br/cursos"’);

24 / 37

Page 25: Oracle XML DB - Conceitos iniciais

Atualizacao de dados

I Parametros do procedimento deleteXML:

xmltype instance : Instancia XMLxpath string: Expressao XPath que onde indica o fragmento a serremovido

Exemplo--Eliminando nodo

update XML_DOCUMENTO_OBJETO o set o.object_value = deleteXML(o.OBJECT_VALUE,

’/cs:cursos/c:curso[@tipo="doutorado"]/alunos/aluno[matricula="doc34512"]’,--em relacao a quem?

’xmlns:c="http://upf.br/cursos/curso" xmlns:cs="http://upf.br/cursos"’);

25 / 37

Page 26: Oracle XML DB - Conceitos iniciais

Consultas ao conteudo XML

I Parametros do metodo extract:xpath string: Expressao XPath que define a consulta a ser executadanamespace string: Declaracao dos namespaces utilizados na XPath

I Tambem pode-se utilizar a funcao extract, a qual recebe como umdos parametros uma instancia XML

Exemplo--Recupera o nome do primeiro aluno dos cursos de mestrado

select d.descricao, d.DOCUMENTO.extract(

’/cs:cursos/c:curso[@tipo="mestrado"]/alunos/aluno[1]/nome/text()’,

’xmlns:c="http://upf.br/cursos/curso" xmlns:cs="http://upf.br/cursos"’

).getStringVal() as valor from xml_documento d;

26 / 37

Page 27: Oracle XML DB - Conceitos iniciais

Consultas ao conteudo XML

Exemplo--Recupera o tipo de curso que possui um aluno com nome = ’Fulano’

select d.descricao, d.DOCUMENTO.extract(

’/cs:cursos/c:curso[alunos/aluno/nome ="Fulano"]/@tipo’,

’xmlns:c="http://upf.br/cursos/curso" xmlns:cs="http://upf.br/cursos"’

).getStringVal() as valor from xml_documento d;

--Quantos alunos os cursos de doutorado tem?

select d.descricao, d.DOCUMENTO.extract(

’count(/cs:cursos/c:curso[@tipo="doutorado"]/alunos/aluno)’,

’xmlns:c="http://upf.br/cursos/curso" xmlns:cs="http://upf.br/cursos"’

).getStringVal() as valor from xml_documento d;

--Quantos alunos os cursos de doutorado e mestrado juntos possuem?

select d.descricao, d.DOCUMENTO.extract(

’count(/cs:cursos/c:curso[@tipo="doutorado" or @tipo="mestrado"]/alunos/aluno)’,

’xmlns:c="http://upf.br/cursos/curso" xmlns:cs="http://upf.br/cursos"’

).getStringVal() as valor from xml_documento d;

--Utilizando a tabela do tipo XMLType

select o.extract(

’/cs:cursos/c:curso[alunos/aluno/nome ="Fulano"]/@tipo’,

’xmlns:c="http://upf.br/cursos/curso" xmlns:cs="http://upf.br/cursos"’).getStringVal()

as total from XML_DOCUMENTO_OBJETO o;

27 / 37

Page 28: Oracle XML DB - Conceitos iniciais

Utilizando XSLT

I Parametros do procedimento XMLSerialize:

DOCUMENT ou CONTENT: Especifica o tipo documento. Seinformado DOCUMENT, o XML informado precisa ser valido. Seinformado CONTENT, o conteudo deve ser um XML valido, mas naoprecisa apresentar apenas um elemento raizvalor: Conteudo XML no formato textual

I Parametros do metodo transform:

xmltype instance : Codigo da transformacao do tipo XMLType

28 / 37

Page 29: Oracle XML DB - Conceitos iniciais

Utilizando XSLT

Exemplo--XMLSerialize cria uma string ou lob com o conteudo. Se informar document, o motor xml valida a estrutura

select XMLSerialize(

DOCUMENT o.transform(XMLType(’<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:cr="http://upf.br/cursos/curso"

xmlns:crs="http://upf.br/cursos">

<xsl:template match="/">

<html>

<body>

<table>

<tr>

<th>Nome</th>

<th>Matricula</th>

</tr>

<xsl:apply-templates />

</table>

</body>

</html>

</xsl:template>

29 / 37

Page 30: Oracle XML DB - Conceitos iniciais

Utilizando XSLT (continuacao. . . )

Exemplo<xsl:template match="/crs:cursos/cr:curso[@tipo=’’mestrado’’]">

<xsl:for-each select="alunos/aluno">

<tr>

<td>

<xsl:value-of select="nome"/>

</td>

<td>

<xsl:value-of select="matricula"/>

</td>

</tr>

</xsl:for-each>

</xsl:template>

<xsl:template match="text()"/>

</xsl:stylesheet>’))) as to_html from XML_DOCUMENTO_OBJETO o;

30 / 37

Page 31: Oracle XML DB - Conceitos iniciais

Utilizando XQuery

I Parametros do procedimento XQuery:

xmltype instance: Expressao XQuery valida em formato texto.Qualquer valor invalido e criticado pelo construtor.PASSING: Clausula que informa a instancia XML a ser submetida aXQueryRETURNING CONTENT: Indica que o resultado deve ser retornadocomo uma fragmento XML.

31 / 37

Page 32: Oracle XML DB - Conceitos iniciais

Utilizando XQuery

Exemplo--Utilizacao de funcoes XMLQuery

SELECT

XMLSerialize( document XMLQuery(

’declare namespace cr=’’http://upf.br/cursos/curso’’;

declare namespace crs=’’http://upf.br/cursos’’;

<html>

<body>

<table>

<tr>

<td>Nome</td>

<td>Matricula</td>

</tr>

{

for $curso in /crs:cursos/cr:curso

where $curso/@tipo eq ’’mestrado’’

return

for $aluno in $curso/alunos/aluno

return <tr>

<td>{$aluno/nome}</td>

<td>{$aluno/matricula}</td> </tr>

}</table>

</body>

</html>

’ PASSING X.DOCUMENTO RETURNING CONTENT) ) AS TO_HTML FROM XML_DOCUMENTO X;

32 / 37

Page 33: Oracle XML DB - Conceitos iniciais

Trabalhando com XML Schema

I Parametros do procedimento REGISTERSCHEMA, packageDBMS XMLSCHEMA:

schemaurl: Identificador unico do schema, no formato de uma URLschemadoc: XML Schema valido, em formato textual

I A package DBMS XMLSCHEMA contem outros procedimentosque nao serao abordados neste momento

33 / 37

Page 34: Oracle XML DB - Conceitos iniciais

Trabalhando com XML Schema

ExemploBEGIN

DBMS_XMLSCHEMA.REGISTERSCHEMA(

schemaurl=>’http://upf.br/schemas/alunos.xsd’,

schemadoc=> ’<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:al="http://upf.br/aluno"

targetNamespace="http://upf.br/aluno" elementFormDefault="qualified">

<xsd:element name=’’alunos’’>

<xsd:complexType>

<xsd:sequence>

<xsd:element name="aluno" type="al:TAluno" minOccurs="1" maxOccurs="unbounded"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:complexType name="TAluno">

<xsd:sequence>

<xsd:element name="nome" minOccurs="1" maxOccurs="1"/>

<xsd:element name="matricula" minOccurs="1" maxOccurs="1"/>

</xsd:sequence>

</xsd:complexType>

</xsd:schema>’);

END;

34 / 37

Page 35: Oracle XML DB - Conceitos iniciais

Trabalhando com XML Schema (continuacao. . . )

ExemploCREATE TABLE alunos OF XMLType

XMLTYPE STORE AS CLOB

XMLSCHEMA "http://upf.br/schemas/alunos.xsd"

ELEMENT "alunos";

insert into alunos values(

XMLType(

’<?xml version="1.0"?>

<a:alunos xmlns:a="http://upf.br/aluno"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://upf.br/aluno

http://upf.br/schemas/alunos.xsd">

<a:aluno>

<a:nome>Nome para teste</a:nome>

<a:matricula>23325</a:matricula>

</a:aluno>

<a:aluno>

<a:nome>Nome para teste 2</a:nome>

<a:matricula>233253</a:matricula>

</a:aluno>

</a:alunos>’

)

);

35 / 37

Page 36: Oracle XML DB - Conceitos iniciais

Trabalhando com XML Schema (continuacao. . . )

Exemploinsert into alunos values(

XMLType(

’<?xml version="1.0"?>

<a:alunos xmlns:a="http://upf.br/aluno"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://upf.br/aluno

http://upf.br/schemas/alunos.xsd">

<a:aluno>

<a:nome>Nome para teste</a:nome>

<a:matricula>23325</a:matricula>

</a:aluno>

<a:aluno>

<a:nome>Nome para teste 2</a:nome>

</a:aluno>

</a:alunos>’

)

);

36 / 37

Page 37: Oracle XML DB - Conceitos iniciais

Verificacoes

I Metodo isSchemaBased: Retorna 1 se uma determinada instanciaXML tem associada uma URI de XML Schema. O valor 0 e retornadoquando nao ha associacao

I Metodo isSchemaValid: Valida a instancia de XML contra o seuXML Schema. O valor 1 indica sucesso e 0 indica falha

I Metodo isSchemaValidated: Indica se a instancia XML foi validadacontra um XML Schema ou nao

Exemplo--indica se o xml eh baseado no XSD

select o.isSchemaBased() from alunos o;

--indica se o xml eh valido

select o.isSchemaValid() from alunos o;

--indica se o schema foi validado

select o.isSchemaValidated() from alunos o;

37 / 37