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

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

ブログ    
ブログ    

推薦する

AI顧客サービス指標について話す

インテリジェントな顧客サービスの評価基準は何かというビジネス上の問い合わせを頻繁に受けます。これは答...

インターネット上の無料データサイエンス、機械学習、人工知能のMOOCベスト20

21 世紀において、伝統的な教育は人生において必要な段階ではなく、選択肢となっています。インターネ...

AIがタンパク質構造を予測し、サイエンス誌とネイチャー誌の年間技術革新として掲載され、無限の可能性を秘めている

2021 年に AI 分野で最も画期的な賞を授与するとしたら、誰を選びますか? 「サイエンス」と「ネ...

バイトダンスが声明を発表:アルゴリズムや技術の移転は行われていない

9月21日、ByteDanceは「TikTokに関する特定の虚偽の噂についての声明」を発表した。バイ...

経済不況が来ていますが、AIを拒否しないでください!

この不況は、私たちがこれまで経験したどの不況よりも深刻で、突然のものである。私たちは皆、嵐がすぐに過...

2024年に期待するAI関連ニュース5選

OpenAIが2022年11月にChatGPTをリリースした後、GPT-4やEU AI法案からAI検...

...

クローズドループへ! DriveMLM: LLM と自動運転行動計画の完璧な組み合わせ!

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

ChatGPTでマルウェアを分析する方法

翻訳者 |陳俊レビュー | Chonglouデジタル時代に入って以来、マルウェアはコンピュータ アプ...

トレンド: 2022 年の AI に関する 5 つの予測

2022年も、疫病やサプライチェーン危機などの悪影響は続くとみられ、AIに対する消費者の信頼獲得や気...

ロボットと触覚センシング技術の衝突、人間とロボットの触覚センシングを初めて探る記事

触覚は人間が相互作用を調整する主な方法の 1 つです。触覚を通じて知覚される触覚は、人間が物体の大き...

江長建、世界初のサイボーグと対談 - JD Smart Community 2.0 全国ローンチカンファレンス ライブプレビュー

[[374688]] 「半オーク」「半魚」… SF映画、漫画、おとぎ話では、それは驚くことではありま...

AIは「気質」に基づいて赤ちゃんの年齢と性別を正確に識別できる

PLOS ONE に掲載された新しい研究では、機械学習を使用して 4,438 人の乳児の「気質」デー...