XOXO 1.0: Extensible Open XHTML Outlines
XOXOとは、標準的なXHTMLで書かれたシンプルでオープンなアウトラインフォーマットで、(X)HTML, Atom, RSS, そしてarbitrary XMLに組み込むのに適しています. XOXOは microformat オープンスタンダードの一つです.
仕様ドラフト 2004-10-01
編者
作者
- Kevin Marks(Technorati, Inc)
- Tantek Celik(Technorati, Inc, formerly of Microsoft Corporation)
- Mark Pilgrim(IBM)
- Morten W. Petersen
著作権
This specification is (C) 2003-2024 by the authors. However, the authors intend to submit (or already have submitted, see details in the spec) this specification to a standards body with a liberal copyright/licensing policy such as the GMPG, IETF, and/or W3C. Anyone wishing to contribute should read their copyright principles, policies and licenses (e.g. the GMPG Principles) and agree to them, including licensing of all contributions under all required licenses (e.g. CC-by 1.0 and later), before contributing.
- Tantek: I release all my contributions to this specification into the public domain and I encourage the other authors to do so as well.
- When all authors/editors have done so, we can remove the MicroFormatCopyrightStatement template reference and replace it with the MicroFormatPublicDomainContributionStatement.
特許
この仕様はロイヤリティーフリーの特許方針に帰属するものです。特許方針に関してはW3C Patent PolicyやRFC3667、RFC3668をご覧下さい。
あらすじ
Attention.xmlについて話し合っていたとき、XHTMLで作るアウトラインおよびblogrollフォーマットの可能性をTantekが指摘しました。XHTMLで記述することにより、ブラウザで表示することも出来れば厳密なXML処理系でパースすることも可能です。このページはそのフォーマットについて考えるための場所として作られました。
名称
XOXOはeXtensible Open XHTML Outlinesの略称であり、「エックス オー エックス オー」、「ジョージョー」または「ショーショー」などと発音されています。
要約
XOXO はマイクロフォーマットの一つです。この仕様では、モジュールの骨格と、「XHTML のモジュール化」(XHTMLMOD)で定義されたモジュールに基づいて、新しい XHTML ドキュメントタイプを定義します。 XHTML として使いやすく、XML エンジンが処理してブラウザで簡単にインタラクティブな表示ができるようなアウトラインの土台となるのが XOXO の目的です。
XOXO ドキュメントタイプ
XOXO ドキュメントタイプは次の XHTML モジュールで構成されます。このモジュールにある要素、属性、最小内容モデルは「XHTML のモジュール化」(XHTMLMOD)で定義されています。要素は情報を提示するためにここで一覧にしますが、最終的には「XHTML のモジュール化」での定義を参照するべきです。このドキュメントのオンライン版では、下の一覧のモジュール名を、「XHTML のモジュール化」現行バージョン内のモジュール定義へのリンクとしています。
body, head, html, title
ハイパーテキストモジュール(Hypertext Module)
a
dl, dt, dd, ol, ul, li
メタ情報モジュール(Metainformation Module)
meta
スタイルシートモジュール(Style Sheet Module)
style 要素
スタイル属性モジュールモジュール(Style Attribute Module)
style 属性
link
ol と ul での compact 属性
XOXO プロファイル
XOXO の class 属性用の値を定義した XOXO の XMDP プロファイルは、xoxo-profile を参照してください。
簡単な XOXO の断片
マークアップ
<ol class='xoxo'>
<li>項目 1
<ol>
<li>下位項目 a</li>
<li>下位項目 b</li>
</ol>
</li>
<li>項目 2
<ol compact="compact">
<li>下位項目 c</li>
<li>下位項目 d</li>
</ol>
</li>
<li>項目 3
<ol>
<li>下位項目 e</li>
</ol>
</li>
</ol>
表示例
1. 項目 1 a. 下位項目 a b. 下位項目 b 2. 項目 2 3. 項目 3 a. 下位項目 e
'compact' 属性の使用法
「項目 2」という見出しの下位項目が開いた状態ではない(訳注:折りたたまれた状態である)ことを示すために、'compact' 属性を使ったことに注意してください。そこ以外に 'compact' 属性は無いので、他の見出しは開いた状態です。
表示例のようになるデフォルトスタイルルールの一例
ol.xoxo { list-style:decimal; }
ol.xoxo ol { list-style:lower-latin; }
ol[compact="compact"] { display:none; }
別の簡単な例
マークアップが簡単なまま表現を豊かにすることが可能であることを示す、MarkP による例の一式があります。
- グループを入れ子にした XO。これも XHTML に直接埋め込める
- standalone XHTML ページとしての XO(妥当な XHTML です)
- CSS でレイアウトした standalone XHTML としての XO(これも妥当な XHTML です)
- Chris Holland Outline Helper:上の例に手を加え、簡単のため CSS をコピーし、outlines.css と outlines.js への参照を追加して、compact 属性をつけた別の ul/ol/li を組み合わせて貼り付けた例
- セマンティックな指針に適合させようとする時、ol や ul 要素の "compact" 属性は、表示状態を操作する物となります。スクリプトの中で、スタイルに柔軟性を持たせるために下位項目を持つ li 要素にクラスを設定しました。CSS の指導者的立場の人達は、「'compact' 属性が設定されている ol ノードを含む li ノードを選択する」他の CSS セレクターで "li.expanded" を置き換えられるかもしれません。
- 「'compact' 属性が設定されている ol ノードを含む li ノードを選択する」CSS セレクターは「li ol[compact="compact"」になるでしょう(訳注:このセレクターは目的のノードを選択しません)。
- セマンティックな指針に適合させようとする時、ol や ul 要素の "compact" 属性は、表示状態を操作する物となります。スクリプトの中で、スタイルに柔軟性を持たせるために下位項目を持つ li 要素にクラスを設定しました。CSS の指導者的立場の人達は、「'compact' 属性が設定されている ol ノードを含む li ノードを選択する」他の CSS セレクターで "li.expanded" を置き換えられるかもしれません。
アウトライン項目のプロパティ
アウトラインは通常、項目と下位項目で構成されます。各項目(アウトライン項目)自体に、表示する必要のある何らかのプロパティ(別の言い方をすれば属性、メタデータ)があるかもしれません。上の Mark Pilgrim の例にあるように、実際にアウトライン項目のプロパティとして共通して追加されるのは URL でしょう。テキストによるアウトライン項目のラベル/タイトルも共通のプロパティと考えることができます。共通プロパティを幾つか挙げます。
- text(テキスト)
- description(説明)
- url(よく xmlurl や htmlurl と言われたり固定リンクと呼ばれる)
- title(タイトル)
- type(タイプ;URL が指しているリソースの MIME タイプのヒント)
アウトライン項目 <li>
のプロパティは、一般に入れ子になった定義リスト <dl>
で表現されます。厳密に言うと、<li>
の内側にあってその下にある全ての <ol>
、<ul>
、<li>
の前にある最初の <dl>
です。次の例では description(説明)プロパティを持つ「項目 1」という項目です(ここでの下位項目は、純粋に先ほどの例との比較用です)。
<ol class='xoxo'>
<li>項目 1
<dl>
<dt>description</dt>
<dd>この項目が、今考えている主要ポイントを示しています。</dd>
</dl>
<ol>
<li>下位項目 a</li>
<li>下位項目 b</li>
</ol>
</li>
</ol>
特別なプロパティ
定義リストの代わりに、セマンティックな XHTML ブロックの中にもっと便利で直接に表現できる特別なプロパティは少ししかありません。ほとんどの場合、上の共通プロパティの一覧から持ってこられます。次です。
- text、url、title、type、rel(relationship;関係の省略形)
これを単に(前の例では "description" プロパティを含んでいる)定義項目として表示するとしたら、次のようになるでしょう。
議論のためだけで規範的ではない XOXO 例:
<ol class='xoxo'>
<li>
<dl>
<dt>text</dt>
<dd>項目 1</dd>
<dt>description</dt>
<dd>この項目が、今考えている主要ポイントを示しています。</dd>
<dt>url</dt>
<dd>http://example.com/more.xoxo</dd>
<dt>title</dt>
<dd>項目 1 のタイトル</dd>
<dt>type</dt>
<dd>text/xml</dd>
<dt>rel</dt>
<dd>help</dd>
</dl>
</li>
ですがセマンティックな <a href>
要素を生かせば、このプロパティを利用する同じケースを飛躍的に簡単にすることができます。パーサーから見ると、これは <li>
のすぐ内側にある <a href>
要素に適用されます。
実際の XOXO 例:
<ol class='xoxo'>
<li><a href="http://example.com/more.xoxo"
title="項目 1 のタイトル"
type="text/xml"
rel="help">項目 1</a>
<!-- "text" プロパティが単に <a> 要素の内容になっていることに注意 -->
<dl>
<dt>description</dt>
<dd>この項目が、今考えている主要ポイントを示しています。</dd>
</dl>
</li>
他のプロパティは全て、"description" プロパティのように単純に定義リストに追加します。
XOXO の公開
XOXO は二つの形式で公開できます。妥当な XHTML と簡単な整形式 XML です。
妥当な XHTML の XOXO
妥当な XHTML の XOXO ページは完全な XHTML 文書です。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>XOXO ページ</title>
</head>
<body>
<ol class="xoxo">
<li><a href="URL-one">テキスト1</a></li>
<li><a href="URL-two">テキスト2</a></li>
...
</ol>
</body>
</html>
簡単な整形式 XML の XOXO
簡単な整形式 XML の XOXO ページのルート要素は "xoxo" という class 名を持つ ol
か ul
です。これは、配信と AHAH による(X)HTML ページへのトランスクルージョンに理想的な変形版です。
<ol class="xoxo">
<li><a href="URL-one">テキスト1</a></li>
<li><a href="URL-two">テキスト2</a></li>
...
</ol>
Content-Type
妥当な、または整形式の XHTML の XOXO は、ブラウザの互換性を最大限にするため次の Content-Type ヘッダーを付けて提供するべきです(SHOULD)。
Content-Type: text/html; charset=utf-8
また、次の Content-Type ヘッダーのうち一つを付けて提供しなければなりません(MUST)。
Content-Type: text/html; charset=utf-8 Content-Type: application/xhtml+xml Content-Type: application/xml
実世界での例
この節は参考情報です。
実世界に例がたくさんあります。ブログロールはほとんど全て XOXO としてパースできます。通常ハイパーリンクの項目一覧という順序なしリストであり、それは XOXO プロファイルの範囲内だからです。ここに例を並べてください。リストが長くなりすぎた時には専用ページに移動させることができます。
実装
この節は参考情報です。
- 各種 S5 ツール
- Christian Neukirchen は Ruby の XOXO パーサー兼ジェネレーターの xoxo.rb を書きました
- Odeo はユーザーの予約リストを XOXO で公開しています(訳注:現在 XOXO を使っていないようです --KitaitiMakoto 13:41, 7 January 2009 (UTC))。ここにある(訳注:リンク切れ)Ryan King のリストをご覧ください。
- Les Orchard はXOXO によるすばらしいアウトラインエディターを書きました。
- http://homepage.mac.com/ctholland/thelab/outlines/ は、折りたたんだり開いたりするのに "compact" と DHTML を使った動的でインタラクティブな XOXO のとてもすばらしいデモンストレーションです。
- http://tool-man.org/examples/sorting.html は、ドラッグ・アンド・ドロップで並べ替えられる、JavaScript と CSS を使った XOXO のリストのとてもすばらしいデモンストレーションです。
- http://www.opendarwin.org/~drernie/xoxo-datatypes.html (訳注:リンク切れ。http://ihack.us/2005/10/03/xoxo-datatypes/ でしょうか)は XOXO を Mac OS X プロパティリスト(訳注:リンク切れ)へマッピングします。
- XOXO を HTML に変換する Rails の一行(single line of rails;単線鉄道)
サンプルコード
- XOXO ファイルを読み書きするオープンソースのサンプルコードコードは xoxo-sample-code ページをご覧ください。
- xoxo-compact-sample ページもご覧ください。極めて単純な XOXO のルック・アンド・フィールを変え、また、ネストされたリスト用の、compact 属性に従って回転する三角マークを持たせる CSS と JavaScript のソースがあります。
XOXO スキーマ
この節は参考情報です。
注:以下は古いため、任意のプロパティで XOXO 項目に注釈を付けるという <dl> の使い方を反映させたアップデートが必要です。
- DTD
- スキーマ(Relax NG と DTD)(訳注:リンク切れ)
参考文献
規範的な参考文献
その他の参考文献
この節は参考情報です。
類似の試み
- XHTML アウトライン - DannyAyers は 2003 年 10 月(Kevin と Tantek が XOXO を思い付くほんの一、二ヶ月前)に、アウトラインをXHTML の既存の基本的な要素でセマンティックに表現するため、簡単な XHTML プロファイルを使うことを独自に考え出しました。
- XOW - それを編集可能にし、そこから RDF とブックマークリストを作ります(DannyAyers)
- XBEL、または XML Bookmark Exchange Language(XML ブックマーク交換言語)。インターネットの URI を共有する XML のオープンスタンダードで、ブックマーク(Internet Explorer ではお気に入り)としても知られます。
- OPML(Outline Processor Markup Language)。アウトライン用の XML フォーマット。
関係する読み物
関係のない読み物
- Questionable Content comic #493 - キャラクターのフェイは明らかに XOXO のファンです。
販売促進の素材/グッズ
- XOXO の服とアクセサリーが全てあります。XOXO 関連の物をオンラインで買いましょう。
議論
この仕様は現在進行中です。更なる側面が議論され、理解され、文章になり、そして追加されるでしょう。XOXO 関連のブレインストーミングその他の探求を保存しておくべき文書が別ページにあります。
- ある用途に XOXO をどのように使うかについては、xoxo-brainstorming をご覧ください。
- このページについて議論しているブログ(英語ページ)もご覧ください。
Q&A
- XOXO について疑問があれば xoxo-faq を確認してください。答えが見付からなければ質問を追加しましょう!
問題
- この仕様に関する問題は、別ページの xoxo-issues 文書に追加してください。