![]() ![]() ![]() ![]() |
コンテンツ セレクタは、ルールを使用して BEA の仮想コンテンツ リポジトリのコンテンツ項目を特定のグループに提供します。コンテンツ セレクタは、コンテンツを返して、表示します。たとえば、ユーザ プロファイルで「読書好き」として識別されるユーザがログインしたら、コンテンツ セレクタを使用して推薦図書の一覧を表示できます。
開発者は Workshop for WebLogic を使用してコンテンツ セレクタを作成し、更新して、JSP に配置することができます。ポータル管理者は、Administration Console を使用して、ポータルにコンテンツを表示するコンテンツ セレクタを変更します。
認証済み (ログイン済み) ユーザでなくてもコンテンツ セレクタの対象にすることができます。たとえば、HTTP リクエストまたはセッションの特定のプロパティの有無や、特定の日付や時刻の条件によって、コンテンツの表示をトリガできます。たとえば、12 月にポータルを訪問し、特定のタイプの Web ブラウザでポータルを表示しているユーザに対して、祝日向けのコンテンツを表示できます。
ただし、認証済みのユーザ (および追跡対象の匿名ユーザ) には、ユーザに関連したプロファイル情報があり、この情報を使用して、パーソナライズされたコンテンツを提供できます。「読書好き」は、このタイプのユーザ プロファイルの一例です。
注意 : | この章で示す手順は、[パッケージ・エクスプローラ] ビューの data\src フォルダに関係します。data ディレクトリおよび src ディレクトリは、名前が変更されている可能性があります。 |
コンテンツ セレクタは、コンテンツ プロパティ (通常はテキスト値または数値) を取得します。たとえば、コンテンツ セレクタで本に関する情報を取得できます。書籍コンテンツには、タイトル、作者、出版日、ISBN、出版社の Web サイトへの URL など、多数のプロパティを割り当てることができます。コンテンツ セレクタを使用して、箇条書きのタイトル一覧を表示し、各タイトルを出版社の Web サイトにリンクすることもできます。このリストとリンクは、コンテンツ プロパティのテキスト値のみを使用して作成されます。
書籍コンテンツには、書籍の表紙の画像を格納するバイナリ プロパティも含まれる場合があります。コンテンツ セレクタでは、ShowProperty
サーブレットを使用して、バイナリ プロパティも表示できます (実画像の表示)。詳細については、「プレースホルダ ファイルの作成」を参照してください。コンテンツ セレクタで表示できるバイナリ コンテンツのタイプは、設定した MIME タイプによって決まります。デフォルトでは、WebLogic Portal はイメージやその他のタイプのファイルを表示するための MIMEがサポートされています。その他のタイプの詳細については、「プレースホルダでのその他の MIME タイプの表示」を参照してください。
その他の MIME タイプのコンテンツを表示するために、コンテンツ セレクタは、ドキュメントの MIME タイプを参照し、特定のドキュメント タイプに対してブラウザが必要とする HTML タグを生成します。たとえば、画像タイプのドキュメントを表示するには、広告プレースホルダが、画像用にブラウザが必要とする <img>
タグを生成する必要があります。デフォルトでは、広告プレースホルダは、次の MIME タイプについてのみ適切な HTML タグを生成できます。
警告 : | <EMBED> タグは、すべてのブラウザで常に正常に動作するわけではありません。この動作は、コンフィグレーションしたプラグインによって異なります。 |
基本的な Java プログラミングに精通している場合は、コンテンツ セレクタが追加の MIME タイプ用の HTML を生成できるようにするクラスを記述することができます。
追加の MIME タイプをサポートするには、以下の作業を実行する必要があります。
ブラウザが MIME タイプを表示するために必要とする HTML を生成するには、Workshop for WebLogic を使用してアプリケーション内に Java プロジェクトを作成し、com.bea.p13n.ad.AdContentProvider
インタフェースを実装する Java プロジェクト内で Java クラスを作成し、コンパイルします。このインタフェースの詳細については、Javadoc を参照してください。
CLASSPATH
内のディレクトリにクラスを保存後、以下の手順を実行して、クラスが存在することを WebLogic Portal Administration Console に通知する必要があります。
META-INF\wps-config.xml
ファイルのバックアップを作成します。 wps-config.xml
ファイルを開き、<AdService>
要素を検索します。 <AdService>
要素のサブ要素として、以下のコードを追加します。 <AdContentProvider
Name="MIME-type"
Provider="YourClass.class"
Properties="optional-properties-for-your-class"
>
</AdContentProvider>
AdContentProvider
要素に次の値を指定します。
CLASSPATH
環境変数で指定したディレクトリの下にファイルを保存した場合は、CLASSPATH
ディレクトリの 1 つ下のディレクトリ レベルから始まるファイルのパス名を含める必要があります。<PORTAL_APP>/classes
を追加した場合は、AVI ファイルをサポートするクラスを <PORTAL_APP>/classes/myclasses/MimeAvi.class
として保存します。
以下のコード サンプルは、AVI ファイルのサポートを示しています。
<AdContentProvider
Name="video/x-msvideo"
Provider="myclasses.MimeAvi"
Properties=""
>
</AdContentProvider>
wps-config.xml
ファイルへの変更を保存します。
コンテンツ セレクタは、エンタープライズ アプリケーションの範囲内にあるので、エンタープライズ アプリケーション内の JSP にコンテンツ セレクタを含めることができます。
ヒント : | 開発時は、このファイルが変更されると、JSP と同じように再ロードされるので、コンテンツ セレクタを使う開発作業は短時間で済みます。ただし、サーバがプロダクション モードのときは、コンテンツ セレクタはアプリケーション内のファイルベースの定義からデータベース内にロードされ、その修正は WebLogic Portal Administration Console で行うことができます。アプリケーションを再デプロイしたり、サーバを再起動したりする必要はありません。 |
コンテンツ セレクタを作成するときは、次のガイドラインに従います。
<pz:contentSelector>
タグを JSP に追加します。<pz:contentSelector>
JSP タグに返され、タグの id 属性に格納される。この時点で、コンテンツを処理および表示するために他のタグまたはコードが必要になります。表 6-4 で説明するタグは、取得したコンテンツの表示に便利です。ShowProperty
サーブレットを使用する。以下のコード例は ShowProperty
サーブレットの感度を低下させる例を示します。<pz:contentSelector rule="classic" id="nodes"/>
<utility:notNull item="<%=nodes%>">
<ul>
<utility:forEachInArray array="<%=nodes%>" id="node" type="com.bea.content.Node">
<img src="<%=request.getContextPath() + "/ShowProperty" + node.getPath()%>">
</utility:forEachInArray>
</ul>
</utility:notNull>
<img>
HTML タグのソース パスには、仮想コンテンツ リポジトリのコンテンツ項目のパスを使用します。パスには、バイナリ ファイルを表示するための ShowProperty
サーブレットが含まれます。node.getPath()
メソッドの node
は、<utility:forEachInArray>
タグの id 属性に格納された特定のコンテンツ項目です。<utility:forEachInArray>
id 属性値が foo の場合、メソッドは foo.getPath()
のように表示されます。
コンテンツ セレクタ ファイルを作成するには、以下の手順を実行します。
data\src\contentselectors\GlobalContentSelectors
フォルダを右クリックし、[新規|その他] を選択します。ヒント : | メニューをカスタマイズして、[新規] メニューの選択肢として [コンテンツ セレクタ] を表示することができます。詳細については、『ポータル開発ガイド』を参照してください。 |
.sel
ファイル拡張子を保持します。注意 : | 選択するプロパティは、ユーザ プロファイルまたはセッション プロパティなどのプロパティ セット プロパティではなく、コンテンツ プロパティ (タイプ) です。 |
高
] にマークされているコンテンツを取得するようにクエリを設定できます。IRACampaign という名前を持つバイナリ コンテンツを取得することができます。詳細については、図 6-2 の例と表 6-1 を参照してください。<pz:contentSelector>
タグを追加します。<pz:contentSelector>
タグを使用して、テキスト コンテンツ (HTML ファイルなどのテキスト バイナリを含む) および非テキスト バイナリ (グラフィック) を表示する方法の詳細については、「JSP タグを使用するコンテンツ セレクタ ファイルの表示」を参照してください。既存のコンテンツ セレクタを変更して、バイナリ コンテンツを表示する方法を学習する場合は、『コンテンツ管理ガイド』を参照してください。ヒント : | コンテンツ セレクタでは、画像などのバイナリ コンテンツを表示できます。詳細については、『コンテンツ管理ガイド』を参照してください。 |
図 6-3 は、classic.sel
というコンテンツ セレクタ ファイルを示します。コンテンツ セレクタをトリガする条件は、Americas
という値を持つプロパティ セット SalesRegion を持つユーザです。取得するコンテンツは、名前に IRACampaign
を含む任意のバイナリ ファイル コンテンツです。
ヒント : | ライブラリ サービス (バージョン管理およびワークフロー ステータスなど) が BEA リポジトリで有効の場合、コンテンツ項目が廃棄済みステータスになっていない限り、システム プロパティは常にクエリできる (公開される) ようになります。コンテンツ タイプに基づいてコンテンツを取得する場合は、コンテンツ クエリで cm_objectClass システム プロパティを使用する必要があります。クエリがシステム プロパティだけを使用する場合、クエリは廃棄されていないシステム プロパティに一致するすべてのコンテンツ項目を取得します。 |
認証済みユーザでなくてもコンテンツ セレクタの対象にすることができます。
WebLogic Portal Administration Console で WebLogic Portal の条件式の言語を使用して、コンテンツ クエリを構築することができます。コンテンツに関連する JSP タグから Query の詳細ウィンドウにより、プレースホルダ、キャンペーン、およびコンテンツ セレクタを作成するときにクエリを構築することができます。
クエリは、コンテンツ プロパティとユーザが入力した値を比較します。クエリには、<property><comparator><value>
の 3 つの部分があります。
比較の結果が true
の場合、一致するすべてのコンテンツ項目が取得されます。
通常、クエリは and (&&
) および or (||
) ロジックを使用する複数の句で構成されます。次に例を示す。
&&
) および or (||
) ロジックを使用して評価されます。 ヒント : | 開発サーバが稼動している状態で、Workshop for WebLogic でテスト プレースホルダまたはコンテンツ セレクタを作成し、[コンテンツ検索] ウィンドウの [詳細] タブを使用して、クエリを構築します。取得したコンテンツは [コンテンツ プレビュー] タブで表示されます。userProperty() フォーマットを使用してクエリの値を取得する場合は、[コンテンツ プレビュー] タブの [プレビュー ユーザ] フィールドにユーザ名を入力して、そのユーザの値を取得し、取得したコンテンツ項目を表示する必要があります。 |
コンテンツには、以下の 2 つのタイプのプロパティがあります。
ユーザ定義のコンテンツ プロパティは、WebLogic Portal Administration Console で定義される types というセットに格納されます。たとえば、Book というタイプを作成し、title、author、pub_date、isbn などのプロパティを追加することができます。
明示的なコンテンツ プロパティは、コンテンツ項目をコンテンツ リポジトリに追加するときに、すべてのコンテンツ項目に自動的に関連付けられ、コンテンツ項目の値が自動的に割り当てられます。これらのプロパティは、com.bea.content.expression.Search
クラスにもリストされ、表 6-1 に表示される項目を含みます。
クエリを構築する場合、引用符なしでプロパティ名を指定することができます。たとえば、title <comparator> <value>
のように指定します。ただし、プロパティ名にスペース、二重引用符、またはダッシュ記号が含まれる場合は、プロパティ名を toProperty()
内に囲む必要があります。たとえば、toProperty('Favorite Author') <comparator> <value>
のように指定します。
クエリは、すべてのコンテンツ タイプのプロパティ名を探して、プロパティ値を持つコンテンツ項目を返します (コンテンツ項目がクエリの条件を満たす場合)。ただし、特定のタイプのプロパティを分離することもできます。たとえば、両方とも title プロパティを持つ book タイプと article タイプを使用する場合、cm_objectClass プロパティを使用して、book タイプ内の特定の title を持つコンテンツ項目を取得することができます。
たとえば、title likeignorecase '*Adventure' && cm_objectClass = 'books'
のように指定します。
比較演算子は、クエリのプロパティと入力した値を比較するロジックを持っています。コンテンツ項目がクエリの条件と一致する場合には、そのコンテンツ項目が返されます。表 6-2 は、クエリで使用できる比較演算子の一覧を示します。
値は、クエリが返す必要のあるコンテンツを表します。クエリに値を入力することにより、コンテンツ項目に格納された値に基づいて、どのコンテンツを取得し、または無視するかをクエリに指示します。
たとえば、title というプロパティを持つ book というコンテンツ タイプを使用する場合、book タイプに関連付けられるすべてのコンテンツ項目は title フィールドを持ちます。各 title 値はユニークであるため、クエリでユニークな値を入力して、特定のコンテンツ項目を取得したり、比較演算子を使用して、特定のコンテンツ項目を無視することができます。
たとえば、コンテンツ プロパティが author であるクエリでは、ユーザの FavoriteAuthor プロファイルのプロパティを取得してクエリに値を入力し、それによりクエリがユーザの好みの作者に関連するコンテンツを取得できるようにできます。
'pending'
のように指定します。 "The Crazy Adventure"
のように二重引用符で囲まれている場合、'\"The Crazy Adventure\"'
のように値を入力します。タイトルが単一引用符で囲まれている場合、title = '\'The Crazy Adventure\''
のように値を値を入力します。"\u6565"
など)、8 進数 ("\7"
、"\65
"、"\377"
など)、および標準 Java エスケープ シーケンス ("\n"
、"\r"
、"\b"
など) を文字列で使用できる。 true
または false
キーワードのいずれかである (引用符なしの小文字)。
日付と時刻は 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>)
形式を使用する。ここで、タイプは user、request、または session です。たとえば、userProperty('userpreferences', 'FavoriteAuthor')
のように指定します。
複数の独立したクエリ句を and (&&) や or (||) ロジックで結合し、代数式の評価順序を括弧で制御することができます。これにより、複雑なクエリを作成することができます。また、括弧で囲まれたグループの前に感嘆符を使用して、複雑なクエリに not ロジック (!) を含めることもできます。
クエリの詳細については、『コンテンツ管理ガイド』を参照してください
図 6-4 は、BEA の仮想コンテンツ リポジトリに格納されたブックのプロパティ セットを示します。
表 6-3 のクエリの例は、サンプル コンテンツ項目のプロパティを使用し、各クエリのサンプルの説明は、クエリがコンテンツ項目を取得するかどうかを示します。
コンテンツ セレクタ ファイルを作成したら (「コンテンツ セレクタ ファイルの作成」を参照)、<pz:contentSelector>
JSP タグを使用してコンテンツを表示する必要があります。図 6-3 に示すように、以下の JSP タグは classic
コンテンツ セレクタを使用します。
<pz:contentSelector rule="classic" id="nodes"/>
他にも、<pz:contentSelector>
タグに設定できる属性があります。クラスの詳細については、Javadoc を参照してください。
Workshop for WebLogic でコンテンツ セレクタ ファイルを作成したら、以下の 3 つの方法のいずれかを使用して、Workshop for WebLogic の JSP にコンテンツ セレクタを追加することができます。
include
文が自動的に追加されます。図 6-5 を参照してください。<pz:contentSelector>
JSP タグ ([Portal Personalization] カテゴリにある) を、開いている JSP にドラッグし、タグの属性を手動で読み込む。[ウィンドウ|ビューの表示|その他] を選択し、[Web] および [JSP デザイン パレット] を選択して、[JSP デザイン パレット] を選択します。タグ ライブラリの include
文が自動的に追加されます。
コンテンツ セレクタを開いているポータル ファイルにドラッグするには、以下の手順を実行します。
JSP ファイルにはコンテンツ セレクタ JSP タグが含まれ、rule および id 属性が自動的に読み込まれ、タグ ライブラリの include
文が自動的に追加されます。コード リスト 6-1 に示すように、その他の JSP と HTML タグも自動的に追加されます。
<pz:contentSelector rule="modern" id="nodes"/>
<ul>
<utility:notNull item= "<%nodes%">
<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-2 は、パーソナライズされたコンテンツで複数のコンテンツ セレクタを使用する方法を示しています。
<%@ 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>
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 ディレクトリは、名前が変更されている可能性があります。 |
開発者がコンテンツ セレクタのクエリを削除するには、以下の手順を実行します。
コンテンツ セレクタを削除すると、そのコンテンツ セレクタは Workshop for WebLogic と Administration Console から削除されます。
コンテンツ セレクタを削除するには、以下の手順を実行します。
ヒント : | 削除したコンテンツ セレクタを参照している <pz:contentSelector> タグが JSP 内にある場合は、すべて削除する必要があります。 |
以下の方法を使用して、コンテンツ セレクタが表示するコンテンツを編集できます。
![]() ![]() ![]() |