投稿用メタデータ入力ページのカスタマイズ

目次に戻る

はじめに

この節では、投稿者や編集者が新規アイテムのメタデータの入力や修正に使用するWebフォームのカスタマイズ法を説明します。

全てのコレクションが使用する「デフォルトの」メタデータ入力フォームをカスタマイズすることもできますし、デフォルトとは異なる組み合わせのメタデータ入力フォームを作成して、特定のコレクションに割り当てることもできます。メタデータ入力のカスタムフォームを作成する際には、次の項目を選択することができます。

注: メタデータ入力フィールドの見た目や操作性については、これまでにリリースされたDSpaceの変更できないメタデータ入力ページと同じで変わりはありません。これらを変更するには、該当するスタイルシートとJSPを変更しなければなりません。

DSpaceシステムの全てのメタデータ入力フォームは、DSpaceのホームディレクトリの下にあるconfigディレクトリにある1つのXMLファイル、input-forms.xmlにより管理されています。DSpaceには、従来のメタデータ入力フォームを実装するサンプル設定が添付されており、これはまたこのファイルに関する良い解説となっています。以下では、カスタムフォームの作成法について説明します。

メタデータ入力用カスタムフォームの説明

投稿者がメタデータを入力する一揃いのページを記述したものをフォームと呼びます(用語のHTML的な意味においては、実際は一揃いのフォームの集合です)。1つのフォームはユニークなシンボルである名前で識別されます。XML構造において、フォームは、一連のページに分解されます。各ページはメタデータ要素をまとめた独立のWebページを表します。

カスタマイズした投稿フォームを持つDSpaceコレクションを作成するには、まず、form-mapにエントリを作成します。これは事実上、コレクションとフォームセットを関連付ける表であり、コレクションのハンドルをフォーム名に結びつけます。コレクションはハンドルで識別されます。コレクション名は変更可能であり、必ずしもユニークではないが、ハンドルはユニークで永続的だからです。

コレクションハンドル "default" のための特別なマップエントリは、デフォルトのフォームセットを定義します。これは、マップにおいて明示的な記述がされていない全てのコレクションに適用されます。サンプルのXMLファイルでは、このフォームセットは(「従来の(traditional)」DSpaceユーザインターフェースを記述するので)traditionalと名づけられていますが、どのような名前でも構いません。

input-forms.xmlの構造

XML設定ファイルはただ1つのトップレベル要素input-formsを持ち、これには3つの要素が規定の順番で含まれます。概要は次の通りです。

<input-forms>

  <-- コレクションとフォームセットのマップ -->
  <form-map>
    <name-map collection-handle="default" form-name="traditional" />
    ...
  </form-map>

  <-- フォームセット定義 -->
  <form-definitions>
    <form name="traditional">
    ...
  </form-definitions>

  <-- 値選択ウィジェットで使用される名前/値の組 -->
  <form-value-pairs>
    <value-pairs value-pairs-name="common_iso_languages" dc-term="language_iso">
    ...
  </form-value-pairs>
</input-forms>

コレクションマップの追加

form-map内の各name-map要素は、コレクションをフォームセット名に関連付けます。 collection-handle属性はコレクションのハンドルです。form-name属性はフォームセット名であり、form要素のname属性と一致しなければなりません。

たとえば、以下の断片は、ハンドルが "12345.6789/42" であるコレクションを "TechRpt" フォームセットに関連付ける方法を示しています。

  <form-map>
    <name-map collection-handle="12345.6789/42" form-name="TechRpt" />
    ...
  </form-map>

  <form-definitions>
    <form name="TechRept">
    ...
  </form-definitions>

サンプルであるinput-forms.xmldefault name-mapの定義を残し、カスタムフォームセットを持たないコレクションのために常にデフォルトを用意しておくことは良い考えです。

コレクションハンドルの獲得

コレクションにカスタムフォームセットに割り当てるには、コレクションのハンドルが必要になります。ハンドルを発見するには、DSpaceのホームページの左側にあるメニューの「ブラウズ」の下にある「コミュニティ & コレクション」ページに行きます。そして、該当するコレクションのリンクを見つけます。それは次のような形のはずです。

    http://myhost.my.edu/dspace/handle/12345.6789/42

URLの下線部がハンドルです。DSpace管理者にはおなじみでしょう。これをname-map要素のcollection-handle属性に設定します。

フォームセットの追加

form-definitions要素に、新規にform要素を作成することで、新しいフォームセットを追加することができます。この要素は1つの属性nameを持ちます。上で見たように、この属性の値は使用するコレクションのname-mapの値と一致させなければなりません。

フォームとページ

form要素の内容は、page要素の並びです。各page要素はメタデータ要素を入力するWebフォームページに該当し、最初の「記述」ページから最後の「確認」ページ(収集した全てのメタデータの要約を表示する)まで順番に現れます。

formは少なくとも1ページ、最大で6ページ持つ必要があります。 各ページはXMLファイルに現れた順に表示されます。各page要素は、順序番号であるnumber属性を持たなければなりません。たとえば、次の通りです。

<page number="1">

さらに、page要素には、一連のfield要素が含まれます。各フィールドは、投稿者がダブリンコアメタデータの1アイテムを入力する対話式のダイアログ を定義します。

フィールドの構成

fieldには以下の要素が、この順に含まれます。 必須の要素はその旨、記載してあります。

dc-element (必須)
このフィールドに入力されるダブリンコア要素の名前、たとえば、contributor
dc-qualifier
このフィールドに入力されるダブリンコア要素の限定子、たとえば、フィールドがcontributor.advisorの場合、この要素の値はadvisorになる。これを省略すると、入力値は限定子なしのDC要素となる。
repeatable
このフィールドに複数の値の入力を許可する場合はtrue、それ以外は falseを指定する。フィールドを繰り返し可能にすると、UIサーブレットは追加の値を入力するためにフィールドをさらに作成するか否かをユーザに尋ねるコントロールを追加する。主題キーワードのように、事前にいくつ入力欄を提供したらよいか分からない、繰り返し回数が任意のフィールドに使用されることを意図している。
label (必須)
このフィールドに何を入力すべきかを記述したラベルとして表示するテキスト、たとえば、「指導教官名」。
input-type (必須)
ダブリンコア値を収集するフォームに適用する対話的ウィジェットの種類を定義する。値は以下のキーワードのいずれかでなければならない。
hint (必須)
入力フィールドの近くに入力指示や「ヒント」として表示されるテキストを指定する。空白でもかまわないが、そのまま表示される。
required
何らかの内容を持つこの要素が指定されると、このフィールドは必須入力フィールドとなる。ユーザがこのフィールドに入力しないままページを去ろうとすると、指定したテキストが警告メッセージとして表示される。たとえば、次の通り。
<required>タイトルは必ず入力しなければなりません。</required>

required要素の内容を空にすると、そのフィールドは必須にはならないことに注意。たとえば、次の通り。
<required></required>

この仕様言語を完全に理解するために、サンプルのinput-forms.xmlを見て、カスタムフォームの作成を試みてください。 データ入力フォームのレイアウトを表現する方法は非常に簡単ですが、その微妙な点を全て理解する唯一の方法は使ってみることです。

自動的に省略されるフィールド

カスタムフォームページが表示されると、投稿するアイテムの種類によって、いくつかのフィールドが自動的に省略されていることに気づくかもしれません。これは、DSpaceのユーザインターフェースエンジンが、アイテムについての最初の記述に従って不要なダブリンコアフィールドを省略しているからです。たとえば、ユーザが最初の「記述」ページ(いくつかのチェックボックスを持つページ)でその他のタイトルが存在しないことを指示すると、たとえ、カスタム投稿ページに指定していてもtitle.alternative DC要素の入力欄は自動的に省略されます。

ユーザが投稿を開始すると、DSpaceはまず「最初の質問ページ」と呼ばれるページを表示します。デフォルトでは、このページにはチェックボックスを持つ3つの質問が含まれています。

  1. アイテムには複数のタイトル(翻訳タイトルなど)がある
    title.alternativeフィールドを制御する。
  2. アイテムは出版済み、または公開済みである
    次のDCフィールドを制御する。
  3. アイテムは複数のファイルからなる
    メタデータ入力フィールドには影響を与えない。

たとえ該当するDCメタデータフィールドがカスタムページで定義されていたとしても、最初の2つの質問に対する回答によりその入力欄が表示されるかどうかが決定されます。

逆に、質問により制御されるメタデータフィールドがカスタムフォームで定義されていない場合は、ユーザの混乱や誤解を避けるために、該当する質問は記述ページに表示されません

これに該当する質問は、「アイテムには複数のタイトル(翻訳タイトルなど)がある」と「アイテムは出版済み、または公開済みである」です。前者の質問は、DC要素が「title」で、DC限定子が「alternative」であるフィールドの表示を左右します。コレクションのフォームセットの定義にこのフィールドが含まれていない場合は、「アイテムには複数のタイトル(翻訳タイトルなど)がある」という質問は、最初の質問ページには現れません。

Value-Pairsの追加

最後に、カスタムフォームの作成には、各フィールドの入力タイプが参照する「値ペア」を定義する必要があります。form-value-pairsvalue-pairs要素を追加することでこれを行います。この要素は、以下の必須の属性を持っています。

value-pairs要素は一連のpair子要素を持ちます。各pair子要素は次の2つの要素を持ちます。

HTMLのselectタグとは異なり、デフォルトの項目を指定する方法はありません。最初の項目が常にデフォルトの選択肢になります。

以下は、一般的な識別子タイプのメニューです。

   <value-pairs value-pairs-name="common_identifiers" dc-term="identifier">
     <pair>
       <displayed-value>政府刊行物番号</displayed-value>
       <stored-value>govdoc</stored-value>
     </pair>
     <pair>
       <displayed-value>URI</displayed-value>
       <stored-value>uri</stored-value>
     </pair>
     <pair>
       <displayed-value>ISBN</displayed-value>
       <stored-value>isbn</stored-value>
     </pair>
   </value-pairs>

これは次のHTMLを生成し、下のようなメニューウィジェットになります。(カスタムフォーム定義XMLにはデフォルトの選択肢を指定する方法がありませんので、ある選択肢を事前に選択されたデフォルト値として指定するHTMLのSELECTED属性を生成することはできないことに注意してください。)

<select name="identifier_qualifier_0">
<option VALUE="govdoc">政府刊行物番号</option>
<option VALUE="uri">URI</option>
<option VALUE="isbn">ISBN</option>
</select>
識別子:

カスタムフォームの配備

DSpace Webアプリケーションはカスタムフォーム定義を起動時にしか読み込みません。したがって、次のことを覚えておいてください。

input-forms.xmlファイルに加えた変更を有効にするためには、そのつど、Tomcat(あるいは、使用しているサーブレットコンテナ)をリスタートする必要がある

整形式でないXMLや存在しないフィールド名の参照など、フォーム定義の文法的誤りと意味論的誤りはDSpaceユーザインターフェースに致命的エラーを引き起こします。例外メッセージ(dspace.logファイルのスタックとレースの一番上にある)には、たいてい、何が間違っているかを示す簡潔で役立つ説明がなされています。バグの修正をテストする前にはサーブレットコンテナを終了させ、リスタートすることを忘れないでください。


Copyright © 2002-2005 MIT and Hewlett Packard