様々なレイヤーのArchived website の統合インターフェイスを志向するMementoプロトコル

 過去のエントリでMementoの以下のようなウェブアーカイブに係る取り組みについて紹介しました。

 上だけでも結構すごいと思うのですが、いよいよ本丸ということで、Mementoが公開しているMementoプロトコルのドラフトを読んでみました。

 

 がっ!
 ようわからん・・・( ̄Д ̄;;

 
 頑張ってみましたが、私の知識ではちょっと理解するに及びませんでした。そこでMementoの以下のMementoプロトコルの紹介と

 MementoのHerbert Van de Sompel氏の一年前のスライド(以下)を手がかりに軽く紹介したいと思います。

 
 完全に理解しているわけでもないの紹介するのは少々躊躇われますが、Mementoプロジェクトが志向していることがよくわかるプロトコルです。紹介せずにいられない。

Mementoプロトコルを一言でいえば

 様々なレベル、手法でアーカイブされている過去のウェブ情報に一元的にアクセスさせるためのHTTPを拡張したフレームワーク
です。
標題にある通り、アーカイブされたウェブサイトの一元的なインターフェイスを提供を試みるHTTPプロトコル拡張というべきかもしれません。
 様々なレベル、手法といってもいろいろとありますが、Herbert Van de Sompel氏が上のスライドで挙げた例を参照すると以下のようなものでしょうか。現時点では、もちろん全てがMementoに対応しているわけではありません。

  • Internet Archiveなどのウェブアーカイブプロジェクトが保存した過去のウェブサイト
  • WikiやWordpressなど、バージョン管理システムを搭載しているCMSの差分情報
  • Googleなどが持っているキャッシュ

 つまり、Mementoは、Internet Archiveや世界の国立図書館のウェブアーカイビングプロジェクトだけを対象としているのではなく、検索エンジンのキャッシュやCMSの差分情報など普段、ウェブアーカイビングの文脈では語られにくいコンテンツもラップして統合的なアクセスを試みようとしていることになります。先日紹介したMementoの“SiteStory Web Archive”もそういった様々なウェブアーカイブの1つにサーバーサイド分散型セルフウェブアーカイブ というレイヤーを1つ追加しようという試みなのでしょう。

Mementoプロトコルしくみ

  
 簡単に説明するとHTTPのリクエストに以下のようなAccept-Datetimeヘッダを含めて、あるURLの特定の時点のページをサーバー側に要求を投げ、サーバー側とコンテンツのネゴシエートをする仕組みです。Mementoはこのネゴシエートする対象を様々なレイヤーにひろげようと考えているようなのです。

GET /memento/timegate/http://www.yahoo.co.jp/ HTTP/1.1
Host: purl.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
(省略)
Accept-Datetime: Sat, 18 Aug 2007 12:00:00 GMT
Connection: keep-alive

 
 リクエストを投げた後のフローですが、一番シンプルなケースの場合、オリジナルのURL(URL-R)とアーカイブされたそれぞれの時点のウェブサイト(URL-M)の間にTimeGate(URL-T)というリソースをおいて、このTimeGateでコンテンツをネゴシエートして、求める時点のウェブサイト(URL-M)に誘導します。
オリジナルのURL(URL-R)とアーカイブされたそれぞれの時点のウェブサイト(URL-M)の間にTimeGate(URL-T)というリソースをおいて、このTimeGateでコンテンツをネゴシエート
from Memento Guide: Introduction
  もう少し複雑な例として、TimeBundleとTimeMapを含めたフローもあります。Mementoプロトコルを読んでいて躓いたのは、実はこのTimeBundleとTimeMapでして、あまり詳しい説明ができません。こういうのがあるんだという紹介だけですまさせていただきます。

from Memento Guide: Introduction
 

まとめ?

 以前、「Web情報を保存するとは何かの続きの続き」というエントリを書いた事がありますが、あのエントリで書いたある程度の解はMementoプロトコルかもしれません。どこまで普及するかわからないプロトコルですが、非常に興味深い試みだと思います。IETFのインターネットドラフトとして公開されているのも興味深いですね。RFC化を目指しているのでしょうか。どうせなら、今、ちょうど議論されているHTTP2.0に組み込むよう働きかけたらどうだろうかと勝手ながら思ったりします。 
 

【参考】サーバー・クライアント間のリクエストとレスポンスの大まかなフロー

  
 Memento拡張のヘッダを入れ込んだHTTPでのリクエストとレスポンスのフローを1つ見てみたいと思います。
 ちなみにMementoプロトコルは以下のFirefoxのアドオンをインストールすることで使用することができます。

 今回はMementoでYahoo!Japan(http://www.yahoo.co.jp/)の2007年9月18日時点のウェブサイトにアクセスするとします。この場合、最終的にはInternet Archiveが保存した以下の2007年8月23日時点のウェブサイトが表示されるわけですが、そこまでの大まかなクライアント側とサーバー側のリクエストとレスポンスのフローを紹介します。

(1)リクエスト(クライアント側)

 クライアント側からTimeGateのあるhttp://purl.org/に対して以下のようなリクエストを投げています。2007年9月18日時点のYahoo!Japanのトップページほしいと言っているわけですね。

GET /memento/timegate/http://www.yahoo.co.jp/ HTTP/1.1
Host: purl.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
(省略)
Accept-Datetime: Sat, 18 Aug 2007 12:00:00 GMT
Connection: keep-alive

 「Accept-Datetime: Sat, 18 Aug 2007 12:00:00 GM」が肝です。

(2)レスポンス(purl.orgサーバー側)

  purl.orgサーバーは02(Moved Temporarily)を返しつつ、http://mementoproxy.lanl.gov配下のTimeGateへ誘導します。

HTTP/1.1 302 Moved Temporarily
Date: Thu, 28 Mar 2013 15:21:19 GMT
Server: 1060 NetKernel v3.3 – Powered by Jetty
Location: http://mementoproxy.lanl.gov/aggr/timegate/http://www.yahoo.co.jp/
Content-Type: text/html; charset=iso-8859-1
X-Purl: 2.0; http://localhost:8080
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Content-Length: 299

 

(3)再度のリクエスト(クライアント側)

 クライアント側から(2)で誘導されたTimeGateのあるhttp://mementoproxy.lanl.gov/へ改めてリクエストを出します。(1)と同じようなリクエストですね。

GET /aggr/timegate/http://www.yahoo.co.jp/ HTTP/1.1
Host: mementoproxy.lanl.gov
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
(省略)
Accept-Datetime: Sat, 18 Aug 2007 12:00:00 GMT
Connection: keep-alive

 

(4)レスポンス(mementoproxy.lanl.govサーバー側)

  mementoproxy.lanl.govサーバーは以下のようなレスポンスを返します。

HTTP/1.1 302 Found
Date: Thu, 28 Mar 2013 15:21:20 GMT
Server: Apache
Vary: negotiate,accept-datetime
Link: ;rel=”original”,;rel=”timemap”;type=”application/link-format”,;datetime=”Wed, 20 Nov 1996 06:53:42 GMT”;rel=”first memento”,;datetime=”Sun, 05 Aug 2012 00:00:00 GMT”;rel=”last memento”,;datetime=”Sun, 12 Aug 2007 04:46:13 GMT”;rel=”prev memento”,;datetime=”Mon, 27 Aug 2007 07:53:33 GMT”;rel=”next memento”,;datetime=”Thu, 23 Aug 2007 00:35:41 GMT”;rel=”memento”
Location: http://api.wayback.archive.org/memento/20070823003541/http://www.yahoo.co.jp/#

Content-Length: 0
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: text/plain; charset=UTF-8

 2007年9月18日時点のYahoo!Japanのトップページがないので、保存されているページのうちで近い日付のものをネゴシエートしています。そして、最終的に、以下のURL、つまり、2007年8月23日にInteret Archiveが保存したのものが一番望む日付に近いよとクライアント側に返します。
http://api.wayback.archive.org/memento/20070823003541/http://www.yahoo.co.jp/
 

(5)Internet Archiveへのリクエスト(クライアント側)

(4)を受けてクライアントはInternet Archiveに2007年8月23日時点のYahoo!Japanのトップページをリクエストします。

GET /memento/20070823003541/http://www.yahoo.co.jp/ HTTP/1.1
Host: api.wayback.archive.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: wayback_server=37
Accept-Datetime: Sat, 18 Aug 2007 12:00:00 GMT
Connection: keep-alive

 

(6)Internet Archiveのレスポンス(api.wayback.archive.orgサーバー側)

  Internet Archiveのapi.wayback.archive.orgサーバーは以下のようなヘッダーを返します。

HTTP/1.1 200 OK
Server: Tengine/1.4.3
Date: Thu, 28 Mar 2013 15:21:21 GMT
Content-Type: text/html;charset=euc-jp
Transfer-Encoding: chunked
Connection: keep-alive
Memento-Datetime: Thu, 23 Aug 2007 00:35:41 GMT
Link: ;rel=”timebundle”, ;rel=”original”,;rel=”memento”; datetime=”Thu, 23 Aug 2007 00:35:41 GMT”, ;rel=”last memento”; datetime=”Mon, 18 Mar 2013 14:17:56 GMT”, ;rel=”first memento”; datetime=”Wed, 20 Nov 1996 06:53:42 GMT”, ;rel=”prev memento”; datetime=”Sun, 12 Aug 2007 04:46:13 GMT”, ;rel=”next memento”; datetime=”Mon, 27 Aug 2007 07:53:33 GMT” , ;rel=”timemap”; type=”application/link-format”,;rel=”timegate”
(省略)

 「Memento-Datetime: Thu, 23 Aug 2007 00:35:41 GMT」を返しています。 Memento-Datetimeはその時点のウェブサイトを持っていることを意味しています。あとは、2007年8月23日時点のYahoo!Japanのトップページを受け取るためにクライアント側とサーバー側でやり取りを繰り返します。

関連エントリ

Mementoのサーバーサイド分散型ウェブアーカイブ "SiteStory Web Archive"

 先のエントリで、MementoによるInternet ArchiveとUK Archiveの統合検索について紹介しました。今回はそのMementoのサーバーサイド分散型ウェブアーカイブ “SiteStory Web Archive”を簡単ですが、紹介します。ちなみにMemento自身はこれを”Transactional archiving”と呼んでいるようです。

 
 なお、「サーバーサイド分散型ウェブアーカイブ」とは、ウェブサイトを置いているサーバー自身にウェブサイトを保存する(セルフアーカイブする)仕組みを指しており、Internet Archiveのような集約型ウェブアーカイブと対照して、便宜上この場で使わせていただいている言葉です(先のエントリでも便宜上使用しましたが)

SiteStoryによるウェブアーカイブのしくみ

 紹介する、といいつつも、カレントアウェアネスの以下の記事の「ユーザがアクセスした際にそのコンテンツを保存するという“Transactional”なウェブアーカイブ」という紹介でほぼ説明し尽くされています。

 ウェブサイトのユーザーからアクセスされたタイミングでその時点のコンテンツがサーバー(Apache Web Content Server)内に保存されます。プロキシのキャッシュを永続化するようなしくみでしょうか。アクセスが多いコンテンツほど保存され、また、高い頻度で保存されます。

ウェブサイトのユーザーからアクセスされたタイミングでウェブサイトをサーバーに保存する。保存されたウェブサイトはMememntoのHTTP拡張プロコロルを使う他のユーザーによって利用される
SiteStoryによるウェブアーカイブのイメージ

 
 ウェブサーバーに保存されたウェブサイトは、ウェブアーカイブ用フォーマットの国際規格でもあるWARC形式としてダウンロードすることができるほか、Internet ArchiveのWayback Machineに送信する機能も備えているようです。

SiteStory Web Archiveの実装方法

 以下で詳しく紹介されていますが、mod_sitestoryというApacheのモジュールを追加することで実装することができるようです。SiteStory専用のサーバーを用意する必要があるようでして、私自身はまだ試していません。

 

SiteStoryによってアーカイブされたコンテンツの利用

 サーバーに蓄積された過去のウェブサイトは、Mementoが考案したプロトコル”HTTP framework for time-based access to resource states“(過去のコンテンツにアクセスするためのHTTP拡張みたいなものでしょうか)を利用してアクセスをします。現時点では、このMementoプロトコルを実装しているブラウザなんてありませんので、Mementoが公開するFirefoxのプラグインをインストールしてMementoプロトコルを使えるにしなければなりません。

SiteStoryのデモ

 SiteStory Web Archiveを実装しているウェブサイトがどれだけあるのかよくわかりませんが(おそらくほとんどないでしょうぁ・・・)、SiteStory Web Archiveでアーカイブされたデモコンテンツが公開されています。

 
 先に紹介したFirefoxのプラグインをインストールして以下のURLをアクセスしてみてください。2009年9月20日まで遡ることができるようです。

 
 日付とその日のBBCのウェブサイトのトップページを写したおじさま(ロス・アラモス研究所のHerbert Van de Sompel氏)の写真を見ることができます。写真は毎日更新されているようですね。うーん、これはこれですごいことだ。Herbert氏の経歴を見ると、OAI-PMHの仕様策定に絡んでいたり、現在だとOpen Annotationに絡んでいたりと、いろいろなところでこの方の実績や取りんでいるプロジェクトに出くわしているみたいで、「はぁ、凄い方だ」と思わず溜息。

2013年3月5日の画像
2013年3月5日

 

2011年2月24日の画像
2011年2月24日

 

2009年9月29日の画像
2009年9月29日

関連エントリ

Web情報を保存するとは何かの続きの続き

 「Web情報を保存するとは何か」と「「Web情報を保存するとは何か」の続き-Web情報の保存についての個人的で簡潔な妄想-」の続きです。
 私はWebの仕組みとしてWeb情報が残るようにできないかとよく考えたりします。現時点で思いつくのは以下の3つの方法です。

  • クライアント側のストレージ(キャッシュ?)に残るようにする(クライアントサイド分散型ウェブアーカイブ)
  • 「Web情報の保存」の定義をもう少し広く拡大する(「Web情報」の拡大)
  • ウェブサイトを置いているサーバーに差分情報として残るようにする(サーバーサイド分散型ウェブアーカイブ)

 

クライアントサイド分散型ウェブアーカイブ

 1つ1つは微量でも蓄積してくと無尽蔵といえるクライアントサイドのストレージを活用する方法です。キャッシュにたまるものを永続的に保存出来るならば、アクセスの多いウェブサイトほど高頻度のアーカイビングが可能になるという点も面白いと思います。そして、それらをP2Pで相互にアクセス可能にして利用させると。
 実はInternet Archiveのブリュースター・ケール氏が言うSiteless Websiteが結構近いのかなと思ったりします。目的は同じではないかもしれないけど、結果として同じところにたどり着きそう。

 2008年の電子情報通信学会ソサイエティ大会で発表された以下の論文は私が思っていたものに結構近いものです。

 
 同じことを考えている人は他にもいるかもしれませんね。

「Web情報の保存」の定義の拡大

 過去に以下のエントリで書いた通り。多くは語りません。

 

サーバーサイド分散型ウェブアーカイブ

 ウェブサイトを置いているウェブサーバーにGitやCSVのようなバージョン管理システムなどを導入して更新前の情報もバージョン管理という形で保存する方法です。ある人から全ウェブサイトのWiki化ということもかもと言われたことがありますが、確かにそのようなイメージかもしれません。また、あるオレンジ系図書館員からgithub×web archivingと言われたこともありますが、Github Pagesが全ウェブサイトに広がればまさにそのままのイメージです。
 なお、バージョン管理システムの導入とは少し異なるのですが、サーバーサイド分散型ウェブアーカイブを志向しているものとして、MementoのSiteStoryがあります。プロキシのキャッシュを永続化するようなイメージのようです。

※2013/3/11追記
 SiteStoryについて、以下のエントリで紹介しました。

非公開型のサーバーサイド分散型ウェブアーカイブ

 これまでは保存されたWeb情報を第三者に公開することを前提にしてきましたが、ここからは第三者には公開されないアーカイブされたWeb情報はどのように考えたらよいのかというお話です。
 例えば、ブログのみならず、ウェブサイト構築のCMSとして活用されているWordpressにはエントリを更新しても更新前のエントリを保存する機能をデフォルトで備えています(以下)。
スクリーンショット 2013-03-06 0.35.16
 最近の他のCMSでも似たような機能をそなえてるだろうと思います。
  ウェブサイトをホスティングできるオンラインストレージサービスであるDropboxとGoogle Driveには期間限定ではあるものの、バージョン管理の機能を備えています。保存期間がいずれ無期限になる日がくるかもしれません。

 
 ウェブアーカイビングに対する意識はなくても、利便性への追求からからバージョン管理機能の導入が今後増えるのではないかと思います。その結果として、残るWeb情報も増えてきます。この機能はウェブサイト管理者のためのものであり、第三者が過去のWeb情報にアクセスするものではありません。
 しかし、第三者に対しては非公開でも過去のウェブ情報が保存されている。これに意味はないのでしょうか。
 ある先生から図書館の特徴として資料を公開を前提に考えているというお話を伺ったことがあり(少し前なので記憶がややあやふやです)、博物館やアーカイブスがウェブアーカイビングを行ったら、保存と公開を切り離して考えていたのかもしれないと思ったことがありました。その時の疑問とこの「非公開型ウェブアーカイブ」の意味に対する疑問がリンクしたため、今回、このエントリを書いてみました。
 最もInternet Archiveは非営利団体であり、UK Archivesなど図書館以外の機関がウェブアーカイビングに取り組んでいますので、この疑問自体にあまり意味はないかもしれません。ただ、保存と第三者に対する公開を切り離せば「セルフウェブアーカイビング」の範囲も拡げて考えることができるかもしれません。
 先のエントリで紹介したMat Kelly氏の提示する以下の図を拝借しますが、ここで提示されてようにウェブコンテンツを様々ないろいろなレイヤーに分けて考えて、いろいろな方法で方法で保存で試みてもよいのではないかと思います。Mat Kelly氏が提案するようにPersonal Web Archivingによって保存されるようにするのも1つの方法だと思いますし、様々な団体や個人の日常の行いの結果として自然とウェブ情報が残るようようになるというもの1つの方法ではないかと考える次第です。
Heritrxのようなクローラーでは収集することができないが、WARCで保存することは技術的に可能なfacebook等のウェブサイト、これをPersonal Web Archivingという手法で保存する
from WARCreate and Future Stewardship: An interview with Mat Kelly | The Signal: Digital Preservation