Especificando operadores relacionais em consultas XPath (SQLXML 4.0)
Os seguintes exemplos mostram como operadores relacionais são especificados em consultas XPath. As consultas XPath nesses exemplos são especificadas com relação ao esquema de mapeamento contido em SampleSchema1.xml. Para obter mais informações sobre esse esquema de exemplo, consulte Esquema XSD anotado de exemplo para exemplos de XPath (SQLXML 4.0).
Exemplos
A. Especifique operador relacional
Essa consulta XPath retorna os elementos filho do elemento <Customer> em que o valor de atributo CustomerID é "1" e em que todos os elementos filho <Order> contêm um filho <OrderDetail> com um atributo OrderQty cujo valor é maior que 3:
/child::Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]
O predicado especificado nos colchetes filtra os elementos <Customer>. Apenas os elementos <Customer> com pelo menos um neto <OrderDetail> com um valor de atributo OrderQty maior que 3 são retornados.
O eixo child é o padrão. Assim, a consulta pode ser especificada como:
/Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]
Para testar a consulta XPath com relação ao esquema de mapeamento
Copie o código do esquema de exemplo e cole-o em um arquivo de texto. Salve o arquivo como SampleSchema1.xml.
Crie o modelo a seguir (SpecifyRelationalA.xml) e salve-o no diretório em que SampleSchema1.xml foi salvo.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3] </sql:xpath-query> </ROOT>
O caminho do diretório especificado para o esquema de mapeamento (SampleSchema1.xml) é relativo ao diretório em que o modelo foi salvo. Também é possível especificar um caminho absoluto, por exemplo:
mapping-schema="C:\MyDir\SampleSchema1.xml"
Crie e use o Script de Teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.
Para obter mais informações, consulte Usando o ADO para executar consultas do SQLXML 4.0.
Aqui está o conjunto de resultados da execução do modelo:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<OrderDetail ProductID="Prod-760" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-763" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-766" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-732" UnitPrice="440.1742" OrderQty="4" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-757" UnitPrice="1049.7528" OrderQty="4" UnitPriceDiscount="0" />
</ROOT>
B. Especifique o operador relacional na consulta XPath e use a função Booleano para comparar o resultado
Essa consulta retorna todos os elementos filho <Order> do nó de contexto com um valor de atributo SalesPersonID inferior a 270:
/child::Customer/child::Order[(attribute::SalesPersonID < 270)=true()]
Um atalho para o eixo attribute (@) pode ser especificado e, como o eixo child é o padrão, ele pode ser omitido da consulta:
/Customer/Order[(@SalesPersonID < 270)=true()]
Observação |
---|
Quando essa consulta é especificada em um modelo, o caractere < deve ter a entidade codificada porque o caractere < tem um significado especial em um documento XML. Em um modelo, use < para especificar o caractere <. |
Para testar a consulta XPath com relação ao esquema de mapeamento
Copie o código do esquema de exemplo e cole-o em um arquivo de texto. Salve o arquivo como SampleSchema1.xml.
Crie o modelo a seguir (SpecifyRelationalB.xml) e salve-o no diretório em que SampleSchema1.xml foi salvo.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer/Order[(@SalesPersonID<270)=true()] </sql:xpath-query> </ROOT>
O caminho do diretório especificado para o esquema de mapeamento (SampleSchema1.xml) é relativo ao diretório em que o modelo foi salvo. Também é possível especificar um caminho absoluto, por exemplo:
mapping-schema="C:\MyDir\SampleSchema1.xml"
Crie e use o Script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.
Para obter mais informações, consulte Usando o ADO para executar consultas do SQLXML 4.0.
Aqui está o conjunto de resultados parcial da execução do modelo:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order SalesOrderID="Ord-46613" SalesPersonID="268"
OrderDate="2002-07-01T00:00:00"
DueDate="2002-07-13T00:00:00"
ShipDate="2002-07-08T00:00:00">
<OrderDetail ProductID="Prod-739" UnitPrice="917.9363"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-779" UnitPrice="1491.4221"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-825" UnitPrice="242.1391"
OrderQty="1" UnitPriceDiscount="0" />
</Order>
<Order SalesOrderID="Ord-71919" SalesPersonID="268"
OrderDate="2004-06-01T00:00:00"
DueDate="2004-06-13T00:00:00"
ShipDate="2004-06-08T00:00:00">
<OrderDetail ProductID="Prod-961" UnitPrice="534.492"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-965" UnitPrice="534.492"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-966" UnitPrice="1716.5304"
OrderQty="1" UnitPriceDiscount="0" />
</Order>
...
</ROOT>