Especificando eixos em consultas XPath (SQLXML 4.0)
Os seguintes exemplos mostram como os eixos 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. Recuperar elementos filhos do nó de contexto
A seguinte consulta de XPath seleciona todos os elementos filhos de <Contact> do nó de contexto:
/child::Contact
Na consulta, child é o eixo e Contact é o teste do nó (TRUE se Contact for um nó de <elemento>, porque o <elemento> é o tipo de nó primário associado ao eixo child).
O eixo child é o padrão. Portanto, a consulta pode ser escrita da seguinte forma:
/Contact
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 seguinte modelo (XPathAxesSampleA.xml) e salve-o no diretório onde SampleSchema1.xml foi salvo.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Contact </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">
<Contact ContactID="1" LastName="Achong" FirstName="Gustavo" Title="Mr." />
<Contact ContactID="2" LastName="Abel" FirstName="Catherine" Title="Ms." />
<Contact ContactID="3" LastName="Abercrombie" FirstName="Kim" Title="Ms." />
<Contact ContactID="4" LastName="Acevedo" FirstName="Humberto" Title="Sr." />
...
</ROOT>
B. Recuperar os netos do nó de contexto
A seguinte consulta XPath seleciona todos os filhos do elemento <Order> dos filhos do elemento <Customer> do nó de contexto:
/child::Customer/child::Order
Na consulta, child é o eixo e Customer e Order são os testes de nó (estes testes de nó são TRUE se Customer e Order forem nós de <elemento>, porque o nó de <elemento> é o nó primário para o eixo child). Para cada nó que corresponde a <Customer>, os nós que correspondem a <Orders> são adicionados ao resultado. Somente <Order> é retornado no conjunto de resultados.
O eixo child é 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 do esquema de exemplo e cole-o em um arquivo de texto. Salve o arquivo como SampleSchema1.xml.
Crie o seguinte modelo (XPathAxesSampleB.xml) e salve-o no diretório onde:
<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 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-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>
Se a consulta XPath for especificada como Customer/Order/OrderDetail, a partir de cada nó que corresponde a <Customer> a consulta navegará a seus elementos <Order>. E para cada nó que corresponda a <Order>, a consulta adicionará os nós <OrderDetail> ao resultado. Somente <OrderDetail> é retornado no conjunto de resultados.
C. Usar.. para especificar o eixo pai
A seguinte consulta recupera todos os elementos <Order> com um elemento pai <Customer> com valor de atributo CustomerID igual a 1. A consulta usa o eixo child no predicado para localizar o pai do elemento <Order>.
/child::Customer/child::Order[../@CustomerID="1"]
O eixo child é o padrão. Assim, a consulta pode ser especificada como:
/Customer/Order[../@CustomerID="1"]
A consulta XPath é equivalente a:
/Customer[@CustomerID="1"]/Order.
Observação |
---|
A consulta XPath /Order[../@CustomerID="1"] retornará um erro porque não há nenhum pai de <Ordem>. Embora possa haver elementos no esquema de mapeamento que contenham <Order>, o XPath não começou em nenhum deles; conseqüentemente, <Order> é considerado como o elemento de nível mais alto no documento. |
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 seguinte modelo (XPathAxesSampleC.xml) e salve-o no diretório onde:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer/Order[../@CustomerID="1"] </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-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>
...
</Order>
</ROOT>
D. Especificar o eixo de atributo
A seguinte consulta XPath seleciona todos os elementos filho <Customer> do nó de contexto com um valor de atributo CustomerID igual a 1:
/child::Customer[attribute::CustomerID="1"]
No predicado attribute::CustomerID, attribute é o eixo e CustomerID é o teste de nó (se CustomerID for um atributo, o teste de nó será TRUE, porque o nó de <atributo> é o nó primário para o eixo attribute).
Um atalho para o eixo attribute (@) pode ser especificado e, como o eixo child é o padrão, ele pode ser omitido da consulta:
/Customer[@CustomerID="1"]
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 seguinte o modelo (XPathAxesSampleD.xml) e salve-o no diretório onde SampleSchema1.xml foi salvo.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> child::Customer[attribute::CustomerID="1"] </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">
<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>
...
</Customer>
</ROOT>