« 第67回デジタルドキュメント研究会 | Main | 見出しエディター 0.3.1 »

CrossConceptをXHTML形式へ: 近況

CrossConceptをXHTMLベースにすると宣言したのが2月、はや6ヶ月、…まだできてません。仕様を決められない。時間がとれない。

これまでのCrossConceptは、コンセプトを示すツールとしては役割を果たしてると思う。1つで、あれこれ様々な可能性を示せる。でも、そのぶん抽象的すぎる。せめて、「箇条書きと連動する表エディター」くらいにはしないと。

データ構造は、当初はhAtom方式を考えていました。今は、いわば「Table rendering by non-visual user agents」方式で実装を進めてます。

hAtom方式
もともとAtomに準じて設計していたので、hAtomに倣えばよいと。
Table rendering by non-visual user agents方式
th要素、td要素のscope属性、headers属性、axis属性を使えば、所望のデータ構造を表現できるのではないか…?

次のようなCrossConceptの表を例に、検討の過程をダイジェストしてみます。

対象

  • Webデザイナー

トピック

  • Web 2.0

Webデザイナー

Web 2.0

とても適した演題になるでしょう。

図 CrossConceptの画面例

hAtom方式

hAtom方式では、表のセルに表示される内容は、例えば次のように表現するのだろうな:

<ul id="target">
 <li id="CIO">…</li>
 <li id="WD">Webデザイナー</li>
 <li id="OFFICE">…</li>
</ul>

<div class="hentry">
 <h3 class="entry-title">◎</h3>
  <div class="entry-content">
   <p>とても適した演題になるでしょう。</p>
  </div>
  <p>Related to: <a rel="bookmark" href="#WD">Webデザイナー</a></p>
  <p>Related to: <a rel="bookmark" href="#Web20">Web 2.0</a></p>
</div>

これを解釈して、CrossConceptが上図のような表として表示します。

…つまり、これだと、CrossConceptが表形式で表示しているコンセプト間の関係が、通常のブラウザ上では表形式では見えない。それはいやだ。

じゃぁ、最初から表にしてしまえばよいのでは?次はどうか?

<td class="hentry">
 <h3 class="entry-title">◎</h3>
  <div class="entry-content">
   <p>とても適した演題になるでしょう。</p>
  </div>
  <p>Related to: <a rel="bookmark" href="#WD">Webデザイナー</a></p>
  <p>Related to: <a rel="bookmark" href="#Web20">Web 2.0</a></p>
</td>

これだと、<a rel="bookmark" href="#WD">Webデザイナー</a>の邪魔さが際だつ。

でも、もう表になってるんだから、対応する見出しを指すリンクは不要なんじゃないの?これでどう?

<td class="hentry">
 <h3 class="entry-title">◎</h3>
  <div class="entry-content">
   <p>とても適した演題になるでしょう。</p>
  </div>
</td>

いや、リンクは必要。リストから「Webデザイナー」という項目を削除したら、連動して表の列を削除できなくては…。

Table rendering by non-visual user agents方式

HTML 4.01の「11.4 Table rendering by non-visual user agents」は、まるでCrossConceptのために書かれたかのよう。CrossConceptは、思いっきりvisualなuser agentだけど。「non-visual user agents」を「CrossConcept」に置き換えて読むと、scope属性、headers属性、axis属性を使うのが正しいと思えます。

<ul id="target">
 <li id="CIO">…</li>
 <li id="WD">Webデザイナー</li>
 <li id="OFFICE">…</li>
</ul>

<th id="TH-WD" axis="target">
 <a href="#WD">Webデザイナー</a>
</th>

<td headers="TH-WD TH-Web20">
 <p>◎</p>
 <p>とても適した演題になるでしょう。</p>
</td>

headers属性はIDREF型なのですね、HTML唯一の。

axis属性も実は同様なのかも。CrossConceptはこれを、カンマ区切りのIDREFもどきとして扱うことにします。

HTML 4.01では次のようになっているので、この扱い方はCrossConcept固有のモノとなりますが、規格違反にはならないでしょう。

  • axis = cdata [CI]。つまりcase-insensitive
  • The value of this attribute is a comma-separated list of category names.
  • This specification does not require user agents to handle information provided by the axis attribute, nor does it make any recommendations about how user agents may present axis information to users or how users may query the user agent about this information.

HTML 4.01のaxis属性が、大文字小文字を区別せず、また区切りにカンマを使うのは、speech synthesizersが読み上げることを想定しているから、かも。

要求定義と暗黙的に知る過程

こうして検討する過程で、自分がCrossConceptを何だと思っているのかが分かってきます。これを外したらCrossConceptじゃなくなる、そういうものは何か?

また、CrossConceptを日常的に使ううちに感じるもどかしさを整理してみると、XHTMLベースに移行することで達成したいことも見えてきました。

  • CrossConceptで表に見えるモノは、ブラウザでも表に見せたい。印刷も任せたい。
  • 素のXHTMLのリストと表から、CrossConcept用の構造を構築できるようにしたい。

ところで…、ここで、少し話題を変えます。

データ構造が決まるとき、別の何かも決まるのですね。同時進行で、寄り添うように決まる。でも、両者の論理的な関係は、後者の「別の何か」を前提にして前者の「データ構造」が決まる、というものです。「別の何か」が「データ構造」の副産物であるとか、副次的であるとかいうのは違う気がします。

このような「決めごと」「知ること」の構造を踏まえて、来週、「知識再利用システムならびにその展開」という企画セッションでお話しする予定です。

TrackBack

TrackBack URL for this entry:
http://xyndy.oops.jp/cgi/mt/mt-tb.cgi/120

YAMAGUCHI Taku
(FAMILY Given)

About

This page contains a single entry from the blog posted on August 14, 2008 11:45 PM.

The previous post in this blog was 第67回デジタルドキュメント研究会.

The next post in this blog is 見出しエディター 0.3.1.

Many more can be found on the main index page or by looking through the archives.