第 3 章 実用化システムと研究プロジェクト
3.5 Semantic-Blog 環境を目指す xfy-blog
3.5.2 Web 文書の機械処理
Web文書の機械処理の例を 2段階で紹介する。まず、従来の XHTML に定められた意 味を利用した機械処理について。次に、XHTML の枠組みの中で、class 属性を利用した 機械処理の例を紹介する。
3.5.2.1 従来のXHTMLに定められた意味を利用する機械処理
ここでは、List 2 Table for Blog Editor[3]とDeep Reference Lite[12]という、リストを活 用する2つのツールを紹介し、従来のXHTMLに定められた意味を利用する機械処理の例
とする。
List 2 Table for Blog Editorは、記述中のBlog記事内に存在するリスト項目(ul要素、
ol要素中のli要素)から表を作成して記事へ追加する。この処理を、xfy Blog Editorのユ ーザコ マンドのと して実装し たものであ る。List 2 Table for Blog Editor は 、xfy
Community[13]に掲載されている。
Deep Reference Liteは、別々のXHTML文書中のリストを、軸として参照して表を構
成するツールである。複数のXHTML文書のから複数のリストを取り込んだうえで、そこ からさらに2 つのリストを軸として採用して表を構成し、その表をクリップボード経由で
別のXHTML文書に貼り付けることができる。
List 2 Table for Blog Editorは処理の対象がBlog記事内に閉じている。一方、Deep
Reference Liteは複数のXHTML文書をまたがって処理し、情報発信だけでなく、情報利
用もスコープに入っている。
List 2 Table for Blog Editorは、動作や仕組みが簡単なので、この報告の技術的内容を
理解しやすいだろう。一方、実用性はDeep Reference Liteの方が高いだろう。
(1) リスト
リストとは、ある考えを、いくつかの考えの集まりとして構成するものである。
XHTMLにおけるリスト要素(ul要素、ol要素、dl要素)とは、このリストを指定する
マークアップである[4],[5]。すなわち、これはきわめて基本的な意味マークアップであ り、テキストのレイアウトを直接に指す概念ではないことに注意したい。このような 誤解は、リストを「箇条書き」と表記した場合に起こりやすい。
(2) List 2 Table for Blog Editor
いくつかの情報のまとまりを並列するものとしてリストアップしたら、それに続く 文章中で、それらについて深く検討して表として整理したいときがある。あるいは、
手順をリストアップしたら、それに続く文章中で、その手順に基づいて作業するとき のチェックリスト表を構成したいときがある。
List 2 Table for Blog Editorは、このような執筆の流れを支援する簡単なツールで
あり、Blog記事執筆向けとして実装されている。
1) 動作
見かけ上は次のように動作する。執筆中のBlog記事に次のような記述があるとき:
休暇で利用するホテルの条件:
・キッチン
・パソコンを置けるくらい広いデスク ・PHSの圏内
というところかな。
このユーザーコマンドを実行すると、次のように表が生成される:
執筆者は、ここからさらに、次のように続けることができる:
すなわち、考えをリストに整理したら、それを表というかたちで、さらに具体的 に発展させる手助けをするツールである。
2) 仕組み
仕組みは簡単である。このユーザーコマンドは、リスト構造を見つけて、表を 生成し、挿入するだけである:
休暇で利用するホテルの条件:
・キッチン
・パソコンを置けるくらい広いデスク ・PHSの圏内
というところかな。
キッチン パソコンを置けるくらい広いデスク PHS の圏内
休暇で利用するホテルの条件:
・キッチン
・パソコンを置けるくらい広いデスク ・PHSの圏内
というところかな。これを当てはめてみると:
xfy ホテル ジャスト・ホテル
キッチン × ○
パソコンを置けるくらい広いデスク ◎ ○
PHS の圏内 ○ ×
仕組みは簡単である。このユーザーコマンドは、リスト構造を見つけて、表を 生成し、挿入するだけである:
強調表示された部分がリストを見つけるXPath式である。キャレットのある位 置(caret-node())から、祖先をたどって(ancestor::xhtml:*)、最初のリスト要素 ([local-name()='ul' or local-name()='ol'][1])を取り出す。
"uxc:List_2_Table_1_Sided"はxfy Blog Editorに登録するユーザーコマンドの 名 前 で あ る 。"uxc"は 、 ユ ー ザ ー コ マ ン ド 用 に 用 意 さ れ た 名 前 空 間
"http://xmlns.xfy.com/blogtool/userextension"を示す名前空間接頭辞である。
見かけ上は箇条書きにレイアウトされていても、次のような記述などを処理対
<ul>
<li>キッチン</li>
<li>パソコンを置けるくらい 広いデスク</li>
<li>PHSの圏内</li>
</ul>
<table border="1">
<tr>
<th>キッチン</th>
<td> </td>
</tr>
<tr>
<th>パソコンを置けるくらい 広いデスク</th>
<td> </td>
</tr>
<tr>
<th>PHSの圏内</th>
<td> </td>
</tr>
</table>
⇒
<xvcd:command name="uxc:List_2_Table_1_Sided"
enabled="xvcd:caret-node()/ancestor::xhtml:*
[ local-name() = 'ul' or local-name() = 'ol' ]"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
>
<inst:variable name="LIST"
select="xvcd:caret-node()/ancestor::xhtml:*
[ local-name() = 'ul' or local-name() = 'ol' ][1]"/>
<xvcd:insert ref="$LIST" position="after">
<table border="1">
<xvcd:for-each select="$LIST/xhtml:li">
<tr>
<th><xvcd:value-of select="."/></th>
<td></td>
</tr>
</xvcd:for-each>
</table>
</xvcd:insert>
</xvcd:command>
象に含め始めると、このような簡単なプログラムとはならず、また利用者の意図 しない動作をすることもあるだろう:
<p>・キッチン<br />
・パソコンを置けるくらい広いデスク<br />
・PHSの圏内</p>
(3) Deep Reference Lite
Deep Reference Liteで利用者は、複数のXHTML文書中のリストを参照し、そこ
から2つを選んで軸として表を構成し、それをクリップボード経由で別のXHTML文 書中に貼り付けることができる。
1) 動作
あるBlogで見つけた滞在型の休暇で利用する宿の条件を使って、健保組合の契 約施設を評価する場合を例に、Deep Reference Liteの動作を示す。
まず、次のように、あるBlog記事でリストに整理された「休暇で利用するホテ ルの条件」が参考になる、と思ったとする。
一方、健保組合ホームページの契約ホテル一覧もリスト形式で提示されている。
・キッチン
自炊できる。食事にでかけなくてよい。
・広いデスク
ノートパソコンを置いて使える。
・PHSの圏内 ネット接続。
Deep Reference Liteを使うと、この個別に作成された別々のXHTML文書中の 2つのリストの項目を参照して、検討表を生成することができる。
ここでも、それぞれのリスト構造を見つけることは、XHTMLのul要素を見つ けることである。この検討表を生成する処理は、XHTML に定められた意味を利 用した機械処理なのである。
(4) まとめ: 考えの構造を表現するリスト
ここでまでで、リストを元に表を生成する処理をもって、従来のXHTMLに定めら れた意味を利用する機械処理の例を示した。
XHTMLにおけるリスト要素(ul要素、ol要素、dl要素)は、きわめて基本的な意味
マークアップである。それは、考えの構造をリストとして表現するマークアップであ る。ある考えが、他のいくつかの考えのリストとして表現されているならば、そのリ ストには、以上の他にも役立てる道があるのではないか。
3.5.2.2 class属性を利用した機械処理
Microformats[6]の取り組みでは、XHTML のclass属性を利用して意味を与える。新た
な決めごととして、この意味を共有することで、Web文書の活用を促進しようとするもの である。
・ホテル シンディ 街中のシティホテル。
・爽快高原ファミリーホテル
家族で休暇を楽しむ滞在型ホテル。
・深緑コンドミニアム
森林に囲まれたコンドミニアム。
ここで定められたhCalendar[7]の応用として作成されたSyndy Chronicle[8]を例に、こ のような若干の決めごとが生み出す効果を示す。
(1) hCalendar
hCalendarでは、次のようにしてイベント情報をマークアップする:
<li class="vevent">
<abbr class="dtstart" title="1987-04-01">1987年</abbr>に <span class="summary">サンプル市に支社。</span>
</li>
ここでveventやsummaryというclass名がhCalendarで定められた意味を持ち、
これを共有することで機械処理を可能とする。
(2) Syndy Chronicle
Syndy Chronicleは、年表ビューア/エディタである。かつ、街、学校、ディスコグ
ラフィーや会社の歴史や計画と、自分の過去や将来を並べてみることを想定した自分 史ビューアである。すなわち、自分史だけでなく、自分のプロジェクトの歴史や製品 計画などを並べることで、歴史や将来を主観的に構成(sydicate)して見るためのツール である。
Syndy Chronicleの外観は次の通りで、2列の年表の左側が街や会社の歴史など参
照する歴史や計画、右側が自分の過去や将来である:
Syndy Chronicleでは、参照する年表と、自分史・将来とのそれぞれを複数のWeb
文書から構成することができる。
Syndy Chronicleは、hCalendar[7]またはhResume[9]でXHTML文書の中に記述さ れたイベントを対象にしている。また、年表などのグルーピングには OPML[10]や Atom[11]を利用している。
(3) まとめ: 年表を機械処理する意義
Syndy Chronicleの機械処理は、上記のように class名を手がかりにして、年表を
再構成するものである。前提となるマークアップは簡単なものである。
しかし、この簡単な仕組みを利用して、自分史・将来の視点で他者の年表を見るこ とで、単に、それぞれの年表を交互に見るのに比べて、新たな発見を得たり、あるい は、その地域や組織などへの一体感が深まるといった効果があると考える。