2008/01/31


microsummaryという言葉をご存知でしょうか。microsummaryはMozilla Groupが提案しているWebの要約表記方法の事を指し、ブラウザのブックマーク等で動的に更新されるコンテンツを生成出来る機能です。
Microsummaries - MozillaWiki
例えば、貴方が任意のWebサイト一覧を作り、そのWebサイト毎の最新サマリを日々更新したと思った場合どうするでしょうか。 Web::Scraperを使って、そのサイトの本文もしくはタイトルらしき辺りをスクレイピングするでしょうか。 もしくはmicrofomatsを使ってエントリを一覧し、その先頭を最新と信じて出力するでしょうか。

これらはコンテンツ製作者の意図とそれを二次利用する者とで事前に
  • サマリは一番最初のコンテンツのタイトルである
  • サマリは<title>タグに含まれている
  • サマリとして使用して良いサイトである(もしくはない)
  • サマリは2時間おきに更新される可能性がある
などと言った情報が交換されていない事が原因で、現状コンテンツ制作側からは何も公開していない事になります。
それを実現する機能がmicrosummaryです。

microformatsは既存のコンテンツに対するrel属性およびclass属性を定義する事で、二次利用者側に欲しいコンテンツの場所を示しています。しかしこれでは複数の情報を結合したサマリを生成したり、不要な情報を省く事が難しくなる。つまりプログラマブルでは無い。microsummaryは、link要素に指定したURLに格納されるmicrosummary定義ドキュメントに埋め込まれるXSLT(XML Stylesheet Language Transformations)をコンテンツ自身に適応する事により、microformatsよりもより柔軟なサマリを提供出来るようになっています。

まず、このサイトのHTMLを見て下さい。
<link rel="microsummary" href="http://mattn.kaoriya.net/microsummary/entry_title.xml" />
という部分に、microsummary定義ドキュメントへのパスが記述されています。
そしてそのドキュメントの中身には <?xml version="1.0" encoding="UTF-8"?>
<generator xmlns="http://www.mozilla.org/microsummaries/0.1" name="Big Sky - Entry Title">
  <template>
    <transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <output method="text"/>
      <template match="/">
        <value-of select="html/head/title"/>
        <text> - </text>
        <value-of select="//div[@class='xfolkentry'][1]/h3"/>
      </template>
    </transform>
  </template>
  <update interval="240"/>
  <pages>
    <include>^http://mattn\.kaoriya\.net</include>
  </pages>
</generator>
となっています。
この定義ドキュメントのpages要素を見て下さい。
pages/includeには、そのサイトでmicrosummaryを適応すべきURLパターンが記述されています。
つまりコンテンツ製作者側が、サイトページに応じてmicrosummaryを出力するかしないかを定義出来る事になります。
次にtransform要素。ここはXSLTスタイルシートと同じ構成になっている。上の例ではこのページのHTMLにある、html/head/title要素と、xfolkentryというクラス名の付いたdiv要素直下にあるh3要素を、結合しサマリとして扱うと定義しています。
もちろん、XSLTなのでもっと複雑なサマリを生成する事も出来ます。
また、update要素ではサマリの更新間隔を指定する事もでき、通常30分である更新時間を任意に指定する事も出来ます。

microsummaryは、はてなダイアリーにおいても既に導入されておりhttp://d.hatena.ne.jp/microsummary/entry_title.xmlに定義ドキュメントが格納されています。これにより、例えば「はてなスター日記」をFirefoxでブックマークすると、最新記事のタイトルがサマリーとして生成され、上の記述にもある様に240分毎(update要素)にサマリが更新されるブックマークをコンテンツ製作者側から提供する事が出来ます。
microsummary-hatenastar
利用方法では、ニュースのヘッドラインを流す事も可能です。
参考:FirefoxのブックマークツールバーでYahooヘッドラインニュースを流す方法
さらに、ライブドアリーダのフィード詳細画面では、購読者数とレートがmicrosummaryとして配信されており、動的なブックマーク(ライブタイトル)を実現出来ます。 例えば私のサイトのフィード詳細でもmicrosummaryが配信されています。以下のブックマークレットで確認出来ます。
参考:しげふみメモ:livedoor Reader購読者数のライブタイトル
この他、定義ドキュメントに記述出来る要素については
Microsummary XML grammar reference - MDC
に日本語訳化された物があるので興味のある方は参照してみて下さい。
なお、MozillaのドキュメントWikiにあるMicrosummaries - MozillaWiki Standardizationという項目では、microsummaryが記述されるlink要素はmicroformatsとして標準化されるべきだ、との文章もあります。いずれmicroformatsのDraftに入ってくるのかもしれません。

さて、このエントリを作成するにあたって、以前microsummaryの記事でご紹介したbookmarkletを改造し、microsummaryを表示するブックマークレットを作ってみました。
※IE6、Safariでは動作しません。動作確認は、FirefoxとOperaにて行っています。
bookmarlet:microsummary
表示しているドキュメントのlink要素の内、ref="microsummary"の物を検索し、定義ドキュメントをXHRで取得しXMLDOMとしてパース。その後pages/includeにURLがマッチしている事を確認した後にXSLTプロセッサでサマリを生成する。といった仕組みです。
IE6で動作しない理由は、XSLTプロセッサに渡すドキュメントエレメントはXMLである必要があり、document.documentElement.innerHTMLを渡してもパースエラーになってしまう為です。また、SafariではtransformToDocumentにdocument自身を渡すとエラーとなっています。

ちなみに、HTMLを無理やりXHTMLに変換し、MSXML2.DOMDocumentで処理するコードの残骸が入っていますがお気になさらず...

microsummaryはおそらくブラウザのブックマークに限られた話ではありません。
冒頭で述べた様に、コンテンツサマリ一覧を作成する様な二次利用者に対しても有用で、CGI等も必要とせず、かつ記事のエントリに付与されたclass属性を壊す事無くサマリを集約出来ます。おおよそGRDDLのサマリ版といった所だと認識して頂けると思います。
ただし、現状のmicrosummaryでは1つの定義ドキュメント内に1つのスタイルシートしか記述出来ず、URLパターンに応じたスタイルシートを選ばせる事が出来ない上、出力する内容も1つに限られてしまいます。
これはブックマークのサマリとして登場したmicrosummaryの性でしょうか...。

上で述べた様に、膨大なコンテンツを扱う二次利用者側からすると、microformatsで得られる情報は大きすぎ、かつコンテンツ提供者側が意図しない内容になってしまう可能性もあります。これを解決出来るmicrosummaryに、少し期待出来るのでは?と考えています。
Posted at by




# telnet baka-kyoudai.com 80
GET / HTTP/1.0
Host: baka-kyoudai.com:80
User-Agent: Anchan/0.1 (compatible; IKARIYA 6.0; DRIFTERS 5.1)

兄:ドンドンドン!ドンドンドン!
弟:「誰だ?」
兄:「あんちゃんだよ。お前のあんちゃんだよ」
HTTP/1.1 401 Unauthorized
Server: Apache-Drifters/1.1
Pragma: No-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 09:00:00 JST
WWW-Authenticate: Basic realm="Resource Of Brothers"
Content-Type: text/html;charset=utf-8
Content-Length: 979
Date: Thu, 27 Sep 2007 12:48:36 GMT
Connection: close
...
弟:「ほんとに俺のあんちゃんか?」
兄:「ほんとにあんちゃんだよ」
弟:「それじゃあ、これに答えてみろ。電車に必要なのは乗車券、飛行機に必要なのは搭乗券、じゃあ映画に必要なのは?」
GET / HTTP/1.0
Host: baka-kyoudai.com:80
User-Agent: Anchan/0.1 (compatible; IKARIYA 6.0; DRIFTERS 5.1)
Authorization: Basic dGFrYWt1cmE6a2Vu

兄:「高倉健」
HTTP/1.1 200 OK
Date: Thu, 27 Sep 2007 12:55:21 GMT
Server: Apache-Drifters/1.1
Content-Length: 176 Content-Type: text/html;charset=utf-8

...

弟:「あっ、あんちゃんだ! 入れよ入れよ」
Posted at by




きょうじんAPI
ごめんなさい。「きょうじん」が何を意味してるかも知らないんですが、とりあえず...

アナタの「きょうじん」発言は...
Posted at by