ToolDeck

اعتبارسنجی XML

اعتبارسنجی سینتکس XML و بررسی خطاهای خوش‌فرمی

یک مثال امتحان کنید

ورودی XML

به‌صورت محلی اجرا می‌شود · جای‌گذاری اسرار امن است

اعتبارسنجی XML چیست؟

یک اعتبارسنج XML بررسی می‌کند که آیا یک سند XML از قوانین ساختاری تعریف‌شده در مشخصات XML 1.0 (توصیه‌نامه W3C، ویرایش پنجم) پیروی می‌کند. در حداقل سطح، این اعتبارسنج XML تأیید می‌کند که سند خوش‌فرم است: یک عنصر ریشه واحد دارد، همه تگ‌ها به‌درستی تودرتو و بسته شده‌اند، مقادیر ویژگی‌ها در نقل‌قول قرار دارند، و کاراکترهای رزروشده از موجودیت‌های از پیش تعریف‌شده استفاده می‌کنند. سندی که هر یک از این بررسی‌ها را رد کند، باعث می‌شود تجزیه‌گرهای XML به‌جای اینکه بی‌سروصدا خروجی نادرست تولید کنند، خطا بدهند.

تمایز بین خوش‌فرمی و اعتبار اهمیت دارد. یک سند XML خوش‌فرم قوانین سینتکس خود مشخصات XML را برآورده می‌کند. یک سند XML معتبر فراتر می‌رود: همچنین با محدودیت‌های تعریف‌شده در یک طرح‌واره خارجی، مانند DTD (تعریف نوع سند)، XSD (تعریف طرح‌واره XML) یا طرح‌واره Relax NG مطابقت دارد. این ابزار خوش‌فرمی را بررسی می‌کند که اولین و رایج‌ترین مرحله اعتبارسنجی است. بدون آن، هیچ‌چیز در پایین‌دست نمی‌تواند ادامه یابد.

اعتبارسنجی XML خطاها را پیش از رسیدن به محیط تولید شناسایی می‌کند. تگ‌های نبسته، نام عناصر ناهمخوان، &‌های escape‌نشده، و ویژگی‌های تکراری از رایج‌ترین اشتباهات در XML دستی‌ویرایش‌شده هستند. تجزیه‌گرها در زبان‌های مختلف این خطاها را متفاوت مدیریت می‌کنند: برخی بی‌صدا شکست می‌خورند، برخی نتایج جزئی برمی‌گردانند، و برخی استثنا می‌اندازند. بررسی XML با یک اعتبارسنج این ابهام را برطرف می‌کند و یک پاسخ روشن قبول/رد با جزئیات مکان خطا ارائه می‌دهد.

چرا از اعتبارسنج XML آنلاین استفاده کنیم؟

شناسایی زودهنگام خطاهای سینتکس XML از خرابی‌های زنجیره‌ای در برنامه‌هایی که داده XML مصرف می‌کنند جلوگیری می‌کند. یک اعتبارسنج مبتنی بر مرورگر بازخورد فوری می‌دهد بدون نیاز به نصب ابزارهای خط‌فرمان یا پیکربندی افزونه‌های IDE.

تشخیص فوری خطا
XML خود را بچسبانید و در کمتر از یک ثانیه نتیجه قبول/رد با مکان دقیق خطا دریافت کنید. بدون انتظار برای pipeline‌های ساخت یا راه‌اندازی ابزار CLI.
🔒
پردازش با اولویت حریم خصوصی
تمام تجزیه و اعتبارسنجی در مرورگر شما با استفاده از DOMParser API انجام می‌شود. XML شما هرگز دستگاهتان را ترک نمی‌کند و هرگز به هیچ سروری ارسال نمی‌شود.
🎯
گزارش دقیق خطا
خط و ستون دقیقی که اعتبارسنجی در آن شکست می‌خورد را همراه با توضیح خطا مشاهده کنید. این سریع‌تر از خواندن stack trace یک تجزیه‌گر در کد برنامه شماست.
📋
بدون نیاز به حساب کاربری یا نصب
صفحه را باز کنید، XML را بچسبانید و نتیجه را ببینید. بدون فرم ثبت‌نام، بدون نرم‌افزار دسکتاپ، بدون نیاز به افزونه مرورگر.

موارد استفاده اعتبارسنج XML

توسعه فرانت‌اند
فایل‌های SVG و قطعات XHTML را پیش از جاسازی در کامپوننت‌های React یا Vue اعتبارسنجی کنید. یک تگ نبسته در SVG می‌تواند کل درخت کامپوننت را خراب کند.
مهندسی بک‌اند
پاسخ‌های SOAP، بارگذاری‌های XML-RPC، و فیدهای RSS/Atom از APIهای شخص ثالث را بررسی کنید. پاسخ خام را پیش از نوشتن منطق تجزیه اعتبارسنجی کنید تا از اشکال‌زدایی استثناهای تجزیه‌گر در زمان اجرا جلوگیری شود.
DevOps و CI/CD
تأیید کنید که فایل‌های Maven pom.xml، .csproj یا فایل‌های ساخت Ant پس از ویرایش‌های خودکار خوش‌فرم هستند. یک خطای سینتکس در یک فایل پیکربندی ساخت می‌تواند کل pipeline را با پیام خطایی مبهم متوقف کند.
QA و آزمون
فایل‌های fixture آزمون XML و فایل‌های خروجی مورد انتظار را پیش از اجرای آزمون‌های یکپارچه‌سازی اعتبارسنجی کنید. fixture‌های بد فرم باعث نتایج منفی کاذب می‌شوند که زمان اشکال‌زدایی را هدر می‌دهند.
مهندسی داده
صادرات XML از پایگاه‌های داده، پورتال‌های داده باز دولتی، و pipeline‌های 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 مطابقت دارد که مشخص می‌کند کدام عناصر و ویژگی‌ها مجاز هستند، ترتیب آن‌ها، و تعداد آن‌ها. DTDها به‌صورت درون‌خطی یا از طریق ارجاع DOCTYPE اعلام می‌شوند. اعتبارسنجی DTD در سیستم‌های قدیمی و XHTML رایج است.
طرح‌واره-معتبر (XSD / Relax NG)
با یک XML Schema Definition (XSD) یا طرح‌واره Relax NG مطابقت دارد. این طرح‌واره‌ها از انواع داده (عدد صحیح، تاریخ، 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 کدام‌اند؟
پنج خطای رایج عبارتند از: تگ‌های نبسته یا ناهمخوان، &‌های escape‌نشده در محتوای متنی، مقادیر ویژگی بدون نقل‌قول، عنصر ریشه مفقود، و حروف اشتباه در نام تگ‌ها (XML حساس به حروف بزرگ و کوچک است). اکثر این موارد به‌دلیل ویرایش دستی XML یا الحاق رشته در کد به‌جای استفاده از یک سریال‌ساز XML مناسب ایجاد می‌شوند.
آیا اعتبارسنجی XML با linting XML یکسان است؟
تداخل دارند اما یکسان نیستند. اعتبارسنجی بررسی می‌کند که آیا سند با مشخصات XML (خوش‌فرمی) یا یک طرح‌واره (DTD/XSD) مطابقت دارد. linting معمولاً فراتر می‌رود و مشکلات سبکی را نیز علامت‌گذاری می‌کند: تورفتگی ناسازگار، اعلام‌های فضانام استفاده‌نشده، یا مقادیر پیش‌فرض ویژگی زائد. xmllint از libxml2 هر دو را ترکیب می‌کند: --noout خوش‌فرمی را بررسی می‌کند، در حالی که --schema اعتبارسنجی XSD را اضافه می‌کند.
اعتبارسنجی XML چه تفاوتی با اعتبارسنجی JSON دارد؟
XML دستور زبان سخت‌گیرانه‌تر و پیچیده‌تری نسبت به JSON دارد. XML به تگ‌های باز/بسته همخوان نیاز دارد، از ویژگی‌ها، فضاهای نام، محتوای مختلط (متن و عناصر با هم) پشتیبانی می‌کند، و زبان‌های طرح‌واره چندگانه دارد (DTD، XSD، Relax NG، Schematron). اعتبارسنجی JSON تطابق آکولاد/براکت، کلیدهای نقل‌قول‌شده و محل کاما را بررسی می‌کند. JSON Schema وجود دارد اما از XSD ساده‌تر است. یک سند XML معمولاً ۲ تا ۳ برابر بزرگ‌تر از JSON معادل برای همان داده است.
آیا این ابزار در برابر طرح‌واره‌های XSD یا DTD اعتبارسنجی می‌کند؟
این ابزار فقط خوش‌فرمی را بررسی می‌کند: تأیید می‌کند که XML شما از قوانین سینتکس مشخصات XML 1.0 پیروی می‌کند. در برابر DTD یا XSD خارجی اعتبارسنجی نمی‌کند. برای اعتبارسنجی طرح‌واره، از xmllint --schema در خط‌فرمان استفاده کنید، یا از lxml در Python که از هر دو XSD و Relax NG پشتیبانی می‌کند.
چرا XML من اعتبارسنجی را رد می‌کند در حالی که درست به نظر می‌رسد؟
رایج‌ترین دلایل نامرئی عبارتند از: یک علامت ترتیب بایت (BOM) پیش از اعلان XML، یک کاراکتر اضافه بعد از تگ ریشه بستی، یک & بدون escape در محتوای متنی (به‌جای آن از &amp; استفاده کنید)، یا یک پیشوند فضانام که استفاده شده اما هرگز اعلان نشده است. XML خود را در یک نمایشگر hex بچسبانید یا آن را از طریق xmllint --noout اجرا کنید تا offset دقیق بایت خطا را دریافت کنید.