Introdução para usar consultas XPath (SQLXML 4.0)
Aplica-se a: SQL Server Banco de Dados SQL do Azure
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 aos 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 de <nós Cliente>, o XPath pode selecionar todos os <nós Pedido> com o valor de atributo de data de "14/07/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, que está 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 (/). Cada consulta XPath deve começar em um ElementType> de nível <superior no esquema.
Relatando 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. Portanto, predicados numéricos e eixos que usam a ordem do documento (como a seguir) 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 de campos-chave ou chaves da anotação de relacionamento podem resultar em uma ordem determinística do documento. No entanto, esse não é o uso principal dessas anotações Para obter mais informações, consulte Identificando colunas de chave usando sql:key-fields (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 da cadeia de caracteres, número e tipos de dados boolianos XPath. Para obter mais informações, consulte Tipos de dados XPath (SQLXML 4.0).
Consultas entre 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.Tratamento de erros e segurança
Dependendo do esquema e da expressão de consulta XPath usados, os erros do Transact-SQL podem ser expostos aos usuários sob 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 atributo, filho, pai e auto | Especificando eixos em consultas XPath (SQLXML 4.0) |
Predicados com valor booliano 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 | número(), string(), booleano() | Especificando funções de conversão explícitas em consultas XPath (SQLXML 4.0) |
Operadores booleanos | AND, OR | Especificando operadores boolianos em consultas XPath (SQLXML 4.0) |
funções boolianas | verdadeiro(), falso(), não() | Especificando funções boolianas 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 | ancestral, ancestral-ou-próprio, descendente, descendente-ou-próprio (//), seguindo, seguindo-irmão, namespace, anterior, anterior-irmão |
Predicados de valor numérico | |
Operadores aritméticos | mod |
Funções de nó | ancestral, ancestral-ou-próprio, descendente, descendente-ou-próprio (//), seguindo, seguindo-irmão, namespace, anterior, anterior-irmão |
Funções de cadeia de caracteres | string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), string-length(), normalize(), translate() |
funções boolianas | lang() |
Funções numéricas | sum(), floor(), ceiling(), round() |
operador Union | | |
Ao especificar consultas XPath em um modelo, observe o seguinte comportamento:
- XPath pode conter caracteres como < ou & que têm significados especiais em XML (e template é um documento XML). Você deve escapar desses caracteres usando XML &-codificação ou especificar o XPath na URL.