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 中国地域がアルゴリズムを調整?一部のアプリではフルネームによる検索が機能しません

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

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

ビール会社がIoTとAIを活用する方法

ワイン、酒類、ビール会社を含むあらゆる業界が、モノのインターネット (IoT) と人工知能 (AI)...

IBMとNASAが協力して地理空間AIモデルをオープンソース化し、気候科学の発展を目指す

8月4日、海外メディアFagen Wasanni Technologiesによると、IBMは最近、N...

...

自動車業界における 5G の登場は、車両のインターネットと自動運転の普及にどのように役立つのでしょうか?

5G技術は大規模に導入されつつあり、車両ネットワークや自動運転に大きな影響を与えるでしょう。今年2...

2018年の世界人工知能データから将来の発展傾向を見る

[[255801]]人工知能は新たな産業変革の中核的な原動力として、これまでの科学技術革命と産業変革...

AIがいかにして将来の採用担当者のスキルを生み出すか

AI が採用業務を自動化し続けるにつれて、採用担当者のスキルが変化するという共通認識が広まりつつあり...

大型モデルは集団的に制御不能です!南洋理工大学の新たな攻撃は主流のAIすべてに影響を与える

業界最先端の大型モデルが一斉に「脱獄」! GPT-4 だけでなく、通常はそれほど間違いを起こさない ...

アヴネットは18年連続で「トップ10ベスト国際ブランドディストリビューター」の称号を獲得しました。

[[284150]] 深圳でグローバル電子部品販売代理店優秀賞授賞式が開催されました。アヴネット中...

人工知能を扱うなら必ず知っておくべき音声認識技術の原理

人工知能の急速な発展に伴い、音声認識は多くのデバイスの標準機能になり始めています。音声認識はますます...

人工知能は私たちの生活をどのように変えるのでしょうか?

人工知能は本質的に、人間の知的労働を解放するでしょう。今後、サービスがボトルネックとなり、サービス産...

...

米国の改正規則:自動運転車は人間の制御を必要としない

米道路交通安全局(NHTSA)は木曜日、自動運転車メーカーに対し、衝突基準を満たすために完全自動運転...

人工知能と仮想現実のつながり

バーチャルリアリティ(VR)は、新しい実用的な技術です。バーチャルリアリティ技術は、コンピュータ、電...