Tipo de dados xml – Parte 2

Conheça os métodos do tipo xml que permitem consultar ou modificar dados xml.

Tipo de dados xml – Parte 2

 

por Jerônimo Jardel Vogt

No artigo anterior, falamos sobre o tipo de dados xml, que permite o armazenamento de documentos XML em tabela, variável ou parâmetro, as suas vantagens e uso da sintaxe. Nessa segunda parte veremos os métodos do tipo xml que permitem consultar ou modificar dados xml. Também veremos a sintaxe e uso do XQuery, que é a linguagem de consulta que possibilita a construção de consultas complexas sobre dados xml.

O que é XQuery?

XQuery é usado para executar consultas sobre dados XML. A sintaxe XQuery inclui e estende o XPath 2.0, permitindo a execução de consultas complexas sobre fontes de dados XML. O tipo de dados xml no SQL Server, tem métodos que permitem a recuperação ou alteração de dados armazenados nesse tipo através da especificação de uma expressão XQuery. O XQuery suportado no SQL Server 2005 é baseado na especificação 1.0 da linguagem XQuery disponibilizada pelo W3C.

Uma consulta XQuery consiste em duas partes principais: uma seção opcional chamada de prolog, onde namespaces podem ser declarados e schemas podem ser importados, e a seção body, em que expressões XQuery são usadas para especificar os dados a serem retornados. Uma expressão XQuery pode ser um simples path que descreve os nós XML a serem retornados ou uma expressão complexa que gera um resultado XML.

Uma expressão XQuery path é baseada na linguagem XPath e descreve a localização de determinado nó em um documento XML. Esse path pode ser absoluto, quando descreve a localização do nó seguindo o caminho completo a partir do root, ou relativo, quando descreve a localização de um nó relativo a um nó identificado previamente. A seguir, alguns exemplos de expressões XQuery:

 

Expressão XQuery Path

Descrição

/InvoiceList/Invoice

Todos os elementos Invoice imediatamente abaixo do elemento root InvoiceList.

(/InvoiceList/Invoice) [2]

O segundo elemento Invoice abaixo do elemento root InvoiceList.

(InvoiceList/Invoice/@InvoiceNo) [1]

O atributo InvoiceNO do primeiro elemento Invoice do elemento root InvoiceList.

(InvoiceList/Invoice/Customer/text())[1]

O texto do primeiro elemento Customer em um elemento Invoice abaixo do elemento root InvoiceList.

/InvoiceList/Invoice[@InvoiceNo=1000]

Todos os elementos Invoice de um elemento InvoiceList que têm um atributo InvoiceNo com valor de 1000.

 

A especificação da linguagem XQuery inclui os comandos for, let, order by, where e return, comumente conhecidos como comandos FLOWR (flower). E o SQL Server 2005 suporta os comandos for, where e return, que estão descritos na tabela abaixo.

 

Comando

Descrição

for

Usado para percorrer um grupo de nós num mesmo nível em um documento XML.

where

Usado para aplicar critérios de filtro na interação com o nó. O XQuery tem funções como count que podem ser usados nos comandos where.

return

Usado para especificar o XML retornado pela interação.

 

O exemplo abaixo mostra uma expressão XQuery que inclui as palavras-chaves for, where e return. Essa expressão retorna todo elemento Invoice que tem mais de um elemento Item no seu elemento filho Items.

 

 

for $i in /InvoiceList/Invoice

where count($i/Items/Item) > 1

return $i

 

Para mais informação sobre o uso do XQuery, procure por “XQuery Basics” no SQL Server Books Online.

Os métodos query, value e exist


O tipo de dados xml do SQL Server 2005 suporta quatro métodos que podem ser usados para consultar ou modificar dados XML. Esses métodos são chamados usando a sintaxe data_type.method_name. Entender o propósito de cada um desses métodos ajudará na construção de aplicações que processam XML de forma nativa no banco de dados.

O método query é usado para extrair um fragmento XML de um tipo xml, e o XML retornado pelo método query é determinado por uma expressão XQuery passada como parâmetro. O exemplo abaixo mostra como usar o método query.

 



Nesse exemplo declaramos uma variável do tipo xml com um fragmento XML. A expressão XQuery usada no método query percorre a lista de elementos Employee retornando o atributo id de cada elemento. O resultado retornado pela consulta é mostrado abaixo.


 

 

O método value é usado para retornar um simples valor de um documento XML. Para usar o método value, é necessário especificar uma expressão XQuery que identifica o nó no XML a ser consultado e o tipo de dados Transact-SQL do valor a ser retornado. O exemplo abaixo mostra como usar o método value.

 

SELECT @EMPLOYEES.value('

(/Department/Employees/Employee/@StartDate)[1]', 'Datetime')

 

Usando o mesmo fragmento XML, essa consulta retorna o valor do atributo StartDate do primeiro elemento Employee, ou seja, 1997-12-12 00:00:00.000.

 

O método exist é usado para determinar quando determinado nó existe em um documento XML. O método exist retorna 1 se uma ou mais instâncias de um nó específico existe no documento e 0 se o nó não existe. O exemplo abaixo mostra como usar o método exist.

 

SELECT @EMPLOYEES.exist('

/Department/Employees/Employee[@id=267]')

 

Nesse caso, o retorno será “1”, pois existe um elemento Employee cujo atributo id é 267.

 

No próximo artigo, veremos o método modify e suas extensões insert, replace e delete que permitem alterar dados XML em um tipo xml, e também o método nodes, que permite gerar uma visão relacional a partir de dados XML. Um grande abraço e até lá.

Artigos relacionados