ツリー構築

ツリー構築

ツリー構築は第2のパース段階です:トークナイザのストリームを消費し、標準アルゴリズムに従って DOM を構築します — その有名なエラー回復動作も含みます。parse_html() は全パイプラインを1回の呼び出しでラップします;TreeBuilder は機構を公開します。


ワンコールパース

parse_html() はマークアップテキストから完成したツリーへ変換します;parse_fragment() はコンテキスト要素に対してフラグメントアルゴリズムを適用します。両者は TreeBuilder.run() を通じて同じ TreeBuilder の内部を駆動します。

挿入モードとオープン要素

InsertionMode はアルゴリズムのモードマシンをモデル化し、StackOfOpenElements と TemplateInsertionModeStack が仕様が記述する通りに構築状態を正確に追跡します。

エラー回復

入れ子が不適切なフォーマット要素は run_adoption_agency_algorithm() — 標準の採用機関アルゴリズム — を通じて解決され、ActiveFormattingList はアクティブなフォーマット要素を追跡します。get_foster_parent_location() は誤って配置されたテーブルコンテンツに対してフォスター・ペアリングを実装します。

クイークスと外部コンテンツ

determine_quirks_mode() は文書をdoctypeから分類します。SVG と MathML コンテンツは adjust_svg_attributes()、adjust_mathml_attributes()、adjust_foreign_attributes() を経由し、統合ポイントは is_html_integration_point() と is_mathml_text_integration_point() によって検出されます。


ヒントとベストプラクティス

  • 特に構築状態の内省が必要な場合を除き、parse_html() を利用してください。
  • 正しいコンテキスト要素とともに parse_fragment() を使用してください — フラグメント解析規則はそれに依存します。
  • 不適切なマークアップから生じる予期せぬツリーをデバッグする際、採用機関とフォスター・ペアリングの動作が原因であることが多く、バグではありません。

一般的な問題

問題原因修正
テーブルの内容がテーブル外に移動しました誤って配置されたコンテンツの養子縁組ソースマークアップの入れ子構造を修正する
出力にフォーマットタグが重複しています養子縁組機関の再構築ミスネストに対する期待される標準動作
ドキュメントがクイークスモードでレンダリングされますdoctypeが欠如しているかレガシーです入力上の determine_quirks_mode() を確認してください

FAQ

なぜ不正なマークアップでも有効なツリーが生成されるのですか?

標準アルゴリズムはすべてのエラーケースに対するリカバリを定義しています — TreeBuilder は例外を発生させるのではなく、これらのパスを実装します。

adoption agency アルゴリズムとは何ですか?

標準の手順は、入れ子が不適切なフォーマット要素を修復するもので、run_adoption_agency_algorithm() として公開されています。

ビルダーは SVG と MathML を処理しますか?

はい — 外部コンテンツ属性は、専用の adjust_*_attributes() 関数を通じて、標準の統合ポイント検出とともに調整されます。


API Reference の概要

クラス/メソッド説明
parse_htmlマークアップを一度の呼び出しでツリーに変換
parse_fragmentフラグメントアルゴリズムの解析
TreeBuilder.runツリー構築の実行
InsertionModeアルゴリズムモードマシン
run_adoption_agency_algorithmネストミスの修正
determine_quirks_modeDoctypeベースのクイークス分類

参照

 日本語