XML JSON-এর চেয়ে প্রায় এক দশক আগে এসেছিল এবং 2000-এর দশকে ওয়েব সার্ভিস (SOAP, RSS, বেশিরভাগ এন্টারপ্রাইজ ইন্টিগ্রেশন) এর জন্য ডিফল্ট পছন্দ ছিল। JSON এটিকে ক্ষমতায় প্রতিযোগিতা করেনি, XML JSON যা করতে পারে তার চেয়েও বেশি কিছু উপস্থাপন করতে পারে; এটি সার্ভার এবং ক্লায়েন্টের মধ্যে ডেটা সরানোর নির্দিষ্ট কাজের ওজন এবং সরাসরি উপর জিতেছে।
একই ডেটা, দুটি পদ্ধতি
<user>
<name>Ada Lovelace</name>
<age>36</age>
<active>true</active>
<skills>
<skill>mathematics</skill>
<skill>writing</skill>
</skills>
</user>
{
"user": {
"name": "Ada Lovelace",
"age": 36,
"active": true,
"skills": ["mathematics", "writing"]
}
}
XML সংস্করণের জন্য প্রতিটি ওপেনিং ট্যাগের জন্য একটি ক্লোজিং ট্যাগ প্রয়োজন, এবং
একটি তালিকা উপস্থাপন করার জন্য একটি পুনরাবৃত্ত <skill> এলিমেন্ট, কারণ XML-এ নেটিভ
অ্যারে সিনট্যাক্স নেই; কয়েকটি <skill> চাইল্ড সহ একটি <skills> এলিমেন্ট ততটাই
সহজেই একটি <skill> চাইল্ড হতে পারে, এবং শুধুমাত্র একটি স্কিমা বা কনভেনশন পাঠককে
বলে কোনটি। JSON-এর [ ] দুটি অক্ষরে অস্পষ্টভাবে “তালিকা” বলে।
কোথায় XML এখনো জয়ী হয়
বিষয়বস্তুর পাশে অ্যাট্রিবিউট। <price currency="USD">42.00</price>
একটি মানের সাথে মেটাডেটা সংযুক্ত করে একটি র্যাপার অবজেক্ট তৈরি না করে। JSON-এ
অ্যাট্রিবিউট ধারণা নেই; একই ডেটা {"price": {"value": 42.00, "currency": "USD"}} বা @currency কী-এর মতো একটি কনভেনশনে পরিণত হয়, উভয়ই
এই আকৃতির জন্য XML-এর নেটিভ সিনট্যাক্সের তুলনায় কম সরাসরি।
মিশ্রিত বিষয়বস্তু। ইনলাইন মার্কআপ সহ পাঠ্যের একটি অনুচ্ছেদ, <p>Some <b>bold</b> text</p>, XML-এর নেটিভ শক্তি, তাই ডকুমেন্ট ফরম্যাট
(DocBook, বেশিরভাগ পাবলিশিং পাইপলাইন, SVG) এখনো এটি ব্যবহার করে। JSON-এ
পাঠ্য এবং মার্কআপ একসাথে জোড়া দেওয়ার কোনো উপায় নেই; JSON-এ একটি সমৃদ্ধ ডকুমেন্ট
উপস্থাপন করার মানে সাধারণত টাইপড নোডের একটি গাছ, যা XML-এর মার্কআপ যা ইতিমধ্যে
বিনামূল্যে দেয় তার চেয়ে লেখার এবং পড়ার জন্য বেশি কোড।
নামস্থান এবং কঠোর স্কিমা। XML Schema (XSD) এবং নামস্থান একটি বড় সংস্থাকে একটি ডকুমেন্টে বিভিন্ন উৎস থেকে শব্দভান্ডার মিশিয়ে দিতে দেয় নাম টক্কর ছাড়া, বিশ বছরেরও বেশি সময় ধরে বিদ্যমান সরঞ্জাম সহ। JSON Schema বিদ্যমান এবং প্রকৃত কাজ করে (JSON Schema Generator একটি প্রকৃত ডকুমেন্ট থেকে একটি অনুমান করে), তবে এটি কম তরুণ এবং বড় এন্টারপ্রাইজ সিস্টেমে XSD-এর তুলনায় কম সার্বজনীনভাবে সম্পন্ন।
কোথায় JSON জয়ী হয়, যা বেশিরভাগ API
ওজন। কোনো ক্লোজিং ট্যাগ নেই মানে একই ডেটার জন্য কম প্রেরণ এবং কম পার্স করা, প্রায়শ গভীরভাবে নেস্টেড ডকুমেন্টে একটি বড় মার্জিন দিয়ে।
প্রোগ্রামের নিজস্ব ডেটা কাঠামোর সাথে সরাসরি ম্যাপিং। JavaScript-এ JSON.parse,
বা প্রায় সকল অন্য ভাষায় একটি সমতুল্য ওয়ান-লাইনার, একটি JSON ডকুমেন্টকে
মধ্যবর্তী মডেল ছাড়াই সেই ভাষার নেটিভ অবজেক্ট এবং অ্যারে টাইপে পরিণত করে। XML-এ
একটি DOM, বা একটি স্কিমা-জেনারেটেড ক্লাস প্রয়োজন, পাঠ্য এবং সেই ডেটার মধ্যে বসে
যা একটি প্রোগ্রাম প্রকৃতপক্ষে ব্যবহার করে।
কোনো নিহিত টাইপিং প্রশ্ন নেই। প্রতিটি XML মান পাঠ্য যতক্ষণ না কিছু
বহির্গত (একটি স্কিমা, একটি কনভেনশন) বিপরীত বলে; <age>36</age> একটি
স্ট্রিং যার মধ্যে “36” আছে যতক্ষণ না এটিকে একটি সংখ্যা হিসাবে বলা হয়। JSON-এর number, boolean,
এবং null টাইপ নিজেই সিনট্যাক্সে স্পষ্ট, তাই কনফিগার বা অনুমান করার
কিছুই নেই।
ব্যবহারে
নতুন REST API আজ প্রায় কোনো ব্যতিক্রম ছাড়াই JSON-কে ডিফল্ট করে। XML স্থায়ী হয় যেখানে এর নিজস্ব শক্তি বোঝাপড়া: পুরনো এন্টারপ্রাইজ সিস্টেমে SOAP সার্ভিস, RSS এবং Atom ফিড, SVG এবং অন্যান্য নেটিভ মার্কআপ ফরম্যাট, এবং যেখানে অ্যাট্রিবিউট বা মিশ্রিত বিষয়বস্তু ডেটার প্রকৃত আকৃতি একটি অদক্ষ ফিটের পরিবর্তে।
তাদের মধ্যে রূপান্তর
JSON to XML Converter উভয় দিকে চলে,
নামস্থান প্রিফিক্স এবং একটি দেওয়া মান XML অ্যাট্রিবিউট বা চাইল্ড এলিমেন্টে
পরিণত হয় কিনা তার নিয়ন্ত্রণ সহ, কারণ সেই পছন্দের কোনো একটি সঠিক
উত্তর নেই এবং আউটপুট কী খাচ্ছে তার উপর নির্ভর করে। এটি XML পড়ার জন্য
ব্রাউজারের নিজস্ব DOMParser ব্যবহার করে হাতে তৈরি পার্সারের পরিবর্তে, এবং প্রতিটি
মান ইনপুটে একটি স্ট্রিং হিসাবে ফিরে আসে, যা সরঞ্জাম বলে XML নিজে যা
বহন করে না তা নীরবে অনুমান করার পরিবর্তে।