মূল অংশে যান

আপনার XML চেক করুন

না-মেলা ট্যাগ, অসংজ্ঞায়িত এনটিটি, ভাঙা নেমস্পেস — ব্রাউজারের নিজস্ব XML পার্সার দিয়ে খুঁজে বের করে ঠিক কোথায় তা দেখানো হয়। কিছুই সংরক্ষণ করা হয় না।

  • কখনো সংরক্ষণ করা হয় না
  • কোনো লাইন নেই, অপেক্ষা নেই
  • সাইনআপ নেই, ওয়াটারমার্ক নেই
ফরম্যাট করা

XML পেস্ট করুন — টাইপ করার সঙ্গে সঙ্গেই যাচাই হবে।

যেভাবে কাজ করে

1

আপনার XML পেস্ট করুন

অথবা ফাইলটি ছাড়ুন। কিছুই কোথাও পাঠানো হয় না।

2

ফলাফল দেখুন

well-formed হলে ভেতরে কী আছে তার সারসংক্ষেপ। নইলে প্রথম সমস্যার ঠিক লাইন ও কলাম।

3

ঠিক করে আবার চেক করুন

এখানেই এডিট করুন; টাইপ করার সঙ্গে সঙ্গে ফলাফল বদলায়।

দুটি আলাদা মানদণ্ড, আর এটি কোনটি

XML শুদ্ধতার দুটি স্তর নির্ধারণ করে, আর প্রায়ই এ দুটি গুলিয়ে ফেলা হয়। Well-formed মানে ডকুমেন্টটি XML-এর নিজস্ব সিনট্যাক্স মেনে চলে: একটিমাত্র রুট এলিমেন্ট, প্রতিটি ট্যাগ বন্ধ, ঠিক নেস্টিং, বৈধ অক্ষর, অ্যাম্পারস্যান্ড ও অ্যাঙ্গেল ব্র্যাকেট ঠিকভাবে এস্কেপ করা, অ্যাট্রিবিউটের মান কোটেশনে, একটি এলিমেন্টের ভেতরে অ্যাট্রিবিউটের নাম অনন্য। Valid মানে আরও বেশি কিছু — ডকুমেন্টটি একটি নির্দিষ্ট স্কিমার সঙ্গেও মেলে, ঠিক ক্রমে ঠিক এলিমেন্ট আর তাতে ঠিক ধরনের মান। এই পেজ প্রথমটি যাচাই করে। এতে ব্যর্থ হওয়া ডকুমেন্ট প্রতিটি XML পার্সারই প্রত্যাখ্যান করে, তাই একটি ফাইল আদৌ পড়া যাবে কি না, সেটা এই যাচাই দিয়েই ঠিক হয়।

ব্যর্থতাগুলো অনুমেয়। এস্কেপ না করা & অনেক ব্যবধানে সবচেয়ে সাধারণ — এটি একটি এনটিটি রেফারেন্স শুরু করে, তাই কোয়েরি স্ট্রিংসহ একটি URL সরাসরি এলিমেন্টে পেস্ট করলে ডকুমেন্ট ভেঙে যায়। টেক্সটে খালি < থাকলেও একই হয়। এরপর আসে না-মেলা বা বন্ধ না করা ট্যাগ, ভুল ক্রমে বন্ধ করা এলিমেন্ট, দুটি রুট এলিমেন্ট, আর এমন একটি বিপথে যাওয়া কন্ট্রোল ক্যারেক্টার যা XML একেবারেই অনুমোদন করে না, যদিও ফাইলে সেটি অদৃশ্যভাবে বসে থাকে।

কোনো DTD বা স্কিমা ইচ্ছা করেই কখনো আনা হয় না, আর এটি একটি নিরাপত্তা বৈশিষ্ট্য, কোনো অনুপস্থিত ফিচার নয়। একটি XML ডকুমেন্ট একটি এক্সটার্নাল এনটিটির নাম দিতে পারে, আর যে পার্সার তা রিজলভ করে, সে গিয়ে সেটি যা নির্দেশ করে তা আনে — ডিস্কের একটি ফাইল, ইন্টারনাল নেটওয়ার্কের একটি ঠিকানা। এটাই XML External Entity দুর্বলতা, সবচেয়ে বেশি অপব্যবহৃত বাগগুলোর একটি, আর এর একমাত্র পূর্ণ প্রতিরোধ হলো এগুলো রিজলভ না করা। তাই এখান থেকে কিছুই বাইরে কোথাও যোগাযোগ করে না, আর এর মূল্য হলো স্কিমা অনুযায়ী ভ্যালিডেশন এর আওতার বাইরে।

আপনি পাবেন ঠিক সেই লাইন ও কলাম, যেখানে পার্সিং থেমেছে। যেকোনো পার্সারের মতোই, এটি সেই জায়গা যেখানে ডকুমেন্টটি অর্থহীন হয়ে গেছে, ভুলটি যেখানে সেখানে নয়: বন্ধ না করা ট্যাগ সাধারণত তার পরের অপ্রত্যাশিত ক্লোজিং ট্যাগে গিয়ে ধরা পড়ে, কখনো কখনো শত শত লাইন পরে। দেখানো অবস্থান থেকে ওপরের দিকে খোঁজা শুরু করুন, সেখানেই এডিট করবেন না।

অন্য কিছু দরকার হলে

স্কিমা অনুযায়ী যাচাই করতে xmllint হলো আদর্শ টুল: XSD-এর জন্য xmllint --noout --schema schema.xsd file.xml, RELAX NG-এর জন্য --relaxng, আর DTD-এর জন্য --noout --valid। এটি প্রথমটিতে না থেমে প্রতিটি লঙ্ঘন জানায়, আর ডকুমেন্ট শুধু ভাঙা নয়, সত্যিই ভুল হলে ঠিক এটাই আপনার দরকার।

অবিশ্বস্ত ইনপুট নিয়ে যেকোনো কাজে ভ্যালিডেটরের চেয়ে পার্সারের কনফিগারেশন বেশি গুরুত্বপূর্ণ। যে ভাষাই ব্যবহার করুন, এক্সটার্নাল এনটিটি রিজলভ করা আর DTD প্রসেসিং স্পষ্টভাবে বন্ধ করুন — Python-এ defusedxml, PHP-তে LIBXML_NONET, Java-তে secure processing — কারণ বেশ কয়েকটি জনপ্রিয় পার্সার এখনো ডিফল্টভাবে এনটিটি রিজলভ করে, আর দুর্বলতাটা থাকে ওই ডিফল্টেই।

সাধারণ প্রশ্নোত্তর

আমার XML কি কোথাও সংরক্ষণ করা হয়?

না। কোনো সার্ভার কল নেই, কোনো লগ রাখা হয় না, আর কিছুই সংরক্ষণ করা হয় না। পেজ লোড হওয়ার পর ইন্টারনেট সংযোগ বিচ্ছিন্ন করলেও এটি কাজ করতে থাকে। এখানে এর গুরুত্ব যতটা মনে হয় তার চেয়ে বেশি: মানুষ অনলাইন ফরম্যাটারে যা পেস্ট করে, তা হলো API রেসপন্স, কনফিগ ফাইল আর এরর পেলোড — আর এগুলোতে প্রায়ই টোকেন, গ্রাহকের তথ্য ও ইন্টারনাল হোস্টনেম থাকে।

“well-formed” মানে কী?

মানে ডকুমেন্টটি XML-এর নিজস্ব নিয়ম মানে: প্রতিটি ট্যাগ বন্ধ, ট্যাগগুলো ঠিক ক্রমে নেস্ট করা, ঠিক একটি রুট এলিমেন্ট, অ্যাট্রিবিউট কোটেশনে, আর প্রতিটি & ও < হয় এস্কেপ করা, নয়তো একটি বৈধ এনটিটির অংশ। XML নিয়ে যে দুটি প্রশ্ন করা যায়, এটি তার প্রথমটি। দ্বিতীয়টি — ডকুমেন্টটি কোনো নির্দিষ্ট স্কিমার সঙ্গে মেলে কি না — আলাদা প্রশ্ন, আর এই পেজ তার উত্তর দেয় না।

এটি কি DTD বা XSD স্কিমা অনুযায়ী যাচাই করে?

না। এটি যাচাই করে ডকুমেন্টটি well-formed XML কি না, আর বেশিরভাগ মানুষ আসলে এই ত্রুটিটাই দেখছেন। স্কিমা ভ্যালিডেশনের জন্য আপনার স্কিমা ফাইল আর একটি ভ্যালিডেটিং পার্সার লাগে, যা কোনো ব্রাউজারে থাকে না; এখানে তা করার দাবি করা মানে হয় আপনার ডকুমেন্ট সার্ভারে পাঠানো, নয়তো চুপচাপ যাচাই না করা। পার্থক্যটা জেনে রাখা ভালো: একটি ডকুমেন্ট পুরোপুরি well-formed হয়েও তার স্কিমার জন্য ভুল হতে পারে।

XML-এর সবচেয়ে সাধারণ ত্রুটিগুলো কী?

সবচেয়ে সাধারণ হলো খালি অ্যাম্পারস্যান্ড — & লিখতে হয় &amp; হিসেবে, এমনকি URL-এর ভেতরেও, তাই কোয়েরি স্ট্রিং সরাসরি এলিমেন্টে পেস্ট করলে ডকুমেন্ট ভেঙে যায়। এরপর: ভুল ক্রমে বন্ধ করা ট্যাগ, দুটি রুট এলিমেন্ট, &nbsp;-এর মতো অসংজ্ঞায়িত এনটিটি (যা HTML-এ সংজ্ঞায়িত, XML-এ নয়), আর ডিক্লেয়ার না করেই ব্যবহার করা নেমস্পেস প্রিফিক্স। প্রতিটি ত্রুটি নাম ও অবস্থানসহ জানানো হয়।

HTML কি বৈধ XML?

সাধারণত না, আর এটা ভুল নয়, স্বাভাবিক। HTML-এ <br> ও <li>-এর মতো বন্ধ না করা ট্যাগ, কোটেশন ছাড়া অ্যাট্রিবিউট আর খালি অ্যাম্পারস্যান্ড চলে; XML-এ এর কোনোটিই চলে না। এমন HTML দরকার হলে যা বৈধ XML-ও, সেটি হলো XHTML, আর তাতে প্রতিটি ট্যাগ বন্ধ করতে হয়।

সাইজের কোনো সীমা আছে কি?

সীমা আপনার ডিভাইসের মেমরি, আমাদের বেঁধে দেওয়া কোনো সীমা নয়। কয়েক মেগাবাইটের ডকুমেন্ট সঙ্গে সঙ্গে ফরম্যাট হয়; খুব বড় ডকুমেন্ট আটকায় একবারে কতটা ধরে রাখা যায় তার জন্য, আমাদের দিক থেকে কোনো কিছুর জন্য নয়।

জেনে রাখুন: well-formedness যাচাই হয়, স্কিমা ভ্যালিডেশন নয়। ট্যাগ মিলছে কি না, নেস্টিং ঠিক কি না আর অক্ষর বৈধ কি না দেখা হয়, এবং প্রথম সমস্যার ঠিক লাইন ও কলাম পাবেন। DTD বা XSD অনুযায়ী যাচাই করতে হলে সেটি আনতে হতো, অর্থাৎ একটি নেটওয়ার্ক রিকোয়েস্ট — যা এই পেজ ইচ্ছা করেই কখনো করে না।

এই টুলটি আপনার ওয়েবসাইটে যোগ করুন

যেকোনো ব্লগ, ক্লাসের পেজ বা হেল্প আর্টিকেলের জন্য ফ্রি। একটি স্নিপেট পেস্ট করলেই আপনার ভিজিটররা আপনার পেজেই এটি ব্যবহার করতে পারবেন।