Introdução para usar consultas XPath (SQLXML 4.0)
Uma consulta de linguagem XPath pode ser especificada como parte de uma URL ou em um modelo. O esquema de mapeamento determina a estrutura desse fragmento resultante, e os valores são recuperados no banco de dados. Conceitualmente, esse processo é semelhante a criar exibições que usem a instrução CREATE VIEW e escrever consultas SQL com base nelas.
Observação |
---|
Para entender as consultas XPath no SQLXML 4.0, é necessário estar familiarizado com as exibições XML e os conceitos relacionados, como modelos e esquemas de mapeamento. Para obter mais informações, consulte Introdução a esquemas XSD anotados (SQLXML 4.0) e o padrão XPath definido pelo W3C (World Wide Web Consortium). |
Um documento XML consiste em nós como, por exemplo, de elemento, de atributo, de texto etc. Por exemplo, considere este documento XML:
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was
very satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
Neste documento, <Customer> é um nó de elemento, cid é um nó de atributo e "Important" é um nó de texto.
XPath é uma linguagem de navegação gráfica usada para selecionar um conjunto de nós em um documento XML. Cada operador de XPath seleciona um conjunto de nós com base em um conjunto selecionado por um operador de XPath anterior. Por exemplo, dado um conjunto dos nós <Customer>, a XPath pode selecionar todos os nós <Order> com o atributo date cujo valor seja igual a "7/14/1999". O conjunto de nós resultante contém todos os pedidos com a data 14/7/1999.
XPath é definida pelo W3C como uma linguagem de navegação padrão. O SQLXML 4.0 implementa um subconjunto da especificação XPath do W3C, localizada em http://www.w3.org/TR/1999/PR-xpath-19991008.html.
Estas são as principais diferenças entre a implementação da XPath do W3C e a implementação do SQLXML 4.0.
Consultas raiz
O SQLXML 4.0 não oferece suporte à consulta raiz (/). Todas as consultas XPath devem começar em <ElementType> de nível superior no esquema.
Informando erros
A especificação XPath do W3C não define nenhuma condição de erro. As consultas XPath que deixam de selecionar algum nó retornam um conjunto de nós vazio. No SQLXML 4.0, uma consulta pode retornar muitos tipos de mensagens de erro.
Ordem de documentos
No SQLXML 4.0, a ordem de documentos nem sempre é determinada. Por isso, predicados numéricos e eixos que usam a ordem de documentos (como, por exemplo, following) não são implementados.
A ausência da ordem de documentos também significa que o valor da cadeia de caracteres de um nó só pode ser avaliado quando esse nó é mapeado para uma única coluna em uma única linha. Um elemento com elementos filho ou nós IDREFS ou NMTOKENS não pode ser convertido em cadeia de caracteres.
Observação Em alguns casos, a anotação key-fields ou as chaves da anotação relationship pode resultar em uma ordem de documentos determinística. No entanto, não se trata do uso primário dessas anotações. Para obter mais informações, consulte Identificando colunas de chave usando campos sql:key (SQLXML 4.0) e Especificando relações usando sql:relationship (SQLXML 4.0).
Tipos de dados
O SQLXML 4.0 tem limitações na implementação dos tipos de dados XPath string, number e boolean. Para obter mais informações, consulte Tipos de dados XPath (SQLXML 4.0).
Consultas de vários produtos
O SQLXML 4.0 não oferece suporte a consultas XPath de vários produtos como, por exemplo, Customers[Order/@OrderDate=Order/@ShipDate]. Essa consulta seleciona todos os clientes com um pedido qualquer em que OrderDate é igual a ShipDate de qualquer pedido.
No entanto, o SQLXML 4.0 oferece suporte a consultas como, por exemplo, Customer[Order[@OrderDate=@ShippedDate]], que seleciona clientes com qualquer pedido em que OrderDate é igual a ShipDate.
Manipulação de erros e segurança
Dependendo do esquema e da expressão de consulta XPath usados, os erros Transact-SQL podem ser expostos a usuários em determinadas condições.
As tabelas nas seguintes seções fornecem detalhes sobre como a implementação de consultas XPath no SQLXML 4.0 se diferencia da especificação do W3C nessas áreas.
Funcionalidade com suporte
A seguinte tabela mostra os recursos da linguagem XPath implementados no SQLXML 4.0.
Recurso |
Item |
Link para consultas de exemplo |
---|---|---|
Eixos |
Eixos attribute, child, parent e self |
|
Predicados com valor booleano incluindo predicados sucessivos e aninhados |
|
Especificando operadores aritméticos em consultas XPath (SQLXML 4.0) |
Todos os operadores relacionais |
=, !=, <, <=, >, >= |
Especificando operadores relacionais em consultas XPath (SQLXML 4.0) |
Operadores aritméticos |
+, -, *, div |
Especificando operadores aritméticos em consultas XPath (SQLXML 4.0) |
Funções de conversão explícitas |
number(), string(), Boolean() |
Especificando funções de conversão explícitas em consultas XPath (SQLXML 4.0) |
Operadores booleanos |
AND, OR |
Especificando operadores booleanos em consultas XPath (SQLXML 4.0) |
Funções booleanas |
true(), false(), not() |
Especificando funções booleanas em consultas XPath (SQLXML 4.0) |
Variáveis XPath |
|
Especificando variáveis XPath em consultas XPath (SQLXML 4.0) |
Funcionalidade sem suporte
A seguinte tabela mostra os recursos da linguagem XPath não implementados no SQLXML 4.0.
Recurso |
Item |
---|---|
Eixos |
ancestor, ancestor-or-self, descendant, descendant-or-self (//), following, following-sibling, namespace, preceding, preceding-sibling |
Predicados de valor numérico |
|
Operadores aritméticos |
mod |
Funções de nó |
ancestor, ancestor-or-self, descendant, descendant-or-self (//), following, following-sibling, namespace, preceding, preceding-sibling |
Funções de cadeia de caracteres |
string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), string-length(), normalize(), translate() |
Funções booleanas |
lang() |
Funções numéricas |
sum(), floor(), ceiling(), round() |
Operador de união |
| |
Ao especificar consultas XPath em um modelo, observe o seguinte comportamento:
- XPath pode conter caracteres como, por exemplo, < ou & que tenham significados especiais no XML (e o modelo é um documento XML). Você deve sair desses caracteres usando a codificação XML &- ou especificar o XPath na URL.