Compartilhar via


Usando sql:relation (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).

A anotação sql:relation é adicionada para mapear um nó XML no esquema XDR para uma tabela de banco de dados. Um nome de tabela/exibição é especificado como o valor da anotação sql:relation.

A anotação sql:relation pode ser adicionada a um nó <ElementType>, <element> ou <attribute> no esquema XDR. sql:relation especifica o mapeamento entre <ElementType>, <element> ou <attribute> no esquema para uma tabela/exibição em um banco de dados.

Quando sql:relation é especificada em <ElementType>, o escopo dessa anotação se aplica a todas as especificações de elemento filho e de atributo nesse <ElementType>. Portanto, ele fornece um atalho para a gravação de anotações. Quando sql:relation é especificada diretamente no <element>, o escopo também é incluído em atributos especificados em um <ElementType>. A anotação sql:relation é ignorada em <AttributeType>.

A anotação sql:relation é útil quando os identificadores válidos no Microsoft SQL Server são inválidos no XML. Por exemplo, "Order Details" é um nome de tabela válido no SQL Server mas inválido no XML. Nesses casos, a anotação sql:relation pode ser usada para especificar o mapeamento, por exemplo:

<ElementType name="OD" sql:relation="[Order Details]">

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:relation em <ElementType> que contém atributos

Neste exemplo, o esquema XDR consiste em um elemento <Contacts> com os atributos ContactID, FirstNamee LastName. A anotação sql:relation é especificada em <ElementType>, mapeando o elemento <Contacts> para a tabela Person.Contact. O escopo desse mapeamento se aplica a todos os atributos em <ElementType>. Portanto, todos os atributos são mapeados para colunas da tabela Person.Contact.

O mapeamento padrão é feito para os atributos; por exemplo, os atributos são mapeados para colunas com os mesmos nomes na tabela Person.Contact.

<?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="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />
    <AttributeType name="FirstName" />
    <AttributeType name="LastName" />

    <attribute type="ContactID" />
    <attribute type="FirstName" />
    <attribute type="LastName" />
  </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 sqlRelationXdr.xml.

  2. Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como sqlRelationXdrT.xml no mesmo diretório onde você salvou sqlRelationXdr.xml. A consulta no modelo seleciona um contato cujo ContactID é 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sqlRelationXdr.xml">
        /Contacts[@ContactID="1"]
      </sql:xpath-query>
    </ROOT>
    

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

    mapping-schema="C:\MyDir\sqlRelationXdr.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 parcial dos resultados:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
    <Contacts ContactID="1" FirstName="Gustavo" 
              LastName="Achong" /> 
</ROOT>

B. Especificar sql:relation em <ElementType> que contém subelementos e atributos

Neste exemplo, o esquema XDR consiste no elemento <Contacts> com o atributo ContactID e os elementos filho <FirstName> e <LastName>. A anotação sql:relation é especificada em <ElementType>, mapeando o elemento <Contacts> para a tabela Person.Contact. O escopo desse mapeamento se aplica a todos os atributos em <ElementType>. Portanto, todos os atributos são mapeados para colunas da tabela Person.Contact.

O mapeamento padrão é feito para os atributos. Os atributos são mapeados para colunas com o mesmo nome na tabela Person.Contact.

Neste exemplo, o atributo content é especificado nos elementos filho <FirstName> e <LastName>. Sem o atributo content=textOnly, os elementos filho não seriam mapeados para as respectivas colunas FirstName e LastName da tabela Person.Contact porque, por padrão, os elementos são mapeados para uma tabela, e não para um campo.

<?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="FirstName" content="textOnly"/>
  <ElementType name="LastName" content="textOnly"/>
  <ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />

    <attribute type="ContactID" />
    <element type="FirstName" />
    <element type="LastName"  />
  </ElementType>
</Schema>

Como alternativa, em vez de especificar o atributo content=textOnly, você pode especificar a anotação sql:field na definição element para mapear os elementos filho (FirstName, LastName) para os nomes de coluna correspondentes, como os seguintes exemplos:

<element type="FirstName" sql:field="FirstName" />
<element type="LastName" sql:field="LastName" />

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 UsingSqlRelationXdr.xml.

  2. Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como UsingSqlRelationXdrT.xml no mesmo diretório em que você salvou UsingSqlRelationXdr.xml. A consulta no modelo seleciona um contato cujo ContactID é 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="UsingSqlRelationXdr.xml">
        /Contacts[@ContactID="1"]
      </sql:xpath-query>
    </ROOT>
    

    O caminho de diretório especificado para o esquema de mapeamento (UsingSqlRelationXdr.xml) é relativo ao diretório onde o modelo foi salvo. Um caminho absoluto também pode ser especificado, por exemplo:

    mapping-schema="C:\MyDir\UsingSqlRelationXdr.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 parcial dos resultados:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts ContactID="1"> 
    <FirstName>Gustavo</FirstName>
    <LastName>Achong</LastName>
  </Contacts>
</ROOT>

Consulte também

Referência