بناء الشجرة
بناء الشجرة
إنشاء الشجرة هو مرحلة التحليل الثانية: يستهلك تدفق المُحلل ويبني شجرة DOM وفقًا لخوارزمية المعيار — بما في ذلك سلوكيات استعادة الأخطاء الشهيرة. parse_html() يلف كامل خط الأنابيب في نداء واحد؛ TreeBuilder يكشف عن الآلية.
تحليل بنقطة نداء واحدة
parse_html() ينتقل من نص العلامات إلى شجرة مكتملة؛ parse_fragment() يطبق خوارزمية القطعة على عنصر السياق. كلاهما يدفع نفس البنية الداخلية لـ TreeBuilder عبر TreeBuilder.run().
أنماط الإدراج والعناصر المفتوحة
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()مع العنصر السياقي المناسب — تعتمد قواعد تحليل الجزء على ذلك - عند تصحيح الأشجار المفاجئة الناتجة عن ترميز سيء، عادةً ما تكون سلوكيات وكالة التبني ورعاية الحضانة هي التفسير، وليس خطأً.
المشكلات الشائعة
| مشكلة | سبب | إصلاح |
|---|---|---|
| تم نقل محتوى الجدول خارج الجدول | تعزيز رعاية المحتوى غير في موضعه | إصلاح تداخل العلامات المصدرية |
| تكرار وسوم التنسيق في الإخراج | إعادة بناء وكالة التبني | السلوك المتوقع وفقًا للمعايير للـ misnesting |
| المستند يُعرض في وضع quirks | doctype مفقود أو قديم | تحقق من determine_quirks_mode() على الإدخال |
FAQ
لماذا ينتج عن الترميز المشوه شجرة صالحة؟
يعرّف خوارزمية المعيار استعادةً لكل حالة خطأ — TreeBuilder يطبق تلك المسارات بدلاً من الإطلاق.
ما هو خوارزمية وكالة التبني؟
إجراء المعيار لإصلاح عناصر التنسيق المتداخلة بشكل غير صحيح؛ يُعرض كـ run_adoption_agency_algorithm().
هل يتعامل المُنشئ مع SVG و MathML؟
نعم — تُعدّل سمات المحتوى الأجنبي عبر وظائف adjust_*_attributes() المخصصة مع اكتشاف نقطة دمج المعايير.
API Reference ملخص
| Class/Method | وصف |
|---|---|
parse_html | Markup إلى شجرة في استدعاء واحد |
parse_fragment | تحليل خوارزمية التجزئة |
TreeBuilder.run | بناء شجرة التشغيل |
InsertionMode | آلة وضع الخوارزمية |
run_adoption_agency_algorithm | إصلاح الأخطاء المتداخلة |
determine_quirks_mode | تصنيف العيوب بناءً على Doctype |