7. メタデータとデータへのアクセスとその登録

Metacat リポジトリは幾つかのツールを使ってアクセスしたり 更新したりできる。そのツールには以下のようなものがある。

  • Registry (Metacat に付属のウェブインタフェイス)
  • ユーザが作成した HTML フォーム
  • Metacat の EarthGrid API
  • 科学者がメタデータを作成・編集・管理できるように設計された 既存のクライアント。たとえば KNB の Morpho アプリケーション
  • Metacat の Java API を利用した、ユーザ作成のデスクトップクライアント

この節では、これらのツールを利用して、利用者たちのために Metacat を調整する方法について説明する。

7.1. どのようにして情報を格納するのか、簡単な説明

Metacat は XML ファイルを階層化されたノードの集合として格納する。 個々のノードはデータベーステーブルのレコードとして格納される。 多くの XML データシェーマが複数の DTD に分割されており、 そのため関連する複数の XML ファイルがシステム上でばらばらに 格納されることになるので、 システムは、関連しているのにバラバラになってしまっている文書を 繋ぎ合わせるのに “packages” というものを使用する。 パッケージ化された文書は互いにどのように関連しているのかを 表す情報を持っていて、それは本質的には「ファイル A は ファイル B に関連している」という宣言である。 パッケージファイルはまたメタデータを対象のデータと結び付けることを 可能にする。データパッケージの構造、および XML 文書とデータが どのように Metacat に格納されるかについてより詳しくは、 開発者用の文書を参照すること。

7.2. Registry を使用する

Metacat に付属の Registry は、メタデータを作成し、編集し、 Metacat リポジトリに登録するための単純なウェブインタフェイスである (下にスクリーンショットを示す)。 このインタフェイスはヘルプ文書を備えており、Metacat の設定によって 調整することができる。Registry は LDAP ユーザアカウントを管理するための 管理者用インタフェイスも持っており、Metacat の認証システムとして LDAP を使用している場合は有用である。 もし独自の LDAP サーバを持っていない場合は、KNB のウェブサイト上 (http://knb.ecoinformatics.org/) に 新しいアカウントを作成し管理することができる。 なお現時点では、Registry インタフェイスは Linux システム上でしか テストしていないので注意すること。

_images/image033.jpg

Register ウェブインタフェイスの例。スキン設定によってモジュールの 表示や必須設定を調整する。

スキン設定を用いて、どのモジュール(たとえば “Name of Submitter” や “Temporal Coverage of Data”)を表示するか、 どれを必須項目にするか、を調整することができる。

7.2.1. Registry のインストール

Registry をインストールして実行するには、Metacat をインストールし、 Tomcat を Apache ウェブサーバの背後で動かす必要がある (Apahce のインストールと Tomcat と一緒に動かす設定については 前章を参照すること)。

Registry をインストールして実行するには、

  1. Metacat の Perl クライアントライブラリをビルドする。
cd $METACAT/src/perl/Metacat
perl Makefile.PL
sudo make
sudo make install
  1. Ubuntu/Debian を使って必要なシステムライブラリをインストールする (Red Hat の場合はサイドバーで説明している)
  • ライブラリをインストールする

    sudo apt-get install ant libappconfig-perl libxml-libxml-perl \
    libxml-libxslt-perl libtemplate-perl libcgi-session-perl \
    libdigest-sha1-perl libnet-ldap-perl libterm-readkey-perl \
    libxml-dom-perl libsoap-lite-perl -y
    
  • cpan を使ってさらに 2つパッケージをインストールする

    sudo cpan -i Config::Properties
    sudo cpan -i Scalar::Util
    sudo cpan -i Captcha:reCAPTCHA
    sudo cpan -i DateTime
    
  1. Metacat の一時的フォルダ (application.tempDir) が apache の 実行ユーザ(たいていは www-data か apache) から 書き込み可能になっているかどうかよく確認する。
  2. 以下のスクリプトが実行可能になっているかどうか確認する。 (スクリプトは <tomcat-home>/webapps/metacat/cgi-bin にある) register-dataset.cgi および ldapweb.cgi。
sudo chmod +x <tomcat-home>/webapps/metacat/cgi-bin/*.cgi
  1. Apache を再起動する。
sudo /etc/init.d/apache2 restart
  1. 出来上がった URL を閲覧する。 http://<your_context_url>/cgi-bin/register-dataset.cgi?cfg=default ここで <your_context_url> は Metacat を動かしているサーバの URL に インストールしたWAR ファイルの名前 (すなわちアプリケーションのコンテクスト)を 繋げたものである。たとえば、KNB の Metacat のコンテクスト URL は http://knb.ecoinformatics.org/knb である。

すべてが正しく行われていたら、registry のホームページが開くだろう (図を参照)。

_images/image035.jpg

Registry ホームページの例(デフォルトスキン)

7.2.2. Registry の調整

registry を使う前に、スキン設定を使ってインタフェイスを調整したいと 思うかもしれない。default スキンを使用しているなら、 フォームを送信する前に ‘show site list’ 設定を無効にしなければならない。 また、初期状態では registry に表示されるようになっている NCEAS-specific のリストを除去(または修正)したいと思うかも知れない。 これらの入力欄を取り除くには、Metacat の管理インタフェイス (http://<your.context.url>/metacat/admin) を開き、 Skins Specific Properties Configuration を選ぶ。 そしてスキン設定ページで、registry に表示したくない項目の横にある ボックスのチェックを外すこと。

変更を保存したら、変更を反映するために Tomcat を再起動する。 そうするには、 sudo /etc/init.d/tomcat6 restart と入力するか、 OS に合わせて同等のコマンドを実行する。

_images/image037.jpg

Registry のフォームから取り除きたい項目の横にあるボックスの チェックを外すこと。この例では、 “Show Site List” と “Show Work Group” の入力欄 (これは Registry フォーム上の “Station Name” と “NCEAS Project” のドロップダウンリストに対応する) が取り除かれる。

7.2.3. LDAP アカウント管理

Metacat 内蔵の LDAP アカウント管理機能を使用したい場合は、 reCaptcha ウィジェット用の公開鍵/秘密鍵が必要になる。

  1. 自分の Google アカウントを使って Google から recaptcha の 秘密鍵/公開鍵を入手する。

    https://www.google.com/recaptcha/admin/create

  2. Metacat がその鍵を使用するように metacat.properties を設定する。

ldap.recaptcha.publickey=<your public key>
ldap.recaptcha.privatekey=<your private key>
  1. Tomcat を再起動する

7.3. HTML フォームを使う (HTTP インタフェイス)

Metacat の HTTP インタフェイスは Get および Post リクエストに対応しており、 情報の取り出しや格納を容易にするさまざまな操作ができる(表 4.1)。 HTTP リクエストは ウェブの HTTP プロトコル通信ができるクライアントならば 送信することができる。

  • 対応している操作 (API)
  • ログイン
  • XML 文書およびデータの登録、更新、削除
  • Metacat を検索する
  • 検索結果をページ分割する
  • データとメタデータを読み込む

7.3.1. 対応している操作

Metacat は get および post リクエストに対応しており、 XML を書き込んだり検索したり読み出したりである。 加えて、この HTTP インタフェイスには XML 文書を検証したり変換する機能が 含まれている(表を参照)。

なお、リプリケーションが有効になっていると、 Metacat は 表4.2 にある追加の操作を理解する。リプリケーションについて より詳しくは、 リプリケーション を参照のこと。

操作 説明およびパラメータ
delete

データベースから指定された文書を削除する。 「XML 文書およびデータの登録、更新、削除」に 例を示す。

docid - 削除したい文書の docid

export

データパッケージを zip ファイル形式でエクスポートする。

docid - エクスポートしたい文書の docid

getaccesscontrol

指定した文書のアクセス制御リスト (ACL) を得る。

docid - ACL を得たい文書の docid

getalldocids

システムに登録されている全 docid のリストを取り出す。

scope - SQL の LIKE 文 において docid の範囲照合に使う文字列

getdataguide (非推奨)これの代わりに getdtdschema を使え

指定された文書型用のデータガイドを読み出す

doctype - データガイドを得たい doctype

getdoctypes この Metacat システムで現在利用可能な全 doctypes を得る。パラメータ無し。
getdtdschema

指定された doctype に対する DTD または XMLSchema を読み出す

doctype - DTD または XMLSchema ファイルを読み出したい doctype

getlastdocid

スコープが使用した最後の docid (リビジョン番号含む)を得る

scope - 問われるべきスコープ

getlog

このシステムで生じたイベントのレポートを得る

ipaddress - イベントに対する IP アドレス principal - イベントに対する人物情報(ユーザ名など) docid - イベントが適用された文書の識別子 event - イベントの文字列コード start - 検索対象の開始日時 end - 検索対象の終了日時

getloggedinuserinfo 現在ログイン中のユーザの情報をえる。パラメータなし。
getpricipals 現在の認証シェーマにおける全ユーザ・グループを得る。パラメータなし。
getrevisionanddoctype

文書のリビジョン番号と文書型を返す。 出力は “rev;doctype” のような文字列である。

docid - 文書の docid

getversion Metacat のバージョンを得る。 Metacat の現在のバージョンを XML で返す。パラメータなし。
insert

XML 文書をデータベースに新規登録する。 「XML 文書およびデータの登録、更新、削除」に 例を示す。

docid - 新しい XML 文書に割り当てるためにユーザが指定した docid doctext - 新規登録する XML 文書の内容

insertmultipart

マルチパートエンコーディングを用いて XML 文書をデータベースに新規登録する

docid - 新しい XML 文書に割り当てるためにユーザが指定した docid doctext - 新規登録するための XML 文書

isregistered
個々の文書が xml_documents テーブルまたは xml_revisions テーブルに存在するかどうか確認する。
Metacat のデータベースシェーマについてより詳しくは開発者向け文書を見よ。

docid - 文書の docid

login

そのユーザでログインする。 これらの操作の多くを実行する前にはログインするしなければならない。 ログインの例については「ログイン」を見よ。

username - ユーザのログイン名 password - ユーザのパスワード

logout 現在のユーザをログアウトして、関連するセッションを破棄する。パラメータなし。
query

フリーテキスト検索を実行する。 「Metacat の検索」に例を示す。

returndoctype - Package View に用いる文書型(訳註・ eml://ecoinformatics.org/eml-2.1.0 等?)。パッケージについて詳しくは http://knb.ecoinformatics.org/software/metacat/packages.html を参照のこと。(訳註・リンク切れ) qformat - 返される result set のフォーマット。指定可能な値は html 、 xml または Metacat のスキン名。 querytitle - (任意)検索のタイトル doctype - (任意) doctype が指定された場合、検索は指定された doctype にのみ限定される(たとえば eml://ecoinformatics.org/eml-2.0.1 や eml://ecoinformatics.org/eml-2.0.0)。doctype が指定されなければすべての文書型が返される。 returnfield - 検索結果として返される欄 operator - 検索に適用される論理型の演算子。指定可能な値は union または intersect searchmode - 実行する検索の種類。指定可能な値は、contains, starts-with, ends-with, equals, isnot-equal, greater-than, less-than, greater-than-equals, less-than-equals. anyfield - フリーテキスト検索の変数。このパラメータに設定された値はどの文書のどのノードであっても検索される。 pagesize – 個々の検索結果ページに表示する検索結果の個数(たとえば 10)。pagestart と同時に使用する。4.3.4 節に例を示す。 pagestart – 表示する検索結果ページ(たとえば 1 )。pagesize と同時に使用する。4.3.4 節に例を示す。

read

データベースから文書を取り出し、 指定されたフォーマットで返す。「Metacat の検索」に例を示す。

docid - 返すべき文書の docid qformat - 文書を返すのに使うフォーマット。指定可能な値は html, xml, または(Metacat でスキンを使っている場合は)スキン名。

readinlinedata

インラインデータのみを読み出す。

inlinedataid - 読み出すインラインデータの id

setaccess

指定した文書に対するユーザのアクセス権限を変更する

docid - 修正する文書の docid principal - 権限を修正するユーザまたはグループ permission - 設定する権限 (read, write, all) permType - 設定する権限の種類 (allow, deny) permOrder - 権限の適用順序 (allowFirst, denyFirst)

spatial_query

空間検索を実行する。この検索には WFS / WMS 標準でサポートされているあらゆる検索が含まれるだろう。 より詳しくは、「空間検索」を参照せよ。

xmax - x 座標の最大値 ymax - y 座標の最大値 xmin - x 座標の最小値 ymin - y 座標の最小値

squery

構造化検索を実行する。 「Metacat を検索する」に例を示す。

query - サーバに送信する pathquery 文書のテキスト qformat - 文書を返すのに使うフォーマット。指定可能な値は xml, またはスキン名。

update

XML 文書を新しいもので上書きし、それに同じ docid (ただしリビジョン番号を増やしたもの)を与える。 「XML 文書およびデータの登録、更新、削除」に 例を示す。

docid - 更新する文書の docid doctext - XML 文書の更新に用いるテキスト

upload

Metacat にデータファイルをアップロードする(新規登録または更新)。 データファイルは Metacat に格納され、何らかのフォーマットになっているだろうが(バイナリまたはテキスト)、 それらはすべてバイナリとして扱われる。

docid - アップロードするデータファイルの docid datafile - アップロードするデータファイル

validate

指定した文書の DTD に対する妥当性を検証する

docid - 検証する文書の docid valtext - 文書の妥当性検証に用いる DTD

Metacat のリプリケーション用パラメータ

操作 説明とパラメータ
forcereplicate

リモートホストから指定した文書を取得するようにローカルサーバに強制する。

server - 文書の送信先サーバ docid - 送信する文書の docid dbaction - 文書に対して実行される操作 insert または update (指定しない時は後者)

getall 文書を更新するするために既知のサーバすべてを調べるようにローカルサーバに強制する。パラメータなし。
getcatalog xml_catalog テーブルの内容を XML にエンコードして送信する。パラメータなし。
getlock

指定した文書のロックを要求する。

docid - 文書の docid updaterev - docid のリビジョン番号

gettime このサーバのローカルタイムを返す。パラメータなし。
servercontrol

リプリケーションデーモン上で指定されたリプリケーション制御を実行する。

add - リプリケーションリストに新しいサーバを追加する delete - リプリケーションリストからサーバを削除する list - 現在サーバリストにある全サーバをリストする replicate - 新しく追加したサーバからファイルをコピーするべきかどうかを決める論理フラグ (1 または 0) server - 追加するサーバまたは削除するサーバ

read

リモートホストに docid を送信する

docid - 読み出すべき文書の docid

start

一定の時間間隔を指定してリプリケーションデーモンを起動する

rate - リプリケーションデーモンに文書の更新を調べさせる間隔(秒で指定)。30以下の値は指定できない。指定しない場合は 1000

stop リプリケーションデーモンを停止する。パラメータなし。
update ローカルサーバ上の全文書をリビジョン番号を添えて送信する。パラメータなし。

7.3.2. ログイン

Metacat にログインするには、 login 操作を実行する。

下に、Metacat にログインするウェブフォーム(図を参照)の例を示す。 HTML コードの例はスクリーンショットの下にある。

_images/image039.jpg

HTML フォームを使って Metacat にログインする

<html>
<body>
<form name="loginform" method="post"action="http://yourserver.com/yourcontext/servlet/metacat"
target="_top" onsubmit="return submitform(this);" id="loginform">
  <input type="hidden" name="action" value="login"> <input type=
  "hidden" name="username" value=""> <input type="hidden" name=
  "qformat" value="xml"> <input type="hidden" name=
  "enableediting" value="false">

  <table>
    <tr valign="middle">
      <td align="left" valign="middle" class="text_plain">
      username:</td>

      <td width="173" align="left" class="text_plain" style=
      "padding-top: 2px; padding-bottom: 2px;"><input name="uid"
      type="text" style="width: 140px;" value=""></td>
    </tr>

    <tr valign="middle">
      <td height="28" align="left" valign="middle" class=
      "text_plain">organization:</td>

      <td align="left" class="text_plain" style=
      "padding-top: 2px; padding-bottom: 2px;"><select name=
      "organization" style="width:140px;">
        <option value=""    selected>&#8212; choose one &#8212;</option>
        <option value="NCEAS">NCEAS</option>
        <option value="LTER">LTER</option>
        <option value="UCNRS">UCNRS</option>
        <option value="PISCO">PISCO</option>
        <option value="OBFS">OBFS</option>
        <option value="OSUBS">OSUBS</option>
        <option value="SAEON">SAEON</option>
        <option value="SANParks">SANParks</option>
        <option value="SDSC">SDSC</option>
        <option value="KU">KU</option>
        <option value="unaffiliated">unaffiliated</option>
      </select></td>
    </tr>

    <tr valign="middle">
      <td width="85" align="left" valign="middle" class=
      "text_plain">password:</td>

      <td colspan="2" align="left" class="text_plain" style=
      "padding-top: 2px; padding-bottom: 2px;">
        <table width="100%" border="0" cellpadding="0"
        cellspacing="0">
          <tr>
            <td width="150" align="left"><input name="password"
            type="password" maxlength="50" style="width:140px;"
            value=""></td>

            <td align="center" class="buttonBG_login">
            <input type="submit" name="loginAction" value="Login"
            class="button_login"></td>

            <td align="left">&nbsp;</td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
</form>
</body>
</html>

7.3.3. XML文書とデータの新規登録・更新・削除

Metacat 上で XML 文書を新規追加・更新・削除するには それぞれ insert, update, delete 操作を実行する。 それらの操作をする前に Metacat にログインしなければならない。 「ログイン」に例を示す。

insert
Metacat に新しい XML 文書またはデータを登録する。文書 ID を指定しなければ ならない。
update
既存の Metacat の文書を更新する。元の文書はアーカイブされ、それから 上書きされる。
delete
文書をアーカイブし、xml_documents 内のポインタを xml_revisions に 移動し、そのドキュメントを公開範囲から実効的に「削除」する。 しかしリビジョン履歴にそのリビジョンは保存されたままである。 「削除」された文書に対してはもはや更新は許可されない。 この識別子の全リビジョンはもはや公開されない。

Warning

ある識別子の全リビジョンではなく、そのうちのひとつのリビジョンだけ 「削除」することはできない。

以下は、3種類の作業すべてを実行できるウェブフォームのサンプルである (図を参照)。HTML コードの例はサイドバーに記した。

_images/image041.jpg

Metacat 上で XML 文書を登録、削除、更新するためのウェブフォームの例。

<html>
  <head>
  <title>MetaCat</title>
  </head>
  <body class="emlbody">
  <b>MetaCat XML Loader</b>
  <p>
  Upload, Change, or Delete an XML document using this form.
  </p>
  <form action="http://yourserver.com/yourcontext/servlet/metacat" method="POST">
    <strong>1. Choose an action: </strong>
    <input type="radio" name="action" value="insert" checked> Insert
    <input type="radio" name="action" value="update"> Update
    <input type="radio" name="action" value="delete"> Delete
    <input type="submit" value="Process Action">
    <br />
    <strong>2. Provide a Document ID </strong>
    <input type="text" name="docid"> (optional for Insert)
       <input type="checkbox" name="public" value="yes" checked><strong>Public Document</strong>
    <br />
    <strong>3. Provide XML text </strong> (not needed for Delete)<br/>
    <textarea name="doctext" cols="65" rows="15"></textarea><br/>
    <strong>4. Provide DTD text for upload </strong> (optional; not needed for Delete)
    <textarea name="dtdtext" cols="65" rows="15"></textarea>
  </form>
  </body>
</html>

7.3.4. Metacat を検索する

Metacat の検索には query または squery を使用する。

query:
フリーテキスト検索を実行する。 returndoctype, qformat, returnfield, operator, searchmode, anyfield, そして(必要ならば) querytitle と doctype を指定する。
squery:
Metacat サーバに XML pathquery 文書を送信することで 構造化検索を実行する。

Metacat が HTTP 経由で検索要求を受け取ると(下のスクリーンショット参照)、 サーバは “pathquery” 文書を作成する。これは指定された検索条件を書き込んだ XML 文書である。pathquery 文書は SQL 文に翻訳されて、データベースに対して 実行される。結果は XML の “resultset” 文書に翻訳され、XML として返されるか またはHTMLに変換されて返される(returnfield パラメータを使ってどちらがいいか 指定する)。 あるいはまた、squery を用いて pathquery 文書を直接提出することもできる。

_images/image043.jpg

query 操作を用いた基本的な検索フォームの例。 このフォームを生成するのに使用した HTML コードは下に示した。

<html>
<head>
<title>Search</title>
</head>
<body>
<form method="POST" action="http://panucci.nceas.ucsb.edu/metacat/servlet/metacat">

Search for:

<input name="action" value="query" type="hidden">
<input name="operator" value="INTERSECT" type="hidden">
<input name="anyfield" type="text" value=" " size="40">
<input name="qformat" value="html" type="hidden">

<input name="returnfield" value="creator/individualName/surName" type="hidden">
<input name="returnfield" value="creator/individualName/givenName" type="hidden">
<input name="returnfield" value="creator/organizationName" type="hidden">
<input name="returnfield" value="dataset/title" type="hidden">
<input name="returnfield" value="keyword" type="hidden">

<input name="returndoctype" value="eml://ecoinformatics.org/eml-2.0.1" type="hidden">

<input value="Start Search" type="submit">

</form>
</body>
</html>

Metacat の pathquery 文書は XML 文書内の指定した項目を検索できる。 また pathquery は検索に適合した文書内のどの項目を返して検索結果に 表示するのかを指定することもできる。

<pathquery version="1.0">
    <meta_file_id>unspecified</meta_file_id>
    <querytitle>unspecified</querytitle>
    <returnfield>dataset/title</returnfield>
    <returnfield>keyword</returnfield>
    <returnfield>dataset/creator/individualName/surName</returnfield>
    <returndoctype>eml://ecoinformatics.org/eml-2.1.0</returndoctype>
    <returndoctype>eml://ecoinformatics.org/eml-2.0.1</returndoctype>
    <returndoctype>eml://ecoinformatics.org/eml-2.0.0</returndoctype>
    <querygroup operator="UNION">
      <queryterm casesensitive="true" searchmode="contains">
        <value>Charismatic megafauna</value>
         <pathexpr>dataset/title</pathexpr>
       </queryterm>
      <queryterm casesensitive="false" searchmode="starts-with">
         <value>sea otter</value>
         <pathexpr>keyword</pathexpr>
      </queryterm>
      <queryterm casesensitive="false" searchmode="contains">
        <value>Enhydra</value>
        <pathexpr>abstract/para</pathexpr>
      </queryterm>
     </querygroup>
 </pathquery>
</pathquery>

個々の <returnfield> パラメータは、個々の検索結果に対して (特に指定せずとも Metacat が返す項目に加えて)データベースが返すべき 項目を指定する。

<returndoctype> 欄は返される文書の型を限定する (たとえば eml://ecoinformatics.org/eml-2.0.1 や eml://ecoinformatics.org/eml-2.0.0 )。 returndoctype が指定されない場合は、すべての文書型が返される。

<querygroup> は入れ子状の <queryterm> タグに対して適用される AND 文または OR文を作成する。 querygroup の演算子は UNION または INTERSECT である。 <queryterm> は、( <value> タグに含まれている)検索条件が ( <pathexpr> タグに含まれている)具体的な項目に対して実行されることを 定義する。

<pathexpr> はまた、 <returndoc> タグに含まれる文書型を表す キーワードを含むこともできる。指定された文書型は一緒にパッケージ化 された文書(つまり、データセットと、それに関するメタデータファイル)に 対してのみ適用される。 Metacat がパッケージ化された文書において検索語を見付けた場合、 Metacat は文書型が指定したものに適合するかどうか調べる。 もし適合しなければ、Metacat はそのパッケージの中の別の文書を調べる。 もし適合したら、Metacat は適合した文書を返す。パッケージについて より詳しくは、開発者向け文書を参照のこと。

Pathquery 文書を処理した後、Metacat は resultset 文書を返す。

<resultset>
      <query>
        <pathquery version="1.0">
           <meta_file_id>unspecified</meta_file_id>
           <querytitle>unspecified</querytitle>
           <returnfield>dataset/title</returnfield>
           <returnfield>keyword</returnfield>
           <returnfield>dataset/creator/individualName/surName</returnfield>
           <returndoctype>eml://ecoinformatics.org/eml-2.1.0</returndoctype>
           <returndoctype>eml://ecoinformatics.org/eml-2.0.1</returndoctype>
           <returndoctype>eml://ecoinformatics.org/eml-2.0.0</returndoctype>
           <querygroup operator="UNION">
                <queryterm casesensitive="true" searchmode="contains">
                     <value>Charismatic megafauna</value>
                     <pathexpr>dataset/title</pathexpr>
                 </queryterm>
                 <queryterm casesensitive="false" searchmode="starts-with">
                    <value>sea otter</value>
                    <pathexpr>keyword</pathexpr>
                 </queryterm>
                 <queryterm casesensitive="false" searchmode="contains">
                    <value>Enhydra</value>
                    <pathexpr>abstract/para</pathexpr>
                 </queryterm>
          </querygroup>
        </pathquery>
       </query>

       <document>
         <docid>nrs.569.3</docid>
         <docname>eml</docname>
         <doctype>eml://ecoinformatics.org/eml-2.0.0</doctype>
         <createdate>2012-06-06</createdate>
         <updatedate>2012-06-06</updatedate>
         <param name="dataset/title">Marine Mammal slides</param>
         <param name="creator/individualName/surName">Bancroft</param>
       </document>

       <document>
         <docid>knb-lter-sbc.61.1</docid>
         <docname>eml</docname>
         <doctype>eml://ecoinformatics.org/eml-2.1.0</doctype>
         <createdate>2012-06-06</createdate>
         <updatedate>2012-06-06</updatedate>
         <param name="dataset/creator/individualName/surName">Nelson</param>
         <param name="dataset/creator/individualName/surName">Harrer</param>
         <param name="dataset/creator/individualName/surName">Reed</param>
         <param name="dataset/title">SBC LTER: Reef: Sightings of Sea Otters (Enhydra lutris) near Santa Barbara and Channel Islands, ongoing since 2007</param>
       </document>
    .....
</resultset>

resultset 文書を返す時、Metacat は常に、検索に使用した pathquery を 含ませる。pathquery の XML データは <query> タグに入れられ、 resultset の一番目の要素に置かれる。

検索によって返される個々の XML 文書は <document> タグによって表される。 何も指示せずとも、Metacat は個々の検索結果に対して docid, docname, doctype, doctitle, createdate, updatedate を返す。ユーザが pathquery の <returnfield> タグに追加の項目を指定した 場合(たとえば文書のタイトルを返すために dataset/title を指定する)は、 <param> タグの中にその追加項目が返される。

Metacat は resultset を XML または HTML で返すことができる。

7.3.5. 検索結果を複数ページに分ける

大きな検索結果を複数のページに分割すると、読み込みが早くなるし、 ユーザにとって読みやすくなる(図 4.12)。 検索結果を複数ページに分割するには、query 操作の任意パラメータである pagestart と pagesize を使う。 pagesize パラメータは1ページに何個の検索結果を返すべきか指示する。 pagestart パラメータは今何ページ目を見ているかを指示する。

_images/image045.jpg

検索結果を複数ページに分割した例。

ページ分割検索が実行されると、その検索の resultset には 4つの 余分の項目が入る。すなわち、pagestart, pagesize, nextpage, previouspage (図 4.13)。nextpage と previouspage は、Metacat が XSLT を使って resultset を XML から HTML に変換する時にナビゲーションリンクを生成するのに使う。

<!-- An example of an XML resultset that include support for page breaks.
     The pagestart parameter will always indicate the page you are currently viewing.
-->
<resultset>
    <pagestart>1</pagestart>
    <pagesize>10</pagesize>
    <nextpage>2</nextpage>
    <previouspage>0</previouspage>
    <query> ...</query>
    <document>...</document>
    <document>...</document>
  </resultset>

この図に示した HTML の検索結果は、Kepler の XSLT を使って描画されている。 その XSLT は lib/style/skins/kepler にある。 Kepler の XSLT は “Next” と “Previous” リンクを表示するために 例の4 つの余計な項目を使用している。

<a href="metacat?action=query&operator=INTERSECT&enableediting=false&anyfield=actor&qformat=kepler&pagestart=0&pagesize=10">Previous Page</a>
<a href="metacat?action=query&operator=INTERSECT&enableediting=false&anyfield=actor&qformat=kepler&pagestart=2&pagesize=10">Next Page</a>

上記の例では、現在のページは 1 であり、前のページ(ページ 0)と 次のページ(ページ 2)は pagestart パラメータの値によって 指示される。

7.3.6. データとメタデータを読み出す

Metacat からデータとメタデータを読み出すには、 read 操作を使用する。 read 操作は 2つのパラメータを持つ。 docid は返すべき文書の ID を指定し、 qformat は返される文書のフォーマットを指定する ( html または xml 、または default のようなスタイル名)。 qformatxml の場合は、Metacat は XML 文書を変換せずに返す。 html の場合は、XML文書を (Metacat 設定で指定された) default のXSLT スタイルシートを用いて HTML に変換する。 スタイル名が指定された場合は、指定された XSLT スタイルを用いて XML を変換する。

_images/image047.jpg

同じ文書を異なる qformat パラメータで表示(左から、default スタイル、 XML、HTML)

なお、 read 操作はデータファイルとメタデータファイルの両方に対して 使用することができる。 データファイルを読み出すには次のような要求を用いる。:

http://yourserver.com/yourcontext/metacat?action=read&docid=nceas.55&qformat=default

ここで nceas.55 は Metacat に格納されたデータファイルの docid であり、 default はスタイルの名前である(あるいは “html” や “xml” や 独自スキンの名前でもよい)。

<html>
<head>
  <title>Read Document</title>
</head>
<body>
  <form method="POST" action="http://your.server/your.context/servlet/metacat">
    <input name="action" value="read" type="hidden">
    <input name="docid" type="text" value="" size="40">
    <input name="qformat" value="default" type="hidden">
    <input value="Read" type="submit">
  </form>
</body>
</html>

7.4. EarthGrid API (別名 EcoGrid)を用いる

Note

EarthGrid/EcoGrid ウェブサービス API は Metacat 2.0.0 時点で非推奨の 機能であり、将来的には Metacat から削除される予定である。 これらの機能は標準化された DataONE REST サービスのインタフェイスによって 代替されつつある。 EarthGrid API は 2013年の終わりまでには完全に削除されるだろう。

EarthGrid (別名 EcoGrid)は、異なるネットワーク(たとえば KNB, GBIF, GEON)と格納システム(たとえば Metacat や SRB)にある 異種のデータにアクセスする手段を提供し、インターネットを通じて ネットワーク化された異なるサイトや組織にある様々なデータや分析的資源 (たとえばデータ、メタデータ、分析手順や処理方法)に科学者が アクセスできるようにする。

Metacat は、 EarthGrid API (表を参照)をサポートしているので、 分散化された EarthGrid に対して問い合わせを行ったり、メタデータやデータの 検索結果を受け取ったり、メタデータやデータの新規作成や更新を そのグリッドノードに書き込んだりできる。

EarthGrid サービスや、その WSDL ファイルについてより詳しくは、 各自のMetacat サーバの “services” ページを見ること。 (たとえば http://knb.ecoinformatics.org/metacat/services

なお、そのページの AdminService と Version サービスは EarthGrid の一部ではないので注意すること。

EarthGrid/EcoGrid API のまとめ

サービス 説明
AuthenticationQueryService

保護されたメタデータとデータに対して、認証されたユーザとして、検索や取り出しを行う。

Methods: query, get

AuthenticationService

EarthGrid にログイン/ログアウトする

Methods: login, logout

IdentifierService

EarthGrid に対して Life Science Identifiers (LSIDs) への操作(一覧、詳細、検査、追加)を行う

Methods: isRegistered, addLSID, getNextRevision, getNextObject, getAllIds

PutService

EarthGrid にメタデータを書き込む

Methods: put

QueryService

EarthGrid に対してメタデータの検索と取り出しを行う

Methods: query, get

RegistryService

EarthGrid サービスの登録リストに対してサービスの追加、更新、削除、検索を行う 註: このサービスのための WSDL は http://ecogrid.ecoinformatics.org/registry/services にある

Methods: add, update, remove, list, query

7.5. Morpho を使う

Morpho はメタデータの作成・格納・取り出しが簡単にできるように作られた デスクトップツールである。 Morpho はいずれかの Metacat サーバと通信し、ユーザがデータやメタデータを ネットワークを使ってアップロード・ダウンロード・格納・検索・閲覧 できるようにする。ユーザは自分のデータファイルを見る権限を制限しなくても いいし、身内にだけ権限を与えてもよい。

Morpho は Knowledge Network for Biocomplexity (KNB) (生物多様性に関する生態学的、環境学的研究を促進することを目的とした 国内ネットワーク)の一部である。 Morpho を各自の Metacat と一緒に使用するには、 Morpho Preferences の Metacat URL に各自の Metacat サーバを参照するように 設定すること。

_images/image049.png

Morpho preferences の Metacat URL に各自の Metacat サーバを参照するように 設定する

Morpho についてより詳しくは、 http://knb.ecoinformatics.org/ を参照のこと。

7.6. 独自のクライアントを作成する

Note

註: クライアント API (およびその基礎となるサーブレットの実装)は Metacat 2.0.0 の時点で非推奨となった。 今後の開発では DataONE REST サービスのメソッドを利用するべきである。 このクライアント API は 2013年の終わりまでには完全に削除される予定である。

Metacat のクライアント API は Java と Perl で利用可能である (Java インタフェイスについてはこの節で説明する。より詳しくは付録を 参照のこと)。 API のうちいくらかは Python と Ruby でも利用可能である。 このAPIは、クライアントアプリケーションが簡単に、ユーザの認証や Metacat の基本操作(たとえばメタデータやデータファイルの読み出し、 追加、更新、削除、メタデータの適合に基づく検索)を実行できるようにする。

このクライアントAPIは edu.ucsb.nceas.metacat.client.Metacat インタフェイスで 定義されており、全操作は javadoc 文書に完全に定義されている。 このクライアント API を使用するには、 metacat-client.jar, utilities.jar, commons-io-2.0.jar, httpclient.jar を classpath に含めること。 これらのクラスをインクルードすると、API のメソッド(次表を参照)が 使えるようになる。

以下のコードブロックは、Java クライアント API を使って Metacat から文書を読み出すための典型的なセッションを示している。

String metacatUrl = "http://foo.com/context/metacat";
String username = "uid=jones,o=NCEAS,dc=ecoinformatics,dc=org";
String password = "neverHarcodeAPasswordInCode";
try {
    Metacat m = MetacatFactory.createMetacatConnection(metacatUrl);
    m.login(username, password);
    Reader r = m.read("testdocument.1.1");
    // Do whatever you want with Reader r
} catch (MetacatAuthException mae) {
    handleError("Authorization failed:\n" + mae.getMessage());
} catch (MetacatInaccessibleException mie) {
    handleError("Metacat Inaccessible:\n" + mie.getMessage());
} catch (Exception e) {
    handleError("General exception:\n" + e.getMessage());
}

Operations provided by Client API  (Metacat.java class)
メソッド パラメータとスロー宣言 説明
delete public String delete(String docid) throws InsufficientKarmaException, MetacatException, MetacatInaccessibleException; リポジトリ内の XML 文書を削除する
getAllDocids public Vector getAllDocids(String scope) throws MetacatException; 与えられたスコープに適合する全docidの一覧を返す。スコープが null の場合はシステムに登録されている全docidを返す。
getLastDocid public String getLastDocid(String scope) throws MetacatException; 与えられたスコープに対する最大の文書IDを返す。連番になるように未使用のIDを決めるのに使用する。
getloggedinuserinfo public String getloggedinuserinfo() throws MetacatInaccessibleException; このセッションでログインしているユーザを返す。
getNewestDocRevision public int getNewestDocRevision(String docId) throws MetacatException; Metacatにある指定の文書の最終リビジョン番号を返す。
getSessonId public String getSessionId(); このセッションのセッションIDを返す。
insert public String insert(String docid, Reader xmlDocument, Reader schema) throws InsufficientKarmaException, MetacatException, IOException, MetacatInaccessibleException; リポジトリに XML 文書を追加する。
isRegistered public boolean isRegistered(String docid) throws MetacatException; 与えられたdocidが登録されていたら真を返す。そうでなければ偽を返す。
login public String login(String username, String password) throws MetacatAuthException, MetacatInaccessibleException; Metacat サーバにログインする。
logout public String logout() throws MetacatInaccessibleException, MetacatException; Metacat サーバからログアウトする。
query public Reader query(Reader xmlQuery) throws MetacatInaccessibleException, IOException; Metacat リポジトリを検索し、結果を Reader として返す。
query public Reader query(Reader xmlQuery, String qformat) throws MetacatInaccessibleException, IOException; Metacat リポジトリを、与えられた metacat互換の検索フォーマットで検索し、結果を Reader として返す。
read public Reader read(String docid) throws InsufficientKarmaException, MetacatInaccessibleException, DocumentNotFoundException, MetacatException; Metacat サーバから XML 文書を読み出す。
readInlineData public Reader readInlineData(String inlinedataid) throws InsufficientKarmaException, MetacatInaccessibleException, MetacatException; Metacat サーバのセッションからインラインデータを読み出す。
setAccess public String setAccess(String _docid, String _principal, String _permission, String _permType, String _permOrder ); throws InsufficientKarmaException, MetacatException, MetacatInaccessibleException; Metacat リポジトリ内の XML 文書にアクセス権限を設定する。
setMetacatUrl public void setMetacatUrl(String metacatUrl); 接続するべき Metacat の URL を設定する。
setSessionId public void setSessionId(String sessionId); このセッションのセッションIDを設定する。
update public String update(String docid, Reader xmlDocument, Reader schema) throws InsufficientKarmaException, MetacatException, IOException, MetacatInaccessibleException; リポジトリ内の XML 文書を新しいバージョンの XML 文書で更新する。
upload public String upload(String docid, File file) throws InsufficientKarmaException, MetacatException, IOException, MetacatInaccessibleException; データファイルをリポジトリにアップロードする。
upload public String publicupload(String docid, String fileName, InputStream fileData, int size) throws InsufficientKarmaException, MetacatException, IOException, MetacatInaccessibleException; データファイルをリポジトリにアップロードする。