オブジェクトを分類によって検索するには、まず、特定の分類スキーマの内部での分類を確立します。次に、BusinessQueryManagerImpl.findObjects メソッドへの引数として分類を指定します。
特定の分類スキーマの内部で分類を確立するには、まず分類スキーマを検索します。次に、findObjects メソッドまたは別の検索メソッドへの引数として使用される Classification オブジェクトを作成します。
次のコードは、International Organization for Standardization (ISO) によって管理されている ISO 3166 国番号分類スキーマの内部の特定の分類に対応するすべての組織を検索します。詳細については、http://www.iso.org/iso/en/prods-services/iso3166ma/index.html を参照してください。この分類スキーマは、Service Registry に付属するサンプルデータベースで提供されています。
ClassificationScheme cScheme = bqm.findClassificationSchemeByName(null, "iso-ch:3166:1999"); Classification classification = blcm.createClassification(cScheme, "United States", "US"); Collection classifications = new ArrayList(); classifications.add(classification); // perform search BulkResponse response = bqm.findObjects("Organization", null, null, classifications, null, null, null); Collection orgs = response.getCollection();
ebXML Registry Information Model Specification (レジストリ情報モデル仕様) では、一連の標準的な分類スキーマを ebXML レジストリに用意しておく必要があります。各スキーマには、ebXML 仕様で ClassificationNode オブジェクトと呼ばれる一連の必須 Concept もあります。標準的な分類スキーマの主な目的は、オブジェクトを分類することではなく、オブジェクトの属性のタイプを列挙することです。たとえば、EmailType 分類スキーマでは、EmailAddress オブジェクトの type 属性の値が列挙されています。
表 3–3 に、これらの標準的な分類スキーマの概要を示します。
表 3–3 標準的な分類スキーマ
分類スキーマ |
説明 |
---|---|
RegistryObject どうしの関連付けのタイプを定義します。 |
|
コンテンツ管理サービスのタイプを定義します。 |
|
仕様で定義されているクラスの属性のデータ型を定義します。 |
|
RemoveObjectsRequest プロトコルメッセージの deletionScope 属性の値を定義します。 |
|
電子メールアドレスのタイプを定義します。 |
|
コンテンツ管理サービスのエラー処理モデルのタイプを定義します。 |
|
レジストリでプロトコルメッセージの処理中に発生するエラーの重要度のタイプを定義します。 |
|
レジストリで発生する可能性のあるイベントのタイプを定義します。 |
|
レジストリでコンテンツ管理サービスを呼び出す方法を定義します。 |
|
ClassificationScheme がその ClassificationNode の code 属性の値を割り当てる方法を定義します。 |
|
クライアントがレジストリから Subscription 内部のイベントの通知を受け取る方法を定義します。 |
|
レジストリでサポートできる RegistryObject のタイプを定義します。 |
|
電話番号のタイプを定義します。 |
|
レジストリでサポートされるクエリー言語を定義します。 |
|
RegistryResponse の状態のタイプを定義します。 |
|
RegistryObject の状態のタイプを定義します。 |
|
アクセス制御の目的で User が所属できるグループを定義します。 |
|
アクセス制御の目的で User に割り当てることのできるロールを定義します。 |
標準的な分類スキーマとその Concept を使用するオブジェクトを検索するために、パッケージ org.freebxml.common.CanonicalConstants で定義されている文字列定数を使用してオブジェクトを検索できます。定数の一覧については、「分類スキーマに対する定数」を参照してください。
まず、一意の識別子の値を使用して分類スキーマを検索します。
String schemeId = CanonicalConstants.CANONICAL_CLASSIFICATION_SCHEME_ID_SubjectRole; ClassificationScheme cScheme = (ClassificationScheme) bqm.getRegistryObject(schemeId); String schemeName = getName(cScheme);
次に、同じ方法で Concept を検索し、それを使用して分類を作成します。
String concId = CanonicalConstants.CANONICAL_SUBJECT_ROLE_ID_RegistryAdministrator; Concept concept = (Concept) bqm.getRegistryObject(concId); Classification classification = blcm.createClassification(concept);
最後に、標準的な分類スキーマ以外の場合と同じ方法で、オブジェクトを検索します。
Collection classifications = new ArrayList(); classifications.add(classification); BulkResponse response = bqm.findObjects("RegistryObject", null, null, classifications, null, null, null); Collection objects = response.getCollection();
すべての標準的な分類スキーマとその Concept を表示するサンプルプログラムについては、 <INSTALL>/registry/samples/classification-schemes/src ディレクトリにある JAXRGetCanonicalSchemes.java を参照してください。
分類によってオブジェクトを検索する例については、<INSTALL>/registry/samples/search-classification/src ディレクトリにある JAXRSearchByClassification.java および JAXRSearchByCountryClassification.java を参照してください。最初のサンプルは、標準的な分類スキーマ SubjectRole を使用するオブジェクトを検索します。2 番目のサンプルは、地理的な分類を使用する組織を検索します。
JAXRSearchByCountryClassification サンプルで結果を取得するには、指定された分類を使用するオブジェクトを発行する必要があります。「分類の追加: 例」または 「組織の作成: 例」のサンプルをまず実行してください。
<INSTALL>/registry/samples/search-classification ディレクトリに移動します。
次のいずれかのコマンドを入力します。
asant search-class asant search-geo |
通常、search-class ターゲットは 1 つの結果を返します。search-geo ターゲットは、「分類の追加: 例」の run ターゲットまたは 「組織の作成: 例」の pub-org ターゲットが実行済みであれば、結果を返します。