Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Este tópico descreve os seguintes conceitos fundamentais do XQuery:
Sequência
QNames e namespaces predefinidos
Sequência
Em XQuery, o resultado de uma expressão é uma sequência composta por uma lista de nós XML e instâncias de tipos atômicos XSD. Uma entrada individual numa sequência é referida como um item. Um item em uma sequência pode ser um dos seguintes:
Um nó como um elemento, atributo, texto, instrução de processamento, comentário ou documento
Um valor atômico, como uma instância de um tipo simples XSD
Por exemplo, a consulta a seguir constrói uma sequência de dois itens de nó de elemento:
SELECT Instructions.query('
<step1> Step 1 description goes here</step1>,
<step2> Step 2 description goes here </step2>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID=7;
Este é o resultado:
<step1> Step 1 description goes here </step1>
<step2> Step 2 description goes here </step2>
Na consulta anterior, a vírgula (,) no final da construção <step1> é o construtor da sequência e é necessária. Os espaços em branco nos resultados são adicionados apenas para ilustração e são incluídos em todos os resultados de exemplo nesta documentação.
A seguir estão informações adicionais que você deve saber sobre sequências:
Se uma consulta resultar em uma sequência que contém outra sequência, a sequência contida será nivelada na sequência do contêiner. Por exemplo, a sequência ((1,2, (3,4,5)),6) é nivelada no modelo de dados como (1, 2, 3, 4, 5, 6).
DECLARE @x xml; SET @x = ''; SELECT @x.query('(1,2, (3,4,5)),6');Uma sequência vazia é uma sequência que não contém nenhum item. É representado como "()".
Uma sequência com apenas um item pode ser tratada como um valor atômico e vice-versa. Ou seja, (1) = 1.
Nesta implementação, a sequência deve ser homogénea. Ou seja, ou você tem uma sequência de valores atômicos ou uma sequência de nós. Por exemplo, as seguintes sequências são válidas:
DECLARE @x xml;
SET @x = '';
-- Expression returns a sequence of 1 text node (singleton).
SELECT @x.query('1');
-- Expression returns a sequence of 2 text nodes
SELECT @x.query('"abc", "xyz"');
-- Expression returns a sequence of one atomic value. data() returns
-- typed value of the node.
SELECT @x.query('data(1)');
-- Expression returns a sequence of one element node.
-- In the expression XML construction is used to construct an element.
SELECT @x.query('<x> {1+2} </x>');
A consulta a seguir retorna um erro, porque sequências heterogêneas não são suportadas.
SELECT @x.query('<x>11</x>, 22');
QName
Cada identificador em um XQuery é um QName. Um QName é composto por um prefixo de namespace e um nome local. Nesta implementação, os nomes das variáveis no XQuery são QNames e não podem ter prefixos.
Considere o exemplo a seguir no qual uma consulta é especificada em relação a uma variável de xml não tipada:
DECLARE @x xml;
SET @x = '<Root><a>111</a></Root>';
SELECT @x.query('/Root/a');
Na expressão (/Root/a), Root e a são QNames.
No exemplo a seguir, uma consulta é especificada em relação a uma coluna de xml digitada. A consulta itera todos os elementos <etapa> no primeiro local do workcenter.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
for $Step in /AWMI:root/AWMI:Location[1]/AWMI:step
return
string($Step)
') AS Result
FROM Production.ProductModel
WHERE ProductModelID=7;
Na expressão de consulta, observe o seguinte:
AWMI root,AWMI:Location,AWMI:stepe$Stepsão todos QNames.AWMIé um prefixo, eroot,LocationeStepsão todos nomes locais.A variável
$stepé um QName e não tem um prefixo.
Os namespaces a seguir são predefinidos para uso com suporte a XQuery no SQL Server.
| Prefixo | URI |
|---|---|
| xs | http://www.w3.org/2001/XMLSchema |
| XSI | http://www.w3.org/2001/XMLSchema-instance |
| XDT | http://www.w3.org/2004/07/xpath-datatypes |
| FN | http://www.w3.org/2004/07/xpath-functions |
| (sem prefixo) | urn:schemas-microsoft-com:xml-sql |
| SQLTYPES | https://schemas.microsoft.com/sqlserver/2004/sqltypes |
| XML | http://www.w3.org/XML/1998/namespace |
| (sem prefixo) | https://schemas.microsoft.com/sqlserver/2004/SOAP |
Cada banco de dados que você cria tem o sys coleção de esquema XML. Ele reserva esses esquemas para que possam ser acessados a partir de qualquer coleção de esquemas XML criada pelo usuário.
Observação
Esta implementação não suporta o prefixo local conforme descrito na especificação XQuery no http://www.w3.org/2004/07/xquery-local-functions.