Partilhar via


Criando atributos do tipo Valid ID, IDREF e IDREFS usando sql:id-prefix (Esquema XDR)

Observação importanteImportante

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).

Um atributo pode ser especificado como um atributo de tipo ID. Atributos especificados como IDREF ou IDREFS poderão, então, ser usados para fazer referência aos atributos de tipo ID, permitindo assim vínculos entre documentos.

ID, IDREF e IDREFS correspondem a relações PK/FK (chave primária/chave estrangeira) no banco de dados, com algumas diferenças. No documento XML, os valores de atributos de tipo ID devem ser distintos. Se você tiver os atributos CustomerID e SalesOrderID em um documento XML, esses valores devem ser distintos. No entanto, em um banco de dados, as colunas CustomerID e SalesOrderID podem ter os mesmos valores (por exemplo, CustomerID = 1 e OrderID = 1 são válidos no banco de dados).

Para que os atributos ID, IDREF e IDREFS sejam válidos:

  • O valor de ID deve ser exclusivo dentro do documento XML.

  • Para todos os atributos IDREF e IDREFS, os valores de ID referenciados devem estar no documento XML.

  • O valor de uma ID, IDREF e IDREFS deve ser um token nomeado (por exemplo, o inteiro valor 101 não pode ser um valor de ID).

  • Os atributos de tipo ID, IDREF e IDREFS não podem ser mapeados para colunas do tipo text, ntext, image, nem para qualquer outro tipo de dados binários (por exemplo, timestamp).

Se um documento XML contiver várias IDs, a anotação sql:id-prefix será especificada para assegurar que os valores serão exclusivos. . A anotação The sql:id-prefix também é usada para criar tokens nomeados de números. O valor especificado para sql:id-prefix deve ser um caractere de nome válido.

O atributo sql:id-prefix coloca à frente dos valores de ID, IDREF e IDREFS com uma cadeia de caracteres, tornando-os assim exclusivos. Nenhuma verificação é feita para garantir a validade dos prefixos e a exclusividade dos valores de ID, IDREF ou IDREFS.

O atributo sql:id-prefix é ignorado em atributos que não sejam dos tipos ID, IDREF ou IDREFS.

ObservaçãoObservação

Cada valor dos atributos ID, IDREF e IDREFS é limitado a 4.000 caracteres, incluindo o prefixo (se especificado).

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. Especificar sql:id-prefix para um atributo de tipo ID

Neste esquema XDR, os atributos SalesOrderID e CustomerID são declarados como sendo do tipo ID. Para garantir que as IDs são exclusivas e válidas, a anotação sql:id-prefix é especificada para esses atributos:

<?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="Order" sql:relation="Sales.SalesOrderHeader" sql:key-fields="SalesOrderID">
    <AttributeType name="SalesOrderID" dt:type="id" sql:id-prefix="Ord-" />
    <AttributeType name="OrderDate" />
 
    <attribute type="SalesOrderID" />
    <attribute type="OrderDate" />
  </ElementType>

  <ElementType name="Customer" sql:relation="Sales.Customer">
    <AttributeType name="CustomerID" dt:type="id" />
    <attribute type="CustomerID" />
    <AttributeType name="OrderList" dt:type="idrefs"
                                 sql:id-prefix="Ord-" />
    <attribute type="OrderList" sql:relation="Sales.SalesOrderHeader" sql:field="SalesOrderID">
        <sql:relationship
                key-relation="Sales.Customer"
                key="CustomerID"
                foreign-relation="Sales.SalesOrderHeader"
                foreign-key="CustomerID" />
    </attribute>
    <element type="Order">
        <sql:relationship key-relation="Sales.SalesOrderHeader"
                          key="SalesOrderID"
                          foreign-relation="Sales.Customer"
                          foreign-key="SalesOrderID" />
    </element>
  </ElementType>
</Schema>

Para testar uma consulta XPath de exemplo com relação ao esquema

  1. Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como sqlPrefix-Xdr.xml.

  2. Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como sqlPrefix-XdrT.xml no mesmo diretório onde você salvou sqlPrefix-Xdr.xml. A consulta XPath no modelo retorna os subelementos <Customer> e <Order> quando CustomerID é igual a 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sqlPrefix-Xdr.xml">
        Customer[@CustomerID="1"]
      </sql:xpath-query>
    </ROOT>
    

    O caminho de diretório especificado para o esquema de mapeamento (sqlPrefix-Xdr.xml) é relativo ao diretório onde o modelo foi salvo. Também é possível especificar um caminho absoluto, por exemplo:

    mapping-schema="C:\MyDir\sqlPrefix-Xdr.xml"
    
  3. 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.

Este é o conjunto de resultados:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Customer CustomerID="1" OrderIDList="Ord-43860 Ord-44501 Ord-45283 Ord-46042">
    <Order SalesOrderID="Ord-43860" OrderDate="2005-08-01T00:00:00" /> 
    <Order SalesOrderID="Ord-44501" OrderDate="2005-11-01T00:00:00" /> 
    <Order SalesOrderID="Ord-45283" OrderDate="2006-02-01T00:00:00" /> 
    <Order SalesOrderID="Ord-46042" OrderDate="2006-05-01T00:00:00" /> 
  </Customer>
</ROOT>

Consulte também

Referência