Compartilhar via


Criando seções CDATA usando sql:use-cdata (SQLXML 4.0)

Em XML, as seções CDATA são usadas para escapar blocos de texto que contêm caracteres que, de outra forma, seriam reconhecidos como caracteres de marcação.

Um banco de dados no Microsoft SQL Server às vezes pode conter caracteres que são tratados como caracteres de marcação pelo analisador XML; por exemplo, colchetes angulares (< e >), o símbolo menor que ou igual a (<=) e o estorno (&) são tratados como caracteres de marcação. No entanto, você pode encapsular esse tipo de caracteres especiais em uma seção CDATA para impedir que eles sejam tratados como caracteres de marcação. O texto na seção CDATA é tratado pelo analisador XML como texto sem formatação.

A sql:use-cdata anotação é usada para especificar que os dados retornados pelo SQL Server devem ser encapsulados em uma seção CDATA (ou seja, indica se o valor de uma coluna especificada deve sql:field ser colocado em uma seção CDATA). A sql:use-cdata anotação só pode ser especificada em elementos mapeados para uma coluna de banco de dados.

A sql:use-cdata anotação usa um valor booliano (0 = false, 1 = true). Os valores aceitáveis são 0, 1, true e false.

Essa anotação não pode ser usada com sql:url-encode ou nos tipos de atributo ID, IDREF, IDREFS, NMTOKEN e NMTOKENS.

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 de SQLXML.

Um. Especificando sql:use-cdata em um elemento

No esquema a seguir, sql:use-cdata é definido como 1 (True) para o <AddressLine1> dentro do <elemento Address> . Como resultado, os dados são retornados em uma seção CDATA.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="Address"   
               sql:relation="Person.Address"   
               sql:key-fields="AddressID" >  
   <xsd:complexType>  
        <xsd:sequence>  
          <xsd:element name="AddressID"  type="xsd:string" />  
          <xsd:element name="AddressLine1" type="xsd:string"   
                       sql:use-cdata="1" />  
        </xsd:sequence>  
    </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 UseCData.xml.

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

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
        <sql:xpath-query mapping-schema="UseCData.xml">  
            /Address[AddressID < 11]  
        </sql:xpath-query>  
    </ROOT>  
    

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

    mapping-schema="C:\SqlXmlTest\UseCData.xml"  
    
  3. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.

Este é o conjunto de resultados parcial:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">   
  <Address>   
    <AddressID>1</CustomerID>   
    <AddressLine1>   
      <![CDATA[ 1970 Napa Ct.  ]]>   
    </AddressLine1>   
  </Address>  
  <Address>  
    <AddressLine1>   
      <![CDATA[ 9833 Mt. Dias Blv. ]]>   
    </AddressLine1>   
  </Address>  
  ...  
</ROOT>