次の方法で共有


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

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

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

SQL Server で返されるデータを CDATA セクションで囲むには、sql:use-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 属性型に使用することはできません。

使用例

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

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 &lt; 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>