.NET Framework における XML の目標は次のとおりです。
- W3C 標準への準拠
- 拡張性
- プラグ可能なアーキテクチャ
- パフォーマンス
- ADO.NET との密接な統合
標準への準拠
標準への準拠とは、XML、名前空間、XSLT、XPath、スキーマ、およびドキュメント オブジェクト モデル (DOM) の現在の W3C 標準勧告に、各クラスが完全に準拠していることを意味します。標準に準拠することにより、相互運用性が確保され、複数のプラットフォームにまたがるアプリケーション開発が簡単になります。
注目に値する点として、.NET Framework の XML クラスは、W3C 勧告『XML Schema Definition language (XSD) 1.0』をサポートしています。.NET Framework には、検証を行う XML クラスと、メモリに XSD スキーマを構築するためのオブジェクト モデルが用意されています。スキーマ、DTD、XDR、XSD による検証を実行できる高速で前方参照専用のパーサーは、XmlValidatingReader と呼ばれます。XmlValidatingReader は標準に準拠した XML パーサーです。XmlValidatingReader の使用時には、XmlSchemaCollection クラスを使用して、頻繁に使われる XSD スキーマや XDR スキーマをキャッシュできます。
.NET Framework には、スキーマ オブジェクト モデル (SOM) を提供する XML クラスのセットも用意されています。これらのクラスを使用すると、XSD スキーマの構築とコンパイルをプログラムで実行できます。XmlSchema クラスは XSD スキーマを表現します。XSD スキーマは、XmlReader クラスと XmlWriter クラスを使用して読み込んだり永続化したりできます。
XmlDocument は、ドキュメント オブジェクト モデルの Level 1 および Level 2 勧告を実装し、.NET Framework の共通デザイン ガイドラインに従っています。たとえば、メソッド名に含まれる各単語の最初の文字は大文字になっています。
XSLT を使用してドキュメントを変換する XslTransform クラスは、W3C 勧告『XSL Transformations (XSLT) Version 1.0』および『XML Path Language (XPath) Version 1.0』に準拠しています。
拡張性
.NET Framework の XML は、抽象基本クラスと仮想メソッドを使用することによって拡張できます。この拡張、つまりサブクラス化は、XmlReader、XmlWriter、XPathNavigator の各抽象クラスで実際に行われています。これらの抽象クラスは、異なるストアやデータ ソースに対する新しい実装の開発を可能にし、XML を公開するクラスです。たとえば、XPathNavigator は、ファイル システム、レジストリ、リレーショナル データベースなど、既存のストアに対して実装できる XPath クエリ エンジンを取り込んだ API です。XPathNavigator は、データを XML として表示するだけでなく、Select のような XPath API クエリ メソッドの既定の実装を使用して、異なるデータ ソースに対する XPath クエリのサポートも提供します。
もう 1 つの拡張の例は XmlReader です。XmlReader は、前方向に高速にストアを解析し、ストリームを移動しながら見つけた XML 情報セットを公開します。.NET Framework の XML には、いくつかの XmlReader の実装が含まれています。このような実装として、ストリームを読み取る XmlTextReader、ノード ツリーを読み取る XmlNodeReader、および XmlTextReader 上に検証サポート層を作成する XmlValidatingReader があります。
XmlWriter は、プッシュ ベースの API を使用して XML のストリームを生成します。.NET Framework の XML には、XmlTextWriter と呼ばれる XmlWriter の実装が用意されています。
これらのクラスの実装をさらに派生させて、特定の処理を実装できる他のリーダーを作成できます。たとえば、XmlTextReader から派生させて MyXmlTextReader というカスタム リーダーを作成すると、アプリケーションで必要とされる処理に固有のロジックを備えたバージョンのリーダーを作成できます。
XmlResolver 抽象クラスは、XML ドキュメントで参照される外部リソースへのフックを提供します。このクラスを派生させることにより、たとえばデータベースを利用するなど、アプリケーションに固有の方法でリソースをキャッシュしたり、別のプロトコルを使用するリソースを解決できます。XmlResolver の実装である XmlUrlResolver と XmlSecureResolver は、http://
、https://
、file://
の各プロトコルのリソースを解決します。
プラグ可能なアーキテクチャ
.NET Framework の XML は、プラグ可能なアーキテクチャを備えています。このストリーム ベースのアーキテクチャにおいて、プラグ可能とは、.NET Framework 内の抽象クラスに基づいたコンポーネントを簡単に置換できるということです。さらに、プラグ可能なアーキテクチャでは、コンポーネント間でのデータのストリーム転送が可能であり、このストリームに新しいコンポーネントを挿入して処理を変更できます。たとえば、XML Web サービスからの XML のストリームを XmlTextReader で解析できます。XmlTextReader は XmlDocument を作成するために使用でき、次に XmlDocument を使用して XmlNodeReader を作成できます。
もう 1 つの例として、XmlReader から DOM (XmlDocument クラス) を読み込み、XmlWriter を使用して出力を保存する場合があります。既存のクラスを拡張し、これらのクラスの独自の実装を作成することにより、XmlDocument クラスの動作を変更できます。たとえば、XmlReader の実装を作成し、ファイル システムを XML として公開できる MyXmlFileReader を呼び出すと、このリーダーから XmlDocument を読み込むことができます。また、XmlTextReader から継承し、属性中心のドキュメントを要素中心のドキュメントに変換する新しいカスタム リーダーを作成し、これを使用して XmlDocument を読み込むこともできます。このように、既存のクラスに基づいて新しいクラスを実装できるプラグ可能なアーキテクチャが提供されています。
コンポーネントをプラグする別の例は、変換プロセスにおいて、XPathDocument や XmlDocument のような異なるデータ ストアを使用する場合です。これらのデータ ストアは XslTransform クラスによって変換でき、その出力は、別のストアにストリーム転送するか、XML Web サービスからのストリームとして戻すことができます。これを次の図に示します。
XslTransform クラスによるデータのストリーム転送
IXPathNavigable インターフェイスを使用すると、XPathNavigator が実装されたストアを XslTransform クラスにプラグし、そのストアに対して XSLT 変換を行うことができます。この処理は、XmlDocument、XPathDocument、XmlDataDocument の各クラスで実行できます。XslTransform からのストリーム出力は、プラグ可能なアーキテクチャ スタイルを維持して XmlReader または XmlWriter に送信できます。
パフォーマンス
.NET Framework の XML クラスは低水準の XML 処理コンポーネントであり、.NET Framework の一部として使われるだけでなく、XML をアプリケーションに統合するためにも使われます。このクラスには、きわめて優れた性能が要求されます。
.NET Framework の XML クラスは、ストリーム ベースのモデルをサポートするように設計されており、次の特性を備えています。
- XmlReader による前方参照専用のプル モデル解析のための最低限のキャッシュ処理
- XmlValidatingReader による前方参照専用の検証
- 単一の仮想ノードへのノード作成を最小限に抑えつつドキュメントへのランダム アクセスを提供する、XPathNavigator の斬新なカーソル スタイルのナビゲーション。この方式では、DOM のような完全なノード ツリーをメモリに構築する必要がありません。
- XslTransform クラスからのインクリメンタル ストリーム出力
XPathDocument は、XPath クエリのための最適化された読み取り専用ストアです。XSLT 処理が必要な場合は、常に XPathDocument を使用することをお勧めします。このストアと XslTransform クラスを使用することによって、高性能の XSLT 変換を実現できます。
ADO.NET との統合
.NET Framework では、XML クラスと ADO.NET の密接な統合によって、リレーショナル データと XML が結合されます。
切断されたデータベースを表す DataSet コンポーネントには、XmlReader クラスと XmlWriter クラスを使用して XML を読み書きする機能、内部リレーショナル スキーマ構造を XML スキーマ (XSD) として永続化する機能、および XML ドキュメントからスキーマ構造を推測する機能があります。
XmlDataDocument は、DataSet を XmlDocument と同期することによって、XML とリレーショナル データの境界を乗り越えます。その結果、一方で保守されたデータは、必要に応じて他方でも更新されます。XmlDocument には半構造化されたデータを格納できるため、DataSet がスキーマに基づいて XML にリレーショナル ビューを適用している間にも、XML のすべての機能を利用できます。
DataSet オブジェクトと XmlDataDocument オブジェクトをとおしたデータのリレーショナル表現および階層表現の両方に対し、.NET Framework がどのようにリアルタイムの同期アクセスを実現するかの詳細については、「XML とリレーショナル データおよび ADO.NET との統合」を参照してください。
参照
XML ドキュメント オブジェクト モデル (DOM) | XmlReader による XML の読み取り | XmlWriter による XML の書き方 | XslTransform クラスを使用した XSLT 変換 | .NET Framework の XPathNavigator | XML スキーマ オブジェクト モデル (SOM) | スキーマとの XML の検証 | XML とリレーショナル データおよび ADO.NET との統合 | URI 名を持つ外部 XML リソースの解決 | XML 名の文字エンコーディングと XML データ型の変換 | XML データ型の変換 | XML ドキュメントにおける名前空間