sql:use-cdata を使用した、CDATA セクションの作成 (XDR スキーマ)
重要 : |
---|
このトピックは、レガシ アプリケーションの参照用として用意されています。この機能は今後更新されません。新しい開発作業では、この機能の使用を避け、注釈付き XSD スキーマを使用して XML ビューを作成してください。詳細については、「注釈付き XSD スキーマの概要 (SQLXML 4.0)」を参照してください。既存の注釈付き XDR スキーマは、XSD スキーマに変換できます。詳細については、「注釈付き XDR スキーマから同等の XSD スキーマへの変換 (SQLXML 4.0)」を参照してください。 |
XML では、文字がマークアップとして処理されないよう、文字を含むテキスト ブロックをエスケープするときに CDATA セクションを使用します。
Microsoft SQL Server のデータには、XML パーサーにとって特殊な文字が含まれることがあります。たとえば、<、>、<=、& などの文字は、マークアップ文字として扱われます。特殊文字を含む SQL Server データがマークアップとして処理されないようにするには、データを CDATA セクションで囲みます。CDATA セクション内のテキストは、プレーン テキストとして処理されます。
SQL Server によって返されるデータを CDATA セクション内に含めるかどうかを指定するには、sql:use-cdata 注釈を使用します。sql:use-cdata 注釈を使用すると、sql:field で指定される列の値を、CDATA セクションで囲むかどうかを指定できます。sql:use-cdata 注釈は <ElementType> または <element> に指定でき、ブール値 (0 = FALSE、1 = TRUE) をとります。sql:use-cdata を sql:url-encode と一緒に使用したり、ID、IDREF、IDREFS、NMTOKEN、または NMTOKENS 型の属性に指定することはできません。
例
次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。詳細については、「SQLXML のサンプル実行のための必要条件」を参照してください。
A. 要素に対して sql:use-cdata を指定する
このスキーマでは、<AddressLine1> 要素に対して sql:use-cdata が 1 (TRUE) に設定されています。この結果、<AddressLine1> のデータは CDATA セクション内に返されます。
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="AddressID" content="textOnly" />
<ElementType name="AddressLine1" content="textOnly" />
<ElementType name="Address" sql:relation="Person.Address">
<element type="AddressID" />
<element type="AddressLine1" sql:use-cdata="1" />
</ElementType>
</Schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、UseCdataXdr.xml として保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、UseCdataXdr.xml を保存したディレクトリに UseCdataXdrT.xml として保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="UseCdataXdr.xml"> /Address[@AddressID=1] </sql:xpath-query> </ROOT>
マッピング スキーマ (UseCdataXdr.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\UseCdataXdr.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を使用した、SQLXML 4.0 クエリの実行」を参照してください。
次に結果セットを示します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Address>
<AddressID>1</AddressID>
<AddressLine1>
<![CDATA[ 1970 Napa Ct.]]>
</AddressLine1>
</Address>
</ROOT>