Especificando predicados com valor booliano em consultas XPath (SQLXML 4.0)
Aplica-se a: SQL Server Banco de Dados SQL do Azure
Os exemplos a seguir mostram como os predicados com valor booliano 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 informações sobre esse esquema de exemplo, consulte Exemplo de esquema XSD anotado para exemplos de XPath (SQLXML 4.0).
Exemplos
R. Especificar vários predicados
A consulta XPath a seguir usa vários predicados para localizar informações de ordem de uma determinada ID de ordem e uma ID de cliente:
/child::Customer[attribute::CustomerID="1"]/child::Order[attribute::OrderID="Ord-43860"]
Um atalho para o attribute
eixo (@) pode ser especificado e, como o child
eixo é o padrão, ele pode ser omitido da consulta:
/Customer[@CustomerID="1"]/Order[@SalesOrderID="Ord-43860"]
Para testar a consulta XPath com relação ao esquema de mapeamento
Copie o código de esquema de exemplo e cole-o em um arquivo de texto. Salve o arquivo como SampleSchema1.xml.
Crie o modelo a seguir (BooleanValuedPredicatesA.xml) e o salve 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[@SalesOrderID="Ord-43860"] </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 Usar o ADO para executar consultas SQLXML 4.0.
Este é o resultado:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <Order SalesOrderID="Ord-43860" SalesPersonID="280" OrderDate="2001-08-01T00:00:00" DueDate="2001-08-13T00:00:00" ShipDate="2001-08-08T00:00:00"> <OrderDetail ProductID="Prod-729" UnitPrice="226.8571" OrderQty="1" UnitPriceDiscount="0" /> <OrderDetail ProductID="Prod-732" UnitPrice="440.1742" OrderQty="1" UnitPriceDiscount="0" /> <OrderDetail ProductID="Prod-738" UnitPrice="220.2496" OrderQty="1" UnitPriceDiscount="0" /> <OrderDetail ProductID="Prod-753" UnitPrice="2576.3544" OrderQty="2" UnitPriceDiscount="0" /> <OrderDetail ProductID="Prod-756" UnitPrice="1049.7528" OrderQty="1" UnitPriceDiscount="0" /> <OrderDetail ProductID="Prod-758" UnitPrice="1049.7528" OrderQty="2" UnitPriceDiscount="0" /> <OrderDetail ProductID="Prod-761" UnitPrice="503.3507" OrderQty="2" UnitPriceDiscount="0" /> <OrderDetail ProductID="Prod-762" UnitPrice="503.3507" OrderQty="1" UnitPriceDiscount="0" /> <OrderDetail ProductID="Prod-763" UnitPrice="503.3507" OrderQty="1" UnitPriceDiscount="0" /> <OrderDetail ProductID="Prod-765" UnitPrice="503.3507" OrderQty="2" UnitPriceDiscount="0" /> <OrderDetail ProductID="Prod-768" UnitPrice="503.3507" OrderQty="1" UnitPriceDiscount="0" /> <OrderDetail ProductID="Prod-770" UnitPrice="503.3507" OrderQty="1" UnitPriceDiscount="0" /> </Order> </ROOT>
B. Especificar predicados sucessivos e aninhados
A consulta a seguir mostra o uso de predicados sucessivos. A consulta retorna todos os <elementos filho Customer> do nó de contexto que têm um atributo SalesPersonID com um valor de 277 e um atributo TerritoryID com um valor de 3:
/child::Customer[attribute::SalesPersonID="277"][attribute::TerritoryID="3"]
A consulta retorna os <elementos Customer> que atendem a ambas as condições especificadas nos predicados.
Um atalho para o eixo de atributo (@) pode ser especificado e, como o eixo filho é o padrão, ele pode ser omitido da consulta:
/Customer[@SalesPersonID="277"][@TerritoryID="3"]
A consulta XPath a seguir ilustra o uso de predicados aninhados. A consulta retorna todos os <elementos filho Customer> do nó de contexto que incluem< elementos filho Order> com pelo menos um <elemento Order> que tenha um valor de atributo SalesPersonID de 2.
/Customer[Order[@SalesPersonID=2]]
Para testar a consulta XPath com relação ao esquema de mapeamento
Copie o código de esquema de exemplo e cole-o em um arquivo de texto. Salve o arquivo como SampleSchema1.xml.
Crie o modelo a seguir (nestedSuccessive.xml) e o salve 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[@SalesPersonID="277"][@TerritoryID="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 Usar o ADO para executar consultas SQLXML 4.0.
O seguinte é um resultado parcial:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="22" SalesPersonID="277" TerritoryID="3"
AccountNumber="22" CustomerType="S"
Orders="Ord-43874 Ord-44519 Ord-46989 Ord-48013 Ord-49130 Ord-50274 Ord-51807 Ord-57113 Ord-63162 Ord-69495">
<Order SalesOrderID="Ord-43874" SalesPersonID="277"
OrderDate="2001-08-01T00:00:00"
DueDate="2001-08-13T00:00:00"
ShipDate="2001-08-08T00:00:00">
<OrderDetail ProductID="Prod-763" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
</Order>
...
</Customer>
<Customer CustomerID="39" SalesPersonID="277" TerritoryID="3"
AccountNumber="39" CustomerType="S"
Orders="Ord-47428 Ord-48367 Ord-49529 Ord-50742 Ord-53591 Ord-59051 Ord-65301 Ord-71912"> <Order SalesOrderID="Ord-47428" SalesPersonID="277"
OrderDate="2002-09-01T00:00:00"
DueDate="2002-09-13T00:00:00"
ShipDate="2002-09-08T00:00:00">
<OrderDetail ProductID="Prod-759" UnitPrice="563.7528" OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-769" UnitPrice="563.7528" OrderQty="1" UnitPriceDiscount="0" />
...
</Order>
...
</Customer>
...
</ROOT>
C. Especificar um predicado de nível superior
A consulta a seguir retorna os nós do elemento filho Customer> do nó de contexto que têm< filhos do elemento Order>.< A consulta testa o caminho de local como o predicado de nível superior:
/child::Customer[child::Order]
O eixo filho é o padrão. Assim, a consulta pode ser especificada como:
/Customer[Order]
Para testar a consulta XPath com relação ao esquema de mapeamento
Copie o código de esquema de exemplo e cole-o em um arquivo de texto. Salve o arquivo como SampleSchema1.xml.
Crie o modelo a seguir (TopLevelPredicate.xml) e o salve 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] </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 Usar o ADO para executar consultas SQLXML 4.0.
Este é o resultado parcial:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="1" SalesPersonID="280" TerritoryID="1" AccountNumber="1" CustomerType="S" Orders="Ord-43860 Ord-44501 Ord-45283 Ord-46042">
<Order SalesOrderID="Ord-43860" SalesPersonID="280" OrderDate="2001-08-01T00:00:00" DueDate="2001-08-13T00:00:00" ShipDate="2001-08-08T00:00:00">
<OrderDetail ProductID="Prod-729" UnitPrice="226.8571" OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-732" UnitPrice="440.1742" OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-738" UnitPrice="220.2496" OrderQty="1" UnitPriceDiscount="0" />
...
</Order>
<Order SalesOrderID="Ord-44501" SalesPersonID="280" OrderDate="2001-11-01T00:00:00" DueDate="2001-11-13T00:00:00" ShipDate="2001-11-08T00:00:00">
<OrderDetail ProductID="Prod-725" UnitPrice="226.8571" OrderQty="3" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-726" UnitPrice="226.8571" OrderQty="2" UnitPriceDiscount="0" />
...
</Order> ...
</Customer>
...
</ROOT>