سأكون صريحًا — عندما أرى "XML" في 2026، أول ما يخطر ببالي هو "كود قديم". لكن هذا غير عادل في الواقع. XML يشغّل بهدوء بعض أهم الأنظمة على كوكب الأرض، ولن يختفي في أي وقت قريب. دعني أوضح لك لماذا.

أين لا يزال XML يتصدر المشهد

البنوك والمالية: كل تحويل بنكي في أوروبا يمر على الأرجح عبر رسائل ISO 20022 — وهي XML. التقارير المالية تستخدم XBRL (أيضًا XML). نحن نتحدث عن تريليونات الدولارات تتدفق عبر أنابيب XML كل يوم.

الرعاية الصحية: HL7 FHIR يستخدم JSON وXML معًا، لكن رسائل HL7 v2/v3 القديمة التي تعمل عليها معظم أنظمة المستشفيات؟ XML خالص. سجلات المرضى، نتائج المختبر، الوصفات الطبية — كلها XML.

مستندات Office الخاصة بك: كل ملف .docx و.xlsx و.pptx هو في الواقع أرشيف ZIP مليء بملفات XML. افتح واحدًا يومًا ما — إنه أمر رائع (ومخيف بعض الشيء).

تطوير Android: كل ملف تخطيط في Android هو XML. activity_main.xml هو على الأرجح أول ملف ينشئه كل مطور Android.

أدوات البناء: ملف pom.xml في Maven، ملفات .csproj في .NET، تكوينات Spring Framework — XML متجذر بعمق في سلاسل أدوات المؤسسات.

ما يمكن لـ XML فعله ولا يستطيع JSON

مساحات الأسماء: تخيل دمج عناصر من مفردات مختلفة في مستند واحد دون تعارض في الأسماء. مساحات أسماء XML تجعل هذا ممكنًا. إنها أساسية لصيغ مثل SVG المضمن في HTML، أو مزج رؤوس SOAP مع حمولات مخصصة.

المحتوى المختلط: حاول تمثيل فقرة تحتوي على بعض الكلمات العريضة وأخرى المائلة في JSON. في أفضل الأحوال سيكون الأمر محرجًا. XML يتعامل مع هذا بشكل طبيعي لأنه صُمم للمستندات، وليس فقط للبيانات.

تحويلات XSLT: يمكنك كتابة ورقة أنماط XSLT واحدة تحوّل XML إلى HTML أو PDF أو صيغة XML أخرى أو نص عادي. إنها لغة تحويل تصريحية لا يوجد لها مكافئ حقيقي في عالم JSON.

التحقق من المخطط: XML Schema (XSD) أكثر تعبيرية من JSON Schema في مجالات كثيرة. يمكنه فرض ترتيب العناصر، وتسلسلات الأنواع المعقدة، والقيود بين الحقول التي يواجه JSON Schema صعوبة معها.

مثال من العالم الحقيقي

لنفترض أنك تبني نظام تجارة إلكترونية يحتاج لتوليد فواتير. مع XML + XSLT، تخزن بيانات الفاتورة في XML، ثم تطبق أوراق أنماط XSLT مختلفة لتوليد: نسخة HTML للمتصفح، ونسخة PDF للطباعة، ونسخة EDI لنظام المورد — كل ذلك من نفس البيانات المصدرية. حاول فعل ذلك مع JSON.

مساحات أسماء XML في العمل

مساحات الأسماء هي إحدى ميزات XML التي تبدو مربكة حتى تحتاجها فعلاً. إليك مثالاً عملياً — أيقونة SVG مضمنة داخل مستند XHTML:

xml

بدون مساحات الأسماء، لن يعرف المحلل ما إذا كان ينتمي إلى مفردات HTML أو مفردات SVG. مساحات الأسماء تتيح لك مزج المفردات بحرية في مستند واحد، وهذا شيء لا يملك JSON أي آلية له ببساطة.

الأخطاء الشائعة التي يرتكبها المطورون مع XML

بعد سنوات من العمل مع XML في أنظمة الإنتاج، إليك المزالق التي أراها في أغلب الأحيان:

1. تجاهل إعلانات الترميز. إذا كان ملف XML الخاص بك يحتوي على أحرف غير ASCII لكنك نسيت إعلان الترميز، ستفترض المحللات UTF-8 أو أيًا كان إعدادها الافتراضي. صرّح به دائمًا بشكل صريح:

xml

2. استخدام السمات عندما تكون العناصر أكثر منطقية. السمات لا يمكنها الاحتفاظ بهياكل معقدة، ولا يمكن تكرارها، ولا تتطور بسهولة. إذا كانت القيمة قد تزداد تعقيدًا لاحقًا، استخدم عنصرًا فرعيًا بدلاً من ذلك.

3. عدم التحقق مقابل مخطط. تمرير XML بدون تحقق هو وصفة للفشل الصامت. إذا كان لديك XSD، استخدمه. إنه يكتشف مشاكل البيانات في وقت التحليل بدلاً من ترك البيانات السيئة تتسرب عبر نظامك.

4. بناء XML عن طريق ربط السلاسل النصية. لا تفعل هذا أبدًا — إنها ثغرة حقن تنتظر الحدوث. استخدم دائمًا مكتبة XML مناسبة أو منشئ DOM.

نصائح الأداء لمعالجة XML

محللات XML تأتي في نوعين رئيسيين، واختيار النوع الصحيح يهم كثيرًا للأداء:

  • محللات DOM تحمّل المستند بأكمله في الذاكرة كشجرة. رائعة للمستندات الصغيرة إلى المتوسطة حيث تحتاج وصولاً عشوائيًا. سيئة للملفات الكبيرة — ملف XML بحجم 100 ميجابايت يمكن أن يستهلك أكثر من 1 جيجابايت من ذاكرة الوصول العشوائي كشجرة DOM.
  • محللات SAX/StAX تعالج المستند كتدفق، عنصر واحد في كل مرة. تستخدم ذاكرة شبه معدومة وهي أسرع بكثير للملفات الكبيرة. المقايضة هي أنك لا تستطيع التنقل في المستند.

إليك القاعدة العامة: إذا كان XML الخاص بك أقل من 10 ميجابايت، DOM مناسب. أكثر من 10 ميجابايت، فكر جديًا في التدفق. أكثر من 100 ميجابايت، التدفق إلزامي ما لم تستمتع بمشاهدة خادمك ينفد من الذاكرة.

XML مقابل JSON: مرجع سريع

الميزةXMLJSON
التعليقاتنعم ()لا
مساحات الأسماءنعملا
التحقق من المخططXSD, RelaxNG, SchematronJSON Schema
المحتوى المختلطدعم أصليحلول بديلة محرجة
أنواع البياناتعبر XSDString, number, boolean, null, array, object
التحويلXSLTكود مخصص
حجم الملفأكبر (وسوم مطوّلة)أصغر
سرعة التحليلأبطأأسرع
قابلية القراءة البشريةجيدة (عند التنسيق)جيدة

تاريخ موجز لـ XML

نُشر XML كتوصية W3C في فبراير 1998. صُمم كمجموعة فرعية مبسطة من SGML (Standard Generalized Markup Language)، الذي كان موجودًا منذ الثمانينيات لكنه كان معقدًا بشكل سيء السمعة. كان الهدف إنشاء صيغة قابلة للقراءة من البشر والآلات معًا، صارمة بما يكفي لتجنب الغموض، ومرنة بما يكفي لأي مجال. خلال العقد الأول من الألفية الثالثة، كان XML هو *الصيغة* لتبادل البيانات. خدمات SOAP الويب، موجزات RSS، موجزات Atom، XHTML — كل شيء كان XML. ثم جاء JSON واستحوذ على مساحة واجهات API الويب، لكن XML احتفظ بكل مجال تهم فيه ميزاته الفريدة (مساحات الأسماء، المخططات، التحويلات) فعلاً.

مطور XML الحديث

معظم المطورين اليوم يعملون في بيئات هجينة. يستخدمون JSON لواجهات API الويب والاتصال في الوقت الحقيقي، وXML لمعالجة المستندات وتكامل المؤسسات والامتثال التنظيمي. معرفة كلتا الصيغتين — ومتى تستخدم كل واحدة — هي مهارة قيّمة حقًا.

أمان XML: XXE ومزالق أخرى

إذا كان هناك شيء واحد في XML يبقي مهندسي الأمان مستيقظين في الليل، فهو XXE — هجمات XML External Entity. وبصراحة، يجب أن يقلقك أنت أيضًا. XXE موجود في قائمة OWASP Top 10 لسبب وجيه، ولا يزال يفاجئ المطورين في 2026.

إليك كيف يعمل XXE: يتيح لك XML تعريف "كيانات" — في الأساس متغيرات — في إعلان نوع المستند (DTD). الكيان *الخارجي* يمكن أن يشير إلى عنوان URL أو مسار ملف على الخادم. إذا كان المحلل مهيأ لحل الكيانات الخارجية (كثير منها كذلك افتراضيًا)، يمكن للمهاجم صياغة XML يقرأ ملفات عشوائية من خادمك:

xml

عندما يعالج المحلل هذا، يستبدل &xxe; بمحتويات /etc/passwd. هكذا ببساطة، يقرأ المهاجم ملفات حساسة من نظامك. في الهجمات الأكثر تقدمًا، يمكنهم حتى إجراء طلبات HTTP صادرة من خادمك (Server-Side Request Forgery)، أو التسبب في حجب الخدمة بهجوم "billion laughs" الشهير — توسع كيانات متكرر يستهلك كل الذاكرة المتاحة.

الحل بسيط: عطّل معالجة الكيانات الخارجية. إليك كيفية فعل ذلك بلغتين شائعتين:

javascript
python

بالإضافة إلى XXE، احذر من حقن XML — حيث يتم إدراج مدخلات المستخدم في XML بدون ترميز هروب مناسب. إنه مكافئ XML لحقن SQL. استخدم دائمًا مكتبة بناء XML مناسبة بدلاً من ربط السلاسل النصية (وهو ما ذكرته في قسم الأخطاء الشائعة، لكن يستحق التكرار لأنه *بهذه* الأهمية).

القاعدة الذهبية: لا تحلل أبدًا XML غير موثوق بإعدادات المحلل الافتراضية. عطّل دائمًا بشكل صريح حل الكيانات الخارجية، ومعالجة DTD، ومعالجة XInclude. تعامل مع XML من العالم الخارجي بنفس الشك الذي تتعامل به مع مدخلات المستخدم في استعلام SQL.

XPath: استعلام XML كالمحترفين

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

فكر في XPath مثل محددات CSS لكن لـ XML. بدلاً من اجتياز DOM يدويًا بحلقات متداخلة، تكتب تعبيرًا موجزًا يختار بالضبط العقد التي تريدها. إليك بعض الأمثلة العملية:

plaintext

إليك كيفية استخدام XPath في JavaScript وPython — اللغتان اللتان يلجأ إليهما معظم المطورين:

javascript
python

شيء يستحق الذكر: JSON ليس لديه لغة استعلام مدمجة. أقرب مكافئ هو jq، وهو رائع لكنه أداة خارجية وليس جزءًا معياريًا من الصيغة. XPath مدمج في نظام XML البيئي — مدعوم أصلاً من المتصفحات، ومتاح في كل لغة برمجة تقريبًا، وموحد من W3C. إنها إحدى المزايا التنافسية الحقيقية لـ XML.

XPath يشكل أيضًا الأساس لـ XSLT (الذي يختار العقد للتحويل) وXQuery (لغة استعلام كاملة لقواعد بيانات XML). بمجرد تعلم XPath، تكون قد فتحت عائلة كاملة من تقنيات XML.

XML في معايير الصناعة المتخصصة

ذكرت البنوك والرعاية الصحية سابقًا، لكن وصول XML إلى المعايير المتخصصة بالصناعة أعمق بكثير من ذلك. إليك جولة في المجالات التي لا يُستخدم فيها XML فحسب — بل هو *مطلوب*:

القانون: الصناعة القانونية تعتمد بشكل كبير على XML لتقديم الملفات القضائية وإدارة القضايا. LegalXML، المطور من OASIS، يوحد التقديم الإلكتروني للمحاكم والاستشهادات القانونية وبيانات القضايا الوصفية. في الولايات المتحدة، تفرض العديد من أنظمة المحاكم بالولايات صيغ تقديم إلكتروني مبنية على XML. إذا كنت تبني تقنية قانونية، فأنت تبني على XML.

النشر: هذه واحدة تفاجئ الناس — كل كتاب إلكتروني EPUB قرأته مبني على XML. ملفات EPUB هي أرشيفات ZIP تحتوي على ملفات محتوى XHTML (وهي XML)، وواصف حزمة OPF (XML)، ومستند تنقل (XML). DocBook، صيغة XML أخرى، كان المعيار للوثائق التقنية منذ التسعينيات. O'Reilly Media اشتهرت باستخدام DocBook لسنوات لإنتاج كتبها بصيغ إخراج متعددة من مصدر XML واحد.

العلوم والرياضيات: MathML هو معيار W3C لتمثيل الترميز الرياضي في XML. مدعوم من جميع المتصفحات الحديثة وأساسي للنشر العلمي على الويب. ثم هناك Chemical Markup Language (CML) للهياكل الجزيئية، وAstronomical Markup Language للبيانات النجمية، وعشرات المفردات العلمية الأخرى بـ XML. عندما تهم الدقة والتمثيل الواضح للبيانات — وفي العلوم، تهم دائمًا — XML يقدم ذلك.

الحكومة والمشتريات: Universal Business Language (UBL) هو معيار OASIS تستخدمه الحكومات حول العالم للمشتريات والفوترة وإدارة سلسلة التوريد. توجيه الاتحاد الأوروبي للفوترة الإلكترونية يفرض أساسًا XML المبني على UBL للفوترة من الشركات إلى الحكومات. إذا كنت تبيع لحكومات أوروبية، فأنت ترسل فواتير XML.

الطيران: نموذج تبادل المعلومات الجوية (AIXM) يحدد مخططات XML للبيانات الجوية — المطارات، المجالات الجوية، مساعدات الملاحة، الإجراءات. كل نظام إدارة طيران، كل تحديث مراقبة حركة جوية، كل NOTAM (Notice to Airmen) يتعامل مع بيانات AIXM. هذا مجال لا يتحدث فيه أحد عن "لنتحول ببساطة إلى JSON"، لأن التداعيات الأمنية لترحيل الصيغة ستكون هائلة.

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

SOAP مقابل REST: لماذا لا تزال واجهات API بـ XML موجودة

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

SOAP (Simple Object Access Protocol) هو بروتوكول مراسلة مبني على XML يوفر ميزات لا يقدمها REST+JSON مباشرة:

عقود قوية عبر WSDL: ملف WSDL (Web Services Description Language) يصف *كل شيء* عن خدمة SOAP — العمليات، هياكل رسائل الإدخال/الإخراج، أنواع البيانات، نقاط النهاية. يمكنك توليد كود العميل تلقائيًا من WSDL بـ Java أو C# أو Python أو أي لغة مؤسسية تقريبًا. واجهات REST لديها OpenAPI/Swagger، لكن الاعتماد طوعي. مع SOAP، العقد هو الخدمة.

معالجة أخطاء مدمجة: SOAP لديه عنصر خطأ موحد مع رموز خطأ وسلاسل خطأ وعناصر تفاصيل. كل عميل SOAP يعرف بالضبط كيف يحلل الأخطاء. واجهات REST؟ كل واجهة تخترع صيغة أخطائها الخاصة.

WS-Security: SOAP لديه معيار أمان شامل يدعم التشفير والتوقيع على مستوى الرسالة — وليس فقط على مستوى النقل (TLS). هذا يعني أن رسالة SOAP يمكن أن تمر عبر خوادم وسيطة مع البقاء مشفرة من طرف إلى طرف. هذا مهم جدًا في الخدمات المالية حيث تُوجَّه الرسائل عبر أنظمة متعددة.

المعاملات والموثوقية: WS-AtomicTransaction وWS-ReliableMessaging يوفران دعم المعاملات الموزعة والتسليم المضمون. هذه مشاكل صعبة يتركها REST بالكامل لمطور التطبيق.

مع ذلك، SOAP له عيوب حقيقية: الرسائل مطوّلة، منحنى التعلم حاد، تصحيح الأخطاء مؤلم، وحمل XML يجعله أبطأ من JSON لعمليات CRUD البسيطة. لواجهات API الجديدة والخدمات المصغرة، REST+JSON هو الخيار الصحيح تقريبًا دائمًا. لكن للتكاملات المؤسسية المعقدة — خاصة في الصناعات المنظمة — تطبيق العقود وميزات الأمان المدمجة في SOAP تبقى قيّمة حقًا.

الترحيل من XML إلى JSON: دليل عملي

في مرحلة ما من مسيرتك المهنية، سيطلب منك أحد ترحيل نظام مبني على XML إلى JSON. قبل أن تقول "بالتأكيد، سهل"، دعني أطلعك على المزالق التي تفاجئ الجميع.

فقدان السمات: عناصر XML يمكن أن تحتوي على سمات وعناصر فرعية. كائنات JSON لديها خصائص فقط. عند تحويل Dune، أين يذهب id؟ أين يذهب format؟ أين يذهب المحتوى النصي؟ الاتفاقيات الشائعة تستخدم بادئة @ للسمات و#text للمحتوى النصي، لكن لا يوجد معيار عالمي — ومهما اخترت، يحتاج النظام الآخر لفهم اتفاقيتك.

تحويل الأنواع: XML نصي بطبيعته. السلسلة "42" في XML قد تكون عددًا صحيحًا أو عشريًا أو سلسلة نصية أو رمزًا بريديًا. JSON لديه أنواع مميزة. أثناء الترحيل، تحتاج قواعد ربط أنواع صريحة، وإلا ستنتهي بسلاسل نصية حيث أردت أرقامًا (أو أسوأ، أرقام حيث أردت سلاسل نصية — وداعًا للأصفار البادئة في الرموز البريدية).

غموض المصفوفات: هذا خبيث بشكل خاص. في XML، إذا كان للعنصر طفل واحد، فهو عنصر مفرد. إذا كان له عدة أطفال بنفس الاسم، فهم مجموعة بشكل طبيعي. لكن JSON يحتاج أن يعرف مسبقًا ما إذا كان شيء ما مصفوفة أو قيمة مفردة. فكر في: Widget — هل item سلسلة نصية أم مصفوفة بعنصر واحد؟ إذا كان طلب آخر يحتوي على ثلاثة عناصر، تتغير البنية. مستهلك JSON الخاص بك يحتاج للتعامل مع كلتا الحالتين.

خطوات للترحيل الناجح:

  • الخطوة 1: أحصِ جميع مخططات XML ووثّق بالضبط أي الميزات تستخدم (مساحات الأسماء، السمات، المحتوى المختلط، أقسام CDATA، تعليمات المعالجة).
  • الخطوة 2: صمم مخطط JSON أولاً، مع اتخاذ قرارات صريحة حول كيفية التعامل مع السمات والمحتوى المختلط والمصفوفات. وثّق كل قرار.
  • الخطوة 3: ابنِ طبقة تحويل (وليس إعادة كتابة شاملة). شغّل كلتا الصيغتين بالتوازي وقارن المخرجات.
  • الخطوة 4: رحّل المستهلكين واحدًا تلو الآخر، مع إبقاء نقاط نهاية XML حية حتى ينتقل الجميع.
  • الخطوة 5: شغّل الأنظمة المتوازية لدورة عمل كاملة على الأقل (شهر أو ربع أو سنة حسب مجالك) قبل إيقاف XML.

متى لا ترحّل: إذا كان XML الخاص بك يستخدم مزج مساحات أسماء كثيف، أو تحويلات XSLT، أو قواعد أعمال مبنية على XPath، فقد يفوق تكلفة الترحيل الفوائد. أيضًا، إذا كان XML الخاص بك مفروضًا بمعيار تنظيمي (HL7, ISO 20022, UBL)، ستظل تحافظ على XML بأي حال — إضافة JSON تعني فقط صيغة ثانية للدعم.

أدوات XML يجب أن يعرفها كل مطور

العمل مع XML لا يجب أن يكون مؤلمًا إذا كانت لديك الأدوات المناسبة. إليك الأدوات التي أعتمد عليها:

xmllint: يأتي مع libxml2 وعلى الأرجح موجود بالفعل على نظامك. يتحقق من XML مقابل المخططات، وينسق (pretty-print) XML، ويقيّم تعبيرات XPath — كل ذلك من سطر الأوامر. إنه curl عالم XML: بسيط وسريع ومتوفر في كل مكان.

Saxon: المعيار الذهبي لمعالجة XSLT وXQuery، طوره Michael Kay (الذي حرر حرفيًا مواصفات XSLT 2.0 و3.0). إذا كنت تقوم بتحويلات XSLT جادة، Saxon هو ما تريده. النسخة المفتوحة المصدر Home Edition تدعم XSLT 3.0 وXPath 3.1.

XMLSpy (Altova): بيئة تطوير XML تجارية شائعة في المؤسسات. لديها محررات مخططات مرئية ومصححات XSLT وتكامل مع قواعد البيانات. باهظة الثمن لكنها قوية — مفيدة بشكل خاص عند العمل مع مخططات XSD ضخمة يصعب تحريرها يدويًا.

oXygen XML Editor: المفضل لدي شخصيًا للعمل المكثف مع XML. يدعم تصحيح XSLT مع التنفيذ خطوة بخطوة، وتقييم XPath، والتحرير المدرك للمخططات مع الإكمال التلقائي، ولديه دعم ممتاز لـ DITA وDocBook. إذا كنت تكتب XSLT بانتظام، oXygen يستحق ثمنه خلال أسبوع.

xmlstarlet: مجموعة أدوات XML لسطر الأوامر تتيح لك الاستعلام والتحرير والتحقق وتحويل XML مباشرة من الطرفية. فكر فيه مثل sed وawk لكن لـ XML. مثالي لنصوص الشيل وخطوط أنابيب CI/CD حيث تحتاج لاستخراج قيم من ملفات تكوين XML أو تعديل XML بسرعة.

Visual Studio Code مع إضافات XML: إذا كنت تعمل بالفعل في VS Code، إضافة "XML" من Red Hat توفر التحقق من المخططات والإكمال التلقائي والتنسيق. مع إضافة "XSLT/XPath"، إنها إعداد مجاني قادر بشكل مفاجئ للعمل العرضي مع XML.

جربه بنفسك

هل تحتاج لربط العالمين؟ محوّلنا XML إلى JSON يتولى التحويل مع الحفاظ على بنية البيانات والأنواع. إذا كنت تصحح أخطاء XML، أداة XML Formatter تجعل حتى أقبح XML قابلاً للقراءة. وقبل نشر أي XML في الإنتاج، مرره عبر XML Validator لاكتشاف المشاكل الهيكلية مبكرًا.