XML ভ্যালিডেটর
XML সিনট্যাক্স যাচাই করুন এবং ওয়েল-ফর্মডনেস ত্রুটি পরীক্ষা করুন
XML ইনপুট
XML ভ্যালিডেশন কী?
একটি XML ভ্যালিডেটর পরীক্ষা করে যে একটি XML ডকুমেন্ট XML 1.0 স্পেসিফিকেশনে (W3C Recommendation, পঞ্চম সংস্করণ) সংজ্ঞায়িত কাঠামোগত নিয়মগুলো মেনে চলে কিনা। ন্যূনতমভাবে, এই XML ভ্যালিডেটর নিশ্চিত করে যে একটি ডকুমেন্ট ওয়েল-ফর্মড: এতে একটি একক রুট এলিমেন্ট রয়েছে, সমস্ত ট্যাগ সঠিকভাবে নেস্টেড ও বন্ধ করা হয়েছে, অ্যাট্রিবিউট মান কোটেড, এবং সংরক্ষিত বর্ণগুলো পূর্বনির্ধারিত এন্টিটি ব্যবহার করে। এই পরীক্ষাগুলোর যেকোনো একটি ব্যর্থ হলে XML পার্সার নিঃশব্দে ভুল আউটপুট দেওয়ার পরিবর্তে এরর থ্রো করে।
ওয়েল-ফর্মডনেস ও বৈধতার মধ্যে পার্থক্য গুরুত্বপূর্ণ। একটি ওয়েল-ফর্মড XML ডকুমেন্ট XML স্পেসিফিকেশনের সিনট্যাক্স নিয়মগুলো পূরণ করে। একটি বৈধ XML ডকুমেন্ট আরও এগিয়ে যায়: এটি একটি বাহ্যিক স্কিমায় সংজ্ঞায়িত সীমাবদ্ধতাগুলোও মেনে চলে, যেমন DTD (Document Type Definition), XSD (XML Schema Definition), বা Relax NG স্কিমা। এই টুলটি ওয়েল-ফর্মডনেস পরীক্ষা করে — প্রথম ও সবচেয়ে সাধারণ ভ্যালিডেশন ধাপ। এটি ছাড়া পরবর্তী কোনো ধাপ সম্পন্ন করা সম্ভব নয়।
XML ভ্যালিডেশন ত্রুটিগুলো প্রোডাকশনে পৌঁছানোর আগেই ধরা দেয়। অবন্ধ ট্যাগ, অমিল এলিমেন্ট নাম, এস্কেপ-বিহীন অ্যাম্পারস্যান্ড, এবং ডুপ্লিকেট অ্যাট্রিবিউট — হাতে সম্পাদিত XML-এ এগুলো সবচেয়ে সাধারণ ভুল। বিভিন্ন ভাষার পার্সার এই ত্রুটিগুলো আলাদাভাবে পরিচালনা করে: কেউ নিঃশব্দে ব্যর্থ হয়, কেউ আংশিক ফলাফল দেয়, কেউ এক্সেপশন থ্রো করে। একটি ভ্যালিডেটরে XML চালানো এই অস্পষ্টতা দূর করে এবং ত্রুটির অবস্থানের বিস্তারিত সহ একটি স্পষ্ট পাস-বা-ফেল উত্তর দেয়।
অনলাইন XML ভ্যালিডেটর কেন ব্যবহার করবেন?
XML সিনট্যাক্স ত্রুটি আগেই ধরলে XML ডেটা ব্যবহার করা অ্যাপ্লিকেশনে ধারাবাহিক ব্যর্থতা প্রতিরোধ হয়। একটি ব্রাউজার-ভিত্তিক ভ্যালিডেটর কমান্ড-লাইন টুল ইনস্টল বা IDE প্লাগইন কনফিগার না করেই তাৎক্ষণিক প্রতিক্রিয়া দেয়।
XML ভ্যালিডেটরের ব্যবহারের ক্ষেত্র
XML ওয়েল-ফর্মডনেসের নিয়মাবলি
XML 1.0 স্পেসিফিকেশন সিনট্যাক্সের একটি কঠোর নিয়মসমষ্টি সংজ্ঞায়িত করে। ওয়েল-ফর্মড বলে বিবেচিত হতে একটি ডকুমেন্টকে সবগুলো নিয়ম পূরণ করতে হবে। নিচের সারণিতে প্রতিটি নিয়ম, এটি কী প্রয়োজন করে এবং একটি সঠিক উদাহরণ দেওয়া হয়েছে। অধিকাংশ ভ্যালিডেশন ত্রুটি এই নিয়মগুলোর একটির সাথে সম্পর্কিত।
| নিয়ম | প্রয়োজনীয়তা | সঠিক উদাহরণ |
|---|---|---|
| Single root element | Document must have exactly one root | <root>...</root> |
| Matched tags | Every opening tag needs a closing tag | <p>text</p> |
| Proper nesting | Tags must close in reverse order of opening | <a><b>...</b></a> |
| Quoted attributes | Attribute values must be in single or double quotes | <el attr="val"/> |
| Entity escaping | Reserved characters must use predefined entities | < > & " ' |
| Case sensitivity | Tag names are case-sensitive: <A> is not </a> | <Book>...</Book> |
| No duplicate attributes | Each attribute name must appear once per element | <el a="1" b="2"/> |
| Valid XML declaration | If present, must be the very first line | <?xml version="1.0"?> |
ওয়েল-ফর্মড বনাম DTD-বৈধ বনাম স্কিমা-বৈধ
XML ভ্যালিডেশনের তিনটি স্তর রয়েছে। এই টুলটি প্রথম স্তর (ওয়েল-ফর্মডনেস) পরীক্ষা করে, যা বাকি দুটির পূর্বশর্ত।
কোড উদাহরণ
বিভিন্ন ভাষায় প্রোগ্রামেটিক্যালি XML যাচাই করুন। প্রতিটি উদাহরণ ওয়েল-ফর্মডনেস পরীক্ষা করে এবং ডকুমেন্টটি ভুল ফর্মে থাকলে ত্রুটি বার্তা ফেরত দেয়।
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..." }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 Falsepackage 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>
}# 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