Konstruksi Pohon
Konstruksi Pohon
Konstruksi pohon adalah tahap parsing kedua: ia mengonsumsi aliran tokenizer dan membangun DOM sesuai algoritma standar — termasuk perilaku pemulihan kesalahan yang terkenal. parse_html() membungkus seluruh pipeline dalam satu panggilan; TreeBuilder mengekspos mekanisme.
Parsing Satu Panggilan
parse_html() beralih dari teks markup ke pohon selesai; parse_fragment() menerapkan algoritma fragmen terhadap elemen konteks. Keduanya menggerakkan internal TreeBuilder yang sama melalui TreeBuilder.run().
Mode Penyisipan dan Elemen Terbuka
InsertionMode memodelkan mesin mode algoritma, dengan StackOfOpenElements dan TemplateInsertionModeStack melacak status konstruksi persis seperti yang dijelaskan dalam spesifikasi.
Pemulihan Kesalahan
Elemen format yang tidak bersarang dengan benar diselesaikan melalui run_adoption_agency_algorithm() — algoritma agensi adopsi standar — dan ActiveFormattingList melacak elemen format yang aktif. get_foster_parent_location() menerapkan foster parenting untuk konten tabel yang salah tempat.
Keanehan dan Konten Asing
determine_quirks_mode() mengklasifikasikan dokumen berdasarkan doctype mereka. Konten SVG dan MathML melewati adjust_svg_attributes(), adjust_mathml_attributes(), dan adjust_foreign_attributes(), dengan titik integrasi yang terdeteksi oleh is_html_integration_point() dan is_mathml_text_integration_point().
Tips dan Praktik Terbaik
- Gunakan
parse_html()kecuali Anda secara khusus membutuhkan introspeksi keadaan konstruksi - Gunakan
parse_fragment()dengan elemen konteks yang tepat — aturan parsing fragmen bergantung padanya - Saat men-debug pohon yang mengejutkan akibat markup yang buruk, perilaku agensi adopsi dan foster-parenting biasanya menjadi penjelasannya, bukan bug
Masalah Umum
| Masalah | Penyebab | Perbaikan |
|---|---|---|
| Konten tabel dipindahkan di luar tabel | Membina penataan konten yang salah tempat | Perbaiki penataan bersarang markup sumber |
| Tag pemformatan diduplikasi dalam output | Rekonstruksi agen adopsi | Perilaku standar yang diharapkan untuk misnesting |
| Dokumen dirender dalam mode quirks | Doctype yang hilang atau usang | Periksa determine_quirks_mode() pada input |
FAQ
Mengapa markup yang rusak menghasilkan pohon yang valid?
Algoritma standar mendefinisikan pemulihan untuk setiap kasus kesalahan — TreeBuilder mengimplementasikan jalur tersebut alih-alih memunculkan.
Apa itu algoritma adoption agency?
Prosedur standar untuk memperbaiki elemen format yang tidak bersarang dengan benar; diekspos sebagai run_adoption_agency_algorithm().
Apakah builder menangani SVG dan MathML?
Ya — atribut konten asing disesuaikan melalui fungsi adjust_*_attributes() khusus dengan deteksi titik integrasi standar.
API Reference Ringkasan
| Kelas/Metode | Deskripsi |
|---|---|
parse_html | Markup ke pohon dalam satu panggilan |
parse_fragment | Penguraian algoritma fragmen |
TreeBuilder.run | Jalankan konstruksi pohon |
InsertionMode | Mesin mode algoritma |
run_adoption_agency_algorithm | Perbaikan misnesting |
determine_quirks_mode | Klasifikasi keanehan berbasis Doctype |