HTMLにおけるアウトライン

章節構造

[30] (しょう) (chapter) (せつ) (section) 文章の構成上の単位です。 合わせて (しょう) (せつ) といいます。

章節と文書構造

[24] 章節とその周辺

見出しとページ名

見出しとサイト名

[64] Webサイトサイト名見出しではなく、 hn を使うべきではないと主張する人もいました。

[25] 現実的にも理論的にも、あまり意味のある主張とは思えません。

[50] >>49 論旨には同意しますが、そこで言われている要素SGML 以来の専門用語としての要素とは違うのでは。

和文の見出し

[53] 見出しのラベル名・番号の利用 | JAGAT, https://www.jagat.or.jp/archives/1933

[56] 小見出しの配置方法 | JAGAT, https://www.jagat.or.jp/archives/2992

マーク付け言語における章節構造

[14] HTML には章節を表す次の要素があります。

[15] HTML には関連して次の要素があります。

[21] アウトラインの記述手法として XOXO があります。

[22] 外部ファイルのアウトラインを表すリンク型 outline があります。

[23] CSS'outline'章節構造とは無関係です。

[63] HTML 以外にもいろいろな構造があります。

階数方式の破綻

[28] Webアプリケーションではページ構成上の部品をサイト上の別のページでは別の箇所に出現させることがよくあります。 例えば掲示板サイトでは記事の単独表示ページとスレッド内の記事一覧ページでは、 まったく同じ記事でも異なる章節の階層、異なる表示位置で表示されたりします。 このとき、 見出し要素階数が入っていると、 同じ生成ルーチンで流用するなら階数を呼び出し箇所によって変化させる仕組みが必要になりますし (正直面倒くさい)、 パフォーマンス向上のためページ構成上の部品をキャッシュすることができなくなってしまいます。 しかも CSS章節構造の深さよりも「記事」のような意味の方に付けられがちで、 そのためには階数を無視する他なくなってしまいます。

[29] 現実のWebサイトを見てみると、 全部 h1 に統一する HTML5 方式か、 サイト見出しは h1、 記事見出しは h3 のような機械的な規則を適用する (番号スキップや重複のような不整合があっても気にしない) 方式が多く見受けられます。

[82] 付番の破綻例

非 HTML 文書中の HTML 素片

[26] Weblogフィードに含まれる HTML 素片では、 対応する HTML 文書中で使われる見出し階数と同じ階数要素がそのまま使われていることがあります。

[27] 例えば、 HTML 版で記事内の見出しh4 要素が使われている場合に、 Atom フィードcontent 要素内でもそのまま h4 要素が使われていることがあります。

歴史

SGML における階数 (付番)

階数

HTML4 における見出しの階数

[14] 付番 (rank) n (注 >>15) は、 HTML 4 をはじめとする IETFW3C の規定する HTML 仕様では 16 が定義されています。

HTML 4 仕様書によれば、 h1 が最も重要度が高い見出し、 h6 が最も重要度が低い見出しです。

[15] 注意: SGML(SGML宣言および DTD 的) 意味では n は付番とは言えませんが、付番は付番です (開き直り)

[117] Word 9 は 7 を超えると、 classMsoHeading8 のような p, div または li を吐く模様です。 9 まで確認されています。

[118] >>117 Word 10 でも同じ。

[119] 付番を文書ではなく文書群に対するものと考える人も少なくないようですが、 それは誤りです。 (toc.htmlh1 からはじめて、 section1.htmlh2 からはじめて、 section1-subsection2.htmlh3 からはじめて、・・・というような使い方は誤り。)

元々付番は文書の中で使うもので、文書群なんてものは考えられていません。

(しかし想定外なのですから、 文書の一部分を別の文書に持っていった際に付番はそのままにしたようなもの、 と考えるのも悪くはない気がしますね。どうしたものでしょう?)

[20] LaTeXpart とか chapter がなくて section が最上位だったりするのは普通なことですから、 SGMLHTMLh2 くらいから始まっていても悪くはないような気もします。付番の最初は SGML 的には規定されていませんし。

やっぱり XHTML 2 のような見出しの水準に中立なモデル化が何も考えずに済むので便利でしょうかね。

[32] HTML が 1〜6 を標準として持っているのは歴史的な事情で、 それ以上の深い理由はありません。 hn 良い文書は 1〜4 程度に収めるべきだとか、 実際には 1〜3 くらいしか見かけないなあとか、 でもでかい文書のためには 1〜9 くらいあった方が良いとか、 色々言われてきましたが結局上限を変える程の根拠も無く、 現在に至っています。

[33] HTML 4 DTD の注釈 (参考) には There are six levels of headings from H1 (the most important) to H6 (the least important). と書かれています。

付番の飛び越し

[9] たとえば

<h1/>
<p>
<h3/>
<p>

のように、 h2 の抜けた HTML文書があります。 HTML 2 や HTML 4 の DTD 的にはこのような文書も妥当 (valid) です。

[10] しかしながら、見出しの水準は飛ばすべきではありません RFC 1866 5.4. し、飛ばすのを良く思わない人もいます HTML 4。 飛ばすことによって他の形式への変換に支障をきたすこともあります RFC 1866 5.4.

[36] h要素について考える -アクセシビリティ・アーキテクチャー技術開発メモ http://www.infoaxia.com/tools/blog/archives/2005/04/hx.html

この文書では、見出しの付番を飛ばしたくなる理由の一つとして、 文書が意味的に記述する内容における構造 (この例では、会社組織ののような構造) と文書の構造を整合させたい (が、がないがあったりする) という要求を挙げています。

心情的には理解できますが、付番の本来の semantics (のような単純な入れ子関係を表すに過ぎない。) からすると無理にあわせようとする必要は無いわけでして。

メモ: データ構造なら

<組織>
  <部>
    <課>
      <社員/>
    </課>
  </部>
  <部>
    <社員/>
  </部>
</組織>

のように付番を飛ばしたようなことをしても問題ないのですが、 HTML は文書マーク付け言語ですからね。

[38] >>37 のように記述内容の意味に引っ張られてしまうのは、 やっぱり HTML の hn によって章節を暗示する (section を使わない) 方法とか、 chaptersection のような名前によるレベル分けではなくて付番を使っている代償なのかなあ。

と思ったのだけど、名前を使ったところで記述内容の意味に引っ張られて chapter の真下に subsection を入れたいという要求はやっぱり出てきそうだ。

[39] >>10 HTML 4.0飛ばすのは良くないとされていたのが HTML 4.01飛ばすのはよくないと考える人もいるに改められたという説がありますが、 誤りです。

ISO-HTML

[31] ISO-HTML見出しの構造について特に定めていました。

[34] 関連記事: pre-html, ISO-HTML


[35] 平成時代中期日本の一部のWeb制作者らの間ではなぜか ISO-HTML に強い関心が持たれていました。

[55] そうした人々の間では、 見出しの記述方法を含む ISO-HTML の特徴に対する賛否が議論されていました。

[54] ただ残念ながらその議論は ISO-HTML が好ましいかどうかの政治的宗教的flame に終始しており、 技術的に見るべき所はほとんどなさそうです。 ISO-HTML

DTBook

[87] DTBook には hn (n ∈ [ 1, 6 ]) のほか leveln (section に相当するもの) があって付番の深さが強制されてます。

[88] それと別系統で level (section 相当) と levelhd (hn 相当) があります。 level には depth 属性があります。

XHTML2

[216] HTML要素概説
要素名
h
要素名
section
日付
説明
XHTML 2.0 案に、 h1 等のかわりに h, section がある。 現在の h1, section に当たる。 名前空間は紆余曲折がありながらも当初案と最終版ではHTML名前空間となっていた。
出典
XHTML2

HTML5 アウトライン

[1] HTML 5 Outline Tester (2008-03-05 19:53:50 +09:00 版) http://james.html5.org/outliner.html

[2] Re: several messages about <section>, <p>, <hr>, and related subjects (Ian Hickson 著, 版) http://lists.w3.org/Archives/Public/public-html/2008Feb/0369.html

[3] IRC logs: freenode / #whatwg / 20090817 ( 版) http://krijnhoetmer.nl/irc-logs/whatwg/20090817#l-371

[4] HTML5 のセクションアウトラインを取得する JavaScript - IT戦記 ( 版) http://d.hatena.ne.jp/amachang/20090914/1252897184

[5] [whatwg] Various threads with feedback on HTML elements ( ( 版)) http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-October/041109.html

[6] Web Applications 1.0 r8357 Make the outline algorithm easier to edit by making it all explicit steps and breaking out the (currently still identical) steps for entering sectioning content vs sectioning roots. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=8356&to=8357

[7] Web Applications 1.0 r8358 Make the outline algorithm handle sectioning roots more sensibly ( ( 版)) http://html5.org/tools/web-apps-tracker?from=8357&to=8358

[8] Web Applications 1.0 r8649 Make the outline algorithm also associate text nodes and comments with the sections ( ( 版)) http://html5.org/tools/web-apps-tracker?from=8648&to=8649

[9] Web Applications 1.0 r8698 Add a section encouraging user agents (especially ATs) to expose the outline and headings ( ( 版)) http://html5.org/r/8698

[10] HTML5 Outliner - Chrome ウェブストア ( 版) https://chrome.google.com/webstore/detail/html5-outliner/afoibpobokebhgfnknfndkgemglggomo/

[11] HTML5 のセクションアウトラインを生成してみよう! - IT戦記 ( 版) http://d.hatena.ne.jp/amachang/20090915/1252999677

[12] Suggest adding a warning about outline algorithm · Issue #83 · whatwg/html ( 版) https://github.com/whatwg/html/issues/83

[13] IRC logs: freenode / #whatwg / 20090902 ( 版) http://krijnhoetmer.nl/irc-logs/whatwg/20090902#l-168

[16] IRC logs: freenode / #whatwg / 20090906 ( 版) http://krijnhoetmer.nl/irc-logs/whatwg/20090906#l-236

[17] tantek#whatwg で、アウトラインは longdesc と同じく失敗だった、と言っている。著者hn をブラウザーでどう表示されるかしか気にせず使うし、 divsectionarticle の違いもわかりゃしない。 AT が正しく見出しレベルをレンダリングするためにアウトラインが必要とかいうけど、 そもそもみんな正しく使ってないんだから役に立たないだろ、と。

[18] SGML付番の時代から始まって、 HTML2HTML4ISO-HTMLHTML5 と章節の入れ子の扱いはマーク付け言語の設計者を引きつける伝統的な重大テーマなんですよね。 でも世間では設計者の思った通りには使ってもらえない。 そういう世間とマーク付け言語設計者の世界との乖離を解決していくのが WA1 時代前半のテーマの1つで、 SGML からの卒業、 longdesc の廃止、互換モード標準化内容モデル制約の緩和、と順番に片付けていったはずなのだけど、今なお未解決のまま残されているのがこれ、 という見方ができるわけだ。

[19] HTML outline bookmarklet http://www.whatwg.org/specs/web-apps/current-work/#headings-and-sections () https://gist.github.com/wakaba/7887273

main

main

HTML Standard からの outline algorithm の削除

[57] HTML5 時代の outline algorithm令和時代初期になって HTML Standard から削除されてしまいました。

[58] かわって outline という用語は定義されていますが、 文書中の要素の構造を考慮しないで見出しを取り出しただけで、 機能的には outline とは言いづらいものです。

[59] 新しい規定の元では、 h1 から h3 に飛ばすのは一応禁止されていますが、 h1 を使わないで h2 を使うようなケースは禁止しないと例示付きで示されているなど、 依然として付番の扱いは不統一、非合理的です。 この新しい規定も特段 Web の実態を調査するなど科学的方法で決められたものではなく、 現実と乖離しています。

[60] また、 sectionarticle で示される章節構造付番の不一致は一切禁止されておらず、 適合性検査器に対する HTML Standard の規定の有用性を毀損する形になっています。

[61] 従来通り章節構造を利用し見出しはすべて h1 を使っても新しい HTML Standard の規定には違反しません。 加えて、すべて h2 にしてもすべて h6 にしても構わなくなっています。

[65] 一応 h1 が1つはあるべきとはされていますが... 付番飛ばしが完全な禁止なのになぜこちらが完全な要求でないのか謎。

[62] つまり h1 の次を h3 にするような飛ばし方だけなぜか禁止されていますが、 それ以外は任意の見出し章節構造の組み合わせが許される形になっています。 これは HTML4 の規定に近いですが、 HTML4 の規定 (というか推奨) より一貫性がなくわかりにくく、 25年前より更に退化したと言わざるを得ません。

文字
文字
§
字形類似
S