XML ফরম্যাটার ও বিউটিফায়ার
XML পেস্ট করুন এবং তা beautify করুন (পরিষ্কার ইনডেন্টেশনসহ প্রিটি-প্রিন্ট), minify করুন (এক লাইনে গুটিয়ে ফেলুন), বা validate করুন (যাচাই করুন তা well-formed কিনা)। Comments, CDATA ও attributes সংরক্ষিত থাকে — সবকিছু আপনার ব্রাউজারে চলে এবং কিছুই আপলোড হয় না।
XML ফরম্যাটার কীভাবে কাজ করে
এই টুল আপনার XML অক্ষরে অক্ষরে পড়ে এবং তা tokens-এ বিভক্ত করে — start tags, end tags, self-closing tags, টেক্সট, comments, CDATA সেকশন, processing instructions ও ডিক্লারেশন। তারপর এটি সেই tokens আবার নির্গত করে, প্রতিটি খোলা এলিমেন্টের জন্য এক স্তর ইনডেন্টেশন যোগ করে এবং বন্ধ হওয়ার সময় সরিয়ে দেয়, যাতে নেস্টিং-এর গভীরতা প্রতিটি লাইন কতটা ইনডেন্ট তা দিয়ে বোঝা যায়। যেহেতু এটি কিছু ফেলে দেওয়ার বদলে tokens নিয়ে কাজ করে, আপনার নথিতে কিছুই হারায় না: attributes, comments ও CDATA সেকশনের কাঁচা বিষয়বস্তু ঠিক তেমনই আসে যেমন আপনি টাইপ করেছিলেন। Minify এর উল্টো করে — এটি tags-এর মধ্যেকার ফাঁকা জায়গা সরিয়ে দেয় যাতে নথিটি একটিমাত্র সংক্ষিপ্ত লাইনে গুটিয়ে যায়, যখন টেক্সট ও CDATA বিষয়বস্তু অক্ষত থাকে।
Beautify বনাম minify বনাম validate
| ক্রিয়া | এটি কী করে | এটি তখন ব্যবহার করুন… |
|---|---|---|
| Beautify | ইনডেন্টেশন ও লাইন ব্রেক যোগ করে (2/4-স্পেস বা ট্যাব)। | আপনাকে এমন XML পড়তে বা ডিবাগ করতে হবে যা মিনিফাই করা বা এক লাইনে এসেছে। |
| Minify | tags-এর মধ্যেকার ফাঁকা জায়গা সরায়; টেক্সট ও CDATA রাখে। | আপনার নেটওয়ার্কে পাঠানো বা সংরক্ষণের জন্য সবচেয়ে ছোট ফাইল দরকার। |
| Validate | well-formedness যাচাই করে এবং সঠিক এরর জানায়। | কোনো পার্সার আপনার XML প্রত্যাখ্যান করছে এবং আপনাকে কারণ খুঁজতে হবে। |
প্রতিবার যখন আপনি ইনপুট সম্পাদনা করেন বা ক্রিয়া বদলান, টুল আবার well-formedness যাচাই করে, তাই বক্সের নিচের স্ট্যাটাস লাইন সবসময় জানায় নথিটি পার্স হয় কিনা, এবং না হলে কোথায় ব্যর্থ হয়।
XML সিনট্যাক্স রেফারেন্স
| অংশ | উদাহরণ | মন্তব্য |
|---|---|---|
| Prolog / ডিক্লারেশন | <?xml version="1.0" encoding="UTF-8"?> | ঐচ্ছিক প্রথম লাইন যা XML সংস্করণ ও ক্যারেক্টার এনকোডিং জানায়। |
| Element (এলিমেন্ট) | <title>Midnight Rain</title> | একটি start tag, বিষয়বস্তু, এবং একটি মিল end tag। প্রতিটি start tag বন্ধ করা আবশ্যক। |
| খালি এলিমেন্ট | <br/> | একটি self-closing tag — বিষয়বস্তুবিহীন এলিমেন্টের সংক্ষিপ্ত রূপ। |
| Attribute (অ্যাট্রিবিউট) | <book id="bk101"> | start tag-এ একটি name="value" জোড়া; মান উদ্ধৃতিতে থাকতে হবে (একক বা দ্বৈত)। |
| Comment (কমেন্ট) | <!-- notes here --> | পার্সার এটি উপেক্ষা করে; এই ফরম্যাটার এটি অক্ষরে অক্ষরে রাখে। |
| CDATA সেকশন | <![CDATA[ if (a < b) … ]]> | কাঁচা টেক্সট যাতে escaping ছাড়াই < ও & থাকতে পারে — ঠিক যেমন আছে তেমনই রাখা হয়। |
| Processing instruction | <?xml-stylesheet href="s.xsl"?> | নথিটি প্রক্রিয়াকারী অ্যাপ্লিকেশনের জন্য একটি নির্দেশ। |
| Entity reference | < > & " ' | পাঁচটি সংরক্ষিত অক্ষর < > & " ও অ্যাপোস্ট্রফির জন্য escapes। |
Well-formed বনাম valid XML
এই টুল যাচাই করে আপনার XML well-formed কিনা — এটি মৌলিক সিনট্যাক্স নিয়ম মেনে চলে: একটিমাত্র root এলিমেন্ট, প্রতিটি start tag বন্ধ, tags সঠিকভাবে নেস্টেড, attribute মান উদ্ধৃতিতে, এবং পাঁচটি সংরক্ষিত অক্ষর escaped (বা CDATA-তে মোড়া)। এটি valid হওয়া থেকে আলাদা, যার অতিরিক্ত মানে হলো নথিটি কোনো নির্দিষ্ট schema (একটি DTD বা XSD)-এর সঙ্গে সংগতিপূর্ণ, যা ঠিকঠাক সংজ্ঞায়িত করে কোন এলিমেন্ট ও attributes কোন ক্রমে অনুমোদিত। Well-formed হলো পূর্বশর্ত: কোনো schema-র বিপরীতে যাচাই করার আগে XML-কে well-formed হতে হবে। আপনার যদি কেবল আপনার ফাইলটি পরিষ্কারভাবে পার্স হওয়া দরকার হয়, তবে well-formedness-ই আপনার প্রয়োজন — এবং সেটিই এখানে স্ট্যাটাস লাইন জানায়।
সাধারণ ব্যবহার
- এক লাইনে ফিরে আসা মিনিফাই করা API রেসপন্স (SOAP, RSS/Atom ফিড, sitemaps) পড়া।
- কোনো diff বা কোড রিভিউয়ের আগে কনফিগারেশন ফাইল (
pom.xml, Android layouts,web.xml,.svg) পরিষ্কার করা। - কোনো XML payload পাঠানোর আগে ছোট করা, তারপর ডিবাগ করার জন্য তা আবার বিস্তৃত করা।
- কোনো বন্ধ না-করা বা অমিল tag খুঁজে বের করা যা কোনো কঠোর পার্সার প্রত্যাখ্যান করছে।
গোপনীয়তা
ফরম্যাটারটি সম্পূর্ণ ক্লায়েন্ট-সাইড। আপনার XML আপনার নিজের ব্রাউজারেই পার্স ও আবার ইনডেন্ট হয়, কখনো কোনো সার্ভারে পাঠানো হয় না, এবং সংরক্ষণ বা লগও করা হয় না — তাই এটি ব্যক্তিগত কনফিগারেশন ও API ডেটার সঙ্গে নিরাপদ, এবং পৃষ্ঠা লোড হওয়ার পরে অফলাইনেও কাজ করে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
- একটি XML ফরম্যাটার (বিউটিফায়ার) কী করে?
- এটি XML-কে আবার ইনডেন্ট করে যাতে নেস্টেড গঠন পড়তে সহজ হয়। মিনিফাই করা বা এক-লাইনের XML — যেভাবে API ও কনফিগ ফাইল প্রায়ই সংরক্ষণ করে — আলাদা লাইনে বিস্তৃত করা হয়, প্রতিটি চাইল্ড এলিমেন্ট তার প্যারেন্টের নিচে ইনডেন্ট হয়। এই টুল ডেটা বদলায় না: এলিমেন্ট নাম, attributes, টেক্সট বিষয়বস্তু, comments ও CDATA সেকশন সবই ঠিক তেমনই সংরক্ষিত থাকে; কেবল tags-এর মধ্যেকার ফাঁকা জায়গা আবার লেখা হয়। আপনি 2-স্পেস, 4-স্পেস বা ট্যাব ইনডেন্ট বেছে নিতে পারেন।
- বিউটিফাই, মিনিফাই ও ভ্যালিডেট করার মধ্যে পার্থক্য কী?
- Beautify (প্রিটি-প্রিন্ট) ইনডেন্টেশন ও লাইন ব্রেক যোগ করে যাতে একজন মানুষ গঠন পড়তে পারে। Minify tags-এর মধ্যেকার সমস্ত ফাঁকা জায়গা সরিয়ে দেয় যাতে ফাইলটি পাঠানো বা সংরক্ষণের জন্য যতটা সম্ভব ছোট হয় — এলিমেন্ট ও CDATA-এর ভেতরের টেক্সট অক্ষত থাকে। Validate যাচাই করে নথিটি well-formed কিনা: প্রতিটি tag বন্ধ, tags সঠিকভাবে নেস্ট হয়, attribute মান উদ্ধৃতিতে থাকে এবং একটিমাত্র root এলিমেন্ট থাকে। এই টুল তিনটিই করতে পারে, এবং কোনো এরর থাকলে সঠিক well-formedness এরর জানায়।
- এটি কি যাচাই করে আমার XML well-formed কিনা?
- হ্যাঁ। এটি আপনার ইনপুট ব্রাউজারের অন্তর্নির্মিত XML পার্সার দিয়ে পার্স করে এবং একটি সবুজ "well-formed" স্ট্যাটাস বা সঠিক এরর দেখায় (যে লাইন ও কলামে পার্সিং ব্যর্থ হয়েছে সেসহ) — যেমন একটি বন্ধ না-করা tag, একটি অমিল end tag বা উদ্ধৃতিবিহীন attribute। মনে রাখবেন এটি একটি well-formedness যাচাই, schema ভ্যালিডেশন নয়: এটি নিশ্চিত করে XML ভাষার সিনট্যাক্স নিয়ম মেনে চলে, তবে এটি কোনো DTD বা XSD-এর বিপরীতে ভ্যালিডেট করে না, তাই আপনার এলিমেন্টগুলো কোনো নির্দিষ্ট schema-র সঙ্গে মেলে কিনা তা জানাবে না।
- comments, CDATA ও attributes কি রাখা হয়?
- হ্যাঁ। ফরম্যাটার নথিটিকে টোকেনাইজ করে, অংশ ফেলে দেয় না, তাই XML comments (<!-- … -->), CDATA সেকশন (<![CDATA[ … ]]>), processing instructions, <?xml …?> ডিক্লারেশন ও DOCTYPE লাইন সবই অক্ষরে অক্ষরে সংরক্ষিত থাকে। Attribute-এর ক্রম ও মান অক্ষত থাকে, এবং CDATA-এর ভেতরের কাঁচা টেক্সট — যেকোনো < বা & অক্ষরসহ — ঠিক তেমনই কপি হয়, কারণ এটিই তো একটি CDATA সেকশনের পুরো উদ্দেশ্য।
- "unclosed tag" বা "mismatched tag" এরর কীভাবে ঠিক করব?
- এই এররগুলোর মানে কোনো start tag-এর কোনো মিল end tag নেই, বা end tag-এর নাম নিকটতম খোলা এলিমেন্টের সঙ্গে মেলে না। রিপোর্ট করা লাইন ও কলাম পড়ুন, তারপর যাচাই করুন প্রতিটি <tag>-এর একটি সংশ্লিষ্ট </tag> আছে এবং tags যে ক্রমে খুলেছে ঠিক তার উল্টো ক্রমে বন্ধ হয় — <a><b></b></a>, কখনো <a><b></a></b> নয়। এছাড়া নিশ্চিত করুন নথিতে ঠিক একটি টপ-লেভেল (root) এলিমেন্ট আছে এবং প্রতিটি attribute মান উদ্ধৃতিতে মোড়া। বৈধ XML beautify করলে এই কাঠামোগত ভুলগুলো অনেক সহজে চোখে পড়ে।