ツリー構築
ツリー構築
ツリー構築は第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_mode | Doctypeベースのクイークス分類 |