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>
これは著者や編者のフィールドが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」を持ち、対象となるアイテムがサイトを運営する組織で生産されたものであるか否かを示すものとします。
{ name => "local", type => "set", input_rows => 1, options => [ "yes", "no", "partial" ] }
input_rowsを1にセットしているので、このフィールドはプルダウンメニューで表示されることになります。
<field name="local" required="yes" />
<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">
で囲んでいません。
この例では、アイテムが自機関で生産されたものではない場合、それを注記したいとします。このフィールドを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 ); }
多言語をサポートしていない場合もこの方法を使用することができます。
フィールドを追加する場合、erase_archiveとcreate_tablesを実行しないと変更は反映されません。 フィールドを変更してテーブルを再構築しないとEPrintsは実行できません。
手っ取り早く言えば「追加法の逆」です。
metadata-types.xmlにイープリントのタイプを追加します。 いくつかのフィールドはおそらく「必須」のはずです。
このタイプの名前をフレーズファイルに追加します。
このタイプについてのサイテーションをサイテーションファイルに追加します。
metadata-types.xmlから削除します。
フレーズファイルとサイテーションファイルから削除することができます。しかし、そのままでも問題はありません。
metadata-types.xmlにドキュメントのタイプを追加します。フィールドは必要ありません。
このドキュメントタイプの名前をフレーズファイルに追加します。
このドキュメントタイプについてのサイテーションをサイテーションファイルに追加します。
このタイプを必須のドキュメントタイプの1つとしたい場合は、そのidをArchiveConfig.pmにあるリストに追加してください。
要約ページに何か「うまい方法」で表示したい場合は、ArchiveRenderConfig.pmファイルを編集してください。 そうでない場合は、PDFやHTMLなどと同様に、リスト上にそれを表示するためのサイテーションを作成して使用します。
英国オープンユニバーシティはアーカイブの各イープリント用に掲示板を作成するサービスを構築しました。
これを実行する実に簡単な方法は、オープンユニバーシティの掲示板サーバを使用することです。 自サイトでd3eサーバを稼動させたい場合は、ソフトウェアをhttp://d3e.sourceforge.net/からダウンロードすることができます。
単に次のコードを 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自身ではこの機能をサポートしていませんが、いくつかの実現法があります。
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>
他のサーチエンジンを使用する場合は、そのサーチエンジンのドキュメントを参照して、自サイトだけを検索するフォームの書き方を調べてください。
この方法はバージョン2.2の技術文書には載せるはずだったのですが、時間がありませんでした。software.eprints.orgにある最新版の技術文書をチェックしてください。 そこにもない場合は、support@eprints.orgで私をしかってください。
この方法はバージョン2.2の技術文書には載せるはずだったのですが、時間がありませんでした。software.eprints.orgにある最新版の技術文書をチェックしてください。 そこにもない場合は、support@eprints.orgで私をしかってください。
この方法はバージョン2.2の技術文書には載せるはずだったのですが、時間がありませんでした。software.eprints.orgにある最新版の技術文書をチェックしてください。 そこにもない場合は、support@eprints.orgで私をしかってください。
EPrints 2.3技術文書 - ハウツーガイド |