sql:use-cdata を使用した、CDATA セクションの作成 (SQLXML 4.0)

適用対象: SQL Server Azure SQL Database

XML では、文字がマークアップ文字として処理されないよう、文字を含むテキスト ブロックをエスケープするときに CDATA セクションを使用します。

Microsoft SQL Server のデータベースには、XML パーサーによってマークアップ文字として扱われる文字を含めることができます。たとえば、山かっこ (< と >)、等しくない記号 (<=)、アンパサンド (>) はマークアップ文字として扱われます。 この種類の特殊文字は、CDATA セクションで囲むことでマークアップ文字として扱われないようにできます。 CDATA セクション内の文字は、XML パーサーでプレーン テキストとして扱われます。

sql:use-cdata注釈は、SQL Server によって返されるデータを CDATA セクションにラップすることを指定するために使用されます (つまり、sql:field で指定された列の値を CDATA セクションで囲む必要があるかどうかを示します)。 sql:use-cdata 注釈は、データベース列にマップされる要素でのみ指定できます。

sql:use-cdata 注釈はブール値 (0 = false、1 = true) を受け取ります。 指定できる値は 0、1、true、false です。

この注釈は、 sql:url-encode または ID、IDREF、IDREFS、NMTOKEN、および NMTOKENS 属性の型では使用できません。

次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。 詳細については、「REquirements for Running SQLXML Examples」を参照してください。

A. 要素に対して sql:use-cdata を指定する

次のスキーマでは、<Address> 要素内の <AddressLine1>sql:use-cdata が 1 (True) に設定されています。 この結果、データは 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>  
スキーマに対してサンプル XPath クエリをテストするには
  1. 上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、 UseCData.xml として保存します。

  2. 次のテンプレートをコピーして、テキスト ファイルに貼り付け、 UseCData.xml を保存したディレクトリに UseCDataT.xml として保存します。

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

    マッピング スキーマ (UseCData.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。 次のように、絶対パスを指定することもできます。

    mapping-schema="C:\SqlXmlTest\UseCData.xml"  
    
  3. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

これは部分的な結果セットです。

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