SQLXML 4.0 での xml データ型のサポート
SQL Server 2005 以降、SQL Server では、xml データ型を使用して XML 型のデータがサポートされます。 ここでは、SQLXML 4.0 で xml データ型のインスタンスがどのように認識されるかと、それらがどのようにサポートされるかについて情報を提供します。
xml データ型の使用
xml データ型の列を実装する SQL テーブルの処理方法の理解に役立つように、次の例が用意されています。
タスク |
例 |
トピック |
---|---|---|
xml 列を XML ビューにマップし、格納する方法 |
"XML 要素を XML データ型の列にマップする" |
|
アップデートグラムで xml 列にデータを挿入する方法 |
"XML データ型列にデータを挿入する" |
|
xml 列への XML データの一括読み込み |
"xml データ型の列に一括読み込みを行う" |
ガイドラインと制限
<xsd:any> は、xml データ型を含む列にはマップできません。 この場合、SQLXML では sql:overflow-field 注釈を使用して対処できます。 または、xml データ型のフィールドに xsd:anyType の要素としてマップすることもできます。 この方法は、上の表の例 "XML 要素を XML データ型の列にマップする" に示されています。
xml データ型の列のコンテンツに XPath クエリを実行することはできません。
sql:relationship や sql:key-fields など、xml データ型の列がサポートまたは許可されていない注釈でこのデータ型の列を使用すると、SQL Server エラーが発生し、発生したエラーは SQLXML 4.0 を実装する中間層コンポーネントでトラップされません。 これは、SQLXML で SQL 型の情報が必要とされないためです。 この動作は、BLOB やバイナリ型などその他のデータ型に対する SQLXML の動作と同様です。
xml 列のマッピングは、XSD スキーマでのみサポートされています。 XDR スキーマでは、xml 列のマッピングはサポートされていません。
SQLXML 4.0 は、SQL Server で提供される XML 解析サポートに依存しています。 xml 列は、型指定された XML または型指定されない XML のいずれかとしてマップできます。 どちらの場合も、SQLXML 4.0 で入力 XML は検証されません。 入力 XML が有効でないか、適切な形式でない場合は、SQL Server から SQLXML にそのことがレポートされ、サーバーによって返された関連エラー情報がある場合はユーザーに伝達されます。
SQLXML 4.0 は、SQL Server で提供される DTD の制限付きサポートに依存しています。 SQL Server では xml データ型のデータの内部 DTD が許可されるので、既定値の設定や、エンティティ参照の拡張コンテンツへの置き換えに使用できます。 SQLXML では、サーバーに XML データが "そのまま" (内部 DTD を含めて) 渡されます。 ここで、サード パーティのツールを使用して DTD を XML スキーマ (XSD) ドキュメントに変換し、データをインライン XSD スキーマと共にデータベースに読み込むことができます。
SQLXML 4.0 では、SQL Server の動作に基づき、XML 宣言の処理命令 (<?xml version='1.0'?> など) は保持されません。 代わりに、XML 宣言は SQL Server XML パーサーに対するディレクティブとして扱われ、データが xml データ型に変換された後は、属性 (バージョン、エンコーディング、およびスタンドアロン) は失われます。 XML データは内部的に UCS-2 として保存されます。 XML インスタンス内のその他すべての処理命令は保持されます。これらは xml 列で許可され、SQLXML でサポートされます。