XML スキーマからのクラスの生成
スタジオは、(ファイルまたは URL からの) XML スキーマを読み取り、そのスキーマで定義されたタイプに対応する XML 対応クラスのセットを生成するウィザードを提供します。すべてのクラスは %XML.AdaptorOpens in a new tab を拡張します。クラスを収めるパッケージと、クラス定義の詳細を制御するさまざまなオプションを指定します。
ウィザードはクラス・メソッドとしても用意されているので、利用可能です。内部的には、SOAP ウィザードは、WSDL ドキュメントを読み取って Web クライアントまたは Web サービスを生成するときに、このクラス・メソッドを使用します。"Web サービスおよび Web クライアントの作成" を参照してください。
このウィザードでは、データは InterSystems IRIS® データ・プラットフォームにロードされません。クラスの生成後にデータをロードする必要がある場合は、"オブジェクトへの XML のインポート" を参照してください。
使用するどの XML ドキュメントの XML 宣言にも、そのドキュメントの文字エンコードを明記する必要があります。これにより、ドキュメントが宣言どおりにエンコードされます。文字エンコードが宣言されていない場合は、"入出力の文字エンコード" で説明されている既定値が使用されます。これらの既定値が正しくない場合は、XML 宣言を修正して、実際に使用されている文字セットを指定するようにします。
ウィザードの使用法
XML スキーマ・ウィザードを使用するには、以下の手順を実行します。
-
[ツール]→[アドイン]→[XMLスキーマウィザード] を選択します。
-
最初の画面で、使用する XML スキーマを指定します。以下のいずれかを行います。
-
[スキーマファイル] で [参照] を選択して、XML スキーマ・ファイルを選択します。
-
[URL] で、スキーマの URL を指定します。
-
-
[次へ] を選択します。
次の画面に、正しいものを選択したことを確認できるように、スキーマが表示されます。
-
必要に応じて、以下のオプションも選択します。
-
[空のクラスを保持]。このオプションによりプロパティを持たない未使用のクラスを保存するかどうかを指定します。このオプションを選択すると、そのようなクラスがウィザードの最後に削除されなくなります。選択しない場合は、削除されます。
-
[配列プロパティ以外を作成]。このオプションは、ウィザードで配列プロパティを生成するかどうかを制御します。このオプションを選択すると、ウィザードでは、配列プロパティが生成されない代わりに別の形式が生成されます。"生成されたクラスの詳細" の "配列プロパティの作成" を参照してください。
-
[nillable 要素のXMLNIL プロパティ・パラメータを生成]。このオプションは生成されたクラスの使用可能なプロパティに対して XMLNIL プロパティ・パラメータをウィザードで指定するかどうかを制御します。
このオプションは nillable="true" で指定された XML 要素に対応する各プロパティに適用されます。このオプションを選択した場合、ウィザードにより XMLNIL=1 がプロパティ定義に追加されます。それ以外の場合、このパラメータの追加はありません。このパラメータの詳細は、"空文字列および NULL 値の処理" を参照してください。
-
[nillable 要素の XMLNILNOOBJECT プロパティ・パラメータを生成]。このオプションは生成されたクラスの使用可能なプロパティに対して XMLNILNOOBJECT プロパティ・パラメータをウィザードで指定するかどうかを制御します。
このオプションは nillable="true" で指定された XML 要素に対応する各プロパティに適用されます。このオプションを選択した場合、ウィザードにより XMLNILNOOBJECT=1 がプロパティ定義に追加されます。それ以外の場合、このパラメータの追加はありません。このパラメータの詳細は、"空文字列および NULL 値の処理" を参照してください。
-
-
[次へ] を選択します。
次の画面に、生成するクラスについてのオプションに関する基本情報が表示されます。
-
この画面で、以下のオプションを指定します。
-
生成されたクラスをウィザードによってコンパイルするには、希望に応じて [コンパイルにより生成されたクラス] を選択します。
-
必要に応じて、[NAMESPACEクラスパラメータ追加] を選択し、NAMESPACE パラメータを指定します。この場合、NAMESPACE は、スキーマで targetNamespace の値に設定されます。
このオプションのチェックを外したままにすると、NAMESPACE は指定されません。
どのような場合でも、このオプションを選択することをお勧めします。これは、すべての XML 対応クラスは、XML ネームスペースに割り当てる必要があるためです。(ただし、下位互換性を確保するため、このオプションのチェックを外しておくことは可能です。)
-
生成されたクラスを永続クラスにする場合は、[永続クラス作成] を選択します。これにより、クラスは %PersistentOpens in a new tab を拡張します。
これは、個々のクラスについて、後からウィザードで変更できます。
-
永続クラスを生成する場合、他の <complexType> B の <sequence> で構成される <complexType> A を扱う方法を決定するオプションがあります。ウィザードによりプロパティ A が含まれる永続クラスが生成されるとき、このプロパティで 3 つの形式があります。これは、オブジェクトのリスト、一対多のリレーションシップ (既定)、または親子リレーションシップとして定義できます。オプション内容をまとめたテーブルを以下に示します。
永続クラス内でコレクションプロパティにリレーションシップを使用する インデックスを多対一のリレーションシップに追加する 親子リレーションシップを使用 生成されるプロパティ A の形式 選択 (既定) 未選択 未選択 インデックスが存在しない一対多のリレーションシップ 選択 (既定) 選択 未選択 多側でインデックスが存在する一対多のリレーションシップ 選択 (既定) [親子リレーションシップを使用] を選択した場合、このオプションは無視されます 選択 親子リレーションシップ 未選択 未選択 未選択 オブジェクトのリスト また、[親子リレーションシップを使用] を選択していない場合、必要に応じて、[カスケード削除するために %OnDelete メソッドをクラスに追加する] オプションを選択します。このオプションを選択すると、ウィザードによりクラス定義が生成されるときに、これらのクラスに %OnDelete() コールバック・メソッドの実装が含まれます。生成された %OnDelete() メソッドによって、クラスで参照されるすべての永続オブジェクトが削除されます。[親子リレーションシップを使用] を選択している場合は、このオプションを選択しないでください。親子リレーションシップにより既に同様のロジックが提供されています。
Note:生成されたクラスを変更する場合、必要に応じて必ず %OnDelete() コールバック・メソッドを変更してください。
-
永続クラスを生成する場合、オブジェクトの InterSystems IRIS 内部識別子を投影できるように、ウィザードでは各オブジェクトタイプ・クラスに一時プロパティを追加することができます。選択肢は以下のとおりです。
-
[なし] — このオプションを選択すると、ウィザードは、ここで説明したいずれのプロパティも追加しません。
-
[Id使用] — このオプションを選択すると、ウィザードは以下のプロパティを各オブジェクトタイプ・クラスに追加します。
Property %identity As %XML.Id (XMLNAME="_identity", XMLPROJECTION="ATTRIBUTE") [Transient];
-
[Oid使用] — このオプションを選択すると、ウィザードは以下のプロパティを各オブジェクトタイプ・クラスに追加します。
Property %identity As %XML.Oid (XMLNAME="_identity", XMLPROJECTION="ATTRIBUTE") [Transient];
-
[GUID使用] — このオプションを選択すると、ウィザードは以下のプロパティを各オブジェクトタイプ・クラスに追加します。
Property %identity As %XML.GUID (XMLNAME="_identity", XMLPROJECTION="ATTRIBUTE") [Transient];
"特殊なトピック" も参照してください。
-
-
下部のテーブルには、スキーマに含まれる XML ネームスペースがリストされます。ここでは、その行に表示された XML ネームスペースのクラスを格納するパッケージを指定します。これを行うには、その行の [パッケージ名] フィールドにパッケージ名を指定します。
-
-
[次へ] を選択します。
-
次の画面で、以下のオプションを指定します。
-
[Java有効] — このオプションを選択すると、各クラスに Java プロジェクションが含まれます。
-
[データ生成] — このオプションを選択すると、各クラスは %XML.AdaptorOpens in a new tab に加えて %PopulateOpens in a new tab を拡張します。
-
[SQLカラム順序] — このオプションを選択すると、各プロパティは、プロパティのスキーマ内の順序と SQL 内の順序が同じになるよう、SqlColumnNumber キーワードの値を指定します。
-
[シーケンスの非チェック] — このオプションにチェックを付けると、ウィザードは生成されたクラスで XMLSEQUENCE パラメータを 0 に設定します。このオプションは、XML ファイルが XML スキーマと同じ順序で要素を持たない状況で役立ちます。
既定では、生成されたクラス内で XMLSEQUENCE パラメータは 1 に設定されています。これにより、プロパティが確実にスキーマ内の順序と同じ順序でクラス定義に含まれます。"特殊なトピック" も参照してください。
-
XMLIGNORENULL — このオプションを選択した場合、ウィザードにより XMLIGNORENULL=1 がクラス定義に追加されます。それ以外の場合、このパラメータの追加はありません。
このクラス・パラメータの詳細は、"空文字列および NULL 値の処理" を参照してください。
-
バイナリにストリームを使用 — このオプションを選択すると、ウィザードは、xsd:base64Binary タイプのあらゆる要素に %Stream.GlobalBinaryOpens in a new tab タイプのプロパティを生成します。このオプションを選択しないと、プロパティのタイプが %xsd.base64BinaryOpens in a new tab になります。
ウィザードは、タイプが xsd:base64Binary の属性を無視する点に注意してください。
-
チェック・ボックスの下のテーブルには、ウィザードにより生成されるクラスがリストされます。各クラスに、[拡張/タイプ] が適切に設定されていることを確認します。ここでは以下のいずれかを選択します。
-
[永続] — このオプションを選択すると、そのクラスは永続クラスになります。
-
[シリアル] — このオプションを選択すると、そのクラスはシリアル・クラスになります。
-
[登録オブジェクト] — このオプションを選択すると、そのクラスは登録オブジェクト・クラスになります。
生成されたすべてのクラスは、%XML.AdaptorOpens in a new tab も拡張します。
-
-
テーブルの右の列で、インデックス化する必要がある各プロパティの [インデックス] を選択します。
-
-
[完了] を選択します。
ウィザードはクラスを生成し、要求に応じてこれらのクラスをコンパイルします。
これらのクラスのプロパティについては、スキーマ内の対応する要素の名前がアンダースコア (_) で始まる場合、そのプロパティの名前はパーセント記号 (%) で始まります。
プログラムによるクラスの生成
XML スキーマ・ウィザードは %XML.Utils.SchemaReaderOpens in a new tab クラスの Process() メソッドとしても使用できます。このメソッドを使用するには、以下の操作を実行します。
-
%XML.Utils.SchemaReaderOpens in a new tab のインスタンスを作成します。
-
必要に応じて、このインスタンスの動作を制御するプロパティを設定します。詳細は、%XML.Utils.SchemaReaderOpens in a new tab のクラス・ドキュメントを参照してください。
-
オプションとして、追加設定についての情報を含める InterSystems IRIS 多次元配列を作成します。詳細は、%XML.Utils.SchemaReaderOpens in a new tab のクラス・ドキュメントの Process() メソッドを参照してください。
-
インスタンスの Process() メソッドを呼び出します。
method Process(LocationURL As %String, Package As %String = "Test", ByRef Features As %String) as %Status
-
LocationURL は、スキーマの URL にするか、スキーマ・ファイルの名前 (完全なパスを含む) にする必要があります。
-
Package は、生成されたクラスを配置するパッケージの名前です。パッケージを指定しないと、InterSystems IRIS は、サービス名をパッケージ名として使用します。
-
Features は、前の手順で必要に応じて作成した多次元配列です。
-
既定のデータ型
XML スキーマ・ウィザードは、生成したプロパティごとに、スキーマに指定されている XSD タイプに応じて、適切な InterSystems IRIS データ型クラスを自動的に使用します。以下のテーブルに、XSD タイプおよび対応する InterSystems IRIS データ型を示します。
生成されたプロパティのプロパティ・キーワード
XML スキーマ・ウィザードは、生成したプロパティごとに、スキーマ内の情報を使用して、以下のキーワードも自動的に設定します。
-
説明
-
必須
-
ReadOnly (対応する要素または属性が、fixed 属性で定義されている場合)
-
InitialExpression (この値は、スキーマ内の fixed 属性から取り込まれます)
-
リレーションシップに関連するキーワード
生成されたプロパティのパラメータ
XML スキーマ・ウィザードは、生成したプロパティごとに、XMLNAME や XMLPROJECTION など、XML に関連するパラメータすべてを必要に応じて自動的に設定します。これらの詳細は、"オブジェクトの XML への投影" を参照してください。また、MAXVAL、MINVAL、VALUELIST など、他のパラメータも必要に応じて設定されます。
生成されたクラスをきわめて長い文字列に合わせて調整する方法
まれに、文字列長の制限を超える、きわめて長い文字列やバイナリ値に対応できるように、生成されたクラスの編集が必要な場合があります。
どのような文字列タイプでも、XML スキーマには、文字列がどのくらいの長さになる可能性があるかを示す情報は含まれません。XML スキーマ・ウィザードでは、文字列の任意の値が InterSystems IRIS %StringOpens in a new tab クラスにマップされ、base64Binary の任意の値が %xsd.base64BinaryOpens in a new tab クラスにマップされます。クラスが保持することになっているデータによっては、これらの選択肢が不適切になる場合があります。
生成されたクラスを使用する前に、以下を行う必要があります。
-
生成されたクラスを調べて、%StringOpens in a new tab または %xsd.base64BinaryOpens in a new tab と定義されているプロパティを見つけます。これらのクラス、特にこれらのプロパティを使用するコンテキストを検討します。
-
文字列長の制限を超える文字列を %StringOpens in a new tab プロパティに含めることが必要と判断した場合、そのプロパティを適切な文字ストリームに再定義します。同様に、同じ制限を超える文字列を %xsd.base64BinaryOpens in a new tab プロパティに含めることが必要と判断した場合、そのプロパティを適切なバイナリ・ストリームに再定義します。
-
プロパティのタイプが %StringOpens in a new tab、%xsd.stringOpens in a new tab、および %BinaryOpens in a new tab の場合、MAXLEN プロパティ・パラメータは既定で 50 文字であることにも注意してください。正しい検証ができるように、上限をさらに高く指定することが必要な場合もあります。
(プロパティのタイプが %xsd.base64BinaryOpens in a new tab の場合、MAXLEN は "" になります。これは、検証の際に長さがチェックされないことを意味します。ただし、文字列長の制限は適用されます。)