この節では、投稿者や編集者が新規アイテムのメタデータの入力や修正に使用する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.xml
のdefault
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
(必須)subject
要素のように繰り返し可能な値を持つ要素に使用する。value-pairs-name
属性値も持たねばならない。language
要素のように、限られた選択肢から選択させる要素に使用するidentifier
フィールドに、投稿アイテムのその他の識別子やコードなどを入力するために使用する。注: dropdown
タイプ同様、メニューの選択肢リストを指定するvalue-pairs-name
属性を持たねばならない。hint
(必須)required
<required>タイトルは必ず入力しなければなりません。</required>
required
要素の内容を空にすると、そのフィールドは必須にはならないことに注意。たとえば、次の通り。<required></required>
この仕様言語を完全に理解するために、サンプルのinput-forms.xml
を見て、カスタムフォームの作成を試みてください。 データ入力フォームのレイアウトを表現する方法は非常に簡単ですが、その微妙な点を全て理解する唯一の方法は使ってみることです。
カスタムフォームページが表示されると、投稿するアイテムの種類によって、いくつかのフィールドが自動的に省略されていることに気づくかもしれません。これは、DSpaceのユーザインターフェースエンジンが、アイテムについての最初の記述に従って不要なダブリンコアフィールドを省略しているからです。たとえば、ユーザが最初の「記述」ページ(いくつかのチェックボックスを持つページ)でその他のタイトルが存在しないことを指示すると、たとえ、カスタム投稿ページに指定していても、title.alternative
DC要素の入力欄は自動的に省略されます。
ユーザが投稿を開始すると、DSpaceはまず「最初の質問ページ」と呼ばれるページを表示します。デフォルトでは、このページにはチェックボックスを持つ3つの質問が含まれています。
title.alternative
フィールドを制御する。date.issued
publisher
identifier.citation
たとえ該当するDCメタデータフィールドがカスタムページで定義されていたとしても、最初の2つの質問に対する回答によりその入力欄が表示されるかどうかが決定されます。
逆に、質問により制御されるメタデータフィールドがカスタムフォームで定義されていない場合は、ユーザの混乱や誤解を避けるために、該当する質問は記述ページに表示されません
これに該当する質問は、「アイテムには複数のタイトル(翻訳タイトルなど)がある」と「アイテムは出版済み、または公開済みである」です。前者の質問は、DC要素が「title」で、DC限定子が「alternative」であるフィールドの表示を左右します。コレクションのフォームセットの定義にこのフィールドが含まれていない場合は、「アイテムには複数のタイトル(翻訳タイトルなど)がある」という質問は、最初の質問ページには現れません。
Value-Pairs
の追加最後に、カスタムフォームの作成には、各フィールドの入力タイプが参照する「値ペア」を定義する必要があります。form-value-pairs
にvalue-pairs
要素を追加することでこれを行います。この要素は、以下の必須の属性を持っています。
value-pairs-name
-- input-type
がこのリストを参照する際の名前。dc-term
-- この選択リストが値を選択している限定子付きのダブリンコアフィールド。各value-pairs
要素は一連のpair
子要素を持ちます。各pair
子要素は次の2つの要素を持ちます。
displayed-value
-- (Webページ上の)メニュー項目として表示される名前。stored-value
-- この項目が選択された際にDC要素に格納される値。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
ファイルのスタックとレースの一番上にある)には、たいてい、何が間違っているかを示す簡潔で役立つ説明がなされています。バグの修正をテストする前にはサーブレットコンテナを終了させ、リスタートすることを忘れないでください。