対話管理ガイド

     前  次    目次     
ここから内容

コンテンツ セレクタの作成

コンテンツ セレクタは、ルールを使用して BEA の仮想コンテンツ リポジトリのコンテンツ項目を特定のグループに提供します。コンテンツ セレクタは、コンテンツを返して、表示します。たとえば、ユーザ プロファイルで「読書好き」として識別されるユーザがログインしたら、コンテンツ セレクタを使用して推薦図書の一覧を表示できます。

開発者は Workshop for WebLogic を使用してコンテンツ セレクタを作成し、更新して、JSP に配置することができます。ポータル管理者は、Administration Console を使用して、ポータルにコンテンツを表示するコンテンツ セレクタを変更します。コンテンツ セレクタにある公開コンテンツと非公開コンテンツの両方を取得できます。コンテンツの公開の詳細については、『コンテンツ管理ガイド』の「BEA リポジトリへのコンテンツの追加」を参照してください。

認証済み (ログイン済み) ユーザでなくてもコンテンツ セレクタの対象にすることができます。たとえば、HTTP リクエストまたはセッションの特定のプロパティの有無や、特定の日付や時刻の条件によって、コンテンツの表示をトリガできます。たとえば、12 月にポータルを訪問し、特定のタイプの Web ブラウザでポータルを表示しているユーザに対して、祝日向けのコンテンツを表示できます。

ただし、認証済みのユーザ (および追跡対象の匿名ユーザ) には、ユーザに関連したプロファイル情報があり、この情報を使用して、パーソナライズされたコンテンツを提供できます。「読書好き」は、このタイプのユーザ プロファイルの一例です。

注意 : この章で示す手順は、[パッケージ・エクスプローラー] ビューの data\src フォルダに関係します。data ディレクトリおよび src ディレクトリは、名前が変更されている可能性があります。

この章の内容は以下のとおりです。

 


コンテンツの表示の設定

コンテンツ セレクタは、コンテンツ プロパティ (通常はテキスト値または数値) を取得します。たとえば、コンテンツ セレクタで本に関する情報を取得できます。書籍コンテンツには、タイトル作者出版日ISBN、出版社の Web サイトへの URL など、多数のプロパティを割り当てることができます。コンテンツ セレクタを使用して、箇条書きのタイトル一覧を表示し、各タイトルを出版社の Web サイトにリンクすることもできます。このリストとリンクは、コンテンツ プロパティのテキスト値のみを使用して作成されます。

書籍コンテンツには、書籍の表紙の画像を格納するバイナリ プロパティも含まれる場合があります。コンテンツ セレクタでは、ShowProperty サーブレットを使用して、バイナリ プロパティも表示できます (実画像の表示)。詳細については、「プレースホルダ ファイルの作成」を参照してください。コンテンツ セレクタで表示できるバイナリ コンテンツのタイプは、設定した MIME タイプによって決まります。デフォルトでは、WebLogic Portal はイメージやその他のタイプのファイルを表示するための MIMEがサポートされています。その他のタイプの詳細については、「プレースホルダでのその他の MIME タイプの表示」を参照してください。

 


コンテンツ セレクタの作成

コンテンツ セレクタは、エンタープライズ アプリケーションの範囲内にあるので、エンタープライズ アプリケーション内の JSP にコンテンツ セレクタを含めることができます。

コンテンツ セレクタは、次の 2 つの部分で構成されます。

  1. コンテンツ セレクタ ファイル - Workshop for WebLogic で作成するコンテンツ セレクタ ファイルには、次の 2 つの部分が含まれます。
    1. パーソナライゼーション ルール - コンテンツ セレクタがクエリを実行し、コンテンツを表示する場合を定義する条件。以下の条件を使用してコンテンツ セレクタをトリガできます。
      • 訪問者は事前定義されたユーザ セグメントのメンバーである。
      • 訪問者が特定の特性を備えている (ユーザ プロファイルのプロパティ)。
      • HTTP セッションまたはリクエストの特定のプロパティが存在する。
      • 日付および時刻の条件。
    2. 特定のコンテンツ プロパティ セットを取得するコンテンツ クエリ。
  2. <pz:contentSelector> JSP タグ - この対応するタグは処理を実行し、Workshop for WebLogic でも作成されます。コンテンツ セレクタから返されるコンテンツは、通常ポートレットに表示されます。ユーザがコンテンツ セレクタを含むポートレットまたはポータル デスクトップを表示する場合、コンテンツ セレクタのルールとロジックは、ユーザ プロファイル情報などの一致するプロパティを探します。プロパティがコンテンツ セレクタのルールに一致する場合、コンテンツ セレクタはクエリを実行し、クエリに一致するすべてのコンテンツを取得し、表示します。
ヒント : 開発時にルール ファイルが変更されると、JSP と同じように再ロードされるので、コンテンツ セレクタを使う開発作業は短時間で済みます。ただし、サーバがプロダクション モードのときは、コンテンツ セレクタはアプリケーション内のファイルベースの定義からデータベース内にロードされ、その修正は WebLogic Portal Administration Console で行うことができます。アプリケーションを再デプロイしたり、サーバを再起動したりする必要はありません。

コンテンツ セレクタを作成するときは、次のガイドラインに従います。

<img> HTML タグのソース パスには、仮想コンテンツ リポジトリのコンテンツ項目のパスを使用します。パスには、バイナリ ファイルを表示するための ShowProperty サーブレットが含まれます。node.getPath() メソッドの node は、<utility:forEachInArray> タグの id 属性に格納された特定のコンテンツ項目です。<utility:forEachInArray> id 属性値が foo の場合、メソッドは foo.getPath() のように表示されます。

この節では、次のトピックについて説明します。

コンテンツ セレクタ ファイルの作成

コンテンツ セレクタ ファイルを作成するには、以下の手順を実行します。

  1. Workshop for WebLogic で、[実行|サーバーで実行] を選択して WebLogic Server を起動します。WebLogic Server をコンフィグレーションする手順については、『ポータル開発ガイド』を参照してください。
  2. ポータル パースペクティブで、[パッケージ・エクスプローラー] ビューの <data>\src\contentselectors\GlobalContentSelectors フォルダを右クリックし、[新規コンテンツ セレクタ] を選択します。
  3. 図 6-1 で示すように、[ファイル名] フィールドにファイル拡張子 .sel を使用してコンテンツ セレクタの名前を入力します。
  4. 図 6-1 新しいコンテンツ セレクタの作成


    新しいコンテンツ セレクタの作成

  5. [終了] をクリックします。 コンテンツ セレクタ エディタが表示されます。
  6. [プロパティー] タブを選択して、コンテンツ セレクタの説明を変更します。
  7. [パレット] タブを選択して、コンテンツ セレクタの実行条件となる [選択可能な条件] を表示します。条件を選択すると、エディタ ウィンドウの上部に対応するリンクが表示されます。
  8. コンテンツ セレクタ エディタ ウィンドウで、対応するリンクをクリックして、選択した条件を作成し、適切な情報を入力します。
  9. コンテンツ セレクタ エディタ ウィンドウで、クエリの [空のコンテンツ検索] リンクをクリックして、クエリを定義します。これを行うには、WebLogic Portal Administration Console で設定された BEA の仮想コンテンツ リポジトリに接続されている必要があります。
  10. クエリは、WebLogic Portal の式構文を使用する詳細モード ([詳細] タブ)、またはグラフィカル モード ([クエリ] タブ) で定義できます。
    • 詳細モード - [コンテンツ検索] ウィンドウで [詳細] タブを選択し、「条件式を使用するコンテンツ クエリの構築」の手順に従ってクエリを作成します。[詳細] タブでは、クエリのコンテキスト エラーを強調表示するためのコードのカラー表示を行うことができます。既存のクエリを [詳細] タブに貼り付けて再利用することができます。
    • グラフィカル モード - [クエリ] タブで、次の手順を実行して、コンテンツ プロパティ、比較演算子、および値を選択し、コンテンツ項目を取得して、コンテンツ クエリを構築します。
    1. [コンテンツ検索] ウィンドウで、[クエリ] タブを選択します。
    2. コンテンツ タイプ内のプロパティ セットとプロパティを選択して、[追加] をクリックします。非公開のコンテンツを取得するデフォルト プロパティ セットの 1 つは標準バージョンです。標準バージョンのプロパティを使用して、コンテンツの検索範囲を絞ります。たとえば、cm_latestVersion プロパティを選択すると、最新バージョンのグラフィックのみを取得します。
    3. 注意 : 選択するプロパティは、ユーザ プロファイルまたはセッション プロパティなどのプロパティ セット プロパティではなく、システム コンテンツ プロパティです。
    4. 表示される [コンテンツ検索値] ウィンドウで、次のタブのいずれかを使用します。
      • [] タブ – 入力した値との比較に基づいてクエリを定義します。たとえば、investorRiskLevel プロパティが [] にマークされているコンテンツを取得するようにクエリを設定できます。IRACampaign という名前を持つバイナリ コンテンツを取得することができます。詳細については、図 6-2 の例と表 6-1 を参照してください。
      • 図 6-2 IRACampaign というバイナリ ファイルを取得するコンテンツ クエリ


        IRACampaign というバイナリ ファイルを取得するコンテンツ クエリ

      • [プロパティー] タブ – ユーザ プロファイル プロパティなど他のタイプのプロパティから動的に取得されたプロパティ値に基づいてコンテンツ クエリを定義します。たとえば、静的コンテンツ プロパティに基づいてクエリを作成するのではなく、現在のユーザの investorRiskLevel プロパティの値を読み込むクエリを作成できます。クエリはユーザごとに異なります。
    5. [追加] をクリックします。[コンテンツ検索] ウィンドウにクエリ記述子が追加されます。
    6. クエリに値条件句をさらに追加し、ウィンドウの下部にある [記述子が複数の場合] 領域で、適切なオプションを設定できます。
  11. [コンテンツ検索] ウィンドウで [OK] をクリックして、クエリを検索に追加します。
  12. [コンテンツ プレビュー] タブをクリックして、クエリによって取得されるコンテンツをプレビューできます。[ユーザ プロファイル] プロパティから値を使用するようにクエリを定義した場合、取得されたコンテンツはユーザごとに異なるため、[プレビュー ユーザ] フィールドに既存のユーザのユーザ名を入力して、そのユーザに対して取得されるコンテンツを確認する必要があります。デフォルトでは、公開済みコンテンツをプレビューします。公開されていないコンテンツをプレビューするには、[Controls whether this will preview unpublished or published content] をクリックし、詳細を表示します。

  13. IRACampaign というバイナリ ファイルを取得するコンテンツ クエリ

    コンテンツの公開の詳細については、『コンテンツ管理ガイド』の「BEA リポジトリへのコンテンツの追加」を参照してください。

  14. [ファイル|保存] を選択して、コンテンツ セレクタ ファイルを保存します。
  15. コンテンツ セレクタを使用するには、関連する JSP に <pz:contentSelector> タグを追加します。<pz:contentSelector> タグを使用して、テキスト コンテンツ (HTML ファイルなどのテキスト バイナリを含む) および非テキスト バイナリ (グラフィック) を表示する方法の詳細については、「JSP タグを使用するコンテンツ セレクタ ファイルの表示」を参照してください。
  16. ヒント : コンテンツ セレクタでは、画像などのバイナリ コンテンツを表示できます。詳細については、『コンテンツ管理ガイド』を参照してください。

図 6-3 は、classic.sel というコンテンツ セレクタ ファイルを示します。コンテンツ セレクタをトリガする条件は、Americas という値を持つプロパティ セット SalesRegion を持つユーザです。取得するコンテンツは、名前に IRACampaign を含む任意のバイナリ ファイル コンテンツです。

図 6-3 Workshop for WebLogic のコンテンツ セレクタ ファイル

Workshop For Weblogic のコンテンツ セレクタ ファイル

ヒント : ライブラリ サービス (バージョン管理およびワークフロー ステータスなど) が BEA リポジトリで有効の場合、コンテンツ項目が廃棄済みステータスになっていない限り、システム プロパティは常にクエリできる ようになります。公開コンテンツと非公開コンテンツの両方を検索することができます。コンテンツ タイプに基づいてコンテンツを取得する場合は、コンテンツ クエリで cm_objectClass システム プロパティを使用する必要があります。クエリがシステム プロパティだけを使用する場合、クエリは廃棄されていないシステム プロパティに一致するすべてのコンテンツ項目を取得します。

認証済みユーザでなくてもコンテンツ セレクタの対象にすることができます。

条件式を使用するコンテンツ クエリの構築

WebLogic Portal Administration Console で WebLogic Portal の条件式の言語を使用して、コンテンツ クエリを構築することができます。コンテンツに関連する JSP タグから Query の詳細ウィンドウにより、プレースホルダ、キャンペーン、およびコンテンツ セレクタを作成するときにクエリを構築することができます。

クエリは、コンテンツ プロパティとユーザが入力した値を比較します。クエリには、<property><comparator><value> の 3 つの部分があります。

比較の結果が true の場合、一致するすべてのコンテンツ項目が取得されます。

次に例を示します。

employee_type == 'manager'
このクエリは、BEA 仮想コンテンツ リポジトリから、厳密に一致する (==) 文字列 manager を含む employee_type というプロパティを持つコンテンツ項目を取得する。

通常、クエリは and (&&) および or (||) ロジックを使用する複数の句で構成されます。次に例を示します。

(genre == 'rock' || genre == 'alternative') &&
platinum_records > 2
このクエリは、rock または (||) alternative の正確な値を持つ genre プロパティのコンテンツ項目と 2 より大きい platinum_records プロパティ値の持つ (&&) コンテンツ項目を取得する。括弧は、クエリの 1 つのセクションと次のセクションを区切り、評価の順番を制御する。
(genre=='rock' || genre=='country') && artist=='dead'
このクエリは、rock または country の正確な値を持つ genre プロパティのコンテンツ項目と値が deadartist プロパティ値を持つコンテンツ項目を取得する。

この節では、次のトピックについて説明します。

クエリを構築するルールの使用

クエリを構築する場合は、以下のルールを使用します。

ヒント : 開発サーバが稼動している状態で、Workshop for WebLogic でテスト プレースホルダまたはコンテンツ セレクタを作成し、[コンテンツ検索] ウィンドウの [詳細] タブを使用して、クエリを構築します。取得したコンテンツは [コンテンツ プレビュー] タブで表示されます。userProperty() フォーマットを使用してクエリの値を取得する場合は、[コンテンツ プレビュー] タブの [プレビュー ユーザ] フィールドにユーザ名を入力して、そのユーザの値を取得し、取得したコンテンツ項目を表示する必要があります。
プロパティの選択

コンテンツには、以下の 2 つのタイプのプロパティがあります。

クエリでは、両方のプロパティを使用することができます。

ユーザ定義のコンテンツ プロパティは、WebLogic Portal Administration Console で定義される types というセットに格納されます。たとえば、Book というタイプを作成し、titleauthorpub_dateisbn などのプロパティを追加することができます。

システム コンテンツ プロパティは、コンテンツ項目をコンテンツ リポジトリに追加するときに、すべてのコンテンツ項目に自動的に関連付けられ、コンテンツ項目の値が自動的に割り当てられます。システム プロパティを使用して、公開済みコンテンツや非公開コンテンツを取得することができます。これらのプロパティは、com.bea.content.expression.Search クラスにもリストされ、表 6-1 に表示される項目を含みます。

表 6-1 システム コンテンツ プロパティ
プロパティ
API
コンテンツ タイプ
説明
cm_uid
Node.id.uid
公開済みおよび
未公開
コンテンツ項目のユニークな ID。コンテンツ項目のユニークな ID を参照するには、Administration Console でコンテンツ項目を選択し、説明を表示する。
cm_createdDate
Node.createDate
公開済み
コンテンツ項目の作成日。コンテンツ項目の作成日情報を表示するには、Administration Console でコンテンツ フォルダを選択し、[概要] タブを選択する。
cm_createdBy
Node.createdBy
公開済み
コンテンツ項目の作成者。コンテンツ項目の作成者情報を表示するには、Administration Console でコンテンツ フォルダを選択し、[概要] タブを選択する。
cm_modifiedDate
Node. modifiedDate
公開済みおよび
未公開
コンテンツ項目の最終変更日。コンテンツ項目の変更日情報を表示するには、Administration Console でコンテンツ フォルダを選択し、[概要] タブを選択する。
cm_modifiedBy
Node.modifiedBy
公開済みおよび
未公開
コンテンツを最後に編集したユーザ
cm_nodeName
Node.name
公開済みおよび
未公開
Administration Console に表示するコンテンツ項目名。
cm_path
Node.path
公開済み
仮想コンテンツ リポジトリのコンテンツ項目へのパス。
/BEARepository/ juvenilebooks/ TheCrazyAdventure など。
cm_isHierarchy
Node.type == Node.HIERARCHY
公開済み
コンテンツ項目ではなく、コンテンツ フォルダを識別する。コンテンツ フォルダにはコンテンツ項目と子コンテンツ フォルダを含めることができる。このプロパティをクエリに使用する場合は、true または false のブール値で比較する。
cm_isContent
Node.type == Node.CONTENT
公開済み
コンテンツ フォルダではなく、コンテンツ項目を識別する。コンテンツ項目には、関連付けられたタイプのプロパティが含まれる。このプロパティをクエリに使用する場合は、true または false のブール値で比較する。
cm_objectClass
Node. objectClass. name
公開済み
コンテンツ項目に関連付けられたコンテンツ タイプ。コンテンツ項目のタイプ情報を参照するには、Administration Console で [タイプ] タブを選択し、[概要] タブを選択する。
cm_objectClassInstance
オブジェクト クラスのインスタンス
公開済み
特定のオブジェクト クラスのすべてのインスタンスとそのすべての子を検索する。
cm_value
公開済みおよび
未公開
特定の値を持つプロパティのメタデータ検索。このプロパティはワイルドカード検索に類似する。
cm_contentType
BinaryValue. contentType
公開済みおよび
未公開
コンテンツ項目のバイナリ プロパティの MIME タイプ。image/jpeg など。コンテンツ項目の MIME タイプを表示するには、Administration Console でコンテンツ項目を選択し、[プライマリ プロパティ データ型] フィールドを調べる。
cm_binarySize
BinaryValue. size
(ノード プロパティの場合)
公開済みおよび
未公開
コンテンツ項目のバイナリ値のサイズ。コンテンツ項目のバイナリ値のサイズを表示するには、Administration Console でコンテンツ項目を選択し、[プロパティ] タブを選択して、[ファイルのダウンロード] をクリックする。[保存] をクリックし、表示されたバイナリ ファイルを右クリックして、ファイル プロパティを表示する。
このプロパティをクエリで使用する場合は、バイナリ サイズをバイト単位で指定する。
cm_binaryName
BinaryValue. name
(ノード プロパティの場合)
公開済みおよび
未公開
コンテンツ項目のバイナリ値のファイル名。コンテンツ項目のバイナリ値の名前を参照するには、Administration Console でコンテンツ項目を選択し、[概要] タブで [名前] の値を表示する。
cm_assignedToUser
VirtualNode
未公開
ノードが割り当てられているユーザ。cm_assignedToUser = `joe' など。
cm_checkedOut
VirtualNode
未公開
ノードがチェックアウトされた場合。たとえば、cm_checkedOut = false
cm_latestVersion
N/A
未公開
コンテンツの最新のバージョンcm_latestVersion = true など。
cm_role
VirtualNode
未公開
ノードが割り当てられているロール。cm_role = `Admin' など。
cm_version
Version
未公開
コンテンツのバージョン番号値は String です。たとえば、cm_version = `5' となります。
cm_versionComment
Version
未公開
バージョンの変更を説明するテキスト。たとえば、cm_versionComment = Includes updates from Marketing.

クエリを構築する場合、引用符なしでプロパティ名を指定することができます。たとえば、title <comparator> <value> のように指定します。ただし、プロパティ名にスペース、二重引用符、またはダッシュ記号が含まれる場合は、プロパティ名を toProperty() 内に囲む必要があります。たとえば、toProperty('Favorite Author') <comparator> <value> のように指定します。

クエリは、すべてのコンテンツ タイプのプロパティ名を探して、プロパティ値を持つコンテンツ項目を返します (コンテンツ項目がクエリの条件を満たす場合)。ただし、特定のタイプのプロパティを分離することもできます。たとえば、両方とも title プロパティを持つ book タイプと article タイプを使用する場合、cm_objectClass プロパティを使用して、book タイプ内の特定の title を持つコンテンツ項目を取得することができます。

たとえば、title likeignorecase '*Adventure' && cm_objectClass = 'books' のように指定します。

比較演算子の使用

比較演算子は、クエリのプロパティと入力した値を比較するロジックを持っています。コンテンツ項目がクエリの条件と一致する場合には、そのコンテンツ項目が返されます。表 6-2 に、クエリで使用できる比較演算子を示します。

表 6-2 使用可能な比較演算子
比較演算子
説明 (比較演算子が動作できるプロパティの形式)
= or ==
単値のプロパティ (リストに含まれる単値を含む) が入力した大文字と小文字を区別する値 (ブール値、日付と時刻、数値、文字列値) と厳密に等しいかどうかをチェックする。たとえば、genre == 'fantasy' は、genre プロパティの値として、大文字と小文字を区別する fantasy を持つコンテンツ項目を取得する。
!=
単値のプロパティ (リストに含まれる単値を含む) が入力した大文字と小文字を区別する値 (ブール値、日付と時刻、数値、文字列値) と厳密に等しくないことをチェックする。たとえば、genre != 'mystery' は、genre プロパティの値として、大文字と小文字を区別する mystery を持たないコンテンツ項目を取得する。
>
単値のプロパティが、指定した値 (日付または時刻、および数値) より大きいかどうかをチェックする。たとえば、pub_date > toDate('MM-dd-yyyy', `01-01-2000') は、January 1, 2006 以降の値に設定した pub_date プロパティ セットを持つコンテンツ項目を取得する。
<
単値のプロパティが、指定した値 (日付または時刻、および数値) より小さいかどうかをチェックする。たとえば、books in series < 3。プロパティ名にスペースが含まれているので、toProperty('books in series') < 3 のように toProperty() を使用して、3 より小さい books in series プロパティ値を持つコンテンツ項目を取得します。
>=
単値のプロパティが、指定した値 (日付または時刻、および数値) より大きいかまたは等しいことをチェックする。たとえば、toProperty('books in series') >= 3 は、3 より大きいかまたは等しい books in series プロパティ値を持つコンテンツ項目を取得する。サンプル コンテンツ項目のプロパティ値は、1
<=
単値のプロパティが、指定した値 (日付または時刻、および数値) より小さいかまたは等しいことをチェックする。たとえば、toProperty('books in series') <= 3 は、3 より小さいかまたは等しい books in series プロパティ値を持つコンテンツ項目を取得する。
like
単値のプロパティが、入力した大文字と小文字を区別する値に類似しているかどうかをチェックする。ワイルドカード文字 * (1 つまたは複数の文字) または ? (1 文字) を使用できる。たとえば、author like 'P?nm*' は、大文字と小文字を区別する Penman、Panmen、または Pn の間に別の 1 文字を持ち、m の後に任意の 1 つ以上の文字を持つ author プロパティのコンテンツ項目を取得する。

注意 : 末尾にアスタリスク (*) を指定しない場合、プロパティ値の名前 Penman の後にはさらにテキストが続くため、コンテンツ項目は取得されない。

likeignorecase
単値のプロパティが、入力した値に類似しているかどうかをチェックする。ワイルドカード文字 * と ? を使用できる。大文字と小文字は区別されない。たとえば、author likeignorecase 'pen*' は、penmanPenmanPenfield など、pen で始まる任意の組合せの author プロパティの値を持つコンテンツ項目を取得する。
contains
多値のプロパティが、指定した単値 (日付または時刻、数値、および文字列値) と厳密に等しい単値を含むかどうかをチェックする。一部の実装では、この比較演算子は単値のプロパティに対しても使用できる。たとえば、genre contains 'fantasy' は、厳密に fantasy と等しい genre プロパティ値を含むコンテンツを取得する。
containsall
多値のプロパティが、指定した値 (日付または時刻、数値、および文字列値) と厳密に等しい値をすべて含むかどうかをチェックする。たとえば、genre containsall ('fantasy', 'children') は、fantasy および children という genre プロパティ値を含むコンテンツを取得する。一部の実装では、この比較演算子は単値のプロパティに対しても使用できる。
containsany
多値のプロパティが、指定した値 (日付または時刻、数値、および文字列値) と厳密に等しい任意の値を含むかどうかをチェックする。たとえば、genre containsany ('fantasy', 'children', 'scifi') は、fantasychildren、または scifi という genre プロパティ値を含むコンテンツを取得する。一部の実装では、この比較演算子は単値のプロパティに対しても使用できる。
in
単値のプロパティが、入力した値のいずれかを含むどうかをチェックする。入力した値が使用可能な値 (単値) のリストではない場合、in= または == と同じとなる (日付または時刻、数値、および文字列値)。たとえば、isbn in ('pending', 'not_available') は、pending または not_available という isbn プロパティ値を含むコンテンツを取得する。

値の入力

値は、クエリが返す必要のあるコンテンツを表します。クエリに値を入力することにより、コンテンツ項目に格納された値に基づいて、どのコンテンツを取得し、または無視するかをクエリに指示します。

たとえば、title というプロパティを持つ book というコンテンツ タイプを使用する場合、book タイプに関連付けられるすべてのコンテンツ項目は title フィールドを持ちます。各 title 値はユニークであるため、クエリでユニークな値を入力して、特定のコンテンツ項目を取得したり、比較演算子を使用して、特定のコンテンツ項目を無視することができます。

次の 2 つの方法で値を入力できます。

  1. クエリ内にハード コーディングした値 - ハード コーディングした値を使用して、クエリの予測性を向上させます。ハード コーディングした値を使用して、取得する特定のコンテンツを正確に指定することができます。
  2. ユーザ プロファイルまたはプロパティ セットのその他のタイプからの値の取得 (セッションおよびリクエスト) - ユーザ プロファイル、セッション、またはリクエストのプロパティ セットから値を読み込む場合、個々の指定したユーザ プロファイル、セッション、またはリクエストのプロパティの値がプログラムによってクエリに挿入されます。これにより、現在のユーザのプリファレンスまたは現在のセッションまたはリクエストに基づいて、パーソナライズされたクエリを作成することができます。
  3. たとえば、コンテンツ プロパティが author であるクエリでは、ユーザの FavoriteAuthor プロファイルのプロパティを取得してクエリに値を入力し、それによりクエリがユーザの好みの作者に関連するコンテンツを取得できるようにできます。

    クエリの値を構築するには、次のガイドラインに従います。

    • 文字列値を単一引用符で囲む。たとえば、'pending' のように指定します。
    • 単一引用符または二重引用符を入力するには、引用文字としてバックスラッシュを使用する (Unicode 文字はサポートしない)。たとえば、ブック タイトルが "The Crazy Adventure" のように二重引用符で囲まれている場合、'\"The Crazy Adventure\"' のように値を入力します。タイトルが単一引用符で囲まれている場合、title = '\'The Crazy Adventure\'' のように値を値を入力します。
    • Unicode ("\u6565" など)、8 進数 ("\7""\65"、"\377" など)、および標準 Java エスケープ シーケンス ("\n""\r""\b" など) を文字列で使用できる。
    • ブール文字は true または false キーワードのいずれかである (引用符なしの小文字)。
    • 数値文字は Java フォームである (科学記号をサポートする)。
    • 日付と時刻は toDate('formatStr', 'dateStr') 形式で表されます。ここで、formatStr は使用する日付と時刻形式 ('MM/dd/yyyy' など)、dateStr は入力する実際の日付と時刻 ('01/01/2006' など) を示します。

      formatStr は有効な java.text.SimpleDateFormat 文字列でなければなりません。formatStr を省略する場合、toDate()'MM/dd/yyyy HH:mm:ss z' 形式で入力する日付と時刻を使用します (ここで、z は MDT などのタイムゾーンを示します)。たとえば、toDate('12/01/2004 06:00:00 MDT') のように指定します。

      日付だけを指定するには、formatStr で使用する形式で入力します。たとえば、日付値だけの場合、toDate('MM/dd/yyyy', '12/01/2004') のように指定します。また、'MM-yyyy' のように、月と年だけを指定することもできます。

      now キーワードを使用して、実行時に式が解析される時刻を指定します。

    • ユーザ、リクエスト、またはセッション プロパティからクエリに値を入力するには、<type>Property(<propertyset>, <propertyname>) 形式を使用する。ここで、タイプは userrequest、または session です。たとえば、userProperty('userpreferences', 'FavoriteAuthor') のように指定します。
複雑なクエリの作成

クエリ句を and (&&) ロジックおよび or (||) ロジックによって結合し、数式と同様に括弧を使用して評価の順番を制御することにより、複数の独立したクエリ句を組み合わせることができます。これにより、複雑なクエリを作成することができます。また、括弧で囲まれたグループの前に感嘆符を使用して、複雑なクエリに not ロジック (!) を含めることもできます。

クエリの詳細については、『コンテンツ管理ガイド』を参照してください

クエリのサンプルの使用

図 6-4 は、BEA の仮想コンテンツ リポジトリに格納されたブックのプロパティ セットを示します。

図 6-4 ブックのプロパティ

ブックのプロパティ

表 6-3 のクエリの例は、サンプル コンテンツ項目のプロパティを使用し、各クエリのサンプルの説明は、クエリがコンテンツ項目を取得するかどうかを示します。

表 6-3 クエリの例
クエリ
サンプルの取得の可否
説明
genre == 'fantasy'
genre プロパティの値として、大文字と小文字を区別する fantasy を持つコンテンツ項目を取得する。
will_visit_schools == true
true に設定された will_visit_schools プロパティを持つコンテンツ項目を取得する。true は単一引用符で囲まない。また、true は小文字を使用する。
genre != 'mystery'
genre プロパティの値として、大文字と小文字を区別しない mystery を持つコンテンツ項目を取得する。
pub_date > toDate('MM-dd-yyyy', '01-01-2005')
January 1, 2005 以降の値に設定された pub_date プロパティを持つコンテンツ項目を取得する。
books in series < 3
不可
プロパティ名にスペースが含まれるため、次の例に示すように toProperty() を使用する必要がある。
toProperty('books in series') < 3
3 より少ない books in series プロパティの値を持つコンテンツ項目を取得する。
toProperty('books in series') >= 3
不可
3 より大きいかまたは等しい books in series プロパティの値を持つコンテンツ項目を取得する。サンプル コンテンツ項目のプロパティ値は、1
toProperty('books in series') <= 3
3 より小さいかまたは等しい books in series プロパティの値を持つコンテンツ項目を取得する。
author like 'P?nm*'
大文字と小文字を区別する Penman、Panmen、または Pn の間に別の 1 文字を持ち、m の後に任意の 1 つ以上の文字を持つ author プロパティのコンテンツ項目を取得する。末尾にアスタリスク (*) を使用しない場合、プロパティ値の名前 Penman の後にはさらにテキストが続くため、コンテンツ項目は取得されない場合がある。
author likeignorecase 'pen*'
penman、Penman、Penfield など、pen で始まる任意の組合せの author プロパティの値を持つコンテンツ項目を取得する。
genre contains 'fantasy'
厳密に fantasy である genre 値を含むコンテンツを取得する。
genre contains 'child*'
不可
contains 比較演算子はワイルドカード文字を許容しない。
genre containsall ('fantasy', 'children')
fantasy および children という genre プロパティ値を含むコンテンツを取得する。
genre containsall ('fantasy', 'children', 'scifi')
不可
fantasychildren、および scifi という genre プロパティ値を含むコンテンツを取得する。サンプル コンテンツ項目には、fantasychildren が含まれるが、scifi は含まれない。
genre containsany ('fantasy', 'children', 'scifi')
fantasychildren、または scifi という genre プロパティ値を含むコンテンツを取得する。
isbn in ('pending', 'not_available')
pending または not_available のいずれかの isbn プロパティ値を含むコンテンツを取得する。
複合クエリ
toProperty('books in series') >= 3 &&
pub_date > toDate('MM-yyyy','1-2005')
不可
January 2005 以後に発行された trilogy の一部であるブックを取得する。
(genre contains 'children' || keywords like '*children*') && will_visit_schools == true
children に設定されているか、またはキーワード値に *children* を持ち、作者が学校を訪問できる genre 値を持つブックを取得する。
((genre contains 'children' || keywords like '*children*') && will_visit_schools == true) && isbn != 'pending'
不可
children に設定されているか、またはキーワード値に *children* を持ち、作者が学校を訪問できる genre 値を持つブックと pending に等しくない (つまり、ブックがまだ発行されていない) isbn 値を持つブックを取得する。括弧によるネストは評価の順番を制御する。
(title likeignorecase '*adventure' || genre contains 'fantasy') && (pub_date >= toDate('MM-yyyy', '01-2005') || isbn == 'pending')
title*adventure を含むか、genrefantasy を含み、pub_dateJanuary 2005 以後であるか、または isbnpending のまま (まだ発行されていない) のブックを取得する。
(genre containsany userProperty('userpreferences', 'BookGenre') && (keywords likeignorecase '*pixies')) ||
author likeignorecase userProperty('userpreferences', 'FavoriteAuthor')
未定
ユーザ プロファイルのプロパティを読み込み、特定のプロパティ値を使用して、クエリに値を入力する。取得されたコンテンツがユーザ プリファレンスに基づいているので、クエリはパーソナライズされたコンテンツを提供する。
たとえば、現在のユーザが mystery に設定された BookGenre プロパティを使用し、FavoriteAuthorPenmanPiper に設定されている場合、クエリがサンプル コンテンツを返す。BookGenre 値が最初の句に一致しない場合でも、2 番目の or (||) 句の FavoriteAuthor が一致する。
プロパティ コントロールまたは setProperty JSP タグを使用して、ユーザ プロパティ セットおよびプロパティを (Workshop for WebLogic でプロパティ セットを作成するのではなく) プログラムで使用して設定する場合、userProperty() をクエリで使用できる。
その他の便利なクエリ (サンプル コンテンツに関係しない)
language == userProperty('userpreferences', 'userPreferredLang')
この方法を使用して、プロパティ セットに格納されたユーザの言語プリファレンス (userPreferredLang) に基づいて、各ユーザに適切な言語のコンテンツを提供できる。また、sessionProperty() を使用して、セッションから言語プリファレンスを取得するか、または requestProperty('DefaultRequestPropertySet', 'Locale') を使用して、en-US などのユーザのロケール文字列を返すことができる。
((UserAge <= 35 && colors contains 'red' ||
UserAge > 35 && !(colors contains 'black')) &&
mimeType == 'text/html') &&
toProperty('Launch Date') < now && !(expireDate > toDate('MM-yyyy', '12-2004'))
このクエリは、!(colors contains 'black') 句に示すように、not ロジックを使用する。


JSP タグを使用するコンテンツ セレクタ ファイルの表示

コンテンツ セレクタ ファイルを作成したら (「コンテンツ セレクタ ファイルの作成」を参照)、<pz:contentSelector> JSP タグを使用してコンテンツを表示する必要があります。図 6-3 に示すように、以下の JSP タグは classic コンテンツ セレクタを使用します。

<pz:contentSelector rule="classic" id="nodes"/>

JSP タグには、2 つの必須属性があります。

他にも、<pz:contentSelector> タグに設定できる属性があります。クラスの詳細については、「JSP Tag Javadoc」を参照してください。

JSP へのコンテンツ セレクタの追加

Workshop for WebLogic でコンテンツ セレクタ ファイルを作成したら、以下の 3 つの方法のいずれかを使用して、Workshop for WebLogic の JSP にコンテンツ セレクタを追加することができます。

コンテンツ セレクタのポータル ファイルへのドラッグ

コンテンツ セレクタを開いているポータル ファイルにドラッグするには、以下の手順を実行します。

  1. ポータル パースペクティブで、コンテンツ セレクタ ファイルを見つけます。
  2. Workshop のパースペクティブから、開いているポータル ファイルのページ上にコンテンツ セレクタをドラッグします。この場合、次の 3 つの処理が行われます。
    1. このプレースホルダを表示するポートレットをすばやく作成できるポートレット ウィザードが起動する。
    2. 作成されたポートレットが自動的にポータル ページに追加される。
    3. このコンテンツ セレクタに対応する JSP ファイルが自動的に作成される。
    4. JSP ファイルにはコンテンツ セレクタ JSP タグが含まれ、rule および id 属性が自動的に読み込まれ、タグ ライブラリの include 文が自動的に追加されます。コード リスト 6-1 に示すように、その他の JSP と HTML タグも自動的に追加されます。

      コード リスト 6-1 他の JSP タグと HTML タグが含まれた JSP ファイル
      <pz:contentSelector rule="modern" id="nodes"/>
      <utility:notNull item= "<%nodes%">
      <ul>
      <utility:forEachInArray array="<%=nodes%>" id="node"
      type="com.bea.content.Node">
      <li><cm:getProperty id="node" name="cm_nodeName"
      conversionType="html"/></li>
      </utility:forEachInArray>
      </ul>
      </utility:notNull>

      表 6-4 では、コンテンツ セレクタで使用できる JSP タグを説明します。

      表 6-4 コンテンツ セレクタで使用する JSP タグ
      JSP タグ
      説明
      <utility:notNull>
      配列にコンテンツが実際に含まれているかどうかをチェックする。
      <ul>
      コンテンツ項目を箇条書きで表示するためのコンテナを提供する。
      <utility:forEachInArray>
      配列の各コンテンツ項目を分離し、配列内のすべての項目を処理するまで繰り返す。項目ごとに <li> 項目を指定する。
      <cm:getProperty>
      <utility:forEachInArray> から各コンテンツ項目を取り出し、表示されるコンテンツ プロパティを指定する。

複数のコンテンツ セレクタの使用

限定度が最も高いものから順に一致させる場合や、コンテンツ セレクタが相互に排他的である場合は、条件ロジックで複数のコンテンツ セレクタを使用することで、階層的にパーソナライズされたコンテンツを取得できます。コード リスト 6-2 に、パーソナライズされたコンテンツに対して複数のコンテンツ セレクタを使用する方法を示します。

コード リスト 6-2 複数のコンテンツ セレクタでの <pz:contentSelector> JSP タグの使用
<%@ taglib uri="content.tld" prefix="cm"%>
<%@ taglib uri="http://www.bea.com/servers/p13n/tags/utility" prefix="utility"%>
<%@ taglib uri="http://www.bea.com/servers/portal/tags/ad" prefix="ad"%>
<%@ taglib uri="http://www.bea.com/servers/portal/tags/personalization"
prefix="pz"%>
<pz:contentSelector rule="FemaleContent" id="nodes" sortBy="cm_nodeName desc"/>
<% if (nodes == null || nodes.length <= 0) { %>
<pz:contentSelector rule="MaleContent" id="nodes" sortBy="cm_nodeName desc"/>
<% }%>
<% if (nodes == null || nodes.length <= 0) { %>
Sorry, you don't get a free lunch today.
<% }%>
Found <%=nodes.length%> Node(s):
<dl>
<utility:forEachInArray array="<%=nodes%>" id="node"
type="com.bea.content.Node">
<dt><cm:getProperty id="node" name="title" conversionType="html"/></dt>
<dd><ad:render id="node" /></dd>
</utility:forEachInArray>
</dl>

 


コンテンツ セレクタに代わる <pz:div> タグの使用

<pz:div> JSP タグは、インライン HTML パーソナライゼーションを提供できます。インライン コンテンツのセットを JSP に挿入し、このタグでラップできます。このタグは rule 属性を使用します。この属性には既存のユーザ セグメント名を指定できます。該当するユーザ セグメントのメンバーだけがインライン コンテンツを表示できます。たとえば、Workshop for WebLogic で、任意のユーザを bookfan ユーザ プロファイルのプロパティ セットの値が true であるメンバーにする bookfanUserSegment.seg というユーザ セグメントを作成しました。以下のサンプル コードは、この方法を示しています。

<pz:div rule="bookfanUserSegment">
<p>Only users who are book nerds will see this text!</p>
</pz:div>

ユーザ セグメント ルール (条件) は、コンテンツ セレクタで使用するルールと同じです。したがって、<pz:div> タグは、ほぼ同じレベルのパーソナライゼーションを提供します。相違点は、コンテンツ セレクタでは仮想コンテンツ リポジトリからコンテンツを取得しますが、<pz:div> タグでは JSP 内にインライン コンテンツが含まれることです。

ヒント : コンテンツ セレクタでは、画像などのバイナリ コンテンツを表示できます。詳細については、『コンテンツ管理ガイド』を参照してください。

 


コンテンツ セレクタ クエリの削除

コンテンツ セレクタ クエリを削除すると、そのクエリは Workshop for WebLogic および Administration Console から削除されます。

注意 : この章で示す手順は、[パッケージ・エクスプローラー] ビューの data\src フォルダに関係します。data ディレクトリおよび src ディレクトリは、名前が変更されている可能性があります。

開発者がコンテンツ セレクタのクエリを削除するには、以下の手順を実行します。

  1. ポータル パースペクティブで、[パッケージ・エクスプローラー] ビューの <data>\src\contentselectors\GlobalContentSelectors フォルダにあるコンテンツ セレクタ ファイルを開きます。
  2. コンテンツ セレクタ エディタで、[クエリ] リンクをクリックします。
  3. [コンテンツ検索] ダイアログで、クエリを選択します。
  4. [削除] をクリックします。
  5. [OK] をクリックします。

 


コンテンツ セレクタの削除

コンテンツ セレクタを削除すると、そのコンテンツ セレクタは Workshop for WebLogic と Administration Console から削除されます。

コンテンツ セレクタを削除するには、以下の手順を実行します。

  1. ポータル パースペクティブで、[パッケージ・エクスプローラー] ビューの <data>\src\contentselectors\GlobalContentSelector フォルダにあるコンテンツ セレクタ ファイルを開きます。
  2. コンテンツ セレクタを右クリックし、[削除] を選択します。
  3. [はい] をクリックして削除を続行します。
ヒント : 削除したコンテンツ セレクタを参照している <pz:contentSelector> タグが JSP 内にある場合は、すべて削除する必要があります。

 


コンテンツ セレクタの変更

以下の方法を使用して、コンテンツ セレクタが表示するコンテンツを編集できます。


ページの先頭       前  次