متوفر أيضًا بلغات أخرى: English · Español · Português · Français
أداة اختبار XPath
قيّم تعبير XPath على ملف XML لديك، وشاهد أي الدوال تدعمها المتصفحات فعلًا، وما الذي تكتبه بدلًا منها.
ما أداة اختبار XPath؟
XPath لغة للإشارة إلى أجزاء من مستند XML: فمسار مثل //a[@class='external'] يحدّد كل رابط يحمل ذلك الصنف أينما وقع في الشجرة. وهي ما تستعمله مكتبات الكشط وأوراق XSLT وأدوات أتمتة المتصفح وكثير من صيغ الإعداد حين تحتاج أن تقول أي عنصر تقصد.
وأداة الاختبار تتيح لك كتابة تعبير وتشغيله على مستند تقدّمه أنت ورؤية ما يعود قبل أن تنقله إلى شفرتك. وهذا مهم لأن XPath يخفق صامتًا في الاتجاهين: فالتعبير الذي لا يحدّد شيئًا يشبه كثيرًا التعبير الخاطئ، والتعبير الذي يعطي خطأ يحدّثك عن الصياغة بينما المشكلة الحقيقية أن الدالة التي استعملتها غير موجودة.
وهذه الأداة تشغّل التعبير في محرك XPath في متصفحك أنت، وهو المحرك نفسه الذي ستستعمله نصوص صفحتك. وهي تقرأ التعبير أيضًا فتخبرك أي الدوال والمحاور متاحة هناك فعلًا، وهو الجزء الذي تترك أكثر الأدوات اكتشافه لك بالطريقة الصعبة.
كيفية الاستخدام
- اكتب تعبيرك. من مسار بسيط إلى آخر مثقل بالمسندات. ويتحدث التحليل أسفله أثناء كتابتك، قبل أن تشغّله أصلًا.
- ألصق ملف XML للبحث فيه. الأفضل مقطع من المستند الحقيقي. ويُحلَّل بوصفه XML، فيجب أن يكون سليم البنية: فالوسم غير المغلق يُبلَّغ عنه خطأَ تحليل بدل تجاهله صامتًا.
- اقرأ اللوحتين. النتائج هي ما أعاده محرك متصفحك. وتحتها تظهر كل دالة وكل محور في تعبيرك متاحًا أو غير متاح، ومعه بديل XPath 1.0 حيث يوجد بديل.
المتصفحات لا تتكلم إلا XPath 1.0
XPath المضمّن في كل متصفح هو نسخة 1999 ولا شيء بعدها. وتلك المواصفة تعرّف مكتبة أساسية من سبع وعشرين دالة بالضبط وثلاثة عشر محورًا بالضبط، وهذه هي اللغة كلها من وجهة نظر المتصفح. أما XPath 2.0 و3.1 فأضافا الكثير، ولا شيء منه متاح لك هنا، بل يعيش في معالجات XSLT 2.0 وفي مكتبات تحمل محركها الخاص.
وليس للنقص الشكل المرتّب الذي تتوقعه. فـ starts-with() من السبع والعشرين، وcontains() من السبع والعشرين، وends-with() ليست منها لأنها جاءت مع XPath 2.0. ومعنى ذلك أن أكثر الطرق طبيعيةً لتحديد الروابط إلى ملفات PDF هي بعينها الصيغة التي لا يمكن تشغيلها، والخطأ الذي يطلقه متصفحك يتحدث عن التعبير لا عن النسخة. وهذا الاختلال يوقع الناس باستمرار، وهو سبب وجود هذه الصفحة بدل أن تكون صندوقًا آخر يشغّل استعلامات.
والأمر نفسه في كل الجبهات. فلا دعم للتعابير النمطية إطلاقًا: matches() وreplace() وtokenize() كلها إضافات لاحقة، ولا يمكنك بناؤها مما بقي. ولا وجود لـ lower-case() ولا upper-case(). ولا لـ min() ولا max() ولا avg() ولا abs(). وليست هذه أركانًا غامضة، بل هي الدوال التي يقصدها الناس أولًا.
ولبعضها بدائل نزيهة في XPath 1.0 ولبعضها لا، ومعرفة أيها أيّ توفّر عليك عصر يوم. فـ ends-with() تُعاد كتابتها بدقة باستعمال substring() وstring-length()، مع تذكّر أن XPath يعدّ المحارف من واحد لا من صفر. وتبديل حالة الأحرف يمكن تقريبه بـ translate() إن هجّأت الأبجديتين، وهذا يصلح لـ ASCII لا غير. أما التعابير النمطية فلا مكافئ لها البتة، وعليها أن تغادر الاستعلام إلى الشفرة المحيطة به.
حدود معلنة
يُحلَّل مستندك بوصفه XML لا HTML. وهذا أشدّ الاثنين، وهو مقصود: فـ XPath معرَّف على شجرة XML، والتحليل المتساهل سيتيح لك أن تكتب هنا تعابير تسلك سلوكًا آخر أمام مستند حقيقي. والنتيجة العملية أن مقطع HTML واقعيًا فيه وسم غير مغلق سيُرفض، وسيلزمك ترتيبه أولًا.
ونطاقات الأسماء أحدّ ما في XPath، وهذه الصفحة لا تلطّفه. فإن أعلن مستندك نطاق أسماء افتراضيًا، فإن //title المجرد لن يحدّد شيئًا البتة، لأن الاسم غير المسبوق ببادئة في XPath 1.0 يعني بلا نطاق أسماء لا النطاق الافتراضي. ولا مخرج من ذلك داخل اللغة نفسها: فإما محلِّل نطاقات أسماء، وهو دالة لا يمكن كتابتها في صندوق نص، وإما الالتفاف بـ local-name().
والفحص الذي تجريه هذه الصفحة على تعبيرك يقرؤه ولا ينفّذه، فهو يتعرّف على الدوال والمحاور بأسمائها. وقد يجتاز تعبير ذلك الفحص ويظل خاطئًا لأسباب لا يلتقطها أي تحليل: وسيط من نوع خاطئ، أو مسند يعني غير ما قصدت. فلوحة النتائج هي الجواب، والتحليل موجود ليشرح إخفاقًا يصفه المتصفح وصفًا رديئًا.
وثمة أمر يُبلَّغ عنه قصدًا بدل افتراضه: محور namespace جزء من XPath 1.0 ومع ذلك كان الجزء الذي اختلفت فيه المتصفحات. وبدل أن تخبرك الصفحة بما يفعله متصفحك، تجري الفحص داخل متصفحك وتنقل ما تجده، ولذلك قد لا يوافق ذلك السطر ما يراه زميل لك.
لماذا هي مجانية؟
المحرك هو ما يحمله متصفحك أصلًا، فلا شيء يُشغَّل ولا شيء يُدفع ثمنه. وتقييم تعبير XPath لا يكلّف أكثر من أي جزء آخر من نصوص الصفحة.
لا يُرفع شيء مما تلصقه ولا يُخزَّن ولا يُسجَّل. فملف XML الذي تصحّحه عادةً مقطع من بيانات حقيقية تخص أحدًا، والطريقة الموثوقة لإبقاء ذلك خاصًا ألا نستقبله أبدًا.