ToolDeck

مدقق XML

التحقق من صحة بنية XML واكتشاف أخطاء التركيب

جرب مثالاً

إدخال XML

يعمل محليًا · آمن للصق الأسرار

ما هو التحقق من صحة XML؟

يتحقق مدقق XML مما إذا كان مستند XML يتبع القواعد البنيوية التي تحددها مواصفة XML 1.0 (توصية W3C، الطبعة الخامسة). يتأكد هذا المدقق في حده الأدنى من أن المستند سليم التركيب: يحتوي على عنصر جذر واحد، وتكون جميع الوسوم متداخلة ومغلقة بصورة صحيحة، وقيم الخصائص بين علامات اقتباس، والأحرف المحجوزة مستبدلة بكيانات محددة مسبقًا. أي مستند يخفق في أي من هذه الفحوصات سيتسبب في إلقاء المحللات لأخطاء بدلًا من إنتاج نتائج خاطئة بصمت.

يكتسب التمييز بين السلامة البنيوية والصحة الكاملة أهمية بالغة. مستند XML سليم التركيب يستوفي قواعد النحو المحددة في مواصفة XML ذاتها. أما مستند XML صالح فيذهب أبعد من ذلك: يتوافق أيضًا مع القيود المعرَّفة في مخطط خارجي، كـDTD (Document Type Definition) أو XSD (XML Schema Definition) أو مخطط Relax NG. تتحقق هذه الأداة من السلامة البنيوية، وهي الخطوة الأولى والأكثر شيوعًا في عملية التحقق. بدونها لا يمكن لأي شيء لاحق في سلسلة المعالجة أن يتقدم.

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

لماذا تستخدم مدقق XML إلكترونيًا؟

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

اكتشاف فوري للأخطاء
الصق XML الخاص بك واحصل على نتيجة النجاح أو الفشل مع موضع الخطأ بدقة في أقل من ثانية. لا انتظار لخطوط أنابيب البناء ولا إعداد لأدوات سطر الأوامر.
🔒
معالجة تُقدّم الخصوصية أولًا
تتم جميع عمليات التحليل والتحقق في متصفحك باستخدام واجهة DOMParser. لا يغادر XML الخاص بك جهازك أبدًا ولا يُرسَل إلى أي خادم.
🎯
تقارير أخطاء دقيقة
اطّلع على السطر والعمود بالضبط حيث يخفق التحقق، مع وصف للخطأ. هذا أسرع بكثير من قراءة تتبع المكدس الصادر من محلل في كود تطبيقك.
📋
لا حساب ولا تثبيت مطلوب
افتح الصفحة، والصق XML الخاص بك، واطّلع على النتيجة. لا نماذج تسجيل، ولا برامج لسطح المكتب، ولا امتدادات متصفح.

حالات استخدام مدقق XML

تطوير الواجهة الأمامية
تحقق من ملفات SVG وأجزاء XHTML قبل تضمينها في مكوّنات React أو Vue. وسم واحد غير مغلق في SVG يمكنه كسر شجرة المكوّنات بالكامل.
هندسة الواجهة الخلفية
افحص ردود SOAP وحمولات XML-RPC وخلاصات RSS/Atom من واجهات برمجة التطبيقات الخارجية. تحقق من الاستجابة الخام قبل كتابة منطق إلغاء التسلسل لتجنب تصحيح استثناءات المحللين في وقت التشغيل.
DevOps والتكامل المستمر
تحقق من أن ملفات Maven pom.xml و.csproj وسكربتات Ant سليمة التركيب بعد التعديلات الآلية. خطأ بنيوي في ملف ضبط البناء يمكنه إفشال خط أنابيب بالكامل برسالة خطأ مبهمة.
ضمان الجودة والاختبار
تحقق من تركيبات اختبار XML وملفات المخرجات المتوقعة قبل تشغيل اختبارات التكامل. التركيبات المشوّهة تتسبب في نتائج سلبية زائفة تُضيّع وقت التصحيح.
هندسة البيانات
افحص مصدّرات XML من قواعد البيانات وبوابات البيانات المفتوحة الحكومية وخطوط أنابيب ETL. التحقق من البنية قبل كتابة استعلامات XPath أو تحويلات XSLT يمنع إضاعة الجهد على بيانات مصدر مكسورة.
تعلّم XML
يمكن للطلاب الذين يتبعون دروس W3C XML أو XSLT لصق ملفات التمارين في المدقق للتحقق من صحة صياغتهم. تشير رسائل الخطأ إلى المشكلة بالضبط مما يُسرّع حلقة التعلم.

قواعد السلامة البنيوية في XML

تحدد مواصفة XML 1.0 مجموعة صارمة من قواعد النحو. يجب أن يستوفي المستند جميعها ليُعدَّ سليم التركيب. يسرد الجدول أدناه كل قاعدة وما تستلزمه ومثالًا صحيحًا عليها. معظم أخطاء التحقق ترجع إلى إحدى هذه القواعد.

القاعدةالمتطلبمثال صحيح
Single root elementDocument must have exactly one root<root>...</root>
Matched tagsEvery opening tag needs a closing tag<p>text</p>
Proper nestingTags must close in reverse order of opening<a><b>...</b></a>
Quoted attributesAttribute values must be in single or double quotes<el attr="val"/>
Entity escapingReserved characters must use predefined entities&lt; &gt; &amp; &quot; &apos;
Case sensitivityTag names are case-sensitive: <A> is not </a><Book>...</Book>
No duplicate attributesEach attribute name must appear once per element<el a="1" b="2"/>
Valid XML declarationIf present, must be the very first line<?xml version="1.0"?>

السليم بنيويًا مقابل الصالح وفق DTD مقابل الصالح وفق المخطط

للتحقق من صحة XML ثلاثة مستويات. تفحص هذه الأداة المستوى الأول (السلامة البنيوية)، وهو شرط أساسي للمستويين الآخرين.

سليم التركيب
يستوفي قواعد نحو XML 1.0: جذر واحد، ووسوم متطابقة، وخصائص بين علامات اقتباس، وتداخل صحيح. يفحص كل محلل XML هذا الشرط أولًا. إذا لم يكن المستند سليم التركيب فهو ليس XML على الإطلاق.
صالح وفق DTD
يتوافق مع Document Type Definition التي تحدد العناصر والخصائص المسموح بها وترتيبها وعدد تكراراتها. تُعلَن DTDs بشكل مضمّن أو عبر مرجع DOCTYPE. التحقق عبر DTD شائع في الأنظمة القديمة وXHTML.
صالح وفق المخطط (XSD / Relax NG)
يتوافق مع XML Schema Definition (XSD) أو مخطط Relax NG. تدعم هذه المخططات أنواع البيانات (integer وdate وURI) ومساحات الأسماء ونماذج المحتوى المعقدة. التحقق عبر XSD معيار قياسي في خدمات SOAP وبيانات HL7 الصحية والتكامل المؤسسي.

أمثلة على الكود

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

JavaScript (DOMParser)
function validateXML(xmlString) {
  const parser = new DOMParser()
  const doc = parser.parseFromString(xmlString, 'application/xml')
  const error = doc.querySelector('parsererror')
  if (error) {
    return { valid: false, message: error.textContent }
  }
  return { valid: true, message: 'Well-formed XML' }
}

validateXML('<root><item>hello</item></root>')
// → { valid: true, message: "Well-formed XML" }

validateXML('<root><item>hello</root>')
// → { valid: false, message: "Opening and ending tag mismatch..." }
Python
import xml.etree.ElementTree as ET

def validate_xml(xml_string):
    try:
        ET.fromstring(xml_string)
        return True, "Well-formed XML"
    except ET.ParseError as e:
        return False, str(e)

valid, msg = validate_xml('<root><item>hello</item></root>')
# → (True, "Well-formed XML")

valid, msg = validate_xml('<root><item>hello</root>')
# → (False, "mismatched tag: line 1, column 27")

# With lxml — also supports XSD schema validation
from lxml import etree
schema = etree.XMLSchema(etree.parse('schema.xsd'))
doc = etree.fromstring(b'<root><item>hello</item></root>')
schema.validate(doc)  # → True or False
Go
package main

import (
    "encoding/xml"
    "fmt"
    "strings"
)

func validateXML(raw string) error {
    decoder := xml.NewDecoder(strings.NewReader(raw))
    for {
        _, err := decoder.Token()
        if err != nil {
            if err.Error() == "EOF" {
                return nil
            }
            return err
        }
    }
}

func main() {
    err := validateXML("<root><item>hello</item></root>")
    fmt.Println(err) // → <nil>

    err = validateXML("<root><item>hello</root>")
    fmt.Println(err) // → XML syntax error: unexpected end element </root>
}
CLI (xmllint)
# Check well-formedness (part of libxml2, pre-installed on macOS/Linux)
xmllint --noout document.xml
# Exit code 0 = valid, non-zero = errors printed to stderr

# Validate against an XSD schema
xmllint --noout --schema schema.xsd document.xml

# Validate against a DTD
xmllint --noout --dtdvalid schema.dtd document.xml

# Validate from stdin
echo '<root><unclosed>' | xmllint --noout -
# → :1: parser error : Premature end of data in tag unclosed line 1

الأسئلة الشائعة

ما الفرق بين XML السليم بنيويًا وXML الصالح؟
XML السليم بنيويًا يتبع قواعد نحو مواصفة XML 1.0: عنصر جذر واحد، ووسوم متطابقة ومتداخلة بصورة صحيحة، وخصائص بين علامات اقتباس. أما XML الصالح فيذهب أبعد من ذلك بالتوافق أيضًا مع DTD أو مخطط XSD يحدد العناصر والخصائص وأنواع البيانات المسموح بها. يمكن أن يكون المستند سليم التركيب لكنه غير صالح إذا كانت صياغته صحيحة لكنه يخرق قيدًا في المخطط.
هل يمكن أن يكون XML صالحًا لكنه غير سليم التركيب؟
لا. السلامة البنيوية شرط أساسي للصحة. إذا انتهك مستند ما أي قاعدة نحوية في XML (وسم غير مغلق، أو خاصية دون علامات اقتباس، إلخ) فلن تتمكن المحللات من بناء شجرة منه، ولن يمكن بدء التحقق من المخطط. صحّح أخطاء البنية أولًا ثم تحقق من توافقه مع المخطط.
ما أكثر أخطاء التحقق من صحة XML شيوعًا؟
أكثر خمسة أخطاء شيوعًا هي: الوسوم غير المغلقة أو غير المتطابقة، ورموز & غير مُبدَّلة في محتوى النص، وقيم خصائص دون علامات اقتباس، وغياب عنصر الجذر، والحالة غير الصحيحة في أسماء الوسوم (XML حساس لحالة الأحرف). معظم هذه الأخطاء ناجمة عن تحرير XML يدويًا أو تسلسل نصي في الكود بدلًا من استخدام مُسلسِل XML مناسب.
هل التحقق من صحة XML مطابق لفحص XML؟
يتداخلان لكنهما ليسا متطابقين. يتحقق التحقق مما إذا كان المستند متوافقًا مع مواصفة XML (السلامة البنيوية) أو مخطط (DTD/XSD). أما الفحص فيذهب أبعد بالإشارة إلى مشكلات أسلوبية: تباين المسافات البادئة، وتصريحات مساحات الأسماء غير المستخدمة، أو القيم الافتراضية الزائدة للخصائص. تجمع xmllint من libxml2 بين الاثنين: يفحص --noout السلامة البنيوية، بينما يضيف --schema التحقق عبر XSD.
كيف يختلف التحقق من صحة XML عن التحقق من JSON؟
لـXML قواعد نحو أكثر صرامة وتعقيدًا مقارنة بـJSON. يستلزم XML وسوم فتح وإغلاق متطابقة، ويدعم الخصائص ومساحات الأسماء والمحتوى المختلط (نصوص وعناصر معًا)، وله لغات مخطط متعددة (DTD وXSD وRelax NG وSchematron). يفحص التحقق من JSON توافق الأقواس المعقوفة والمربعة والمفاتيح بين علامات اقتباس ومواضع الفواصل. يتوفر JSON Schema لكنه أبسط من XSD. مستند XML عادةً ما يكون أكبر بمقدار 2-3 أضعاف من JSON المكافئ للبيانات ذاتها.
هل تتحقق هذه الأداة من مخطط XSD أو DTD؟
تفحص هذه الأداة السلامة البنيوية فقط: تتأكد من أن XML الخاص بك يتبع قواعد نحو مواصفة XML 1.0. لا تتحقق من مخططات DTD أو XSD الخارجية. للتحقق من المخططات، استخدم xmllint --schema في سطر الأوامر، أو مكتبة lxml في Python التي تدعم كلًا من XSD وRelax NG.
لماذا يخفق XML الخاص بي في التحقق رغم أنه يبدو صحيحًا؟
أكثر الأسباب الخفية شيوعًا هي: علامة ترتيب البايتات (BOM) قبل تصريح XML، وحرف زائد بعد وسم الجذر الختامي، ورمز & غير مُبدَّل داخل محتوى النص (استخدم &amp; بدلًا منه)، أو بادئة مساحة اسم مستخدمة لكنها غير مُعلَنة. انسخ XML الخاص بك في عارض سداسي عشري أو مرّره عبر xmllint --noout للحصول على الإزاحة البايتية الدقيقة للخطأ.