13. メタデータ収集のための OAI プロトコル

The Open Archives Initiative Protocol for Metadata Harvesting (OAI-PMH) は初め、1990年代後半に、分散型メタデータ/データリポジトリから メタデータを収集するための標準として開発された。 OAI-PMH 標準の現行バージョンは 2002年6月時点で 2.0 であり、 2008年12月に若干の改訂が行われた。

OAI-PMH 標準はトランスポート層として Hypertext Transport Protocol (HTTP) を使用し、 また 6個の問い合わせメソッド(規格では verb と呼ばれる)を 指定している。それらのメソッドは OAI-PMH 準拠のデータプロバイダ (規格ではリポジトリと呼ばれる)によってサポートされなければならない。 各メソッドは以下の通り。

  1. GetRecord – リポジトリから 0 または 1個の完全なメタデータレコードを取り出す
  2. Identify – リポジトリについての情報を取り出す
  3. ListIdentifiers – リポジトリから 0個以上のメタデータレコードの「ヘッダ」(完全なメタデータレコードでなく)を取り出す
  4. ListMetadataFormats – リポジトリがサポートしていて利用可能になっているメタデータレコードのフォーマットのリストを取り出す
  5. ListRecords – リポジトリから 0個以上の完全なメタデータレコードを取り出す
  6. ListSets – リポジトリからセット構造を取り出す

OAI-PMH 準拠のデータプロバイダは HTTP GET と HTTP POST の両方から 要求を受け取らなければならない。 データプロバイダからの応答は XMLエンコード(バージョン 1.0)のストリームとして 返されなければならない。 エラー処理はデータプロバイダがサポートしなければならず、ハーベスタに 正しいエラー応答コードを返さなければならない。 全 6個の verb について詳しい規定と例は OAI-PMH standards document の第4節に書かれている。

13.1. EML と Dublin Core

OAI-PMH は最低でも無修飾の Dublin Core メタデータのサポートを要求する。 EML は全般的に Dublin Core よりもきめ細かいメタデータを提供するが、 両者は同じ(または類似の)要素を多く共有している。 Metacat の OAI-PMH は EML を Dublin Core に変換し、「単純」で 「無修飾」の Dublin Core を生成する。その生成物は、 OAI-PMH において metadataPrefix シンボルとして予約されている oai_dc と結合される。

以下の表は Metacat の OAI-PMH によって実行される EML から Dublin Core への 要素の写像をまとめたものである。各要素の写像ごとに注意書きを付けてある。

EML 要素 DC 要素 注意書き
Title title  
Creator creator 作成者名 (givenName と surName 要素)を使用する。組織名であってもよい
keyword subject keyword 要素ごとにひとつの subject 要素
abstract description テキスト整形タグは展開されなければならない
publisher publisher 公開者名 (givenName と surName 要素)のみ使用する。組織名であってもよい
associatedParty contributor 関係者名 (givenName と surName) のみを使用する。組織名であってもよい
pubDate date 1対1 の写像
dataset, citation, protocol, software type type の値は、特定のフィールド値よりも EML 文書の種類によって来まる
physical format mime type を format の値として使う? たとえば、EML の <physical> 要素内に <textFormat> 要素がある場合、format の値として ‘text/plain’ を使う?
  1. packageId;
  2. URL to the EML document
identifier identifier 要素の値として packageId を使うことができる。 第2の identifier 要素として EML 文書の URL を使うことができる。
dataSource source 参照されているデータソースの文書 URL を使う?
Citation relation 参照されている引用文献の文書 URL を使用する?
geographicCoverage coverage 地理的説明および境界座標用にばらばらの coverage 要素を追加する。 境界座標については、ラベルは最小限にする。たとえば、 81.505000 W, 81.495000 W, 31.170000 N, 31.163000 N
taxonomicCoverage coverage 属名/種名の二名式学名のみ使用する。各学名ごとにばらばらの coverage 要素を使用する。
temporalCoverage coverage 利用可能な期間の初めの日付と終わりの日付を入れる。たとえば 1915-01-01 to 2004-12-31
intellectualRights rights テキスト整形タグは展開しなければならない。

Metacat OAI-PMH は、特定のバージョンの EML を等価な Dublin Core に 変換するための XSLT スタイルシートをひと揃い持っている。

13.2. Metacat OAI-PMH サービスのインタフェイス

Metacat は OAI-PMH サービスのインタフェイスを 2つサポートしている。 ひとつはデータプロバイダ(またはリポジトリ)であり、 もうひとつはハーベスタサービスのインタフェイスである。

13.2.1. データプロバイダ

Metacat の OAI-PMH データプロバイダサービスのインタフェイスは、 全6種の OAI-PMH メソッド (GetRecord, Identify, ListIdentifiers, ListMetadataFormats, ListRecords, ListSets) をサポートしている。これは OAI-PMH バージョン2 の仕様書に定義されている 通りのもので、標準の HTTP URL を通して HTTP GET と HTTP POST 要求を 受け付ける。

Metacat の OAI-PMH データプロバイダサービスは、 Online Computer Library Center (OCLC) OAICat Open Source Software を基本実装として使用し、それに Metacat との統合を容易にするための 調整を加えて実装していた。

Metacat の OAI-PMH データプロバイダの利用者は、以下の問題に注意する べきである。

  • ‘Deleted’ 状態 - OAI-PMH リポジトリはレコードに ‘deleted’ 状態の 印をつけることができる。これは、metadataPrefix によって指定された メタデータフォーマットにおけるレコードがもはや利用可能ではない、 ということを示すものである。 Metacat は削除された文書のリストを取り出すためのメカニズムを提供して いないので、OAI-PMH データプロバイダのこの実装においては、 ‘deleted’ 状態の使用はサポートされていない。 将来的には改善される見込みである。
  • Sets – OAI-PMH リポジトリは set 階層をサポートしていない。 set 階層が Metacat の中でどのように構造化されるべきかという点は 明らかではないので、OAI-PMH リポジトリのこの実装では set 階層はサポートされない。将来的には改善される見込みである。
  • 日付の粒度 - リポジトリの文書に対して日付表現する時、 OAI-PMH は 2つの水準の粒度を認めている。日の粒度と秒の粒度である。 Metacat データベースは xml_documents.date_updated 欄に 日の粒度で値を格納するので、 Metacat の OAI-PMH データプロバイダによってサポートされるのは 日粒度の水準である。

13.2.2. Metacat の OAI-PMH ハーベスタ

Metacat の OAI-PMH ハーベスタサービスのインタフェイスは、 OAI-PMH メソッドを利用して OAI-PMH 互換のデータプロバイダに メタデータや関連する情報を要求する。それには HTTP-GET または HTTP-POST 要求のどちらかの形式で 標準の HTTP URL を使用する。

Metacat の OAI-PMH ハーベスタクライアントは OCLC の OAIHarvester2 オープンソースコードを基本実装とし、 Metacat との統合をサポートするのに必要な調整を加えて使用している。

Metacat の OAI-PMH ハーベスタの利用者は、以下の問題に 注意するべきである。

  • ‘deleted’ 状態の扱い - Metacat の OAI-PMH ハーベスタプログラムは 収集した文書に ‘deleted’ 状態の印があるかどうかを調べる。 もしそうであれば、それに対応して Metacat リポジトリからその文書を 削除する。
  • 日付の粒度 - リポジトリの文書に対して日付表現する時、 OAI-PMH は 2つの水準の粒度を認めている。日の粒度と秒の粒度である。 Metacat データベースは xml_documents.date_updated 欄に 日の粒度で値を格納するので、Metacat の OAI-PMH データプロバイダ および OAI-PMH ハーベスタの両方において日粒度のレベルが サポートされる。 このことは、Metacat の OAI-PMH ハーベスタ (MOH) が Dryad リポジトリのような秒の粒度で文書を格納するデータプロバイダと 相互作用する時に影響がある。たとえば、以下のような順序で 事件が起こることが考えられる。
    1. 2010年1月1日に、MOH は Dryad リポジトリから ‘2010-01-01T10:00:00Z’ という日付のついて文書を収集し、 それに ‘2010-01-01’ という日付をつけて保管した。
    2. 同じ日のうちに、 Dryad リポジトリはその文書を新しいリビジョンに 更新し、‘2010-01-01T20:00:0Z’ のような新しい日時が付けられる。
    3. 翌日、MOH は収集作業を実行する。MOH は、‘2010-01-01’ という 日付の文書を持っているので、その文書を再収集しない、と決定する。 がしかし、実際はその文書は最新リビジョンではない。

13.3. Metacat OAI-PMH を設定して実行する

13.3.1. Metacat OAI-PMH データプロバイダサーブレット

このデータプロバイダサーブレットを設定して有効化するには、

  1. Tomcat を停止し、Tomcat のアプリケーションディレクトリ内にある Metacat コンテクストディレクトリの Metacat プロパティファイル (metacat.properties) を編集する。 Metacat コンテクストディレクトリはそのアプリケーションの名前である (たいていは knb )。

    <tomcat_app_dir>/<context_dir>/WEB-INF/metacat.properties
    
  2. 以下のプロバティを適切に変更する。

    ``oaipmh.repositoryIdentifier`` – A string that identifies this repository
    ``Identify.adminEmail`` – The email address of the repository administrator
    
  3. 配置記述ファイル (web.xml) を編集する。これも WEB-INF ディレクトリ内に ある。DataProvider サーブレットの servlet-name と servlet-mapping の項目がコメントでなくなるように周囲の “<!–“ と “–>” という文字列を 削除する。

    <servlet>
      <servlet-name>DataProvider</servlet-name>
      <description>Processes OAI verbs for Metacat OAI-PMH Data Provider (MODP)</description>
      <servlet-class>edu.ucsb.nceas.metacat.oaipmh.provider.server.OAIHandler</servlet-class>
      <load-on-startup>4</load-on-startup>
    </servlet>
    <servlet-mapping>
      <servlet-name>DataProvider</servlet-name>
      <url-pattern>/dataProvider</url-pattern>
    </servlet-mapping>
    
  4. metacat.propertiesweb.xml ファイルを保存して Tomcat を起動する。

以下の表は、DataProvider サーブレットで使用される metacat.properties の設定のすべてを記述したものである。

プロバティ名 説明
oaipmh.maxListSize 5 ListIdentifiers と ListRecords メソッドの呼び出しで返されるレコードの最大数
oaipmh.repositoryIdentifier metacat.lternet.edu このリポジトリを識別するための文字列
AbstractCatalog.oaiCatalogClassName edu.ucsb.nceas.metacat.oaipmh.provider.server.catalog.MetacatCatalog AbstractCatalog インタフェイスを実装した Java クラス。 このクラスはリポジトリ内にどのレコードが存在するか、その日付はいつかを調べる。
AbstractCatalog.recordFactoryClassName edu.ucsb.nceas.metacat.oaipmh.provider.server.catalog.MetacatRecordFactory RecordFactory クラスを拡張した Java クラス。このクラスは OAI-PMH メタデータレコードを作成する。
AbstractCatalog.secondsToLive 3600 resumptionToken の生存時間(秒単位)。
AbstractCatalog.granularity YYYY-MM-DD or YYYY-MM-DDThh:mm:ssZ 日付記録の粒度。‘days granularity’ または ‘seconds granularity’ を使用出来る。
Identify.repositoryName Metacat OAI-PMH Data Provider このリポジトリの名前。
Identify.earliestDatestamp 2000-01-01T00:00:00Z このリポジトリでサポートている最も古い日付記録
Identify.deletedRecord yes or no このリポジトリが削除済みのレコードの状態を知らせる場合は ‘yes’ 、そうでなければ ‘no’
Identify.adminEmail mailto:tech_support@someplace.org このリポジトリの管理者のメールアドレス
Crosswalks.oai_dc edu.ucsb.nceas.metacat.oaipmh.provider.server.crosswalk.Eml2oai_dc EML 2.x.y から oai_dc (Dublin Core) への変換を制御する Java クラス。
Crosswalks.eml2.0.0 edu.ucsb.nceas.metacat.oaipmh.provider.server.crosswalk.Eml200 EML 2.0.0 メタデータを供給する Java クラス。
Crosswalks.eml2.0.1 edu.ucsb.nceas.metacat.oaipmh.provider.server.crosswalk.Eml201 EML 2.0.1 メタデータを供給する Java クラス。
Crosswalks.eml2.1.0 edu.ucsb.nceas.metacat.oaipmh.provider.server.crosswalk.Eml210 EML 2.1.0 メタデータを供給する Java クラス。

13.3.1.1. URL の例

Metacat OAI-PMH Data Provider の使い方を示した URL の例を以下に示す。

OAI-PMH Verb 説明 URL
GetRecord LSID 識別子を使って EML 2.0.1 レコードを得る http://<your_context_url>/dataProvider?verb=GetRecord&metadataPrefix=eml-2.0.1&identifier=urn:lsid:knb.ecoinformatics.org:knb-ltergce:26
GetRecord LSID 識別子を使って oai_dc (Dublin Core) レコードを得る http://<your_context_url>/dataProvider?verb=GetRecord&metadataPrefix=oai_dc&identifier=urn:lsid:knb.ecoinformatics.org:knb-lter-gce:26
Identify このデータプロバイダを識別する http://<your_context_url>/dataProvider?verb=Identify
ListIdentifiers このリポジトリにある全 EML 2.1.0 識別子のリストを得る http://<your_context_url>/dataProvider?verb=ListIdentifiers&metadataPrefix=eml-2.1.0
ListIdentifiers このリポジトリである日付の範囲にある oai_dc (Dublin Core) 識別子をすべてリストする http://<your_context_url>/dataProvider?verb=ListIdentifiers&metadataPrefix=oai_dc&from=2006-01-01&until=2010-01-01
ListMetadataFormats このリポジトリでサポートされているメタデータフォーマットの 一覧 http://<your_context_url>/dataProvider?verb=ListMetadataFormats
ListRecords このリポジトリにある全 EML 2.0.0 レコードのリスト http://<your_context_url>/dataProvider?verb=ListRecords&metadataPrefix=eml-2.0.0
ListRecords このリポジトリにある全 oai_dc (Dublin Core) レコードのリスト http://<your_context_url>/dataProvider?verb=ListRecords&metadataPrefix=oai_dc
ListSets このリポジトリでサポートされている set のリスト http://<your_context_url>/dataProvider?verb=ListSets

13.3.2. Metacat OAI-PMH ハーベスタ

Metacat OAI-PMH Harvester (MOH) はコマンドラインプログラムとして 実行される。:

sh runHarvester.sh -dn <distinguishedName> \
                   -password <password> \
                   -metadataPrefix <prefix> \
                   [-from <fromDate>] \
                   [-until <untilDate>] \
                   [-setSpec <setName>] \
                   <baseURL>

以下の例では、コマンドラインから Metacat OAI-PMH ハーベスタを実行する 方法を説明している。

  1. システムコマンドウィンドウまたはターミナルウィンドウを開く。

  2. METACAT_HOME 環境変数に Metacat のインストールディレクトリを設定する。 以下に例を示す。

    Windows では:

    set METACAT_HOME=C:\somePath\metacat
    

    Linux/Unix (bash shell) では:

    export METACAT_HOME=/home/somePath/metacat
    
  3. 以下のディレクトリに移動する。

    Windows では:

    cd %METACAT_HOME%\lib\oaipmh
    

    Linux/Unix では:

    cd $METACAT_HOME/lib/oaipmh
    
  4. OS に応じて適切な Metacat OAI-PMH ハーベスタのシェルスクリプトを 実行する。

    Windows では:

    runHarvester.bat \
        -dn uid=jdoe,o=myorg,dc=ecoinformatics,dc=org \
        -password some_password \
        -metadataPrefix oai_dc \
        http://baseurl.repository.org/metacat/dataProvider
    

    Linux/Unix では:

    sh runHarvester.sh \
        -dn uid=jdoe,o=myorg,dc=ecoinformatics,dc=org \
        -password some_password \
        -metadataPrefix oai_dc \
        http://baseurl.repository.org/metacat/dataProvider
    

以下の表でコマンドラインオプションとパラメータを説明する。

オプションまたはパラメータ 説明
-dn -dn uid=dryad,o=LTER,dc=ecoinformatics,dc=org 収集した文書をMetacatに投入する時に使用する LDAP アカウントの完全な識別名(必須)
-password -password some_password 収集した文書をMetacatに投入する時に使用する LDAP アカウントのパスワード(必須)
-metadataPrefix -metadataPrefix oai_dc 外部リポジトリから収集する文書の種類(必須)
-from -from 2000-01-01 収集する文書の日付の下限(任意)
-until -until 2010-12-31 収集する文書の日付の上限(任意)
-setSpec -setSpec someSet この set に属している文書を収集する(任意)
base_url http://baseurl.repository.org/knb/dataProvider 外部リポジトリの基本URL

13.4. OAI-PMH エラーコード

エラーコード 説明 適用される Verbs
badArgument 要求に不正な引数が入っていた、必須の引数が無い、引数が重複していた、 または引数の値が不正な文法である。 すべて
badResumptionToken resumptionToken 引数の値が不正であるか、期限切れである。 ListIdentifiers ListRecords ListSets
badVerb verb 引数の値が正規の OAI-PMH verb ではない、verb 引数が無い、 または verb 引数が重複している。 なし
cannotDisseminateFormat metadataPrefix 引数に指定されたメタデータフォーマットが、文書もしくは リポジトリがサポートしていない。 GetRecord ListIdentifiers ListRecords
idDoesNotExist identifier 引数の値がこのリポジトリでは未知であるか不正である。 GetRecord ListMetadataFormats
noRecordsMatch from, until, set, metadataPrefix 引数の値を組み合わせた結果 空のリストになった ListIdentifiers ListRecords
noMetadataFormats 指定された文書には利用可能なメタデータフォーマットがない ListMetadataFormats
noSetHierarchy このリポジトリは set をサポートしていない ListSets ListIdentifiers ListRecords