Condividi tramite


Creazione di sezioni CDATA mediante sql:use-cdata (SQLXML 4.0)

In XML vengono utilizzate le sezioni CDATA per eseguire l'escape di blocchi di testo contenenti caratteri che, altrimenti, verrebbero riconosciuti come caratteri di markup.

Un database in Microsoft SQL Server talvolta può contenere caratteri considerati caratteri di markup dal parser XML, ad esempio le parentesi angolari (< e >), il simbolo minore di o uguale a (<=) e l'e commerciale (&). Per evitare che ciò accada, è tuttavia possibile eseguire il wrapping di questo tipo di caratteri speciali in una sezione CDATA. Il testo nella sezione CDATA viene considerato testo normale dal parser XML.

L'annotazione sql:use-cdata viene utilizzata per specificare che è necessario eseguire il wrapping dei dati restituiti da SQL Server in una sezione CDATA. In altre parole, indica se il valore di una colonna specificata da sql:field deve essere incluso in una sezione CDATA. L'annotazione sql:use-cdata può essere specificata solo su elementi che eseguono il mapping a una colonna di database.

L'annotazione sql:use-cdata accetta un valore booleano (0=false, 1=true). I valori accettabili sono 0, 1, true e false.

Non è possibile utilizzare l'annotazione con sql:url-encode o sui tipi di attributo ID, IDREF, IDREFS, NMTOKEN e NMTOKENS.

Esempi

Per creare esempi reali utilizzando gli esempi seguenti, è necessario soddisfare alcuni requisiti. Per ulteriori informazioni, vedere Requisiti per l'esecuzione di esempi di SQLXML.

A. Specifica di sql:use-cdata su un elemento

Nello schema seguente sql:use-cdata è impostato su 1 (True) per l'elemento <AddressLine1> all'interno dell'elemento <Address>. I dati vengono quindi restituiti in una sezione 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>

Per testare una query Xpath di esempio sullo schema

  1. Copiare il codice dello schema precedente e incollarlo in un file di testo. Salvare il file con il nome UseCData.xml.

  2. Copiare il modello seguente e incollarlo in un file di testo. Salvare il file con il nome UseCDataT.xml nella stessa directory nella quale è stato salvato UseCData.xml.

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

    Il percorso della directory specificato per lo schema di mapping (UseCData.xml) è relativo alla directory nella quale viene salvato il modello. È possibile specificare anche un percorso assoluto, ad esempio:

    mapping-schema="C:\SqlXmlTest\UseCData.xml"
    
  3. Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.

    Per ulteriori informazioni, vedere Utilizzo di ADO per eseguire query SQLXML 4.0.

Di seguito è riportato il set di risultati parziale:

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