PSML

PSML は Portal Structure Markup Language の頭文字を取った物です。PSML は Jetspeed 内のコンテンツの構造化と抽象化を行うために作成されます。PSML はポータルページ上でポートレットがどのように集約され、レイアウトされ、装飾されるかを定義します。ページレイアウトは、Java ポートレット標準 API の守備範囲ではないことに注意してください。ですので、PSML は Jetspeed 特有の実装です。そして、Jetspeed 2 の PSML は Jetspeed 1 の PSML とも違うことに注意してください。このドキュメントは PSML リソースの要素のリファレンスガイドとして使えます。

PSML ファイルは、ページ、フォルダ、リンクや大域的なセキュリティ制限と関係する他のポータルサイトの情報も保持します。これらの主要な PSML の要素のそれぞれは、ファイルシステム上のディレクトリ構造内に配置された別々のドキュメント内に保存されます。一般的に、このディレクトリは Jetspeed ウェブアプリケーション内の /WEB-INF/pages にあるリソースとしてアクセスされます。

以下にポータルサイトの ページ 用の PSML ファイル (*.psml) の例を示します。

<?xml version="1.0" encoding="UTF-8"?>
<page>
  <!-- ページの情報 -->
  <title>Welcome to Jetspeed 2</title>
  <metadata name="title" xml:lang="fr">Ma Premiere Page de PSML</metadata>
  <metadata name="title" xml:lang="es">¡Bienvenido a Jetspeed 2!</metadata>
  <metadata name="title" xml:lang="hu">Köszönti a Jetspeed 2!</metadata>

  <!-- ページの装飾 -->
  <defaults skin="orange" layout-decorator="tigris" portlet-decorator="tigris"/>

  <!-- ページフラグメント -->
  <fragment id="100393" type="layout" name="jetspeed-layouts::VelocityOneColumn">
    <fragment id="100939" type="portlet" name="j2-admin::LocaleSelector">
      <property layout="OneColumn" name="row" value="0"/>
    </fragment>                                
    <fragment id="100345" type="layout" name="jetspeed-layouts::VelocityTwoColumns">
      <property layout="OneColumn" name="row" value="1"/>
      <property layout="TwoColumns" name="sizes" value="33%,66%"/>
      <fragment id="100121" type="portlet" name="j2-admin::LoginPortlet">
        <property layout="TwoColumns" name="row" value="0"/>
        <property layout="TwoColumns" name="column" value="0"/>
      </fragment>                                
      <fragment id="100171" type="portlet" name="demo::UserInfoTest">
        <property layout="TwoColumns" name="row" value="0"/>
        <property layout="TwoColumns" name="column" value="1"/>
      </fragment>    
    </fragment>
  </fragment>

  <!-- セキュリティ制限 -->
  <security-constraints>
    <security-constraints-ref>public-view</security-constraints-ref>
  </security-constraints>
</page>

以下に、ポータルサイトの フォルダ (folder.metadata) 用の定義を行う PSML ファイルの例を示します。

<?xml version="1.0" encoding="UTF-8"?>
<folder>
  <!-- フォルダの説明 -->
  <title>Root Folder</title>  
  <metadata name="title" xml:lang="fr">Répertoire racine</metadata>
  <metadata name="title" xml:lang="es">Carpeta raiz</metadata>

  <!-- フォルダ内のドキュメントの順序 -->
  <document-order>Jetspeed2.link</document-order>
  <document-order>Jetspeed2Wiki.link</document-order>
  <document-order>apache_portals.link</document-order>
  <document-order>apache.link</document-order>

  <!-- ポータルサイトのメニュー -->
  <menu name="page-navigations">
    <separator>
      <text>Top Pages</text>
      <metadata name="text" xml:lang="fr">Page haut</metadata>
      <metadata name="text" xml:lang="es">Páginas más populares</metadata>
    </separator>
    <options>/Administrative</options>
    <separator>
      <text>Profiled Pages</text>
      <metadata name="text" xml:lang="es">Páginas del Perfil</metadata>
    </separator>
    <options regexp="true">/p[0-9][0-9][0-9].psml</options>
    <separator>
      <text>Non Java Pages</text>
      <metadata name="text" xml:lang="es">Ejemplos sin java</metadata>
    </separator>
    <options>/non-java</options>
  </menu>

  <!-- セキュリティ制限 -->
  <security-constraints>
    <security-constraints-ref>public-view</security-constraints-ref>
  </security-constraints>
</folder>

以下に、ポータルサイトの リンク (*.link) 用の PSML ファイルの例を示します。

<?xml version="1.0" encoding="UTF-8"?>
<link target="top">
  <!-- リンクの説明 -->
  <title>Jetspeed 2 Home Page</title>
  <url>http://portals.apache.org/jetspeed-2/</url>
  <metadata name="title" xml:lang="es">Jetspeed 2</metadata>
</link>

以下に、ポータルサイトの ページのセキュリティ (page.security) 用の PSML ファイルの例を示します。

<?xml version="1.0" encoding="UTF-8"?>
<page-security>
  <!-- 大域的な管理者の制限 -->
  <security-constraints-def name="admin">
    <security-constraint>
      <roles>admin</roles>
      <permissions>view, edit</permissions>
    </security-constraint>
  </security-constraints-def>
  <global-security-constraints-ref>admin</global-security-constraints-ref>

  <!-- パブリックな制限 -->
  <security-constraints-def name="public-view">
    <security-constraint>
      <users>*</users>
      <permissions>view</permissions>
    </security-constraint>
  </security-constraints-def>
  <security-constraints-def name="public-edit">
    <security-constraint>
      <users>*</users>
      <permissions>view, edit</permissions>
    </security-constraint>
  </security-constraints-def>
</page-security>

ページ

<page> 要素は、ポータルサイトのページに関連する他の PSML 要素を保持するための単純な入れ物です。この要素は、親であるフォルダを構成する適切なファイルシステムディレクトリ内に、'.psml' という拡張子を持つファイルとして存在します。 2 つの有効な属性がページエレメントの属性として存在します。

属性説明
hiddenページがポータルサイトのサイトメニューまたは他のナビゲーション用の要素に表れるかどうかを指示するための真偽値の属性。
version一般的な目的のバージョントラッキングのための属性。Jetspeed 2 では現在使われていません。

<page> 要素は多くの他の PSML 要素を含みます。

要素説明
title?デフォルトのページタイトルを表すテキストを含む単純な要素。ページのタイトルは、その長い説明とみなされます。もしメニューテキスト用の短いタイトルが利用可能であれば、一部のデコレータでロールオーバー (訳注:マウスポインタがHTML文書の中の要素の上にくると、その要素が変化する仕組みのこと) 用のテキストとして使われます。もし指定されていなければ、Jetspeed 2 は page 要素を含むファイルのファイル名からタイトルを決めようと試みます。
short-title?ページのデフォルトの短いタイトルのテキストを含む単純で省略可能な要素。短いタイトルは、もし利用可能であれば、一部のデコレータ内のメニューテキストとして使われます。もし指定されない場合は title のテキストが使われます。
defaultsページとそのフラグメントのための装飾を指定します。defaults はページ毎に必要です。
fragmentフラグメントの階層構造のルート。全てのページにルートのフラグメントが必要です。
metadata*省略可能の指定である、ページ用のロケール特有のタイトルと短いタイトル。
menu*省略可能の指定である、ページ用の追加または上書きされた継承したメニュー定義の指定。
security-constraints?省略可能の定義である、ページ用のインラインのセキュリティ制限の定義。もし指定されなければ、ページは親フォルダ内の有効なセキュリティ制限を継承します。

例: イントロで示した例を参照してください。

デフォルト

ページ内の <defaults> 要素は、デフォルトのレイアウトデコレータと、デフォルトのポートレットデコレータを定義します。デフォルトのレイアウトデコレータは、デコレータ属性を持たない全てのレイアウトフラグメントに対して適用されます。デフォルトのポートレットデコレータは、デコレータ属性を持たない全てのポートレットフラグメントに対して適用されます。defaults 要素には 3 つの有効な属性があります。

AttributeDescription
layout-decoratorページをレンダリングするときに使うレイアウトデコレータの名前。この属性は必須です。
portlet-decoratorページフラグメントをレンダリングするときに使うデフォルトのポートレットデコレータの名前。この属性は省略可能ですが、ほとんどいつも設定します。
skinページやフラグメントの表示を制御するためにデコレータ内で参照される一般的な目的のデコレータ属性。現時点では Jetspeed 2 では使用していません。

例:

<page>
  ...
  <defaults skin="orange" layout-decorator="tigris" portlet-decorator="tigris"/>
  ...
</page>

レイアウトフラグメント

ページ のレイアウト <fragment> 要素は階層構造のコンテナです。これは ポートレットフラグメントと、階層化されたレイアウトフラグメントを保持するのに使われます。ページのルートのフラグメントは、ページに 1 つしかポートレットがないときでも、レイアウトフラグメントでなければなりません。レイアウトフラグメントは親となるレイアウトフラグメントのレイアウトに従属します。なので "row" と "column" の レイアウトプロパティをサポートします。加えて、レイアウトフラグメントは 'sizes' レイアウトプロパティもサポートします。これは、複数列のレイアウトの列の割合をコントロールするのに使われます。この要素には 3 つの必須の属性があります。

属性説明
id必須である id は、フラグメントを特定するのに使います。そして、サイト内で定義される全てのフラグメントに渡ってユニークでなければなりません。この値は Jetspeed2 に対して透過的でなく、一意性を保証するためのどのような仕様にも従うことが可能です。フラグメントは Jetspeed 2 で内部的にキャッシュされる可能性があるので、既存のページに対する任意の編集が、Jetspeed 2 が行う変更を保証するために新しい id を必要とするかも知れません。
typeこの必須の属性はレイアウトフラグメント全てで 'layout' と指定しなければなりません。
name必須であるポートレット名は、フラグメントレイアウトを実装するのに使われます。ポートレット名は一般的に、portlet.xml ファイルで指定された 'portlet-app-id:portlet-id' の形を取ります。以下が Jetspeed 2 でサポートされるレイアウトポートレットの名前です。
  • jetspeed-layouts::FrameLayoutPortlet
  • jetspeed-layouts::VelocityOneColumn
  • jetspeed-layouts::VelocityOneColumnNoActions
  • jetspeed-layouts::VelocityThreeColumns
  • jetspeed-layouts::VelocityThreeColumnsNoActions
  • jetspeed-layouts::VelocityThreeColumnsTable
  • jetspeed-layouts::VelocityTwoColumns
  • jetspeed-layouts::VelocityTwoColumns2575
  • jetspeed-layouts::VelocityTwoColumns2575NoActions
  • jetspeed-layouts::VelocityTwoColumnsNoActions
  • jetspeed-layouts::VelocityTwoColumnsSmallLeft
  • jetspeed-layouts::VelocityTwoColumnsSmallLeftNoActions
  • jetspeed-layouts::VelocityTwoColumnsTable

レイアウト <fragment> 要素はたくさんの他の PSML 要素を含みます。

要素説明
fragment*指定された fragment 要素は、レイアウトフラグメントによってレイアウトされるポートレットフラグメント、または階層化されたレイアウトフラグメントのどちらにも成り得ます。全ての子フラグメントにはこのレイアウトの位置を指定するための property 要素が必須です。レイアウトフラグメント内に指定されるフラグメントがない場合は結果としてコンテンツは生成されません。
property*レイアウトフラグメントは省略可能で 'sizes' プロパティを持つことが可能です。これは複数列の形状の明細を指定するのに使うことが可能です。階層化されたレイアウトフラグメントは、親レイアウト内の位置を特定するために 'row' または 'column' またはその両方のプロパティも持つかもしれません。
security-constraints?フラグメントとそのフラグメントの子フラグメントに対して、省略可能なインラインのセキュリティ制限を定義します。ページ、リンクの制約と違って、'view' パーミッションのみが制限されます。もし指定されなければ、フラグメントは ページ 内で有効なセキュリティ制限を継承します。

例:

... ...

ポートレットフラグメント

ポートレットの <fragment> 要素は、ページのポートレットを識別するために使われます。ポートレットフラグメントは、親レイアウトフラグメントのレイアウトの影響を受けます。なので、レイアウトで定められている 'row' と 'column' のレイアウトプロパティ をサポートします。この要素に対しては多数の有効な属性が存在します。

属性説明
id必須である id は、フラグメントを特定するのに使います。そして、サイト内で定義される全てのフラグメントに渡って、ユニークでなければなりません。この値は Jetspeed2 に対して透過的でなく、一意性を保証するためのどのような仕様にも従うことが可能です。フラグメントは Jetspeed 2 で内部的にキャッシュされる可能性があるので、既存のページに対する任意の編集が、Jetspeed 2 が行う変更を保証するために新しい id を必要とするかも知れません。
typeこの必須の属性は全てのポートレットフラグメントで 'portlet' と指定しなければなりません。
name必須であるポートレット名は、フラグメントコンテンツを流し込むのに使われます。ポートレット名は一般的に portlet.xml ファイルで指定された 'portlet-app-id:portlet-id' の形を取ります。
skinフラグメントの表示のコントロールのための、ポートレットデコレータ内で参照する可能性のある一般的な目的のデコレータ属性。現時点では Jetspeed 2 では使っていません。
decoratorデフォルトのポートレットデコレータ名は、フラグメントのレンダリングに使われます。この属性は省略可能です。しかし、この属性が指定されない場合は、ページの defaults がデフォルトのポートレットデコレータを指定します。
stateフラグメントポートレットの初期状態; 現時点ではこの属性に対しては、唯一 'hidden' が有効な値です。

ポートレットの <fragment> 要素は他の PSML 要素を含みます。

要素説明
property*親フラグメントは、親レイアウト内の位置を特定するために、'row' または 'column' またはその両方のプロパティを持てます。
title?フラグメントポートレットのタイトルを含む、省略可能で単純なテキストの要素。portlet.xml でセットされたタイトルを上書きします。
preference*フラグメントポートレットにたいして、設定される初期のユーザプリファレンスを指定します。portlet.xml 内で指定された、どのようなポートレットプリファレンスも上書きされます。
security-constraints?フラグメントに対するインラインのセキュリティ制限を省略可能で定義します。ページ、フォルダの制約と違って、'view' パーミッションだけを制限できます。もし指定されない場合は、そのフラグメントは page 内で有効なセキュリティ制限を継承します。

例:

<fragment id="100393" type="layout" name="jetspeed-layouts::VelocityOneColumn">
  ...
  <fragment id="100939" type="portlet" name="j2-admin::LocaleSelector">
    <property layout="OneColumn" name="row" value="0"/>
  </fragment>                                
  ...
</fragment>

フラグメントのプロパティ

フラグメントの <property> 要素はフラグメントのプロパティの名前を指定するのに使われます。これらのプロパティは一般にレイアウトポートレットのパラメータとページ内のポートレットの位置を指定するために使われます。プロパティ要素は 3 つの属性をサポートします。

属性説明
layout (廃止予定) プロパティが紐付いているフラグメントポートレットの識別名。この属性は互換性のために用意されています。レイアウトとポートレットフラグメントの厳密な階層構造は、どのような単一のフラグメントとそのプロパティも、 1 つのレイアウトポートレットの影響下にある可能性があることを意味します。
nameフラグメントプロパティの名前。Jetspeed 2 のレイアウトポートレットは 'row'、'column'、'sizes' プロパティをサポートします。
valueフラグメントプロパティの値。'row' と 'column' プロパティはゼロベースの指標値を受け取ります。'sizes' プロパティは HTML frameset タグの 'rows' と 'cols' 属性の書式 (例えば '25%,75%' 等) を受け取ります。

例:

<fragment id="100876" type="portlet" name="j2-admin::LoginPortlet">
  ...
  <property layout="TwoColumns" name="row" value="2"/>
  <property layout="TwoColumns" name="column" value="1"/>
  ...
</fragment>
<fragment id="103456" type="layout" name="jetspeed-layouts::VelocityTwoColumns">
  ...
  <property layout="TwoColumns" name="sizes" value="33%,66%"/>
  ...
</fragment>

プリファレンス

ポートレットフラグメント の <preference> 要素は、ポートレットプリファレンスを定義します。これは、ポートレットアプリケーションの portlet.xml 内に、ポートレットの定義を何度も行う必要なく、ページ上のポートレットインスタンス用に、デフォルトのポートレットプリファレンスの設定を、簡単に行う手段を提供します。

プリファレンスの優先度: ユーザ定義 > フラグメント定義 > portlet.xml での定義

<preference> 要素の属性は以下のようなものです。

属性説明
nameプリファレンスの名前。
readOnlyユーザがこのプリファレンス値を変えることができるかどうかを示す真偽値。

<preference> 要素は以下の要素を含みます。

要素説明
value+指定したプリファレンスと関係する値を含む単純なテキスト要素。

例:

<fragment id="uhtemp-1012" type="portlet" name="demo::BookmarkPortlet">
  ...
  <preference name="Google" readOnly="false">
    <value>http://www.google.com</value>
  </preference>
  ...
</fragment>

フォルダ

<folder> 要素は、ポータルサイトのフォルダと関連する他の PSML 要素を保持する単純な入れ物です。この要素は、関連するファイルシステムディレクトリ内の folder.metadata ファイルとして存在します。フォルダの要素には 2 つの有効な属性が存在します。

属性説明
hiddenフォルダが、ポータルサイトのメニューや他のナビゲーション用の要素に、表示されるかどうかを示す真偽値の属性。
version一般的な用途のバージョントラッキングの属性。現時点では Jetspeed 2 では使われていません。

<folder> 要素は多くの他の PSML 要素を含みます。

要素説明
title?デフォルトのフォルダのタイトルを含む単純な要素。フォルダのタイトルは、自身の長い説明とみなされます。もし短いタイトル名が利用可能であれば、一部のデコレータでロールオーバー用のテキストとして使われます。もし指定されていなければ、Jetspeed 2 はフォルダ要素を含むファイル名からタイトルを決めようと試みます。
short-title?フォルダのデフォルトの短いタイトルのテキストを含む省略可能な単純要素。もし短いタイトルが利用可能であれば、一部のデコレータでメニューテキストとして使われます。もし指定されない場合は、title のテキストが使われます。
default-page?フォルダのデフォルトページまたはサブフォルダのテキストを含む単純で省略可能な要素。デフォルトページは、フォルダが直接ポータルから参照されるときに使われます。このフォルダ内のどのような ページやフォルダを (親フォルダとして使われる「..」も含む) 指定することも可能です。もしデフォルトページが設定されない場合は、「default-page.psml」が使われます。もし 「default-page.psml」が存在しない場合は、フォルダ内の最初のページがデフォルトになります。
document-order*ページ、サブフォルダ、リンク といった構成要素のソートの順番を定義するのに使われる、構成要素のテキスト名を含む単純で省略可能な要素。名前にマッチする構成要素は、その要素が定義された順番に配置されます。他の構成要素は名前でソートされます。そして、メニューや他のリストでは、一致した構成要素の後に表示されます。正規表現による一致はサポートしません。
metadata*省略可能の指定である、ロケール固有のフォルダのタイトルや短いタイトル。
menu*省略可能の指定である、追加の、または継承したものを上書きするフォルダのメニュー定義。
security-constraints?省略可能の定義である、フォルダ用のインラインのセキュリティ制限の定義。もし指定されなければ、フォルダは親フォルダ内の有効なセキュリティ制限を継承します。

例: 序文の例を参照してください。

リンク

<link> 要素は、ポータルサイトの外部のコンテンツを参照するのに使われるポータルリンクに関連づけられている、他の PSML 要素を保持するシンプルな入れ物です。この要素は、親フォルダと関連づけられている、適切なファイルシステムのディレクトリ内に存在する「.link」という拡張子のファイルとして存在します。この要素には 2 つの有効な属性があります。

属性説明
target省略可能の指定である、外部コンテンツを開くための対象となるフレームの名前。もし指定されなければ、リンクされたコンテンツはブラウザで開いているポータルと置き換わります。
version一般的な用途のバージョントラッキングの属性。現時点では Jetspeed 2 では使われていません。

<link> 要素は多数の他の PSML 要素を含みます。

要素説明
title?デフォルトのリンクタイトル用のテキストを含むシンプルな要素。リンクのタイトルは、その長い説明とみなされます。もしメニューテキスト用の短いタイトルが利用可能であれば、一部のデコレータでロールオーバー用のテキストとして使われます。もし指定されていなければ、Jetspeed 2 は link 要素を含むファイルのファイル名からタイトルを決めようと試みます。
short-title?リンクのデフォルトの短いタイトルのテキストを含む単純で省略可能な要素。もし短いタイトルが利用可能であれば、一部のデコレータでメニューテキストとして使われます。
urlコンテンツの URL のための必須の要素。この要素のテキストは、指定されたブラウザの対象フレームをナビゲートするのに使われます。
metadata*省略可能の指定である、ロケール固有のリンクのタイトルや短いタイトル。
security-constraints?省略可能の指定である、リンクのためのセキュリティ制限。もし指定されなければ、リンクは親フォルダ内の有効なセキュリティ制限を継承します。

例: 序文の例を参照してください。

グローバルなページのセキュリティ

<page-security> 要素はグローバルなセキュリティ制限と、その定義を宣言するために使われる、他の PSML 要素を保持するためのシンプルな入れ物です。この要素は page.security ファイルとして存在し、常に PSML ファイルのシステムディレクトリのルートディレクトリに存在します。page-security 要素の有効な属性は 1 つだけ存在します。

属性説明
version一般的な用途のバージョントラッキングの属性。現時点では Jetspeed 2 では使われていません。

<page-security> 要素は PSML 要素に関連する 2 つのセキュリティ制限を含みます。

要素説明
security-constraints-def*省略可能の定義である、セキュリティ制限のコレクションの名前。これらのセキュリティ制限はページフラグメントフォルダリンク内で、そして再利用とセキュリティのメンテナンスを容易にするために、この要素内で参照されます。
global-security-constraints-ref*サイト内の全てのセキュリティ制限を適用するための、省略可能の定義であるセキュリティ制限参照。それぞれのシンプルな要素のテキストは、このエレメント内のここで指定された名前のセキュリティ制限の定義を参照します。

例: 序文の例を参照してください。

PSML タイトルとメタデータ

ページ, フォルダ, リンク の <metadata> 要素はロケール特有のタイトルと短いタイトルのテキストを定義するのに使われます。これらの要素は何度でも、含まれる PSML 要素内で表れるかもしれません。しかし、複数の値が 1 つのロケールにたいして指定してはいけません。PSML XML 文書は、普通は広範囲のキャラクタセットをサポートするために、UTF-8 エンコーディングで宣言されます。

属性説明
nameメタデータテキストの名前。この名前は、ロケール特有のタイトルテキストを指定するための、'title' と 'short-title' のどちらかを指定してください。
xml:langメタデータテキストのためのロケール言語または言語/国セレクタ。標準の Java ロケール名が期待されます (ISO-639 と ISO-3166)。有効な値として 'en' や 'en_US' を含みます。

例:

<page>
  ...
  <metadata name="title" xml:lang="fr">Ma Premiere Page de PSML</metadata>
  <metadata name="title" xml:lang="es">¡Bienvenido a Jetspeed 2!</metadata>
  <metadata name="title" xml:lang="hu">Köszönti a Jetspeed 2!</metadata>
  ...
</page>

PSML セキュリティ制限

pagesfragmentsfolderslinkspage security 要素内で現れる <security-constraints>、<security-constraints-def>、<global-security-constraints-ref> 要素については宣言型セキュリティ制限に関するドキュメントに別途記述されています。

宣言型セキュリティ制限のガイド

PSML メニュー

ページフォルダ 要素内で現れる <menu> 要素は宣言型メニューのガイドに別途記述されています。

宣言型メニューのガイド