XML ফরম্যাট করুন
এক দেয়াল XML-কে পড়ার মতো করে ইনডেন্ট করুন, বা আবার মিনিফাই করুন। কমেন্ট, CDATA সেকশন ও নেমস্পেস অক্ষত থাকে। কিছুই সংরক্ষণ করা হয় না।
- কখনো সংরক্ষণ করা হয় না
- কোনো লাইন নেই, অপেক্ষা নেই
- সাইনআপ নেই, ওয়াটারমার্ক নেই
ফরম্যাট করা XML এখানে দেখা যাবে।
যেভাবে কাজ করে
আপনার XML পেস্ট করুন
অথবা একটি .xml, .svg, .rss বা .xsd ফাইল ছাড়ুন। এটি কখনো সংরক্ষণ করা হয় না।
ইনডেন্ট বেছে নিন
দুই স্পেস, চার স্পেস, ট্যাব, অথবা মিনিফাই করে এক লাইনে।
কপি বা ডাউনলোড করুন
XML ভাঙা থাকলে ফলাফলের বদলে লাইন ও কলাম নম্বর পাবেন।
XML নতুন করে ইনডেন্ট করা কেন যতটা মনে হয় তার চেয়ে ঝুঁকিপূর্ণ
XML-এ হোয়াইটস্পেস ডিফল্টভাবে অর্থবহ, আর এখানেই মানুষ ধরা খায়। JSON-এ ফরম্যাটিং করলে কিছু বদলায় না, কিন্তু XML পার্সারকে এলিমেন্টগুলোর মাঝের স্পেস ও নতুন লাইনকে টেক্সট কনটেন্ট হিসেবে জানাতেই হয় — এগুলো উপেক্ষা করা যাবে কি না, তা বলে স্কিমা, যদি থাকে। তাই কোনো ডকুমেন্ট নতুন করে ইনডেন্ট করলে সত্যিই সেটি বদলে যায়। বেশিরভাগ কনফিগারেশন ও ডেটা ফাইলে এতে কিছু আসে যায় না, কিন্তু মিক্সড কনটেন্ট — XHTML বা DocBook-এর মতো যেখানে টেক্সট আর এলিমেন্ট পাশাপাশি থাকে — এমন ডকুমেন্টে এটি ডকুমেন্টের বক্তব্যই বদলে দিতে পারে।
তাই এখানে ফরম্যাট করার সময় যা ছোঁয়া উচিত নয়, তা ছোঁয়া হয় না। যে এলিমেন্টে xml:space="preserve" আছে, তার ভেতরের সবকিছু হুবহু যেমন লেখা তেমনই থাকে, কারণ ঠিক এই কথাটি বলার জন্যই অ্যাট্রিবিউটটি আছে। CDATA সেকশন অপরিবর্তিত থাকে; এগুলো এমন টেক্সট রাখার জন্য, যা ব্যাখ্যা করা চলবে না, আর এর ভেতরে ফরম্যাট বদলালে তা নষ্ট হয়ে যেত। এনটিটি রেফারেন্সগুলো রেফারেন্স হিসেবেই থাকে, সেগুলো যে অক্ষর বোঝায় সেই অক্ষরে খুলে দেওয়া হয় না।
নেমস্পেস ঠিক যেভাবে লেখা, সেভাবেই রাখা হয় — প্রিফিক্স, ডিক্লারেশন আর যে এলিমেন্টের সঙ্গে সেগুলো যুক্ত। কথাটা সহজ শোনালেও ব্যাপারটা সহজ নয়: যে ফরম্যাটার প্রিফিক্স নরমালাইজ করে, বা ডিক্লারেশন নিজের পছন্দের জায়গায় সরিয়ে দেয়, সে এমন ডকুমেন্ট বানায় যা কারিগরিভাবে সমতুল্য, অথচ হুবহু প্রিফিক্স মিলিয়ে কাজ করা টুলে ব্যর্থ হয়। একই কারণে অ্যাট্রিবিউটের ক্রমও রাখা হয়, যদিও XML-এর কাছে এর কোনো অর্থ নেই — কারণ আগের সংস্করণের সঙ্গে diff মেলানোর সুবিধা পরিপাটি চেহারার চেয়ে বেশি মূল্যবান।
ফরম্যাট করার সময় যা যাচাই হয়, তা হলো well-formedness: প্রতিটি ট্যাগ বন্ধ, ঠিকভাবে নেস্ট করা, একটিমাত্র রুট এলিমেন্ট, বৈধ অক্ষর, অ্যাম্পারস্যান্ড ও অ্যাঙ্গেল ব্র্যাকেট ঠিকভাবে এস্কেপ করা। এটি XML-এর দুটি মানদণ্ডের মধ্যে নিচেরটি। একটি ডকুমেন্ট পুরোপুরি well-formed হয়েও তার DTD বা স্কিমা অনুযায়ী অবৈধ হতে পারে, আর ফরম্যাটিং যত করাই হোক, তা ধরা পড়ে না।
অন্য কিছু দরকার হলে
xmllint --format in.xml কমান্ড লাইনে একই কাজ করে, আর বেশিরভাগ Unix সিস্টেমে এটি আগে থেকেই ইনস্টল করা থাকে; xmlstarlet fo --indent-tab ইনডেন্টেশনের ওপর আরও বেশি নিয়ন্ত্রণ দেয়। দুটিই এমন বড় ফাইল সামলাতে পারে, যা একটি পেজ মেমরিতে ধরে রাখতে পারে না।
যখন ডকুমেন্টটি তুলনা, সাইন বা ক্যানোনিকাল রূপে সংরক্ষণ করতে হবে, তখন ফরম্যাটিং পুরোপুরি ভুল কাজ। Canonical XML — xmllint --c14n — সেই একটিমাত্র নরমালাইজড রূপ তৈরি করে, যেখানে দুটি সমতুল্য ডকুমেন্ট একই রূপে পৌঁছায়, আর XML-এর ডিজিটাল সিগনেচার ঠিক এর ওপরই নির্ভর করে। সাইন করা ডকুমেন্ট সুন্দর করে সাজালে তার সিগনেচার ভেঙে যায়, আর এটা শেখার সবচেয়ে ব্যয়বহুল উপায় সেটাই।
সাধারণ প্রশ্নোত্তর
আমার XML কি কোথাও সংরক্ষণ করা হয়?
না। কোনো সার্ভার কল নেই, কোনো লগ রাখা হয় না, আর কিছুই সংরক্ষণ করা হয় না। পেজ লোড হওয়ার পর ইন্টারনেট সংযোগ বিচ্ছিন্ন করলেও এটি কাজ করতে থাকে। এখানে এর গুরুত্ব যতটা মনে হয় তার চেয়ে বেশি: মানুষ অনলাইন ফরম্যাটারে যা পেস্ট করে, তা হলো API রেসপন্স, কনফিগ ফাইল আর এরর পেলোড — আর এগুলোতে প্রায়ই টোকেন, গ্রাহকের তথ্য ও ইন্টারনাল হোস্টনেম থাকে।
ফরম্যাট করার পর কী কী অক্ষত থাকে?
কমেন্ট, CDATA সেকশন, প্রসেসিং ইনস্ট্রাকশন, XML ডিক্লারেশন আর সব নেমস্পেস প্রিফিক্স। অ্যাট্রিবিউটের ক্রম লেখা অনুযায়ীই থাকে। যে এলিমেন্টে শুধু টেক্সট আছে, সেটি এক লাইনেই থাকে, কারণ <title>Hello</title>-কে তিন লাইনে ভাঙলে দেখতে ভালো হয় না — আর মিক্সড-কনটেন্ট ডকুমেন্টে এতে লেখাটির আসল বক্তব্যই বদলে যেত।
ইনডেন্ট করলে কি আমার XML-এর অর্থ বদলে যাবে?
যে এলিমেন্টে শুধু অন্য এলিমেন্ট আছে, সেখানে না। কিন্তু XML-এ এমন কোনো সাধারণ নিয়ম নেই যে হোয়াইটস্পেস অর্থহীন — মিক্সড কনটেন্টে, যেখানে টেক্সট আর এলিমেন্ট পাশাপাশি থাকে, যোগ করা হোয়াইটস্পেস টেক্সটেরই অংশ। এ কারণেই এখানে শুধু-টেক্সটের এলিমেন্ট ভাঙা হয় না, এক লাইনেই রাখা হয়। আপনার ডকুমেন্টে সত্যিকারের মিক্সড কনটেন্ট থাকলে এবং হোয়াইটস্পেস গুরুত্বপূর্ণ হলে, মিনিফাই করাই বেশি নিরাপদ।
এটি কি HTML-এ কাজ করে?
শুধু তখনই, যদি HTML-টি well-formed XML হয় — যা বাস্তবের বেশিরভাগ HTML নয়। বন্ধ না করা <br>, <img> ও <li> ট্যাগ, কোটেশন ছাড়া অ্যাট্রিবিউট আর খালি অ্যাম্পারস্যান্ড — সবই HTML-এ বৈধ, আর XML-এ অবৈধ। এখানকার পার্সারটি একটি কড়া XML পার্সার, তাই অনুমান না করে এগুলোকে ত্রুটি হিসেবে জানায়। XHTML ও SVG নিখুঁতভাবে ফরম্যাট হয়।
SVG-এর কী হবে?
হ্যাঁ — SVG আসলে XML, আর মিনিফাই করা SVG পড়ার এটি একটি ভালো উপায়। পাথ, গ্রেডিয়েন্ট ও ভেতরে থাকা স্টাইল সবই অপরিবর্তিত থাকে; শুধু এলিমেন্টগুলোর মাঝের হোয়াইটস্পেস সরে।
সাইজের কোনো সীমা আছে কি?
সীমা আপনার ডিভাইসের মেমরি, আমাদের বেঁধে দেওয়া কোনো সীমা নয়। কয়েক মেগাবাইটের ডকুমেন্ট সঙ্গে সঙ্গে ফরম্যাট হয়; খুব বড় ডকুমেন্ট আটকায় একবারে কতটা ধরে রাখা যায় তার জন্য, আমাদের দিক থেকে কোনো কিছুর জন্য নয়।
জেনে রাখুন: শুধু well-formedness যাচাই হয়। ডকুমেন্টের ট্যাগ মিলছে কি না, নেস্টিং ঠিক আছে কি না আর অক্ষরগুলো বৈধ কি না তা দেখা হয় এবং নতুন করে ইনডেন্ট করা হয় — কিন্তু কোনো DTD বা XSD আনা বা প্রয়োগ করা হয় না, তাই একটি ফাইল ঠিকঠাক ফরম্যাট হয়েও তার স্কিমা অনুযায়ী অবৈধ থাকতে পারে। নেমস্পেস ঠিক যেভাবে লেখা, সেভাবেই রাখা হয়।
এই টুলটি আপনার ওয়েবসাইটে যোগ করুন
যেকোনো ব্লগ, ক্লাসের পেজ বা হেল্প আর্টিকেলের জন্য ফ্রি। একটি স্নিপেট পেস্ট করলেই আপনার ভিজিটররা আপনার পেজেই এটি ব্যবহার করতে পারবেন।