Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

XML スキーマからのクラスの生成

スタジオは、(ファイルまたは URL からの) XML スキーマを読み取り、そのスキーマで定義されたタイプに対応する XML 対応クラスのセットを生成するウィザードを提供します。すべてのクラスは %XML.AdaptorOpens in a new tab を拡張します。クラスを収めるパッケージと、クラス定義の詳細を制御するさまざまなオプションを指定します。

ウィザードはクラス・メソッドとしても用意されているので、利用可能です。内部的には、SOAP ウィザードは、WSDL ドキュメントを読み取って Web クライアントまたは Web サービスを生成するときに、このクラス・メソッドを使用します。"Caché での Web サービスおよび Web クライアントの作成" を参照してください。

この章には、以下の項目についての情報が含まれます。

このウィザードでは、データは Caché にロードされません。クラスの生成後にデータをロードする必要がある場合は、“Caché オブジェクトへの XML のインポート” の章を参照してください。

Note:

使用する任意の XML ドキュメントの XML 宣言にはそのドキュメントの文字エンコードを明記する必要があり、明記しておけば、ドキュメントは宣言どおりにエンコードされるようになります。文字エンコードが宣言されていない場合は、このドキュメント内の前述の “入出力の文字エンコード” で説明されている既定値が使用されます。これらの既定値が正しくない場合は、XML 宣言を修正して、実際に使用されている文字セットを指定するようにします。

ウィザードの使用法

XML スキーマ・ウィザードを使用するには、以下の手順を実行します。

  1. [ツール][アドイン][XMLスキーマウィザード] を選択します。

  2. 最初の画面で、使用する XML スキーマを指定します。以下のいずれかを行います。

    • [スキーマファイル][参照] を選択して、XML スキーマ・ファイルを選択します。

    • [URL] で、スキーマの URL を指定します。

  3. [次へ] を選択します。

    次の画面に、正しいものを選択したことを確認できるように、スキーマが表示されます。

  4. 必要に応じて、以下のオプションも選択します。

    • [空のクラスを保持]。このオプションによりプロパティを持たない未使用のクラスを保存するかどうかを指定します。このオプションを選択すると、そのようなクラスがウィザードの最後に削除されなくなります。選択しない場合は、削除されます。

    • [配列プロパティ以外を作成]。このオプションは、ウィザードで配列プロパティを生成するかどうかを制御します。このオプションを選択すると、ウィザードでは、配列プロパティが生成されない代わりに別の形式が生成されます。"Caché での Web サービスおよび Web クライアントの作成" の付録にある “生成されたクラスの詳細” の “配列プロパティの作成” を参照してください。

    • [nillable 要素のXMLNIL プロパティ・パラメータを生成]。このオプションは生成されたクラスの使用可能なプロパティに対して XMLNIL プロパティ・パラメータをウィザードで指定するかどうかを制御します。

      このオプションは nillable="true" で指定された XML 要素に対応する各プロパティに適用されます。このオプションを選択した場合、ウィザードにより XMLNIL=1 がプロパティ定義に追加されます。それ以外の場合、このパラメータの追加はありません。このパラメータの詳細は、"オブジェクトの XML への投影" の “空文字列および NULL 値の処理” を参照してください。

    • [nillable 要素の XMLNILNOOBJECT プロパティ・パラメータを生成]。このオプションは生成されたクラスの使用可能なプロパティに対して XMLNILNOOBJECT プロパティ・パラメータをウィザードで指定するかどうかを制御します。

      このオプションは nillable="true" で指定された XML 要素に対応する各プロパティに適用されます。このオプションを選択した場合、ウィザードにより XMLNILNOOBJECT=1 がプロパティ定義に追加されます。それ以外の場合、このパラメータの追加はありません。このパラメータの詳細は、"オブジェクトの XML への投影" の “空文字列および NULL 値の処理” を参照してください。

  5. [次へ] を選択します。

    次の画面に、生成するクラスについてのオプションに関する基本情報が表示されます。

  6. この画面で、以下のオプションを指定します。

    • 生成されたクラスをウィザードによってコンパイルするには、希望に応じて [コンパイルにより生成されたクラス] を選択します。

    • 必要に応じて、[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() コールバック・メソッドを変更してください。

    • 永続クラスを生成する場合、オブジェクトの Caché 内部識別子を投影できるように、ウィザードでは各オブジェクトタイプ・クラスに一時プロパティを追加することができます。選択肢は以下のとおりです。

      • [なし] — このオプションを選択すると、ウィザードは、ここで説明したいずれのプロパティも追加しません。

      • [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 ネームスペースがリストされます。ここでは、その行に表示された XML ネームスペースのクラスを格納するパッケージを指定します。これを行うには、その行の [パッケージ名] フィールドにパッケージ名を指定します。

  7. [次へ] を選択します。

  8. 次の画面で、以下のオプションを指定します。

    • [Java有効] — このオプションを選択すると、各クラスに Java プロジェクションが含まれます。

    • [データ生成] — このオプションを選択すると、各クラスは %XML.AdaptorOpens in a new tab に加えて %PopulateOpens in a new tab を拡張します。

    • [SQLカラム順序] — このオプションを選択すると、各プロパティは、プロパティのスキーマ内の順序と SQL 内の順序が同じになるよう、SqlColumnNumber キーワードの値を指定します。

    • [シーケンスの非チェック] — このオプションにチェックを付けると、ウィザードは生成されたクラスで XMLSEQUENCE パラメータを 0 に設定します。このオプションは、XML ファイルが XML スキーマと同じ順序で要素を持たない状況で役立ちます。

      既定では、生成されたクラス内で XMLSEQUENCE パラメータは 1 に設定されています。これにより、プロパティが確実にスキーマ内の順序と同じ順序でクラス定義に含まれます。"オブジェクトの XML への投影" の “特殊なトピック” の章も参照してください。

    • XMLIGNORENULL — このオプションを選択した場合、ウィザードにより XMLIGNORENULL=1 がクラス定義に追加されます。それ以外の場合、このパラメータの追加はありません。

      このクラス・パラメータの詳細は、"オブジェクトの XML への投影" の “空文字列および NULL 値の処理” を参照してください。

    • バイナリにストリームを使用 — このオプションを選択すると、ウィザードは、xsd:base64Binary タイプのあらゆる要素に %Stream.GlobalBinaryOpens in a new tab タイプのプロパティを生成します。このオプションを選択しないと、プロパティのタイプが %xsd.base64BinaryOpens in a new tab になります。

      ウィザードは、タイプが xsd:base64Binary属性を無視する点に注意してください。

    • チェック・ボックスの下のテーブルには、ウィザードにより生成されるクラスがリストされます。各クラスに、[拡張/タイプ] が適切に設定されていることを確認します。ここでは以下のいずれかを選択します。

      • [永続] — このオプションを選択すると、そのクラスは永続クラスになります。

      • [シリアル] — このオプションを選択すると、そのクラスはシリアル・クラスになります。

      • [登録オブジェクト] — このオプションを選択すると、そのクラスは登録オブジェクト・クラスになります。

      生成されたすべてのクラスは、%XML.AdaptorOpens in a new tab も拡張します。

    • テーブルの右の列で、インデックス化する必要がある各プロパティの [インデックス] を選択します。

  9. [完了] を選択します。

ウィザードはクラスを生成し、要求に応じてこれらのクラスをコンパイルします。

これらのクラスのプロパティについては、スキーマ内の対応する要素の名前がアンダースコア (_) で始まる場合、そのプロパティの名前はパーセント記号 (%) で始まります。

プログラムによるクラスの生成

XML スキーマ・ウィザードは %XML.Utils.SchemaReaderOpens in a new tab クラスの Process() メソッドとしても使用できます。このメソッドを使用するには、以下の操作を実行します。

  1. %XML.Utils.SchemaReaderOpens in a new tab のインスタンスを作成します。

  2. 必要に応じて、このインスタンスの動作を制御するプロパティを設定します。詳細は、%XML.Utils.SchemaReaderOpens in a new tab のクラス・ドキュメントを参照してください。

  3. オプションとして、追加設定についての情報を含める Caché 多次元配列を作成します。詳細は、%XML.Utils.SchemaReaderOpens in a new tab のクラス・ドキュメントの Process() メソッドを参照してください。

  4. インスタンスの Process() メソッドを呼び出します。

    method Process(LocationURL As %String, 
                   Package As %String = "Test", 
                   ByRef Features As %String) as %Status
    
    • LocationURL は、スキーマの URL にするか、スキーマ・ファイルの名前 (完全なパスを含む) にする必要があります。

    • Package は、生成されたクラスを配置するパッケージの名前です。パッケージを指定しないと、Caché は、サービス名をパッケージ名として使用します。

    • Features は、前の手順で必要に応じて作成した多次元配列です。

各 XSD タイプの既定の Caché データ型

XML スキーマ・ウィザードは、生成したプロパティごとに、スキーマに指定されている XSD タイプに応じて、適切な Caché データ型クラスを自動的に使用します。以下のテーブルに、XSD タイプおよび対応する Caché データ型を示します。

XML タイプに使用される Caché データ型
ソース・ドキュメントの XSD タイプ 生成された Caché クラスのデータ型
anyURI %xsd.anyURIOpens in a new tab
base64Binary %xsd.base64BinaryOpens in a new tab または %Stream.GlobalBinaryOpens in a new tab。選択したオプションによって異なります。Caché で長い文字列演算が使用可能になっていない場合は、各文字列が長さの上限を超えるかどうかを開発者が確認する必要があります。上限を超える場合は、生成されたプロパティを %xsd.base64BinaryOpens in a new tab から適切なストリーム・クラスに変更する必要があります。
boolean %BooleanOpens in a new tab
byte %xsd.byteOpens in a new tab
date %DateOpens in a new tab
dateTime %TimeStampOpens in a new tab
decimal %NumericOpens in a new tab
double %xsd.doubleOpens in a new tab
float %xsd.floatOpens in a new tab
hexBinary %xsd.hexBinaryOpens in a new tab
int %xsd.intOpens in a new tab
integer %IntegerOpens in a new tab
long %IntegerOpens in a new tab
negativeInteger %xsd.negativeIntegerOpens in a new tab
nonNegativeInteger %xsd.nonNegativeIntegerOpens in a new tab
nonPositiveInteger %xsd.nonPositiveIntegerOpens in a new tab
positiveInteger %xsd.positiveIntegerOpens in a new tab
short %xsd.shortOpens in a new tab
string %StringOpens in a new tab (メモ : Caché で長い文字列演算が使用可能になっていない場合は、各文字列が長さの上限を超えるかどうかを開発者が確認する必要があり、超える場合は、生成されたタイプを適切なストリーム・クラスに変更する必要があります。)
time %TimeOpens in a new tab
unsignedByte %xsd.unsignedByteOpens in a new tab
unsignedInt %xsd.unsignedIntOpens in a new tab
unsignedLong %xsd.unsignedLongOpens in a new tab
unsignedShort %xsd.unsignedShortOpens in a new tab
タイプを指定しない場合 %StringOpens in a new tab

生成されたプロパティのプロパティ・キーワード

XML スキーマ・ウィザードは、生成したプロパティごとに、スキーマ内の情報を使用して、以下のキーワードも自動的に設定します。

  • 説明

  • 必須

  • ReadOnly (対応する要素または属性が、fixed 属性で定義されている場合)

  • InitialExpression (この値は、スキーマ内の fixed 属性から取り込まれます)

  • リレーションシップに関連するキーワード

生成されたプロパティのパラメータ

XML スキーマ・ウィザードは、生成したプロパティごとに、XMLNAMEXMLPROJECTION など、XML に関連するパラメータすべてを必要に応じて自動的に設定します。これらの詳細は、"オブジェクトの XML への投影" を参照してください。また、MAXVALMINVALVALUELIST など、他のパラメータも必要に応じて設定されます。

生成されたクラスを長い文字列に合わせて調整する方法

場合によっては、生成されたクラスを、長い文字列または長いバイナリ値に対応できるように編集する必要があります。

どのような文字列タイプでも、XML スキーマには、文字列がどのくらいの長さになる可能性があるかを示す情報は含まれません。XML スキーマ・ウィザードでは、文字列の任意の値が Caché %StringOpens in a new tab クラスにマップされ、base64Binary の任意の値が %xsd.base64BinaryOpens in a new tab クラスにマップされます。クラスが保持することになっているデータによっては、これらの選択肢が不適切になる場合があります。

Caché で長い文字列演算を使用可能にしていない場合は、以下を行う必要があります。

  • 生成されたクラスを調べて、%StringOpens in a new tab または %xsd.base64BinaryOpens in a new tab と定義されているプロパティを見つけます。

  • これらのクラス、特にこれらのプロパティを使用するコンテキストを検討します。

  • %StringOpens in a new tab プロパティに長い文字列を含めることが必要になると判断した場合には、そのプロパティを適切な文字ストリームに再定義します。同様に、%xsd.base64BinaryOpens in a new tab プロパティに長いバイナリ文字列を含めることが必要になると判断した場合には、そのプロパティを適切なバイナリ・ストリームに再定義します。

Caché で長い文字列演算を使用可能にしている場合は、以下を行う必要があります。

FeedbackOpens in a new tab