Compartilhar via


Usando sql:field (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:field especifica o mapeamento entre um elemento ou atributo em um esquema anotado para uma coluna em um banco de dados, e pode ser adicionada a um elemento ou atributo. A anotação sql:field é ignorada em elementos <AttributeType> do esquema anotado. O atributo sql:field especifica o nome da coluna mapeada em uma tabela ou exibição.

Por exemplo, sql:field pode ser usado para especificar o nome da coluna, quando o nome não corresponder ao campo no esquema especificado em XDR. O valor de sql:field deve ser um nome de coluna. Não são permitidos nomes de coluna de quatro partes como bancodedados.proprietário.tabela.nomedacoluna. Isto é verdadeiro para todas as anotações que levam um nome de coluna como seu valor.

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. Especifique sql:field para um <atributo> do esquema XDR

Nesse esquema anotado, a anotação sql:field é especificada no elemento <atributo> do esquema. O atributo sql:field mapeia o atributo Email no esquema para a coluna Endereçodeemail da tabela Person.Contact.

Como o nome de atributo ContactID no esquema de XDR é igual à coluna ContactID da tabela Person.Contact, sql:field não é especificado. O mapeamento é padrão.

<?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="Email" />
    <attribute type="ContactID" />
    <attribute type="Email" sql:field="EmailAddress" />
</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 sqlFieldXdr.xml.

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

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

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

    mapping-schema="C:\SqlXmlTest\sqlFieldXdr.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" Email="gustavo0@adventure-works.com" /> 
</ROOT>

Em um esquema de mapeamento, os atributos podem ser declarados globalmente (por exemplo, <AttributeType...>, declarado for a do escopo do <ElementType>) e depois referenciado no <attribute type=...>, como mostrado nesse esquema.

Neste esquema, o atributo LastName é declarado globalmente e referenciado no escopo do Cliente <ElementType>.

<?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">
<AttributeType name="LastName" />
<ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />
    <AttributeType name="FName" />
    <AttributeType name="LName" />
    
    <attribute type="CustomerID" />
    <attribute type="FName" sql:field="FirstName" />
    <attribute type="LName" sql:field="LastName" />
</ElementType>
</Schema>

B. Especifique o sql:field para um <elemento> no esquema de XDR

Nesse esquema anotado, a anotação sql:field é especificada em <elemento> no esquema. A anotação sql:field mapeia o elemento filho <Email> no esquema para a coluna EmailAddress da tabela Person.Contact.

Sem a anotação explícita, o elemento filho <Email> do elemento <Contacts> do esquema não mapeará para a coluna EndereçodeEmail da tabela Person.Contact, pois o mapeamento padrão de elementos ocorre para uma relação, e não para um campo (a exceção ocorre quando o <ElementType> contém um atributo textOnly).

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

    <attribute type="ContactID" />
    <element type="Email" sql:field="EmailAddress" />
  </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 sqlFieldElementXdr.xml.

  2. Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como sqlFieldElementXdrT.xml no mesmo diretório em que você salvou sqlFieldElementXdr.xml. A consulta no modelo seleciona um cliente com o ContactID de 1.

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

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

    mapping-schema="C:\SqlXmlTest\sqlFieldElementXdr.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"> 
    <Email>gustavo0@adventure-works.com</Email> 
  </Contacts> 
</ROOT>

Se content="textOnly" for especificado no endereço de email <ElementType> e o nome padrão da coluna SQL for usada (“EndereçodeEmail”), a anotação sql:field não será necessária no elemento filho. Nesse caso, o elemento filho <Endereçodeemail> mapeará para a coluna Endereçodeemail 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="EmailAddress" content="textOnly" />
  <ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />

    <attribute type="ContactID" />
    <element type="EmailAddress" />
  </ElementType>
</Schema>

Consulte também

Referência