Identificando colunas de chave usando sql:key-fields (esquema XDR)
Importante |
---|
Este tópico está incluso como referência para aplicativos herdados. Não será feito nenhum trabalho de desenvolvimento futuro nesse recurso. Evite usá-lo em novos trabalhos de desenvolvimento. Em vez disso, use esquemas XSD anotados para criar exibições XML. Para obter mais informações, consulte Introdução a esquemas XSD anotados (SQLXML 4.0). Você pode converter esquemas XDR anotados existentes em esquemas XSD. Para obter mais informações, consulte Convertendo esquemas XDR anotados a esquemas XSD equivalentes (SQLXML 4.0). |
Quando uma consulta XPath é especificada no esquema XDR, informações de chave são necessárias, na maioria das vezes, para obter o aninhamento adequado no resultado. Especificar a anotação sql:key-fields é uma forma de assegurar que a hierarquia apropriada seja gerada.
Observação |
---|
Para gerar o aninhamento adequado no resultado, recomenda-se que sql:key-fields seja especificado em todos os esquemas. |
Em muitos casos, é necessário entender como identificar as linhas de forma exclusiva em uma tabela para gerar a hierarquia XML adequada. A anotação sql:key-fields pode ser adicionada a <element> e a <ElementType> para identificar as colunas que identificam as linhas de forma exclusiva na tabela.
O valor de sql:key-fields identifica as colunas que identificam as linhas de forma exclusiva na relação especificada em <ElementType>. Se mais de uma coluna for necessária para identificar uma linha de forma exclusiva, os valores de coluna serão listados separados com um espaço.
A anotação sql:key-fields deve ser especificada em um elemento que contém um elemento filho e um <sql:relationship>, definido entre o elemento e o filho, que não fornece a chave primária da tabela especificada no elemento pai.
Exemplos
Para criar exemplos de funcionamento usando os exemplos a seguir, é necessário atender a determinados requisitos. Para obter mais informações, consulte Requisitos para executar exemplos do SQLXML.
A. Produzir o aninhamento adequado quando <sql:relationship> não fornecer informações suficientes
Esse exemplo mostra onde sql:key-fields deve ser especificada.
Considere o esquema a seguir. O esquema especifica a hierarquia entre os elementos <Order> e <Customer> nos quais o elemento <Order> é o pai e o elemento <Customer> é um filho.
A marca <sql:relationship> é usada para especificar a relação pai-filho. A marca <sql:relationship> identifica CustomerID como foreign-key na tabela Sales.SalesOrderHeader, em referência à chave CustomerID na tabela Sales.Customer. Essas informações fornecidas em <sql:relationship> não são suficientes para identificar linhas de forma exclusiva na tabela pai (Sales.SalesOrderHeader). Portanto, sem sql:key-fields, a hierarquia gerada será imprecisa.
Com sql:key-fields especificado em <Order>, a anotação identifica as linhas de forma exclusiva no pai (tabela Sales.SalesOrderHeader) e seus elementos filhos aparecem abaixo do seu pai.
Este é o esquema:
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Customer" sql:relation="Sales.Customer">
<AttributeType name="CustomerID" />
<attribute type="CustomerID" />
</ElementType>
<ElementType name="Order" sql:relation="Sales.SalesOrderHeader"
sql:key-fields="SalesOrderID" >
<AttributeType name="SalesOrderID" />
<AttributeType name="CustomerID" />
<attribute type="SalesOrderID" />
<attribute type="CustomerID" />
<element type="Customer" >
<sql:relationship
key-relation="Sales.SalesOrderHeader"
key="CustomerID"
foreign-relation="Sales.Customer"
foreign-key="CustomerID" />
</element>
</ElementType>
</Schema>
Para testar um exemplo de funcionamento deste esquema
Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como KeyFieldsA-Xdr.xml.
Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como KeyFieldsA-XdrT.xml no mesmo diretório onde você salvou KeyFieldsA-Xdr.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="KeyFieldsA-Xdr.xml"> /Order </sql:xpath-query> </ROOT>
O caminho de diretório especificado para o esquema de mapeamento (KeyFieldsA-Xdr.xml) é relativo ao diretório onde o modelo está salvo. Também é possível especificar um caminho absoluto, por exemplo:
mapping-schema="C:\MyDir\KeyFieldsA-Xdr.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.
A seguir está o conjunto de resultados:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order SalesOrderID="43659" CustomerID="676">
<Customer CustomerID="676" />
</Order>
<Order SalesOrderID="43660" CustomerID="117">
<Customer CustomerID="117" />
</Order>
<Order SalesOrderID="43661" CustomerID="442">
<Customer CustomerID="442" />
</Order>
...
</ROOT>
B. Especificar sql:key-fields para produzir o aninhamento adequado no resultado
Neste esquema, nenhuma hierarquia é especificada com <sql:relationship>. O esquema ainda requer que a anotação sql:key-fields seja especificada para identificar os funcionários de forma exclusiva na tabela HumanResources.Employee.
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Title" content="textOnly" >
<AttributeType name="EmployeeID" />
<attribute type="EmployeeID" />
</ElementType>
<ElementType name="HumanResources.Employee" sql:key-fields="EmployeeID" >
<element type="Title" />
</ElementType>
</Schema>
Para testar um exemplo de funcionamento deste esquema
Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como KeyFieldsB-Xdr.xml.
Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como KeyFieldsB-XdrT.xml no mesmo diretório onde você salvou KeyFieldsB-Xdr.xml. A consulta XPath no modelo retorna todos os elementos <Order>.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="KeyFieldsB-Xdr.xml"> /HumanResources.Employee </sql:xpath-query> </ROOT>
O caminho de diretório especificado para o esquema de mapeamento (KeyFieldsB-Xdr.xml) é relativo ao diretório onde o modelo está salvo. Também é possível especificar um caminho absoluto, por exemplo:
mapping-schema="C:\MyDir\KeyFieldsB-Xdr.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.
Esta é uma parte do conjunto de resultados:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<HumanResources.Employee>
<Title EmployeeID="1">Production Technician - WC60</Title>
</HumanResources.Employee>
<HumanResources.Employee>
<Title EmployeeID="2">Marketing Assistant</Title>
</HumanResources.Employee>
<HumanResources.Employee>
<Title EmployeeID="3">Engineering Manager</Title>
</HumanResources.Employee>
...
</ROOT>