Service Registry 3 2005Q4 開発者ガイド

分類によるオブジェクトの検索

オブジェクトを分類によって検索するには、まず、特定の分類スキーマの内部での分類を確立します。次に、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 標準的な分類スキーマ

分類スキーマ 

説明 

AssociationType

RegistryObject どうしの関連付けのタイプを定義します。

ContentManagementService

コンテンツ管理サービスのタイプを定義します。 

DataType

仕様で定義されているクラスの属性のデータ型を定義します。 

DeletionScopeType

RemoveObjectsRequest プロトコルメッセージの deletionScope 属性の値を定義します。

EmailType

電子メールアドレスのタイプを定義します。 

ErrorHandlingModel

コンテンツ管理サービスのエラー処理モデルのタイプを定義します。 

ErrorSeverityType

レジストリでプロトコルメッセージの処理中に発生するエラーの重要度のタイプを定義します。 

EventType

レジストリで発生する可能性のあるイベントのタイプを定義します。 

InvocationModel

レジストリでコンテンツ管理サービスを呼び出す方法を定義します。 

NodeType

ClassificationScheme がその ClassificationNode の code 属性の値を割り当てる方法を定義します。

NotificationOptionType

クライアントがレジストリから Subscription 内部のイベントの通知を受け取る方法を定義します。

ObjectType

レジストリでサポートできる RegistryObject のタイプを定義します。

PhoneType

電話番号のタイプを定義します。 

QueryLanguage

レジストリでサポートされるクエリー言語を定義します。 

ResponseStatusType

RegistryResponse の状態のタイプを定義します。

StatusType

RegistryObject の状態のタイプを定義します。

SubjectGroup

アクセス制御の目的で User が所属できるグループを定義します。

SubjectRole

アクセス制御の目的で 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 を参照してください。

ProcedureJAXRGetCanonicalSchemes サンプルを実行するには

手順
  1. <INSTALL>/registry/samples/classification-schemes ディレクトリに移動します。

  2. 次のコマンドを入力します。


    asant get-schemes
    

分類によるオブジェクトの検索: 例

分類によってオブジェクトを検索する例については、<INSTALL>/registry/samples/search-classification/src ディレクトリにある JAXRSearchByClassification.java および JAXRSearchByCountryClassification.java を参照してください。最初のサンプルは、標準的な分類スキーマ SubjectRole を使用するオブジェクトを検索します。2 番目のサンプルは、地理的な分類を使用する組織を検索します。

ProcedureJAXRSearchByClassification サンプルおよび JAXRSearchByCountryClassification サンプルを実行するには

始める前に

JAXRSearchByCountryClassification サンプルで結果を取得するには、指定された分類を使用するオブジェクトを発行する必要があります。「分類の追加: 例」または 「組織の作成: 例」のサンプルをまず実行してください。

手順
  1. <INSTALL>/registry/samples/search-classification ディレクトリに移動します。

  2. 次のいずれかのコマンドを入力します。


    asant search-class
    asant search-geo
    

    通常、search-class ターゲットは 1 つの結果を返します。search-geo ターゲットは、「分類の追加: 例」run ターゲットまたは 「組織の作成: 例」pub-org ターゲットが実行済みであれば、結果を返します。