HTML5アウトラインアルゴリズムが構造に与える影響

HTML5アウトラインアルゴリズムが構造に与える影響

[[91338]]

HTML5 がリリースされてから長い時間が経ちますが、日々の仕事や個人の Web サイトに HTML5 を適用したいと考える人が増えています。人々は、おそらく自分自身に満足しているため、セクション、記事、アサイド、ナビなどの新しいタグの使用にますます慣れてきています。これらのラベルを複数の観点から理解しないと、さらに混乱した状況に陥る可能性があります。 HTML のアウトライン アルゴリズムは非常に重要なエントリ ポイントです。

まず 2 つの概要を見てみましょう。

これら2つは私の初期の作品です。当時は、特に2番目の構造をうまく書き、HTML5のタグも使って、新しい世界に足を踏み入れたと思っていました。 HTML アウトライン アルゴリズムを確認した後、これらのページをテストしましたが、本当にひどいものでした。最初のタイトルが紛らわしいのは言うまでもありませんが、「クリエイティブ ラインナップ」は実際には「ユーザー コメント」に従属しているのでしょうか? 2 番目についても、話すのは難しいです。名前のないものは一体何なのでしょうか?しかし、前進するためには常に辛い歴史を乗り越えなければなりません。

他の人がリファクタリングしたページアウトラインをいくつか見てみましょう。

視覚障害のあるユーザーで、これらの Web ページを閲覧するためにスクリーン リーダーに頼る必要があると想像してください。リーダーは階層的な方法で Web ページを解釈します。上記の Web ページのうち、必要な情報を取得するのに最も簡単だと思うのはどれですか。おそらく、この比較の後、誰もがアウトライン アルゴリズムが何であるかを知りたいと思うでしょう。

HTML アウトライン アルゴリズムとは何ですか?

アウトライン アルゴリズムにより、ユーザー エージェントは Web ページから情報構造の目次を生成し、ユーザーにページの概要をすばやく提供できます。書籍、PDF、ヘルプドキュメントなどと同様に、明確なディレクトリ構造があるため、ユーザーは必要なコンテンツを簡単に見つけることができます。適切に構成されたアウトラインは、検索エンジンの最適化に適しているだけでなく、スクリーン リーダーを使用して Web を閲覧する視覚障害のあるユーザー (または弱視のユーザー) にとっても大きな助けになります。

ヘルプ ドキュメントのディレクトリ構造は次のとおりです。

すべてのページにはアウトラインがあります。Web ページのアウトラインを理解するために、簡単な例から始めましょう。 8月のおすすめ映画をテーマにした映画紹介ページを作りたいとします。ページ構造は次のようになります。

  1. 1. 8月のおすすめ映画
  2. 1. 国内映画
  3. 1. 4人
  4. 2. 検索
  5. 2. 外国映画
  6. 1. アイス・エイジ4
  7. 2. 脱出

HTML4以前では、アウトラインを生成するためにhn(h1~h6)を使用していました。 HTML5 では、section、article、aside、nav などの新しいノード要素 (セクション コンテンツ) が導入され、いくつかの新しいルールが追加されています。これらについては後で詳しく説明します。

#p#

hn 生成されたアウトライン

おそらく HTML4 の構造は次のようになります。

  1. <div>  
  2.    < h1 > 8月のおすすめ映画</ h1 >  
  3.    < h2 >国内映画</ h2 >  
  4.    < h3 > 4つ</ h3 >  
  5.    < p >フォーとは… </ p >  
  6.    < h3 > 《検索》 </ h3 >  
  7.    < p >検索について.. </ p >  
  8.    < h2 >外国映画</ h2 >  
  9.    < h3 >アイスエイジ4 </ h3 >  
  10.    < p >アイス エイジ 4 について.. </ p >  
  11.    < h3 > 《脱出》 </ h3 >  
  12.    < p >エスケープとは… </ p >  
  13.    < p >上記のコンテンツはXunlei Kankanによって提供されています</ p >  
  14. <div>  

ウェブページのアウトラインはタイトルの階層によって生成されていることがわかります。

このコードのアウトラインを確認したい場合は、Geoffrey Sneddon が作成したアウトライン ツール Outliner を試してみてください (強くお勧めします)。ファイルをアップロードしてコード スニペットを入力できます。オンライン Web ページのアウトラインを表示する場合は、ブラウザにプラグインをインストールできます: Chrome: HTML5 Outliner (推奨) / Web Devoloper、Firefox: Web Devoloper、Opera: HTML5 Outliner。 (HTML5 アウトライナーでは中国語の文字は文字化けして表示されるため、テスト時には英語に切り替えることをお勧めします。ブラウザプラグインでは中国語の文字を表示できます)

各見出しは暗黙のセクションを生成します。比較的低いレベルの次の見出しは、その子ノードになります。同じレベルまたはより高いレベルの見出しは、このノードを閉じて新しいノードを生成します。次のコードをテストできます。

  1. < h3 > 4つ</ h3 >  
  2. < p >フォーとは… </ p >  
  3. < h3 > 《検索》 </ h3 >  
  4. < p >検索について.. </ p >  

または:

  1. < h3 > 《検索》 </ h3 >  
  2. < p >検索について.. </ p >  
  3. < h2 >外国映画</ h2 >  

ノード要素によって生成されたアウトライン

おそらく HTML5 の構造は次のようになります。

  1. <div>  
  2.    < h6 > 8月のおすすめ映画</ h6 >  
  3.    <セクション>  
  4.      < h1 >国内映画</ h1 >  
  5.      <記事>  
  6.        < h1 > 4つ</ h1 >  
  7.        < p >フォーとは… </ p >  
  8.      </記事>  
  9.      <記事>  
  10.        < h3 > 《検索》 </ h3 >  
  11.        < p >検索について.. </ p >  
  12.      </記事>  
  13.    </セクション>  
  14.    <セクション>  
  15.      < h5 >外国映画</ h5 >  
  16.      <記事>  
  17.        < h6 >アイスエイジ4 </ h6 >  
  18.        < p >アイス エイジ 4 について.. </ p >  
  19.      </記事>  
  20.      <記事>  
  21.        < h1 > 《脱出》 </ h1 >  
  22.        < p >エスケープとは… </ p >  
  23.      </記事>  
  24.    </セクション>  
  25.  
  26.    < p >上記のコンテンツはXunlei Kankanによって提供されています</ p >  
  27. <div>  

(まずは上記のコード内のさまざまな hn に注目してください) コードをアウトライナー ツールにコピーして表示します。生成されたアウトラインが、美しく書かれたレベルを持つ HTML4 と同じであることに驚きました。なぜhnの階層がここに表されていないのでしょうか?

その理由は、アウトラインが見出し要素ではなくノード要素によって生成されるためです。 HTML5 の新しいタグ section、article、aside、nav は明示的なノード (明示的なセクション) を生成し、各明示的なノードには独自のタイトル構造があります (もちろん、HTML4 および HTML5 のアウトライン アルゴリズムにも準拠しています)。このため、HTML5 では複数の h1 の存在が許可されています。ただし、すべてのブラウザとスクリーン リーダーが HTML5 を完全にサポートする前に、タイトル構造と Graceful Degradation を同時に考慮することをお勧めします。したがって、上記の構造は次のように変更できます。

  1. <div>  
  2.    < h1 > 8月のおすすめ映画</ h1 >  
  3.    <セクション>  
  4.      < h2 >国内映画</ h2 >  
  5.      <記事>  
  6.        < h3 > 4つ</ h3 >  
  7.        < p >フォーとは… </ p >  
  8.      </記事>  
  9.      <記事>  
  10.        < h3 > 《検索》 </ h3 >  
  11.        < p >検索について.. </ p >  
  12.      </記事>  
  13.    </セクション>  
  14.    <セクション>  
  15.      < h2 >外国映画</ h2 >  
  16.      <記事>  
  17.        < h3 >アイスエイジ4 </ h3 >  
  18.        < p >アイス エイジ 4 について.. </ p >  
  19.      </記事>  
  20.      <記事>  
  21.        < h3 > 《脱出》 </ h3 >  
  22.        < p >エスケープとは… </ p >  
  23.      </記事>  
  24.    </セクション>  
  25.    < p >上記のコンテンツはXunlei Kankanによって提供されています</ p >  
  26. <div>  

ここで注目すべきもう一つの疑問は、「上記コンテンツはXunlei Kankanによって提供されています」というフレーズは上記コンテンツのどの部分を指しているのかということです。 HTML4 構造では、この段落は暗黙のノード「The Escape from the Doom」に従属していますが、これは明らかに間違っています。 HTML5 アウトライン アルゴリズムはこの問題を非常にうまく解決します。

hn要素とノード要素の両方のアウトラインを生成する

ページに暗黙的なノード (h1 ~ h6) と明示的なノード (セクションなど) の両方が含まれている場合、アウトラインはどのように生成されますか? 1 つだけ覚えておいてください。明示的なノードには暗黙的なノードを含めることができますが、その逆はあり得ません。

  1. < h1 > 8月のおすすめ映画</ h1 >  
  2. <セクション>  
  3.    < h2 >国内映画</ h2 >  
  4.    < h3 > 4つ</ h3 >  
  5.    < p >フォーとは… </ p >  
  6.    < h3 > 《検索》 </ h3 >  
  7.    < p >検索について.. </ p >  
  8. </セクション>  

(コード1)

このコードの概要は次のようになります。

  1. 1. 8月のおすすめ映画
  2. 1. 国内映画
  3. 1. 4人
  4. 2. 検索
  1. < h1 > 8月のおすすめ映画</ h1 >  
  2. < h2 >国内映画</ h2 >  
  3. <記事>  
  4.    < h3 > 4つ</ h3 >  
  5.    < p >フォーとは… </ p >  
  6. </記事>  
  7. <記事>  
  8.    < h3 > 《検索》 </ h3 >  
  9.    < p >検索について.. </ p >  
  10. </記事>  

ただし、このコードの概要は次のようになります。

  1. 1. 8月のおすすめ映画
  2. 1. 国内映画
  3. 2. 4人
  4. 3. 検索

タイトル要素によって生成された暗黙的なノードがノード要素によって生成された明示的なノードと出会うと、そのノードは閉じられ、同じレベルの次のノードが生成されます。

無題のセクション

section、article、aside、navに加えて、HTML5では新しいノード要素も存在します。これらも使用してみましょう。

  1. <ナビゲーション>  
  2.    < ul >  
  3.      < li > < a   href = "" >ホーム</ a > </ li >  
  4.      < li > < a   href = "" >トピック</ a > </ li >  
  5.      < li > < a   href = " " >について</a> </li>  
  6.    </ ul >  
  7. </ナビ>  
  8. < h1 > 8月のおすすめ映画</ h1 >  
  9. <セクション>  
  10.    < h2 >国内映画</ h2 >  
  11. </セクション>  
  12. <セクション>  
  13.    < h2 >外国映画</ h2 >  
  14. </セクション>  

これをアウトライナーにコピーすると、nav にタイトル要素がないため、nav タグによって無題のセクションが生成されることがわかります。これはエラーではなく、また HTML5 構造が悪いとも考えられません。ただし、セクションや記事には適切なタイトルを付けることをお勧めします。どのようなタイトルを付ければよいかわからない場合は、div を使用する方が適切かもしれません。div がまだあることを忘れないでください。

ルートノード

重要な原則については前に説明しました。明示的なノードには暗黙的なノードを含めることができますが、その逆はあり得ません。リスト 1 によって生成されたアウトラインに気付くかもしれません。

  1. 1. 8月のおすすめ映画
  2. 1. 国内映画
  3. 1. 4人
  4. 2. 検索

タイトル要素 h1 (「8 月の映画おすすめ」) に続くノード要素セクション (「国内映画」) がその子ノードになります。暗黙的ノードに明示的ノードを含めることはできませんか?このとき、ルートノードを知っておく必要があります。

ルート ノードは独自のアウトラインを生成でき、そのタイトルとノードは祖先のアウトラインには影響しません (祖先のアウトラインには表示されません)。現在、ルート ノードは 6 つあります。

1. 本文、2. 引用ブロック、3. 詳細、4. フィールドセット、5. 図、6. td

テストすることができます:

  1. < h1 >私は兄です</ h1 >  
  2. <引用>  
  3.    <セクション>  
  4.      < h1 >私は blockquote の兄貴分です。アウトライナーでは見つかりません</ h1 >  
  5.    </セクション>  
  6. </引用>  
  7. < h2 >私は年下です</ h2 >  

定義ドキュメントでは、ノード要素は最も近い祖先ルートノードまたはノード要素の子ノードであると規定されています。コード 1 のタイトル要素 h1 (「8 月の映画おすすめ」) は本文のタイトルであり、ノード要素 section (「国内映画」) は本文の子ノードです。

もう 1 つ非常に重要な点があります。ドキュメントのタイトルは、ドキュメント内でノード要素ではない最初のタイトル要素です。次のコードをテストするのは非常に明確です。

  1. <セクション>  
  2.    < h1 >タイトルになりたいけどなれない</ h1 >  
  3. </セクション>  
  4. < h6 >一番下のレベルだけど、一番最初に登場した。 h6だけど、一番に来たよ</ h6 >  
  5. < h1 >最大の順序を持​​つことは無意味です。私はまだ古い 6 より下です。私は h1 ですが、h6 より後です</ h1 >  

このプロセス中に、もう一つの混乱する点にも遭遇しました。

  1. <セクション>  
  2.    < h1 >タイトルになりたいけどなれない</ h1 >  
  3. </セクション>  
  4. <セクション>  
  5.    < h2 >この文書のタイトルになりたいのですが、それもできません:( </ h2 >  
  6. </セクション>  
  7. <フッター>  
  8.    < h3 >私はフッターなのに、なぜタイトルになるのでしょうか?? </ h3 >  
  9. </フッター>  

理由は単純で、ヘッダーとフッターはノード要素ではないからです。

hグループ

Hgroup は理解しやすく、使いやすいです。その機能は、ドキュメントのアウトラインに影響を与えずにサブタイトルを追加できるようにすることです。表示順序に関係なく、最上位のタイトルのみがアウトラインに表示されます。

  1. < hグループ>  
  2.    < h3 >私はあなたの愛する2番目のタイトルです、私は役に立ちますが、アウトライナーには表示されません</ h3 >  
  3.    < h2 >私は見出しです。わざとここに来ました。私はグループ内で最高レベルの hn です。どこにいても、私はアウトライナーの一部になります。 </ h2 >  
  4. </hgroup>  

要約する

この記事の執筆時点では、HTML5 アウトライン アルゴリズムを完全にサポートしているブラウザーはないようです。しかし、これは HTML5 アウトライン アルゴリズムの研究には影響しません。現在、私たちは HTML5 + CSS3 の使用に熱心に取り組んでいます。 HTML5 アウトライン アルゴリズムを理解すると、新しいタグの使用法をより深く理解できるだけでなく、最も基本的なページ構造をより最適化して理解するのにも役立ちます。タイトル要素によって生成されるアウトラインでも、セマンティクスの兆候である完璧な階層構造を持つことができます。

この問題に注意を払うよう私に思い出させてくれた Daanzi に特に感謝します。

参考研究論文:

http://www.osmn00.com/rebuild/223.html

http://www.456bereastreet.com/archive/201103/html5_sectioning_elements_headings_and_document_outlines/

http://coding.smashingmagazine.com/2011/08/16/html5-and-the-document-outlining-algorithm/

http://html5doctor.com/outlines/

https://developer.mozilla.org/en-US/docs/HTML5 ドキュメントのセクションとアウトライン

オリジナルリンク: http://cued.xunlei.com/log047

【編集者のおすすめ】

  1. Go 言語と HTML5 で Web チャット ルームを構築する
  2. HTML5標準化グループが分裂
  3. 4 つの 2 人用チェス ゲームを実装するための数百行の HTML 5 コード
  4. HTML 5 が新たなネットワーク環境をもたらす
  5. Jscex と HTML 5 で作成された宝くじアプレット

<<:  App Store 中国地域がアルゴリズムを調整?一部のアプリではフルネームによる検索が機能しません

>>:  地下鉄路線図のための高速経路探索アルゴリズム

ブログ    
ブログ    

推薦する

セキュリティ | 機械学習の「データ汚染」を 1 つの記事で理解する

人間の目には、以下の 3 つの画像はそれぞれ異なるもの、つまり鳥、犬、馬に見えます。しかし、機械学習...

...

AGI を理解する: 知能の未来?

病気の診断から交響曲の作曲、車の運転から道徳的な判断に至るまで、人間が行えるあらゆる作業を機械が実行...

掃除ロボットはほこりを吸い取るだけでなく、プライバシーも「吸い取る」ことができます

家庭でますます一般的になりつつある掃除ロボットは、ほこりを吸い取るだけでなく、個人のプライバシーも「...

人工知能の時代では、次の7つの重要な要素を念頭に置く必要があります

政府は、他の経済的、社会的進歩と同様に、AI とデータの競争力を重視すべきです。研究への投資や技術リ...

COVID-19は非接触アクセス制御の新時代を加速させる

現在、新型コロナウイルス感染症のパンデミックが世界的に拡大し、私たちの知る世界は大きく変化しています...

玩具におけるIoTとAIの統合が世界のスマート玩具市場の成長を促進

IoT が広く普及したことにより、さまざまな目的のためのスマートな接続型ガジェットの開発が促進され...

...

20年後、AIはデータセンターアーキテクチャを再び分裂に引きずり込むのでしょうか?

Alpha GO が人間の囲碁プレイヤーに勝利して以来、AI はビジネス界全体で最もホットな用語に...

AI を活用して建設現場の活動を監視

[[348520]]建設現場は、人々とピースが適切なタイミングで組み合わさる必要がある巨大なパズルの...

通信産業の発展を後押しし、2つの主要ドローンの価値が強調される

最近、わが国の科学技術分野は新たな躍進を遂げました。ドローンによる「橋渡し」の力を借りて、量子ネット...

企業がAIベースのツールを使用して脆弱性を管理する方法

脆弱性の管理は、セキュリティ専門家にとって最優先事項の 1 つです。セキュリティ チームは、サイバー...

...

2021年の人工知能の注目分野

[[383142]]人工知能、またはよく耳にする AI とは、人間が作った機械が示す知能を指し、コン...

スマートシティ:都市生活にテクノロジーを統合する

この魅力的な旅をさらに深く探究する中で、モノのインターネット (IoT)、スマート交通システム、エネ...