EPrints 2.3技術文書 - ハウツーガイド


複雑なカスタムビューの設定法

簡単な説明はArchiveConfig.pmの節にあります。

例題: Webサイト www.foobars.ac.uk に、何百とある研究プロジェクトについてプロジェクト毎にページを持つとします。 各プロジェクトは簡潔で一意のidコード、たとえば、「manticore」を持っており、設定対象となるEPrintsアーカイブ(eprints.foobars.ac.uk)に次のフィールドがあるとします。

 { name=>"projectcodes", type=>"text", multiple=>1 }

次のブラウズビューを追加します。

 { id=>"by_project", allow_null=>0, fields=>"projectcodes", 
 order=>"-year/title" }

この設定で、http://eprints.foobars.ac.uk/views/by_project/manticore.htmlが生成されます。このページはプロジェクトmanticoreのすべての論文のリストを持ちますので、このURLに対してリンクを張ることができます。

フィールドをブラウズページへのリンクとする

サブジェクトに、その値を持つサブジェクト・ブラウズページへのリンクを持たせたい場合は、そのフィールドにbrowse_linkプロパティを追加します(そして必要なら要約ページを再作成します)。

ブラウズビューを削除する場合は、browse_linkプロパティも削除します。さもないとリンク先のないリンクになってしまいます。

メインレコードへのリンクとして使用されるサイテーション内に表示されている値はもちろんブラウズビューへのリンクではありません。

別のページにビューを含める

ブラウズビューを次のように変更します。

 { id=>"by_project", allow_null=>0, fields=>"projectcodes", 
 order=>"-year/title", noindex=>1, nolink=>1, nohtml=>1, include=>1 }

これはビューを作成しますが、/view/ページにはリストされません。値ごとに .includeファイルが作成されますが、.htmlファイルは作成されません。 この .includeファイルにはアイテム「数」とサイテーションのXHTMLだけが含まれています。 これを、(1)PHPのreadfileを使ってその場で補足する、(2)Perlでプログラムする、(3)NFSを使ってメインサーバにファイルシステムを公開する(あるいは単に同じマシンですべてを実行する)、(4)ssiを使ってページに置く、のいずれかの方法を使って、http://www.foobars.ac.uk/サイトのページの一部として使用することができます。

各アイテムの引用形をカスタマイズする

プロジェクトの論文を4つのカラム、タイトル/著者/年/要約ページへのリンクであるアイコン、を持つ表形式でリストしたい場合。

まず、ブラウズビューに「さらに」いくつかのオプションを追加します。

 { id=>"by_project", allow_null=>0, fields=>"projectcodes", 
 order=>"-year/title", noindex=>1, nolink=>1, nohtml=>1, include=>1,
 nocount=>1, citation=>"project_table" }

次に、サイテーション設定ファイルに新たなサイテーションを追加します。

 <ep:citation type="project_table"><tr><td>&title;</td><td>&authors;</td>
 <td>&year;</td><td><ep:linkhere><img 
 src="http://www.foobars.ac.uk/images/paperlink.png"; alt="view" width="32" 
 height="64" border="0" /></ep:linkhere></td></tr></ep:citation>

すると、manticoreプロジェクトの論文用の次のような「.include」ファイルが作成されます(見やすいように「img」タグの記述は省略しました)。

 <tr><td>Making Stuff</td><td>Guy, A.</td><td>2001</td><td><a 
 href="http://eprints.foobar.ac.uk/archive/00000923/"><img ... /></a>
 </td></tr>
 <tr><td>Eating Food</td><td>Herring, Walter and Chips, Bob</td><td>
 2000</td><td><a href="http://eprints.foobar.ac.uk/archive/00000445/">
 <img ... /></a></td></tr>

「研究業績」ページ(Aliceが書いたすべてのレコードのリスト)をつくる

これは著者や編者のフィールドがIDを持っていると役に立つケースです。

「個人ID」フィールドにおいて人を識別するのにローカルのユーザ名を使用するとします。すると、次のようにビューを設定することができます。

 { id=>"by_person", allow_null=>0, fields=>"authors.id/editors.id", 
 order=>"-year/title", noindex=>1, include=>1 }

この設定により、.htmlと.includeの両ファイルが生成されます。したがって、サイトのメンバーは自分のレコードのリストを次の2つの方法で手に入れることができます。 1つは、/views/by_person/alice.htmlへリンク(ここでaliceはユーザ名)を張ることで、もう1つは/views/by_person/alice.include を自分のホームページに取り込むことです。


新フィールドの追加法

この節では新システムへのフィールドの追加法を説明します。稼動システムへのフィールドの追加法ではありません。 稼動システムに新フィールドを追加することも可能ですが、SQLを駆使する必要があります。

この例では、「local」という名前の、「set」タイプのフィールドを追加します。このフィールドは3つの選択肢、「yes」、「no」、「partial」を持ち、対象となるアイテムがサイトを運営する組織で生産されたものであるか否かを示すものとします。

ArchiveMetafieldConfig.pmにフィールドを追加する
ArchiveMetafieldConfig.pmの適当な場所(この例では「eprint」セクション)にフィールドを追加します。
 { name => "local", type => "set", input_rows => 1, 
    options => [ "yes", "no", "partial" ] }

input_rowsを1にセットしているので、このフィールドはプルダウンメニューで表示されることになります。

metadata-types.xmlにフィールドを追加する
eprintとuserの任意の、あるいはすべてのタイプでこのフィールドを修正できるようにしたい場合は、metadata-types.xmlで必要なタイプにこのフィールドを追加します(この追加は稼動システムに深刻な問題を与えることなく行うことができます)。
 <field name="local" required="yes" />

アーカイブフレーズファイルにフィールド情報を追加する
通常、fieldnameとfieldhelpの追加が必要なだけですが、このフィールドには選択肢があるので、各選択肢の名前も追加する必要があります。 複数言語をサポートしている場合は、各言語用のフレーズファイルにも(適切な言語で)追加する必要があります。
 <ep:phrase ref="eprint_fieldname_local">Produced Locally</ep:phrase>
 <ep:phrase ref="eprint_fieldhelp_local">Please indicate if this item was 
produces in the foo organisation, or not.
 <ep:phrase ref="eprint_fieldopt_local_yes">produced locally</ep:phrase>
 <ep:phrase ref="eprint_fieldopt_local_no">not produced locally</ep:phrase>
 <ep:phrase ref="eprint_fieldopt_local_partial">only partially produced 
locally</ep:phrase>

新フィールド追加後の必須ではない作業

サイテーションファイルにフィールドを追加する
これはオプションです。サイテーションにフィールドを含めたい場合のみ行ってください。

この例では、テクニカルレポートを引用する際だけ、このフィールドを表示したいとします。次のようにエントリを変更します。

 <ep:citation type="eprint_techreport"><ep:linkhere><span 
 class="citation">&authors; <ep:ifset name="year">(&year;)
 </ep:ifset>&title;. Technical Report<ep:ifset name="reportno"> 
 &reportno;</ep:ifset><ep:ifset name="department">, &department;
 </ep:ifset><ep:ifset name="institution">, &institution;</ep:ifset>. 
 &local;.</span></ep:linkhere></ep:citation>

変更は最後に「&local;.」を追加したことだけです。このフィールドは必須フィールドで常にセットされる(されなければならない)ので、 <ep:ifset name="local"> で囲んでいません。

要約(あるいは、利用者表示)ページにフィールドを追加する
これもオプションです。このアイテムのWebページにこのフィールドを表示したい場合は、ArchiveRenderConfig.pmを編集して、eprint_renderかuser_renderのいずれか適切な関数を選択します。

この例では、アイテムが自機関で生産されたものではない場合、それを注記したいとします。このフィールドをdocumentとabstractの間に追加します。

多言語をサポートしない場合は、次のようになります。

 if( $eprint->get_value( "local" )ne "yes" )
 {
      # don't need to "my $p" as it's done earlier.
      $p = $session->make_element( "p" );
      $p->appendChild( $session->make_text( "This item was " ));
      $p->appendChild( $eprint->render_value( "local" ));
      $p->appendChild( $session->make_text( "." ));
      # Append our new paragraph to the page.
      $page->appendChild( $p );
 }

多言語をサポートしている場合は、次のようになります。

多言語をサポートする場合は、アーカイブのフレーズファイルを使用する必要があります。各言語のフレーズファイルに次のようなフレーズを追加します。

 <ep:phrase ref="page:itemnotlocal"><p>This item was <pin ref="status" />.</p></ep:phrase>

そして、ArchiveRenderConfig.pmファイルに以下を追加します。

 if( $eprint->get_value( "local" )ne "yes" )
 {
      my $localmsg = $session->html_phrase(
             "page:itemnotlocal",
             status=>$eprint->render_value( "local" ));
      $page->appendChild( $localmsg );
 }

多言語をサポートしていない場合もこの方法を使用することができます。

データ検証関数を追加する
このフィールドのデータの妥当性を特別な方法で検証したい場合は、ArchiveValidateConfig.pmにそのための関数を追加してください。

OAIメタデータにフィールドを追加する(イープリントのフィールドのみ)
このフィールドをダブリンコア(あるいは採用しているメタデータ形式)に含める場合は、ArchiveOAIConfig.pmファイルの適当な位置に追加してください。

ブラウズビューに追加する(イープリントのフィールドのみ)
必要であれば、このフィールドの値でブラウズすることが可能です。その実現方法については、それを説明している項を参照してください。

フィールドを追加する場合、erase_archiveとcreate_tablesを実行しないと変更は反映されません。 フィールドを変更してテーブルを再構築しないとEPrintsは実行できません。


フィールドの削除法

手っ取り早く言えば「追加法の逆」です。

metadata-types.xmlからフィールドを削除する
このファイルからフィールドを削除することは、このフィールドには誰も入力できなくなることを意味します。それで十分でしょう。 また、後で戻すこともできます。

ArchiveMetafieldConfig.pmからフィールドを削除する
データベースからフィールドが削除されます(フィールド追加時と同様、テーブルの再構築が必要です)。

フレーズファイルからフィールドを削除する
これはオプションです。使用されないフレーズはただ無視されるだけです。

サイテーションファイルからフィールドを削除する
使用していた場合は削除します。

要約(あるいは利用者表示)ページからフィールドを削除する
使用していた場合は削除します。

データ検証関数を削除する
このフィールドを調べる検証関数を追加したということはまずないと思いますが、追加した場合は削除します。

OAIメタデータからフィールドを削除する(eprintのみ)
このフィールドを使用していた場合は削除します。デフォルトのダブリンコアを生成するために使用されているフィールドは、タイトル/著者/サブジェクト/抄録/年/月です。 システムフィールドである「資料種別」もダブリンコアに使用されていますが、これは削除できません。

ブラウズビューから削除する(eprintのみ)
使用していた場合は削除します。


新イープリントタイプの追加法

metadata-types.xmlにイープリントのタイプを追加します。 いくつかのフィールドはおそらく「必須」のはずです。

このタイプの名前をフレーズファイルに追加します。

このタイプについてのサイテーションをサイテーションファイルに追加します。


イープリントタイプの削除法

metadata-types.xmlから削除します。

フレーズファイルとサイテーションファイルから削除することができます。しかし、そのままでも問題はありません。


新ドキュメントタイプの追加法

metadata-types.xmlにドキュメントのタイプを追加します。フィールドは必要ありません。

このドキュメントタイプの名前をフレーズファイルに追加します。

このドキュメントタイプについてのサイテーションをサイテーションファイルに追加します。

このタイプを必須のドキュメントタイプの1つとしたい場合は、そのidをArchiveConfig.pmにあるリストに追加してください。

要約ページに何か「うまい方法」で表示したい場合は、ArchiveRenderConfig.pmファイルを編集してください。 そうでない場合は、PDFやHTMLなどと同様に、リスト上にそれを表示するためのサイテーションを作成して使用します。


各イープリント用の掲示板の作成法

英国オープンユニバーシティはアーカイブの各イープリント用に掲示板を作成するサービスを構築しました。

これを実行する実に簡単な方法は、オープンユニバーシティの掲示板サーバを使用することです。 自サイトでd3eサーバを稼動させたい場合は、ソフトウェアをhttp://d3e.sourceforge.net/からダウンロードすることができます。

d3eprints.open.ac.ukを利用する

単に次のコードを ArchiveRenderConfig.pmファイルのif( $has_multiple_versions )行の直前に追加するだけです。

このコードは国際化されていないことに注意してください。

        #####################################
        # Begin D3Eprints links
        my $ol = $session->make_element( "ol" );
        my $li = $session->make_element( "li" );
        $a = $session->render_link(
                EPrints::Utils::url_escape(
                        "http://d3eprints.open.ac.uk/disc.php?url=";.$eprint->get_url ),
                "_top" );
        $a->appendChild( $session->make_text(
                "View public discussion of this document" ));
        $li->appendChild( $a );
        $ol->appendChild( $li );
        $li = $session->make_element( "li" );
        $a = $session->render_link(
                EPrints::Utils::url_escape(
                        "http://d3eprints.open.ac.uk/private/disc.php?url=";.
                                $eprint->get_url ),
                "_top" );
        $a->appendChild( $session->make_text(
                "Create private discussion of this document" ));
        $li->appendChild( $a );
        $ol->appendChild( $li );
        $table->appendChild( _render_row(
                $session,
                $session->make_text( "D3Eprints discussion" ),
                $ol ));
        # End of D3Eprints links
        #####################################


アーカイブ最新登録アイテムの機関ホームページへの表示法

「最新」ページの内容、/perl/latest をホームページに表示するには、wgetをcronで実行して取り込んだファイルを、ssiを使って表示するか、次のようなPHPコマンドを使います。

 readfile( "http://eprints.foo.org/perl/latest?mainonly=yes"; );

「mainonly=yes」フラグは、/perl/配下のページをEPrintsが作成する際のテンプレート出力を抑えて、別のファイルに埋め込められるようにする裏技ですが、「最新」アイテムの表示にとっては特に便利なものです。

警告: 一晩に1000件ものレコードをインポートするプログラムを実行している場合、現在のところ最新アイテム表示機能はリストを途中で切るほど賢くないのですべてのアイテムが表示されることになり、ホームページがめちゃくちゃになるかもしれません。


フルテキスト検索の追加法

EPrints自身ではこの機能をサポートしていませんが、いくつかの実現法があります。

htdigや同種のソフトウェアを使用する

Webサイトが持つデータのフルテキスト検索を提供する多くのソフトウェアがあります。まず、EPrints以外のcgiスクリプトを置くcgiディレクトリを次のように作成します。

 mkdir /opt/eprints2/cgi/local

cgiスクリプトをここに置くと、http://yoursite.com/perl/配下のURLでアクセスできます。

外部サーチエンジンを使用する

これは非常に簡単ですが、公開ドキュメントしか索引化されません。どんなサーチエンジンでもいいですが、Googleが良いでしょう。 Googleは、サイトサーチ・サービスを提供しており、サイトを登録するとgoogleを使ってサイトを検索するフォームが使用でき、また、サイトロゴを追加したり、検索結果にサイトのカラースキームを適用したりすることが可能です。

本当に簡単な解決法は、「google_site」スクリプトへのリンクを持つフォームを作成することです。 このスクリプトは単にGoogleへの検索式に「site:yousite.com」を追加するだけで、これにより検索結果を自サイトのものだけに限定します。 これを実現するHTMLはつぎのようなものです。

 <form action="/perl/google_site">
 <p>Use Google to search this site:
 <input name="q" value="" />
 <input type="submit" name="go" value="Search" />
 </form>

他のサーチエンジンを使用する場合は、そのサーチエンジンのドキュメントを参照して、自サイトだけを検索するフォームの書き方を調べてください。


参考文献へのリンクを持つreferencetextフィールドの作成法

この方法はバージョン2.2の技術文書には載せるはずだったのですが、時間がありませんでした。software.eprints.orgにある最新版の技術文書をチェックしてください。 そこにもない場合は、support@eprints.orgで私をしかってください。


HTTPSを使ったパスワード制御ページの作成法

この方法はバージョン2.2の技術文書には載せるはずだったのですが、時間がありませんでした。software.eprints.orgにある最新版の技術文書をチェックしてください。 そこにもない場合は、support@eprints.orgで私をしかってください。


検索結果書式のカスタマイズ法

この方法はバージョン2.2の技術文書には載せるはずだったのですが、時間がありませんでした。software.eprints.orgにある最新版の技術文書をチェックしてください。 そこにもない場合は、support@eprints.orgで私をしかってください。

 EPrints 2.3技術文書 - ハウツーガイド