このサイトをビューするために JavaScript を有効化してください。

Altova MapForce 2020 Enterprise Edition

コード ジェネレーター

XML スキーマまたは DTD からコードを生成する方法

スクロール ホーム トップ その他

マッピングからコードを生成する場合MapForce はマッピングの全てのステップを自動的に実行する完全なアプリケーションを生成します。オプションでマッピング内で使用されているすべての XML スキーマのためのライブラリを生成することもできます。これによりコードは簡単にマッピングコードによる使用または作成された XML インスタンスを読み取ることができます。

 

マッピングで使用されるすべての XML スキーマのためにライブラリを生成するには 「ラッパークラスの生成」 チェックボックスをオプションダイアログ内で選択します (コード生成 を参照してください)。次回コードを生成する場合 MapForce は以下のとおりマッピングアプリケーションのみではなくマッピング内で使用されているすべてのスキーマのためにラッパークラスも作成します:

 

C++ または C#

Java

目的

Altova

com.altova

各スキーマのために同様の共通のランタイムサポートを含むベースライブラリ

AltovaXML

com.altova.xml

各スキーマのために同様の XML のためのランタイムサポートを含むベースライブラリ。

YourSchema

com.YourSchema

スキーマファイルまたは DTD として名前を付けられた入力スキーマから生成された宣言を含むライブラリ。このライブラリは XML ドキュメントを簡単かつ安全に読み取り、変更し、作成することのできる DOM (W3C Document Object Model) ラッパーです。全てのデータは DOM 内でホールドされており、 DOM からデータを抽出し、データを DOM 内に更新し作成するためのメソッドがあります。

 

生成された C++ コードは Microsoft MSXML または Apache Xerces 3 をサポートしています。生成されたコードの使用のためのシンタックスはいくつかの違いを除いて DOM 実装に類似しています (例えば、 Xerces は更にオーバーロードされた関数をサポートしています)。

 

生成された C# コードは .NET 標準 System.XML ライブラリを 基となる DOM 実装として使用しています。

 

生成された Java コードは JAXP (XML 処理のための Java API ) を基となる DOM インターフェイスとして使用しています。

 

スキーマの変更がすぐにコードに反映されるように頻繁に変更する XML スキーマからプロトタイプを作成中に同じディレクトリに頻繁にコードを生成する必要があります。生成されたテストアプリケーションと Altova ライブラリは同じターゲットディレクトリにコードが生成される都度上書きされることに注意してください。このために生成されたテストアプリケーションにコードを追加しないでください。代わりに Altova ライブラリをプロジェクトに統合してください (スキーマラッパーライブラリの統合を参照してください)。

 

上記のベースライブラリに加え、サポートライブラリも生成されています。サポートライブラリは Altova ベースライブラリにより使用されており、変更されるためカスタム統合のためではありません。

 

名前の生成と名前空間

MapForce はクラスの派生を XML スキーマ内の複合型の拡張として定義するクラス派生を保管しつつ XML スキーマ内の複合型を再定義する全ての生成されている要素または複合型に対応するクラスを生成します。複数の名前空間からスキーマコンポーネントをインポートする複合型スキーマの場合、適切な C# or C++ 名前空間または Java パッケージを生成することにより MapForce はこの情報を保管します。

 

一般的にはコードジェネレーターは生成された名前空間、クラス、およびオリジナル XML スキーマからのメンバーのために名前を保管しています。ターゲット言語内の識別子内で無効な文字は "_" と置き換えられています。他の名前とまたは予約されている用語と競合する名前はユニークに付番されています。名前の生成は SPL テンプレート内でデフォルトの設定を変更することにより影響されます。

 

スキーマからの名前空間プレフィックスをコード名前空間として使用してXML スキーマからの名前スペースは Java または C# または C++ コード内の名前空間内でパッケージに変換されます。 スキーマファイル名から派生するパッケージまたは名前空間内で完全なライブラリは囲まれており、名前の競合無しに1つのプログラム内で複数の生成されたライブラリを使用することができます。

 

データ型

XML スキーマには Java、C# または C++ よりも複雑なデータ型モデルを有しています。 コードジェネレーターは XML スキーマ型言語固有のプリミティブ型または Altova ライブラリにより提供されるクラスを変換します。 スキーマ内で定義される複合型と派生する型は生成されたライブラリ内で暮らすに変換されます。シンプル型からの列挙ファセットはシンボリックな定数に変換されます。

 

単純型のマッピングは SPL テンプレート内で構成することができます。SPL レファレンスを参照してください。

 

XML インスタンスファイルが時間と期間に関連するスキーマ型を使用する場合、 これらは生成されたコード内で Altova ネイティブクラスに変換されます。Altova ライブラリクラスに関する詳細は、以下を参照してください:

 

生成されたクラスへのレファレンス (C++)

生成されたクラスへのレファレンス (C#)

生成されたクラスへのレファレンス (Java)

 

型の変換と各言語に適用可能な詳細に関しては以下を参照してください:

 

スキーマラッパーライブラリ (C++) について

スキーマラッパーライブラリ (C#) について

スキーマラッパーライブラリ (Java) について

 

メモリ管理

A DOM ツリーはノードが現在ドキュメントの一部ではない場合でも特定の DOM ドキュメントにより所有されているノードにより構成されています。 全ての生成されたクラスは値ではなく代表している DOM ノードを参照しています。これは生成されたクラスのインスタンスの割り当ては値をコピーせず、同じデータに追加レファレンスを作成することを意味します。

 

XML スキーマサポート

次の XML スキーマはコードを構成しコードに訳されます:

 

a) XML 名前空間

 

b) 単純型:

 

ビルトイン XML スキーマ型

拡張子により派生した単純型

制約により派生した単純型

ファセット

列挙

パターン

 

c) 複合型:

 

ビルトイン anyType ノード

ユーザー定義複合型

拡張子により派生済み: 派生したクラスにマップ済み

制約により派生済み

複合型コンテンツ

単純型コンテンツ

複合型コンテンツ

 

生成されたラッパークラス内で次の高度の XML スキーマ機能はサポートされていません(または完全にサポートされていません) :

 

ワイルドカード: xs:anyxs:anyAttribute

コンテンツモデル (シーケンス、チョイスなど)。SPL 内でトップレベルコンポジターを使用できるようになります。生成されたクラスにより設定または強制されません。

属性のためのデフォルトおよび固定値SPL 内で使用できるようになります。生成されたクラスにより設定または強制されません。

属性 xsi:type 抽象的な型xsi:type 属性に書き込む場合、生成されたクラスの SetXsiType() メソッドを使用します。

ユニオン型: すべての組み合わせはサポートされません。

代替グループは部分的にサポートされます ("choice" と同様に解決されます)。

属性 nillable="true"xsi:nil

一意の制約

識別制約 (keykeyref)

(C) 2020 Altova GmbH