متوفر أيضًا بلغات أخرى: English · Español · Português · Français
محلل ترويسة Link: كل الروابط، لا رابط واحد لكل علاقة
الصق ترويسة Link من HTTP لترى كل رابط، وعمّ يتحدث، وكم رابطًا يُسقط محلّلٌ مفهرس بالعلاقة.
ما ترويسة Link؟
تفعل ترويسة Link في HTTP ما يفعله عنصر link في HTML: تشير من الاستجابة إلى مورد آخر وتبيّن صلة أحدهما بالآخر. وكل رابط هدفٌ بين قوسي زاوية تتبعه وسائط، أحدها rel وهو إلزامي. فواجهة برمجية مقسّمة إلى صفحات ترسل rel=next وrel=prev؛ وقد يرسل مستندٌ rel=describedby؛ وترسل صفحةٌ لها ترجمات rel=alternate واحدًا لكل لغة.
يعرّفها معيار RFC 8288، والشكل الذي يعرّفه قائمة. يبدو هذا بدهيًّا وهو بعينه ما تخطئ فيه أكثر الأدوات، لأن الطريقة المريحة لتسليم ترويسة Link إلى شيفرة التطبيق كائنٌ مفهرس بنوع العلاقة، تكتب فيه links.next.url. وهذا التمثيل لا يسع رابطين بالعلاقة نفسها، والمواصفة لا تجيزهما فحسب بل تعتمد عليهما.
تحلّل هذه الصفحة الترويسة بوصفها قائمة، وتطبّق مرساة كل رابط لتريك عن أي مورد يتحدث فعلًا، وتوسّع قيمة rel المتعددة إلى الروابط التي تقول المواصفة إنها تنشئها، وتخبرك بعدد الروابط التي يسعها محلّلٌ مفهرس بالعلاقة.
طريقة الاستخدام
- الصق قيمة الترويسة. الحقل كاملًا بلا اسمه. تفصل الفواصل بين الروابط، إلا داخل قوسي الزاوية أو داخل سلسلة بين علامتي اقتباس، وهذا أشيع مواضع الخطأ في تقسيم مرتجل.
- أعطِ رابط الصفحة التي وردت معها الترويسة. تُحلّ الأهداف والمراسي النسبية بالقياس إليه، وهو ما يتحدث عنه كل رابط ما لم تقل مرساةٌ غير ذلك. ولا أثر لعنصر base في متن الصفحة، وتنص المواصفة على ذلك صراحةً.
- اقرأ العدّ في الأسفل. يبيّن كم رابطًا تحمل الترويسة وكم نوع علاقة متمايزًا تستعمل. وحين يختلف العددان، فإن محلّلًا يعيد خريطة مفهرسة بالعلاقة يُسقط الفرق في صمت.
أين تختفي الروابط
ليس في معيار RFC 8288 ما يقول إن نوع العلاقة لا يرد إلا مرة واحدة. والمثال المضاد النموذجي هو البدائل اللغوية: فالصفحة المتاحة بالفرنسية والألمانية ترسل رابطين، كلاهما rel=alternate، ولا يختلفان إلا في hreflang. والمحلّل الذي يعيد كائنًا مفهرسًا بنوع العلاقة يسعه أحدهما. أما الآخر فيختفي، بلا خطأ ولا تنبيه.
وقد قيس هذا أثناء بناء الصفحة. فمن محلّلَي ترويسة Link منشورَين، يعيد أحدهما تلك الخريطة بالضبط: فأمام بديلين يعيد مُدخلة واحدة، وأمام رابطين بعلاقتين مختلفتين يعيدهما معًا. وهذا الضبط مهم، لأنه يبيّن أن الفقد خاصية في نوع القيمة المعادة لا في التحليل. أما المحلّل الآخر فيعيد الرابطين في كل مرة.
وثمة أمران يحسن قولهما صراحةً، لأنهما كانا حدسين لي تبيّن بطلانهما. فكلا المحلّلَين يوسّع قيمة rel المتعددة إلى روابط عدة على النحو الصحيح، وكلاهما يُظهر وسيط anchor. فالمشكلة ليست أن المنظومة تحلّل الترويسة تحليلًا رديئًا، بل أن شكلًا شائعًا للإجابة يعجز عن التعبير عما يجوز للترويسة قوله.
وتُقارَن أنواع العلاقات دون تمييز بين كبير الحروف وصغيرها، وتخوارزمية التحليل في ملحق المواصفة نفسها تحوّلها إلى الأحرف الصغيرة، فـ rel=NEXT وrel=next علاقة واحدة. ورابطان مكتوبان هكذا يتصادمان في خريطة مفهرسة للسبب ذاته.
المرساة تغيّر ما يتحدث عنه الرابط
سياق الرابط افتراضًا هو المورد الذي وردت معه الترويسة: الصفحة التي طلبتها. ويحلّ وسيط anchor محله، وتنص المواصفة صراحةً على أنه قد يشير إلى جزء من المورد نفسه أو إلى مورد ثالث بأكمله. فقد تحمل استجابةٌ عن مستند رابطًا يصف صلةً تخص مستندًا آخر.
وليس هذا تفصيلًا يجوز للمحلّل أن يتركه لمن يستدعيه. إذ يقول RFC 8288 إن تطبيقات الروابط يجب ألا تعالج الرابط دون تطبيق المرساة، وإن التطبيق العاجز عن تطبيقها ينبغي أن يتجاهل الرابط كلّيًّا. ومعاملة anchor وسيطًا آخر في كيس، إلى جانب type وhreflang، تُنتج الخطأ نفسه الذي تحذّر منه المواصفة: صلةٌ تُسجَّل على المورد الخطأ.
ولذلك يبيّن كل رابط هنا عمّ يتحدث، محلولًا، بدل إدراج anchor وسيطًا وتركك تنتبه. وحيث أزاحت مرساةٌ السياق، يقول الصف ذلك.
ما لا تستطيع هذه الأداة إخبارك به
لا تخبرك بما يرسله خادم. فأنت تلصق ترويسة، والصفحة تقرؤها. وإن أردت رؤية الترويسات الحقيقية لرابط ما، فلوحة الشبكة في متصفحك أو عميل HTTP في سطر الأوامر يعرضانها، بما فيها ترويسات Link المنفصلة العدة التي يجوز للاستجابة إرسالها وتُحسب قائمةً واحدة.
ولا تتحقق من أن نوع العلاقة يعني شيئًا. فالأنواع المسجَّلة تأتي من سجل IANA، وأنواع التوسعة يُفترض أن تكون روابط URI، لكن ترويسةً مملوءة بعلاقات مخترعة تبقى سليمة البناء، وستحلّلها هذه الصفحة راضيةً. وقائمة العلاقات المسجَّلة في هذا الموقع هي موضع التحقق من وجود اسم ما.
ولا تتبع شيئًا كذلك. فالهدف يُحلّ إلى رابط مطلق ويُترك عند ذلك؛ لا يُجلب شيء، ولا يُتحقق من أي رابط، والهدف الذي يعيد 404 يبدو تمامًا كالهدف العامل. أما وسيط type فهو تلميح بنص المواصفة نفسها، فالرابط الذي يقول text/html لا يضمن لك شيئًا عمّا ستحصل عليه فعلًا.
لماذا هي مجانية؟
تحليل ترويسة معالجةٌ لسلاسل نصية، وهو يجري داخل متصفحك. لا خادم في المسار، فلا شيء يستوجب فاتورة ولا حساب يلزم إنشاؤه.
لا يُرفع أي شيء. فالترويسة التي تلصقها لا تغادر التبويب.