از مقایسه JSON و XML دست بردارید
JSON یا XML؟ کدامیک بهتر است؟ کدامیک سریعتر است؟ کدامیک را باید در پروژه استفاده کنم؟ بس کنید!
JSON و XML قابل مقایسه نیستند. مثل این است که یک دوچرخه را با BMW مقایسه کنید. واقعا کدامیک بهتر است؟ در بعضی از شرایط یک دوچرخه خیلی بهتر عمل خواهد کرد. اما آیا به این معنی است که اینها قابل مقایسه هستند؟ در مورد JSON و XML هم به همین شکل است. اینها دو چیز متفاوت با حوزه مورد استفاده مخصوص خود هستند.
در اینجا یک تکه کد JSON ساده را مشاهده میکنید (۱۴۰ کاراکتر)
{ "id": 123, "title": "Object Thinking", "author": "David West", "published": { "by": "Microsoft Press", "year": 2004 } }
و یک سند مشابه در XML به شکل زیر خواهد بود. (۱۶۷ کاراکتر)
<?xml version="1.0"?> <book id="123"> <title>Object Thinking</title> <author>David West</author> <published> <by>Microsoft Press</by> <year>2004</year> </published> </book>
مقایسه آنها راحت به نظر میرسد. اولی اندکی کمتر کاراکتر استفاده شده است و راحتتر فهمیده میشود و کاملا در جاوااسکریپت قابل پردازش است. پس بیایید از JSON استفاده کرده و مرگ XML را اعلام کنیم! چه کسی به این XML حجیم و قدیمی نیاز دارد؟
اما اینطور نیست. اجازه دهید توضیح دهیم.
اول اینکه اشتباه برداشت نکنید. اصلا کسی مخالف JSON نیست. JSON یک فرمت داده بسیار خوب است. اما فقط یک فرمت داده است که به طور موقت برای انتقال داده از نقطه A به نقطه B استفاده میشود. در حقیقت حتی از XML کوتاهتر و خواناتر نیز هست.
اما XML یک فرمت داده نیست. یک زبان قدرتمند است. اجازه دهید در مورد تواناییهای آن توضیح دهیم. (در پرانتز به شما توصیه میکنیم کتاب XML in Nutshell نوشته Elliotte Rusty Harold و W. Scott Means را مطالعه کنید)
چهار ویژگی هست که XML دارد و از JSON وهمه دیگر فرمتهای دادهای مثل YAML آن را متمایز میکند.
۱- XPath
برای گرفتن داده، مثل سال انتشار از سند بالا، تنها کویری XPath زیر را میزنیم:
/book/published/year/text()
هرچند این نیاز هم وجود دارد که یک پردازنده XPath وجود داشته باشد که درخواست را بفهمد و 2004 برگرداند. جذابیت این ویژگی در XPath 2.0 است که یک موتور کویری بسیار قوی با توابع و مسندات خاص خود میباشد. شما میتوانید به معنای واقعی کلمه هر منطقی که مدنظر دارید را در درخواست XPath خود قرار دهید. ممکن است سوال کنید “چند کتاب توسط David West در ۲۰۰۴ منتشر شده است” و پاسخی تنها از طریق XPath دریافت کنید. JSON حتی به این قابلیت نزدیک هم نیست.
۲- صفات و فضای نام (namespace)
شما میتوانید به داده خود متادیتا اضافه کنید درست مثل کاری که با صفت id انجام دادیم. این داده درون المان ذخیره میشود، مثل اسم نویسنده کتاب. درحالیکه متادیتا (داده درمورد داده) میتواند و باید درون صفات (attribute) ذخیره شود. این در ساختاردهی و مرتب کردن دادهها کمک شایانی میکند. علاوه بر این، المان و صفات هردو میتوانند متعلق به یک فضای نام مشخص ثبت شود. این یکی از تکنیکهای مفید در مواردی است که برنامههای کمی با سند XML یکسان کار میکنند.
۳- شمای XML
وقتی شما یک سند XML در جایی میسازید، در جایی دیگر آن را تغییر میدهید و آن را به جایی دیگر منتقل میکنید، شما میخواهید که مطمین باشید ساختار آن در طی این تحولات بهم نریخته است.در یکی از این موارد ممکن است از year برای ذخیره تاریخ انتشار استفاده کند در حالیکه دیگری از date با ISO-8601 استفاده میکند. برای جلوگیری از به هم ریختگی ساختار ، یک سند مکمل میسازید که XML Schema نامیده میشود و همراه با سند اصلی منتقل کنید. هرکسی که می خواهد با سند اصلی کار کند باید اول درستی آن را با استفاده از شما(Schema)، اعتبارسنجی کند. این یک نوعی از تست یکپارچگی integration test در تولید به حساب میآید. RelaxNG یک مکانیزم مشابه اما سادهتر دارد. اگر XML به نظرتان پیچیده است، RelaxNG را امتحان کنید.
۴- XSL
شما میتوانید بدون هیچ جاوا/روبی/غیره تغییراتی به سند XML اعمال کنید. درواقع کد اصلا لازم نیست. تنها یک سند XSL transformation بسازید و آن را به XML اصلی اعمال کنید. به عنوان خروجی یک فایل جدید XML دریافت خواهید کرد. زبان XSL برای تغییرات داده به صورت سلسله مراتبی طراحی شده است و برای این کار از زبانهای جاوا یا هر رویکرد OOP دیگر مناسبتر است. شما میتوانید سند XML را به هرچیزی شامل متن ساده یا HTML تبدیل کنید. بعضی از پیچیدگی XSL شکایت میکنند اما آن را یک امتحانی بکنید. احتمالا به همه بخشهای آن نیاز نخواهید داشت و قابلیتهای اصلی آن خیلی سرراست هستند.
این چهار ویژگی همه ویژگیها نیستند اما مهمترین آنها هستند. با این ویژگیهاست که یک سند XML را میتوان خودکفا نامید! خودش را اعتبارسنجی میکند (XML Schema) میداند که چگونه خود را تغییر دهد (XSL ) و دسترسی راحتی به محتویات درون خود در اختیار قرار میدهد (XPath)
زبانها، استانداردها و برنامههای دیگری هم هستند که پیرامون XML توسعه یافتهاند شامل XForms, SVG, MathML, RDF, OWL, WSDL و …
اما JSON برای پشتیبانی از چنین ویژگیهایی ساخته نشده است، هرچند تلاش شده است بعضی از این ویژگیها در دنیای JSON جا پیدا کنند، شامل JSONPath برای کوئری زدن، بعضی از ابزارها برای تبدیلها و json-schema برای اعتبارسنجی. اما این تنها یک تقلید ضعیف از XML است و به نظر نمیرسد آینده روشنی داشته باشد و شاید بهتر باشد اجازه دهیم که ادامه پیدا نکند تا قالب ساده json را درهم برهم و پیچیده نکنند.
در آخر اینکه json یک فرمت دادهای ساده بدون قابلیتهای اضافه است. بهترین استفاده از آن در AJAX دیده میشود. در بقیه موارد شاید XML بهترین توصیه باشد.
نظر شما چیست؟ XML یا JSON؟
منبع:
کاملا درسته
اما باید قبول کنیم که xml هزار برابر بهتر از json است.