Share via


XML コード ジェネレータ : XML スキーマから Visual Basic クラスを生成する

Jason Masterman and Chris Predeek
DevelopMentor

October 1999

要約: この記事では、XML スキーマから VB クラスを生成する方法について述べます。

内容

必要な環境
はじめに
XML コード ジェネレータを使用する
試してみましょう
自分のアプリケーションでコード ジェネレータを使用するためのステップ
自分のアプリケーションからコード ジェネレータを呼び出す
スキーマ参照

必要な環境

このサンプルには、Windows 98、Windows NT 4.0、または Windows 2000 上で実行している Internet Explorer 5.0 と Visual Basic® 6.0 が必要です。

はじめに

XML コード ジェネレータを使用して、XML (eXtensible Markup Language : 拡張可能なマーク付け言語) スキーマを読み取り、Visual Basic クラスを生成することができます。これにより、データを取得するために XML ドキュメント オブジェクト モデル (DOM) を走査しなくても、XML データで作業するための標準的なオブジェクト指向の手段が得られます。Visual Basic クラスを生成するためにジェネレータで読み取ることができるスキーマの複雑さには、いくつかの要件があります。このドキュメントでは、XML コード ジェネレータの使い方だけでなく、ジェネレータが理解できるスキーマについても説明します。

サンプルの XML スキーマとサンプルの XML データが用意されています。これらはジェネレータの説明の中で使用されます。この記事を読んだ後は、あなたが自分で作成したスキーマを使用できるようになるはずです。ここで扱う XML Schema language (英語)は、W3C に提出された XML-Datanon-ms link ノートに基づいています。

XML コード ジェネレータを使用する

XML コード ジェネレータは、Visual Basic ActiveX® ダイナミック リンク ライブラリ (DLL) アプリケーションです。ソース コードとコンパイル済みバイナリのすべてが用意されているので、自由に変更してお使いください。

XML コード ジェネレータがどのように動作するのかを知る最も簡単な方法は、用意されているいくつかのサンプル アプリケーションを実行することです。以下のアプリケーションが用意されています。

  • XMLClassGenerator.dll。これは、スキーマを読み取って、スキーマ内のそれぞれの要素について Visual Basic クラスを生成する Visual Basic ActiveX DLL です。クラスは Visual Basic ActiveX DLL プロジェクトでコンパイルされるので、あなたはそれを自分のアプリケーションで使用することができます。
  • XMLClassGenerator.exe。これは、XML スキーマを開いて、XMLClassGenerator.dll を呼び出すための Visual Basic の標準的な .exe プロジェクトです。このアプリケーションは、XMLClassGenerator.dll のテスト アプリケーションにすぎません。テストには、あなた自身で他のものを作成するか、このテスト アプリケーションを使用することができます。このアプリケーションは、XML Class Generator user interface (UI) ディレクトリにあります。
  • XMLCGTestApp.exe。これは、サンプルの XML スキーマと XML データについてコード ジェネレータによって生成されるクラスを使用する、もう 1 つの Visual Basic 標準 Exe プロジェクトです。このアプリケーションは、Test App ディレクトリにあります。
  • Schema.xml。このサンプル スキーマは、コード ジェネレータがどのように動作するかを知るために用意されています。このスキーマによって、書籍を含んでいる書店のデータを記述することができます。また、著者名、価格、ジャンル、タイトルなど、店内の書籍に関する情報を調べることができます。
  • Books.xml。これは、Schema.xml ファイルで定義されているルールに従った XML ファイルです。このファイルは、Sample Schema and Data ディレクトリにあります。

試してみましょう

コード ジェネレータの使い方を知るには、サンプルの Schema.xml ファイルとサンプルの Books.xml ファイルを使用してください。

アプリケーションを実行するためには、その前に REGSVR32.exe を使用して、XMLClassGenerator.dll ファイルを登録する必要があります。コード ジェネレータが登録されたら、サンプル アプリケーションを実行することができます。これを行うには:

  1. XML Class Generator UI ディレクトリから XMLClassGenerator.exe を実行して、Schema.xml ファイルのための Visual Basic クラスを生成します。

  2. XMLClassGenerator.exe を起動します。

  3. [File] メニューから [Open] を選択します。

  4. Sample Schema and Data ディレクトリにある Schema.xml ファイルを開きます。

    サンプル スキーマを開くと、画面にスキーマが表示されます。

    サンプル スキーマ

  5. [Tools] メニューから [Generate Classes] を選択します。

XMLCodeGenerator.dll が起動して、ロードした Schema.xml ファイル内の関連する全ノードのためのクラスを作成します。ジェネレータは、すべてのクラスを構築して、Visual Basic ActiveX DLL プロジェクトを自動的に作成し、編集します。生成されたコードのコピーはすべて、あなたのスキーマ ファイルがあるディレクトリに保存されます。この例では、Sample Schema and Data ディレクトリにいくつかのファイルが保存されます。

これで、Books.xml データ ファイルで動作するクラスが生成されました。XMLCGTestApp を実行することによって、クラスをテストすることができます。このファイルは、Test App ディレクトリにあります。このアプリケーションは、XMLCodeGenerator.dll から生成されたクラスを使用して書かれています。

ユーザー インターフェイスには、余分な機能は何もありません。このアプリケーションの目的は、生成されたクラスが Books.xml データで正常に機能するかどうかを調べることです。[Go!] ボタンをクリックすると、XML ファイルの選択を要求されます。マシン上の Books.xml ファイルを指定します。このファイルは、Schema.xml ファイルと同じディレクトリにあるはずです。

Books.xml データ ファイルが見つかると、XML データを示す Visual Basic フォームが表示されます。このサンプルは、クラスを使用して Books.xml データにアクセスし、そのデータをフォームに表示します。

図 2. Visual Basic フォーム

これで、コード ジェネレータとすべてのサンプルを使用することができました。

自分のアプリケーションでコード ジェネレータを使用するためのステップ

自分のアプリケーションのためにジェネレータを使用するときには、以下のステップを参考にしてください。

  1. XML データのスキーマを作成します。
  2. スキーマのルールに従った XML データを作成します。
  3. スキーマを指定して XMLCodeGenerator.dll を呼び出します。コード ジェネレータを呼び出すには、2 つの方法があります。
    • まず、サンプル アプリケーション XMLCodeGenerator.exe を使用することができます。
    • または、この記事で後述するコードによって、あなた自身のプロジェクトから直接 XMLCodeGenerator.dll を呼び出すことができます。
  4. 生成されたクラスとコード ジェネレータによって作成された ActiveX DLL を使用するアプリケーションを作成します。

自分のアプリケーションからコード ジェネレータを呼び出す

XML コード ジェネレータを初めて使用するときには、まず、REGSVR32.exe を実行することによって XMLClassGenerator.dll ファイルを登録します (まだマシンに登録されていない場合)。XMLClassGenerator.dll は、1 つのメソッド、GenerateWrappers (SchemaSourceFile、OutputDirectory) を持つクラス (XMLClassGenerator.CXMLClassGenerator) を含んでいます。このメソッドは、最初のパラメータとして XML Schema を取り、2 番目のパラメータとして出力ディレクトリを取ります。以下のコードを使用して、ジェネレータを呼び出すあなた自身の Visual Basic アプリケーションを作成することができます。

'Declare variable for return code using ENUM type XMLCG
Dim rc As XMLCG

'Declare object ref to CXMLClassGenerator
Dim cg As XMLClassGenerator.CXMLClassGenerator

'Create instance of generator component
Set cg = New CXMLClassGenerator

'Invoke component to generate Visual Basic classes
'passing path to schema and output directory
rc = cg.GenerateWrappers("d:\MyXMLSchema.xml", "d:\TestDir\")

このコードは、スキーマ内の要素に対応する Visual Basic クラス のセットを含んだ Visual Basic プロジェクト ファイルと、その新しい Visual Basic プロジェクトのためのコンパイル済み DLL を作成します。XMLClassGenerator.dll のソース コードはすべて、XMLCodeGenerator ディレクトリにあります。

スキーマ参照

XML クラス ジェネレータに必要なスキーマは、Internet Explorer 5.0 によってサポートされる XML Schema と同じですが、いくつか小さな変更点があります。

使用されない属性は、次のとおりです。

  • AttributesRequireddefault
  • AttributeTypeDefaultdt:values、および required
  • Datatype
  • ElementTypeOrder
  • Group
  • SchemaXmlns

制約は、次のとおりです。

  • model 属性は "閉じて" いなければならない。
  • content 属性は "混合" であってはならない。
  • namespace スキーマの namespace は "dt" でなければならない。

その他の詳細:

  • minOccurs および maxOccurs のデフォルトは、1 に設定する。
  • content 属性のデフォルトは、textOnly に設定する。

全般的に、スキーマはクラス レイアウトを定義するために使用される場合がほとんどです。minOccurs および maxOccurs は、データの格納方法を定義するのに役立ちます。minOccurs が 1 でないか、maxOccurs が 1 でない場合は、使用されるデータ型は集合です。そうでない場合は、dt:type (デフォルトでは文字列) に基づきます。