تقنية

هوية خبر RSS: ماذا يبقى حين يتغير العنوان والرابط؟

لقطتا ملفينا: خط يصل n-01 القديم والمعدل، وخط يصل n-02 المتطابق، بينما يظهر n-03 والعنصر غير المحسوم منفصلين.
الخطوط تصل معرفات مثالنا نفسها؛ تغير النص لا ينقل الخط إلى n-03.

guid معرف اختياري؛ وقد يستعمله القارئ، وfalse يتيح قيمة لا تعامل كرابط دائم. [1]

الخلاصة السريعة

  • احتفظ n-01 بهويته في سياستنا، مع تغير عنوانه ورابطه في اللقطة الثانية.
  • اعتبرنا n-03 جديدا، ولو استعمل عنوان n-01 القديم ورابطه القديم نفسيهما.
  • سجل n-02 النتيجة نفسها بلا تعديل، لأن حقليه المقارنين بقيا متطابقين.
  • وضعنا العنصر بلا معرف في خانة غير محسومة؛ لم نبتكر له هوية من عنوانه.
  • قراءة ملفينا أعطت: معدل، جديد، كما هو، غير محسوم؛ الاعتماد على العنوان أخطأ في أول صفين.

جهز اللقطة الأولى كما هي

في تجربتنا خبران مؤلفان: «دفتر المطر» بمعرف n-01 ورابط ينتهي بـ/a، و«صورة الغيمة» بمعرف n-02 ورابط ينتهي بـ/b. نحتفظ بالثلاثية لكل خبر: المعرف والعنوان والرابط. روابط example.org بيانات تجريبية هنا؛ لم نفتحها ولم نجلب خلاصة من خادم.

احفظ الكتلة الأولى بترميز UTF-8 واسم feed-1.xml. أبق النصوص كما هي في الجولة الأولى كي تقارن سجلك بنتائجنا. أنشأنا هذين الملفين فعليا، وقرأنا محتواهما باستخدام ElementTree في Python 3.12.14؛ هذه ليست محاكاة لاستجابة قارئ أخبار بعينه.

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
  <title>دفتر تجريبي</title>
  <link>https://example.org/</link>
  <description>أمثلة مؤلفة</description>
  <item>
    <title>دفتر المطر</title>
    <link>https://example.org/a</link>
    <guid isPermaLink="false">n-01</guid>
  </item>
  <item>
    <title>صورة الغيمة</title>
    <link>https://example.org/b</link>
    <guid isPermaLink="false">n-02</guid>
  </item>
</channel></rss>
[1]

غيّر الحقول واترك اختبار الهوية صعبا

احفظ الكتلة التالية باسم feed-2.xml. صارت اللقطة تضم أربعة صفوف. في أولها أبقينا n-01 وغيرنا العنوان إلى «دفتر المطر بعد التصحيح» والرابط إلى /a2. وفي ثانيها منحنا n-03 العنوان القديم والرابط القديم. هذا التبادل مقصود: التشابه النصي والهوية التي اخترناها لا يعطيان القرار نفسه.

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
  <title>دفتر تجريبي</title>
  <link>https://example.org/</link>
  <description>أمثلة مؤلفة</description>
  <item>
    <title>دفتر المطر بعد التصحيح</title>
    <link>https://example.org/a2</link>
    <guid isPermaLink="false">n-01</guid>
  </item>
  <item>
    <title>دفتر المطر</title>
    <link>https://example.org/a</link>
    <guid isPermaLink="false">n-03</guid>
  </item>
  <item>
    <title>صورة الغيمة</title>
    <link>https://example.org/b</link>
    <guid isPermaLink="false">n-02</guid>
  </item>
  <item>
    <title>عنصر بلا معرف</title>
    <link>https://example.org/c</link>
  </item>
</channel></rss>
[1]

بقي الصف الثالث مطابقا لسابقه: n-02 مع «صورة الغيمة» و/b. أما الرابع فعنوانه «عنصر بلا معرف» ورابطه /c؛ تركناه بلا guid عمدا.

غياب guid لا يبطل العنصر وحده؛ تصنيفات المقارنة التالية سياستنا التعليمية. [1]

طبق سياسة المقارنة على أربع حالات

قررنا أولا البحث عن المعرف داخل اللقطة الأولى. إذا غاب المعرف عن الصف الحالي، نسجل «غير محسوم». وإذا وجد في الصف الحالي ولم يوجد في سجلنا القديم، نسجل «جديد». وإذا وجد في الاثنين، نقارن العنوان والرابط معا: التطابق التام يعني «كما هو»، وأي اختلاف يعني «معدل». هذه قواعد برنامجنا التعليمي وحده.

بهذه القواعد لم ننقل n-01 إلى خانة «جديد» بسبب التصحيح، ولم ندمج n-03 معه بسبب العنوان المشترك. تعاملنا مع الاسمين كسجلين منفصلين في هذه التجربة، وأبقينا الرابط الجديد ضمن بيانات السجل الأول. لا نستخدم عدد الحروف أو تشابه الكلمات لإصلاح معرف ناقص.

أربع حالات المثال، مع وجود المعرف في اللقطة الأولى ومطابقة حقلي العنوان والرابط وقرار المقارنة.
قرارات سياستنا للصفوف الأربعة، بما فيها الاحتفاظ بالحالة غير المحسومة.

اختبر الاعتماد على العنوان وحده

صنعنا ضابطا خاطئا عمدا: إن وجد العنوان في عناوين اللقطة الأولى، أعطيناه «كما هو»، وإلا «جديد». أعاد الضابط للصفوف الأربعة: «جديد، كما هو، كما هو، جديد». أخطأ في الصف الأول الذي صححناه، وفي الثاني الذي قدمناه كهوية جديدة؛ وطابق حكمنا على الثالث مصادفة لأنه لم يتغير.

في الصف الرابع لم يعط الضابط أي علامة على غياب المعرف، بل سماه جديدا. سياستنا أبقته غير محسوم، لئلا نحسم هذه الحالة اعتمادا على العنوان. النتيجة المفيدة من الاختبار ليست مجرد عدد الأخبار، بل معرفة الصفوف التي اختلف القرار فيها، والحقول التي استعملها كل مسار للوصول إليه.

احتفظ بالدليل وحدود التجربة

طابقت قراءة الملفين حقول الصفوف الستة: اثنان في اللقطة الأولى وأربعة في الثانية. ثم أعدنا القراءة بمحلل minidom مستقل، فحصلنا على الثلاثيات نفسها. مجموع قراراتنا واحد معدل، وواحد جديد، وواحد كما هو، وواحد غير محسوم. قلب ترتيب صفوف اللقطة الثانية لم يغير قرار أي صف عند ربط النتيجة بمعرفه أو بعنوان الحالة الناقصة.

لم نختبر معرفين مكررين داخل لقطة واحدة أو دمج قنوات مختلفة، ولم نعمم هذه السياسة على تطبيقات الاشتراك. احتفظ بالملفين الأصليين وجدول الحقول والقرار؛ فإذا عدلت تجربتك لاحقا، تستطيع بيان أي قاعدة غيرت النتيجة. لا تجعل تغيير العنوان في ملفك التجريبي يمحو السجل القديم قبل أن تنهي المقارنة.

المراجع

  1. RSS 2.0 Specification
أُعد المثال محليا في13 أكتوبر2026.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي وراجعته أدوات ذكاء اصطناعي. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.