Compartilhar via


Excluindo elementos de esquema do documento XML resultante usando sql:mapped (SQLXML 4.0)

Todo elemento e atributo no esquema XSD é mapeado para uma tabela/exibição e uma coluna do banco de dados devido ao mapeamento padrão. Se desejar criar um elemento no esquema XSD que não é mapeado para nenhuma tabela (exibição) ou coluna do banco de dados e que não aparece no XML, é possível especificar a anotação sql:mapped.

A anotação sql:mapped é especialmente útil quando o esquema não pode ser modificado ou quando o esquema é usado para validar XML de outras fontes e ainda contém dados que não estão armazenados em seu banco de dados. A anotação sql:mapped difere de sql:is-constant pois os elementos e atributos não mapeados não são exibidos no documento XML.

A anotação sql:mapped usa um valor Booleano (0 = falso, 1 = verdadeiro). Os valores aceitáveis são 0, 1, true e false.

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. Especificando a anotação sql:mapped

Suponha que você tenha um esquema XSD de alguma outra origem. Esse esquema XSD consiste em um elemento <Person.Person> com os atributos BusinessEntityID, FirstName, LastName e HomeAddress.

Quando você mapeia esse esquema XSD para a tabela Person.Person no banco de dados AdventureWorks2008R2, sql:mapped é especificado no atributo HomeAddress porque a tabela Funcionários não armazena os endereços residenciais dos funcionários. Como resultado, este atributo não é mapeado para o banco de dados e não é retornado no documento XML resultante quando uma consulta XPath é especificada com relação ao esquema de mapeamento.

O mapeamento padrão é executado para o restante do esquema. O elemento <Person.Person> é mapeado para a tabela Person.Person e todos os atributos são mapeados para as colunas com o mesmo nome na tabela Person.Person.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="Person.Person">
    <xsd:complexType>
      <xsd:attribute name="BusinessEntityID"   type="xsd:string"/>
      <xsd:attribute name="FirstName"    type="xsd:string" />
      <xsd:attribute name="LastName"     type="xsd:string" />
      <xsd:attribute name="HomeAddress" type="xsd:string" 
                     sql:mapped="false" />
    </xsd:complexType>
  </xsd:element>
</xsd: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 sql-mapped.xml.

  2. Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como sql-mappedT.xml no mesmo diretório em que você salvou sql-mapped.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="sql-mapped.xml">
            /Person.Person[@BusinessEntityID &lt; 10]
        </sql:xpath-query>
    </ROOT>
    

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

    mapping-schema="C:\MyDir\sql-mapped.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 SQLXML.

Este é o conjunto de resultados:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Person.Person BusinessEntityID="1" FirstName="Gustavo" LastName="Achong" /> 
  <Person.Person BusinessEntityID="2" FirstName="Catherine" LastName="Abel" /> 
  <Person.Person BusinessEntityID="3" FirstName="Kim" LastName="Abercrombie" /> 
  <Person.Person BusinessEntityID="4" FirstName="Humberto" LastName="Acevedo" /> 
  <Person.Person BusinessEntityID="5" FirstName="Pilar" LastName="Ackerman" /> 
  <Person.Person BusinessEntityID="6" FirstName="Frances" LastName="Adams" /> 
  <Person.Person BusinessEntityID="7" FirstName="Margaret" LastName="Smith" /> 
  <Person.Person BusinessEntityID="8" FirstName="Carla" LastName="Adams" /> 
  <Person.Person BusinessEntityID="9" FirstName="Jay" LastName="Adams" /> 
</ROOT>

Observe que BusinessEntityID, FirstName e LastName estão presentes, mas HomeAddress não está, pois o esquema de mapeamento especificou 0 para o atributo sql:mapped.