SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
Banco de Dados XML
Diego A. Lusa,
Mateus H. Dal Forno
Universidade de Passo Fundo
Programa de P´os Gradua¸c˜ao em Computa¸c˜ao Aplicada - PPGCA
14 de novembro de 2014
1 / 37
Sum´ario
1. Conceitos B´asicos
2. Oracle XML DB
2 / 37
XML - eXtensible Markup Language
Linguagem criada para descrever dados
´E uma linguagem de marca¸c˜ao que n˜ao apresenta um conjunto de
tags pr´e-definidas
´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
XML - namespaces
´E um m´etodo utilizado para evitar conflitos de nome dos elementos
no XML
Qualifica o elemento
Um nome qualificado (QName) ´e composto pelo namespace + nome
do elemento, no formado {Namespace}:nome
Utiliza-se prefixos para facilitar o uso de namespaces
Por conven¸c˜ao, um namespace ´e declarado no formado de uma URI
4 / 37
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
XML Schema
Define a estrutura de um determinado de uma arquivo XML
Consiste na defini¸c˜ao da hierarquia e dos tipos de dados que podem
ser utilizados nas instˆancias XML
Provˆe um mecanismo para valida¸c˜ao da estrutura de uma instˆancia
XML
Alternativa para o DTD (Document Type Definition)
6 / 37
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
XPath
Linguagem utilizada para localizar informa¸c˜oes em arquivos XML
Oferece um conjunto de operadores e uma sintaxe formal de consulta
Utiliza-se a hierarquia do schema definido para gerar as consultas
´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
XQuery
XQuery ´e o SQL para cole¸c˜oes XML
Utiliza um conjunto espec´ıfico de fun¸c˜oes e utiliza a XPath como um
dos recursos
Acrˆonimo FLOWR (pronuncia-se Flower):
for: Itera sobre uma cole¸c˜ao de dados
let: Declara vari´aveis e atribui a elas valores
where: ´E uma condi¸c˜ao aplicada a sele¸c˜ao da cole¸c˜ao
order by: Ordena a sa´ıda
return: Retorna os valores desejados
9 / 37
XQuery
Exemplo
for $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
XSLT - EXtensible Stylesheet Language Transformations
Utilizada para transformar documentos XML entre diferentes
estruturas
Utiliza XPath para navegar entre a estrutura do documento de origem
Oferece diversas fun¸c˜oes nativamente
11 / 37
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
Oracle XML DB
13 / 37
Caracter´ısticas b´asicas
´E um conjunto de tecnologias para banco de dados Oracle, voltadas
a:
Armazenamento de dados XML
Cria¸c˜ao de dados em formato XML
Acesso, busca, valida¸c˜ao, transforma¸c˜ao, convers˜ao e indexa¸c˜ao de
dados XML
Inclu´ıdo como parte do Oracle Database a partir da vers˜ao Oracle9i
Release 2 (9.2)
Provˆe meios para interoperar SQL e XML
14 / 37
XMLType
Tipo de dado SQL nativo criado para armazenar documentos XML
Pode-se utiliz´a-lo como coluna, vari´avel ou argumento em fun¸c˜oes e
procedimentos
Tamb´em ´e poss´ıvel criar uma tabela do tipo XMLType
Apenas estruturas XML bem formadas s˜ao aceitas pelo tipo XMLType
Adicionalmente, os documentos podem ser validados com um XSD
15 / 37
Cria¸c˜ao das tabelas e usu´ario
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
Inser¸c˜ao de dados
Exemplo
insert 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
Inser¸c˜ao de dados
Exemplo
insert 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
Atualiza¸c˜ao de dados
Parˆametros do procedimento updateXML:
xmltype instance: Instˆancia XML
xpath string: Express˜ao XPath que identifica o valor a ser atualizado
value expr: Novo valor
namespace string: Declara¸c˜ao dos namespaces utilizados na XPath
Exemplo
select * 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
Atualizando dados
Para inserir novos valores dentro da estrutura do XML pode-se
utilizar os procedimentos:
insertChildXML
insertChildXMLBefore
insertChildXMLAfter
appendChildXML
Dentre os argumentos do procedimento est´a a express˜ao XPath que
indica o ponto exato da inser¸c˜ao
20 / 37
Atualiza¸c˜ao de dados
Parˆametros do procedimento insetChildXML:
xmltype instance : Instˆancia XML
xpath string: Express˜ao XPath que identifica onde inserir o novo valor
child expr: Subexpres˜ao XPath referente ao que ser´a inserido
value expr: Fragmento de XML, do tipo XMLType, que ir´a compor o
que foi definido em child expr
namespace string: Declara¸c˜ao 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
Atualiza¸c˜ao de dados
Parˆametros do procedimento insertChildXMLbefore:
xmltype instance : Instˆancia XML
xpath string: Express˜ao XPath que identifica o elemento pai
child expr: Express˜ao XPath - Inserir antes de quem?
value expr: Fragmento de XML, do tipo XMLType, que a ser inserido
namespace string: Declara¸c˜ao 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
Atualiza¸c˜ao de dados
Parˆametros do procedimento insertChildXMLafter:
xmltype instance : Instˆancia XML
xpath string: Express˜ao XPath que identifica o elemento pai
child expr: Express˜ao XPath - Inserir depois de quem ?
value expr: Fragmento de XML, do tipo XMLType, a ser inserido
namespace string: Declara¸c˜ao dos namespaces utilizados na XPath
Exemplo
update 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
Atualiza¸c˜ao de dados
Parˆametros do procedimento appendChildXML:
xmltype instance : Instˆancia XML
xpath string: Express˜ao XPath que onde inserir o novo fragment
value expr: Fragmento de XML, do tipo XMLType, a ser inserido
namespace string: Declara¸c˜ao 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
Atualiza¸c˜ao de dados
Parˆametros do procedimento deleteXML:
xmltype instance : Instˆancia XML
xpath string: Express˜ao XPath que onde indica o fragmento a ser
removido
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
Consultas ao conte´udo XML
Parˆametros do m´etodo extract:
xpath string: Express˜ao XPath que define a consulta a ser executada
namespace string: Declara¸c˜ao dos namespaces utilizados na XPath
Tamb´em pode-se utilizar a fun¸c˜ao extract, a qual recebe como um
dos parˆametros uma instˆancia 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
Consultas ao conte´udo 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
Utilizando XSLT
Parˆametros do procedimento XMLSerialize:
DOCUMENT ou CONTENT: Especifica o tipo documento. Se
informado DOCUMENT, o XML informado precisa ser v´alido. Se
informado CONTENT, o conte´udo deve ser um XML v´alido, mas n˜ao
precisa apresentar apenas um elemento raiz
valor: Conte´udo XML no formato textual
Parˆametros do m´etodo transform:
xmltype instance : C´odigo da transforma¸c˜ao do tipo XMLType
28 / 37
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
Utilizando XSLT (continua¸c˜ao. . . )
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
Utilizando XQuery
Parˆametros do procedimento XQuery:
xmltype instance: Express˜ao XQuery v´alida em formato texto.
Qualquer valor inv´alido ´e criticado pelo construtor.
PASSING: Cl´ausula que informa a instˆancia XML a ser submetida `a
XQuery
RETURNING CONTENT: Indica que o resultado deve ser retornado
como uma fragmento XML.
31 / 37
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
Trabalhando com XML Schema
Parˆametros do procedimento REGISTERSCHEMA, package
DBMS XMLSCHEMA:
schemaurl: Identificador ´unico do schema, no formato de uma URL
schemadoc: XML Schema v´alido, em formato textual
A package DBMS XMLSCHEMA cont´em outros procedimentos
que n˜ao ser˜ao abordados neste momento
33 / 37
Trabalhando com XML Schema
Exemplo
BEGIN
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
Trabalhando com XML Schema (continua¸c˜ao. . . )
Exemplo
CREATE 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
Trabalhando com XML Schema (continua¸c˜ao. . . )
Exemplo
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:aluno>
</a:alunos>’
)
);
36 / 37
Verifica¸c˜oes
M´etodo isSchemaBased: Retorna 1 se uma determinada instˆancia
XML tem associada uma URI de XML Schema. O valor 0 ´e retornado
quando n˜ao h´a associa¸c˜ao
M´etodo isSchemaValid: Valida a instˆancia de XML contra o seu
XML Schema. O valor 1 indica sucesso e 0 indica falha
M´etodo isSchemaValidated: Indica se a instˆancia XML foi validada
contra um XML Schema ou n˜ao
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

Mais conteúdo relacionado

Mais procurados

[AWSマイスターシリーズ] Amazon VPC VPN & Direct Connect
[AWSマイスターシリーズ] Amazon VPC VPN & Direct Connect[AWSマイスターシリーズ] Amazon VPC VPN & Direct Connect
[AWSマイスターシリーズ] Amazon VPC VPN & Direct Connect
Amazon Web Services Japan
 
Compression Commands in Linux
Compression Commands in LinuxCompression Commands in Linux
Compression Commands in Linux
Pegah Taheri
 

Mais procurados (20)

01. 02. introduction (13 slides)
01.   02. introduction (13 slides)01.   02. introduction (13 slides)
01. 02. introduction (13 slides)
 
AWS Black Belt Techシリーズ Amazon WorkDocs / Amazon WorkMail
AWS Black Belt Techシリーズ Amazon WorkDocs / Amazon WorkMailAWS Black Belt Techシリーズ Amazon WorkDocs / Amazon WorkMail
AWS Black Belt Techシリーズ Amazon WorkDocs / Amazon WorkMail
 
msr_以前のアーキテクチャ
msr_以前のアーキテクチャmsr_以前のアーキテクチャ
msr_以前のアーキテクチャ
 
STG309_Deep Dive Using Hybrid Storage with AWS Storage Gateway to Solve On-Pr...
STG309_Deep Dive Using Hybrid Storage with AWS Storage Gateway to Solve On-Pr...STG309_Deep Dive Using Hybrid Storage with AWS Storage Gateway to Solve On-Pr...
STG309_Deep Dive Using Hybrid Storage with AWS Storage Gateway to Solve On-Pr...
 
Sqa esqa-shortage
Sqa esqa-shortageSqa esqa-shortage
Sqa esqa-shortage
 
TLS, SPF, DKIM, DMARC, authenticated email
TLS, SPF, DKIM, DMARC, authenticated emailTLS, SPF, DKIM, DMARC, authenticated email
TLS, SPF, DKIM, DMARC, authenticated email
 
Duties of a system administrator
Duties of a system administratorDuties of a system administrator
Duties of a system administrator
 
AWS セキュリティとコンプライアンス
AWS セキュリティとコンプライアンスAWS セキュリティとコンプライアンス
AWS セキュリティとコンプライアンス
 
Active Directory
Active Directory Active Directory
Active Directory
 
Migrating Financial and Accounting Systems from Oracle to Amazon DynamoDB (DA...
Migrating Financial and Accounting Systems from Oracle to Amazon DynamoDB (DA...Migrating Financial and Accounting Systems from Oracle to Amazon DynamoDB (DA...
Migrating Financial and Accounting Systems from Oracle to Amazon DynamoDB (DA...
 
20191023 AWS Black Belt Online Seminar Amazon EMR
20191023 AWS Black Belt Online Seminar Amazon EMR20191023 AWS Black Belt Online Seminar Amazon EMR
20191023 AWS Black Belt Online Seminar Amazon EMR
 
[AWSマイスターシリーズ] Amazon VPC VPN & Direct Connect
[AWSマイスターシリーズ] Amazon VPC VPN & Direct Connect[AWSマイスターシリーズ] Amazon VPC VPN & Direct Connect
[AWSマイスターシリーズ] Amazon VPC VPN & Direct Connect
 
AWS Single Sign-On (SSO) 서비스 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
AWS Single Sign-On (SSO) 서비스 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나AWS Single Sign-On (SSO) 서비스 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
AWS Single Sign-On (SSO) 서비스 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
 
AWS Black Belt Techシリーズ AWS Data Pipeline
AWS Black Belt Techシリーズ  AWS Data PipelineAWS Black Belt Techシリーズ  AWS Data Pipeline
AWS Black Belt Techシリーズ AWS Data Pipeline
 
2. OS vs. VMM
2. OS vs. VMM2. OS vs. VMM
2. OS vs. VMM
 
Chapter Two.pptx
Chapter Two.pptxChapter Two.pptx
Chapter Two.pptx
 
20210309 AWS Black Belt Online Seminar AWS Audit Manager
20210309 AWS Black Belt Online Seminar AWS Audit Manager20210309 AWS Black Belt Online Seminar AWS Audit Manager
20210309 AWS Black Belt Online Seminar AWS Audit Manager
 
Compression Commands in Linux
Compression Commands in LinuxCompression Commands in Linux
Compression Commands in Linux
 
Introduction to Cloud Computing
Introduction to Cloud ComputingIntroduction to Cloud Computing
Introduction to Cloud Computing
 
Cloud Instances Price Comparison: AWS vs Azure vs Google vs IBM
Cloud Instances Price Comparison: AWS vs Azure vs Google vs IBMCloud Instances Price Comparison: AWS vs Azure vs Google vs IBM
Cloud Instances Price Comparison: AWS vs Azure vs Google vs IBM
 

Destaque

Processamento consultas-xml-v2
Processamento consultas-xml-v2Processamento consultas-xml-v2
Processamento consultas-xml-v2
Luiz Matos
 
Arquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemanticaArquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemantica
Sergio Crespo
 
XML - eXtensible Markup Language
XML - eXtensible Markup LanguageXML - eXtensible Markup Language
XML - eXtensible Markup Language
elliando dias
 
Querying XML: XPath and XQuery
Querying XML: XPath and XQueryQuerying XML: XPath and XQuery
Querying XML: XPath and XQuery
Katrien Verbert
 
Biblia a Distancia - A.T y N.T.
Biblia a Distancia - A.T y N.T.Biblia a Distancia - A.T y N.T.
Emater - RS
Emater - RSEmater - RS
Emater - RS
gepaaf
 

Destaque (20)

Xml100 1
Xml100 1Xml100 1
Xml100 1
 
XML In The Real World - Use Cases For Oracle XMLDB
XML In The Real World - Use Cases For Oracle XMLDBXML In The Real World - Use Cases For Oracle XMLDB
XML In The Real World - Use Cases For Oracle XMLDB
 
XSL, XSL-FO e XSLT + XPath
XSL, XSL-FO e XSLT + XPathXSL, XSL-FO e XSLT + XPath
XSL, XSL-FO e XSLT + XPath
 
Processamento consultas-xml-v2
Processamento consultas-xml-v2Processamento consultas-xml-v2
Processamento consultas-xml-v2
 
Arquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemanticaArquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemantica
 
XML - eXtensible Markup Language
XML - eXtensible Markup LanguageXML - eXtensible Markup Language
XML - eXtensible Markup Language
 
eXtensible Markup Language (XML)
eXtensible Markup Language (XML)eXtensible Markup Language (XML)
eXtensible Markup Language (XML)
 
XML & HTML
XML & HTMLXML & HTML
XML & HTML
 
Banco de Dados XML
Banco de Dados XMLBanco de Dados XML
Banco de Dados XML
 
Xquery
XqueryXquery
Xquery
 
Apostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTApostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLT
 
Querying XML: XPath and XQuery
Querying XML: XPath and XQueryQuerying XML: XPath and XQuery
Querying XML: XPath and XQuery
 
Curso de desenvolvimento de aplicações para iOS com Objective-C
Curso de desenvolvimento de aplicações para iOS com Objective-CCurso de desenvolvimento de aplicações para iOS com Objective-C
Curso de desenvolvimento de aplicações para iOS com Objective-C
 
Surgimento da Internet
Surgimento da InternetSurgimento da Internet
Surgimento da Internet
 
Algumas notas sobre pascal
Algumas notas sobre pascalAlgumas notas sobre pascal
Algumas notas sobre pascal
 
XML: Uma Introdução Prática (2001)
XML: Uma Introdução Prática (2001)XML: Uma Introdução Prática (2001)
XML: Uma Introdução Prática (2001)
 
Biblia a Distancia - A.T y N.T.
Biblia a Distancia - A.T y N.T.Biblia a Distancia - A.T y N.T.
Biblia a Distancia - A.T y N.T.
 
maluicita y vladi
maluicita y vladimaluicita y vladi
maluicita y vladi
 
Emater - RS
Emater - RSEmater - RS
Emater - RS
 
Correo electronico rubilet alvarez
Correo electronico rubilet alvarezCorreo electronico rubilet alvarez
Correo electronico rubilet alvarez
 

Semelhante a Oracle XML DB - Conceitos iniciais

Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2
Denis L Presciliano
 

Semelhante a Oracle XML DB - Conceitos iniciais (20)

Oracle XML DB
Oracle XML DBOracle XML DB
Oracle XML DB
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Apostila aed
Apostila aedApostila aed
Apostila aed
 
Migrando para o PHP 5
Migrando para o PHP 5Migrando para o PHP 5
Migrando para o PHP 5
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2
 
Php FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHPPhp FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHP
 
Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06
 
Programação Estruturada 2 - Aula 03
Programação Estruturada 2 - Aula 03Programação Estruturada 2 - Aula 03
Programação Estruturada 2 - Aula 03
 
Aplicando Transformação em XML usando XSLT e XSL-FO - 2
Aplicando Transformação em XML usando XSLT e XSL-FO - 2Aplicando Transformação em XML usando XSLT e XSL-FO - 2
Aplicando Transformação em XML usando XSLT e XSL-FO - 2
 
Xml pucminas2013
Xml pucminas2013Xml pucminas2013
Xml pucminas2013
 
Doctrine for Dummies
Doctrine for DummiesDoctrine for Dummies
Doctrine for Dummies
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e Objetos
 
Doctrine for dummies
Doctrine for dummiesDoctrine for dummies
Doctrine for dummies
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicas
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Suporte XML nativo no SQL Server 2014/2016
Suporte XML nativo no SQL Server 2014/2016Suporte XML nativo no SQL Server 2014/2016
Suporte XML nativo no SQL Server 2014/2016
 
Django + extjs pelos forms
Django + extjs pelos formsDjango + extjs pelos forms
Django + extjs pelos forms
 
BD I - Aula 15 B - Criacao de tabelas
BD I - Aula 15 B - Criacao de tabelasBD I - Aula 15 B - Criacao de tabelas
BD I - Aula 15 B - Criacao de tabelas
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em Java
 

Mais de Diego Lusa

Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...
Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...
Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...
Diego Lusa
 
O uso de tecnologias de big data na concepção e execução de estratégias de en...
O uso de tecnologias de big data na concepção e execução de estratégias de en...O uso de tecnologias de big data na concepção e execução de estratégias de en...
O uso de tecnologias de big data na concepção e execução de estratégias de en...
Diego Lusa
 

Mais de Diego Lusa (9)

Cidades Inteligentes e Big Data
Cidades Inteligentes e Big DataCidades Inteligentes e Big Data
Cidades Inteligentes e Big Data
 
JQuery Mobile
JQuery MobileJQuery Mobile
JQuery Mobile
 
Rede "Olhos do Bem"
Rede "Olhos do Bem"Rede "Olhos do Bem"
Rede "Olhos do Bem"
 
Engenharia de software orientada a aspectos: do interesse ao aspecto
Engenharia de software orientada a aspectos: do interesse ao aspectoEngenharia de software orientada a aspectos: do interesse ao aspecto
Engenharia de software orientada a aspectos: do interesse ao aspecto
 
Multiplicação de matrizes
Multiplicação de matrizesMultiplicação de matrizes
Multiplicação de matrizes
 
Ordenação de pares e ímpares
Ordenação de pares e ímparesOrdenação de pares e ímpares
Ordenação de pares e ímpares
 
Multiplicação de Matrizes
Multiplicação de MatrizesMultiplicação de Matrizes
Multiplicação de Matrizes
 
Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...
Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...
Desenvolvimento do protótipo de uma ferramenta para Engenharia de Requisitos ...
 
O uso de tecnologias de big data na concepção e execução de estratégias de en...
O uso de tecnologias de big data na concepção e execução de estratégias de en...O uso de tecnologias de big data na concepção e execução de estratégias de en...
O uso de tecnologias de big data na concepção e execução de estratégias de en...
 

Oracle XML DB - Conceitos iniciais

  • 1. Banco de Dados XML Diego A. Lusa, Mateus H. Dal Forno Universidade de Passo Fundo Programa de P´os Gradua¸c˜ao em Computa¸c˜ao Aplicada - PPGCA 14 de novembro de 2014 1 / 37
  • 2. Sum´ario 1. Conceitos B´asicos 2. Oracle XML DB 2 / 37
  • 3. XML - eXtensible Markup Language Linguagem criada para descrever dados ´E uma linguagem de marca¸c˜ao que n˜ao apresenta um conjunto de tags pr´e-definidas ´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
  • 4. XML - namespaces ´E um m´etodo utilizado para evitar conflitos de nome dos elementos no XML Qualifica o elemento Um nome qualificado (QName) ´e composto pelo namespace + nome do elemento, no formado {Namespace}:nome Utiliza-se prefixos para facilitar o uso de namespaces Por conven¸c˜ao, um namespace ´e declarado no formado de uma URI 4 / 37
  • 5. 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
  • 6. XML Schema Define a estrutura de um determinado de uma arquivo XML Consiste na defini¸c˜ao da hierarquia e dos tipos de dados que podem ser utilizados nas instˆancias XML Provˆe um mecanismo para valida¸c˜ao da estrutura de uma instˆancia XML Alternativa para o DTD (Document Type Definition) 6 / 37
  • 7. 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
  • 8. XPath Linguagem utilizada para localizar informa¸c˜oes em arquivos XML Oferece um conjunto de operadores e uma sintaxe formal de consulta Utiliza-se a hierarquia do schema definido para gerar as consultas ´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
  • 9. XQuery XQuery ´e o SQL para cole¸c˜oes XML Utiliza um conjunto espec´ıfico de fun¸c˜oes e utiliza a XPath como um dos recursos Acrˆonimo FLOWR (pronuncia-se Flower): for: Itera sobre uma cole¸c˜ao de dados let: Declara vari´aveis e atribui a elas valores where: ´E uma condi¸c˜ao aplicada a sele¸c˜ao da cole¸c˜ao order by: Ordena a sa´ıda return: Retorna os valores desejados 9 / 37
  • 10. XQuery Exemplo for $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
  • 11. XSLT - EXtensible Stylesheet Language Transformations Utilizada para transformar documentos XML entre diferentes estruturas Utiliza XPath para navegar entre a estrutura do documento de origem Oferece diversas fun¸c˜oes nativamente 11 / 37
  • 12. 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
  • 14. Caracter´ısticas b´asicas ´E um conjunto de tecnologias para banco de dados Oracle, voltadas a: Armazenamento de dados XML Cria¸c˜ao de dados em formato XML Acesso, busca, valida¸c˜ao, transforma¸c˜ao, convers˜ao e indexa¸c˜ao de dados XML Inclu´ıdo como parte do Oracle Database a partir da vers˜ao Oracle9i Release 2 (9.2) Provˆe meios para interoperar SQL e XML 14 / 37
  • 15. XMLType Tipo de dado SQL nativo criado para armazenar documentos XML Pode-se utiliz´a-lo como coluna, vari´avel ou argumento em fun¸c˜oes e procedimentos Tamb´em ´e poss´ıvel criar uma tabela do tipo XMLType Apenas estruturas XML bem formadas s˜ao aceitas pelo tipo XMLType Adicionalmente, os documentos podem ser validados com um XSD 15 / 37
  • 16. Cria¸c˜ao das tabelas e usu´ario 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
  • 17. Inser¸c˜ao de dados Exemplo insert 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
  • 18. Inser¸c˜ao de dados Exemplo insert 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
  • 19. Atualiza¸c˜ao de dados Parˆametros do procedimento updateXML: xmltype instance: Instˆancia XML xpath string: Express˜ao XPath que identifica o valor a ser atualizado value expr: Novo valor namespace string: Declara¸c˜ao dos namespaces utilizados na XPath Exemplo select * 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
  • 20. Atualizando dados Para inserir novos valores dentro da estrutura do XML pode-se utilizar os procedimentos: insertChildXML insertChildXMLBefore insertChildXMLAfter appendChildXML Dentre os argumentos do procedimento est´a a express˜ao XPath que indica o ponto exato da inser¸c˜ao 20 / 37
  • 21. Atualiza¸c˜ao de dados Parˆametros do procedimento insetChildXML: xmltype instance : Instˆancia XML xpath string: Express˜ao XPath que identifica onde inserir o novo valor child expr: Subexpres˜ao XPath referente ao que ser´a inserido value expr: Fragmento de XML, do tipo XMLType, que ir´a compor o que foi definido em child expr namespace string: Declara¸c˜ao 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
  • 22. Atualiza¸c˜ao de dados Parˆametros do procedimento insertChildXMLbefore: xmltype instance : Instˆancia XML xpath string: Express˜ao XPath que identifica o elemento pai child expr: Express˜ao XPath - Inserir antes de quem? value expr: Fragmento de XML, do tipo XMLType, que a ser inserido namespace string: Declara¸c˜ao 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
  • 23. Atualiza¸c˜ao de dados Parˆametros do procedimento insertChildXMLafter: xmltype instance : Instˆancia XML xpath string: Express˜ao XPath que identifica o elemento pai child expr: Express˜ao XPath - Inserir depois de quem ? value expr: Fragmento de XML, do tipo XMLType, a ser inserido namespace string: Declara¸c˜ao dos namespaces utilizados na XPath Exemplo update 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
  • 24. Atualiza¸c˜ao de dados Parˆametros do procedimento appendChildXML: xmltype instance : Instˆancia XML xpath string: Express˜ao XPath que onde inserir o novo fragment value expr: Fragmento de XML, do tipo XMLType, a ser inserido namespace string: Declara¸c˜ao 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
  • 25. Atualiza¸c˜ao de dados Parˆametros do procedimento deleteXML: xmltype instance : Instˆancia XML xpath string: Express˜ao XPath que onde indica o fragmento a ser removido 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
  • 26. Consultas ao conte´udo XML Parˆametros do m´etodo extract: xpath string: Express˜ao XPath que define a consulta a ser executada namespace string: Declara¸c˜ao dos namespaces utilizados na XPath Tamb´em pode-se utilizar a fun¸c˜ao extract, a qual recebe como um dos parˆametros uma instˆancia 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
  • 27. Consultas ao conte´udo 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
  • 28. Utilizando XSLT Parˆametros do procedimento XMLSerialize: DOCUMENT ou CONTENT: Especifica o tipo documento. Se informado DOCUMENT, o XML informado precisa ser v´alido. Se informado CONTENT, o conte´udo deve ser um XML v´alido, mas n˜ao precisa apresentar apenas um elemento raiz valor: Conte´udo XML no formato textual Parˆametros do m´etodo transform: xmltype instance : C´odigo da transforma¸c˜ao do tipo XMLType 28 / 37
  • 29. 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
  • 30. Utilizando XSLT (continua¸c˜ao. . . ) 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
  • 31. Utilizando XQuery Parˆametros do procedimento XQuery: xmltype instance: Express˜ao XQuery v´alida em formato texto. Qualquer valor inv´alido ´e criticado pelo construtor. PASSING: Cl´ausula que informa a instˆancia XML a ser submetida `a XQuery RETURNING CONTENT: Indica que o resultado deve ser retornado como uma fragmento XML. 31 / 37
  • 32. 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
  • 33. Trabalhando com XML Schema Parˆametros do procedimento REGISTERSCHEMA, package DBMS XMLSCHEMA: schemaurl: Identificador ´unico do schema, no formato de uma URL schemadoc: XML Schema v´alido, em formato textual A package DBMS XMLSCHEMA cont´em outros procedimentos que n˜ao ser˜ao abordados neste momento 33 / 37
  • 34. Trabalhando com XML Schema Exemplo BEGIN 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
  • 35. Trabalhando com XML Schema (continua¸c˜ao. . . ) Exemplo CREATE 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
  • 36. Trabalhando com XML Schema (continua¸c˜ao. . . ) Exemplo 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:aluno> </a:alunos>’ ) ); 36 / 37
  • 37. Verifica¸c˜oes M´etodo isSchemaBased: Retorna 1 se uma determinada instˆancia XML tem associada uma URI de XML Schema. O valor 0 ´e retornado quando n˜ao h´a associa¸c˜ao M´etodo isSchemaValid: Valida a instˆancia de XML contra o seu XML Schema. O valor 1 indica sucesso e 0 indica falha M´etodo isSchemaValidated: Indica se a instˆancia XML foi validada contra um XML Schema ou n˜ao 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