XML فارمیٹ کریں
XML کی ایک گھنی دیوار کو پڑھنے کے قابل بنائیں، یا دوبارہ منیفائی کریں۔ کمنٹس، CDATA سیکشنز اور نیم اسپیسز جوں کے توں رہتے ہیں۔ کچھ بھی محفوظ نہیں کیا جاتا۔
- کبھی محفوظ نہیں کی جاتی
- نہ قطار، نہ انتظار
- نہ سائن اپ، نہ واٹر مارک
فارمیٹ شدہ XML یہاں نظر آئے گا۔
یہ کیسے کام کرتا ہے
اپنا XML پیسٹ کریں
یا .xml، .svg، .rss یا .xsd فائل ڈراپ کریں۔ یہ کبھی محفوظ نہیں کی جاتی۔
انڈینٹ چنیں
دو اسپیس، چار، ٹیبز، یا منیفائی کر کے ایک ہی لائن۔
کاپی یا ڈاؤن لوڈ کریں
اگر XML خراب ہے تو نتیجے کے بجائے آپ کو لائن اور کالم ملتا ہے۔
XML کو دوبارہ انڈینٹ کرنا جتنا لگتا ہے اس سے زیادہ خطرناک کیوں ہے
XML میں خالی جگہ (whitespace) بطورِ ڈیفالٹ اہم ہوتی ہے، اور یہی بات لوگوں کو دھوکا دیتی ہے۔ JSON کے برعکس، جہاں فارمیٹنگ سے کچھ نہیں بدلتا، XML پارسر پر لازم ہے کہ وہ ایلیمنٹس کے درمیان اسپیسز اور نئی لائنوں کو ٹیکسٹ مواد کے طور پر رپورٹ کرے — اگر کوئی اسکیما ہو تو وہی بتاتی ہے کہ انہیں نظر انداز کیا جا سکتا ہے۔ لہٰذا کسی دستاویز کو دوبارہ انڈینٹ کرنا واقعی اسے بدل دیتا ہے۔ زیادہ تر کنفیگریشن اور ڈیٹا فائلوں کو اس سے کوئی فرق نہیں پڑتا، مگر ملے جلے مواد (mixed content) والی دستاویزات میں — جہاں ٹیکسٹ اور ایلیمنٹس ساتھ ساتھ ہوں، جیسے XHTML یا DocBook — اس سے دستاویز کا مطلب بدل سکتا ہے۔
اسی لیے یہاں فارمیٹنگ اُس چیز کو نہیں چھیڑتی جسے چھوڑ دینا ضروری ہے۔ جس ایلیمنٹ پر xml:space="preserve" لگا ہو اس کا مواد بالکل ویسا ہی رہتا ہے جیسا لکھا گیا، کیونکہ یہ ایٹریبیوٹ ہے ہی اسی بات کے لیے۔ CDATA سیکشنز بغیر چھیڑے گزار دیے جاتے ہیں؛ وہ ایسا ٹیکسٹ رکھنے کے لیے ہوتے ہیں جس کی تشریح نہیں ہونی چاہیے، اور ان کے اندر فارمیٹنگ کرنا انہیں خراب کر دے گا۔ انٹیٹی ریفرنسز ریفرنس ہی رہتے ہیں، انہیں ان حروف میں نہیں کھولا جاتا جن کی وہ نمائندگی کرتے ہیں۔
نیم اسپیسز بالکل ویسے ہی رکھے جاتے ہیں جیسے لکھے گئے ہیں — پری فکسز، ڈیکلیریشنز اور وہ ایلیمنٹس جن سے وہ جڑے ہیں۔ یہ بات بدیہی لگتی ہے مگر ہے نہیں: جو فارمیٹر پری فکسز کو ایک جیسا کر دیتا ہے، یا ڈیکلیریشنز کو وہاں منتقل کر دیتا ہے جہاں اس کے خیال میں انہیں ہونا چاہیے، وہ ایسی دستاویز بناتا ہے جو تکنیکی طور پر برابر ہوتی ہے مگر ان ٹولز میں ناکام ہو جاتی ہے جو لفظی پری فکسز سے میچ کرتے ہیں۔ ایٹریبیوٹس کی ترتیب بھی برقرار رکھی جاتی ہے، اگرچہ XML اسے بے معنی سمجھتا ہے، اسی وجہ سے — کیونکہ پچھلے ورژن سے diff کا موازنہ صفائی سے زیادہ قیمتی ہے۔
فارمیٹنگ کے دوران جو چیز چیک کی جاتی ہے وہ درست ساخت (well-formedness) ہے: ہر ٹیگ بند ہو، درست طور پر نیسٹ ہو، ایک ہی روٹ ایلیمنٹ ہو، جائز حروف ہوں، اور ایمپرسینڈ اور اینگل بریکٹس درست طریقے سے ایسکیپ ہوں۔ یہ XML کے دو معیاروں میں سے نچلا معیار ہے۔ کوئی دستاویز مکمل طور پر درست ساخت کی ہو کر بھی اپنی DTD یا اسکیما کے لحاظ سے غلط ہو سکتی ہے، اور یہ بات کتنی ہی فارمیٹنگ سے ظاہر نہیں ہوتی۔
جب آپ کو کچھ اور چاہیے
xmllint --format in.xml یہی کام کمانڈ لائن پر کرتا ہے اور زیادہ تر Unix سسٹمز پر پہلے سے انسٹال ہوتا ہے؛ xmlstarlet fo --indent-tab خود انڈینٹیشن پر زیادہ کنٹرول دیتا ہے۔ دونوں اُن فائلوں کو بھی سنبھال لیتے ہیں جو کسی ویب پیج کی میموری سے کہیں بڑی ہوں۔
جب دستاویز کا موازنہ کرنا، اس پر دستخط کرنا یا اسے کینونیکل شکل میں محفوظ کرنا ہو تو فارمیٹنگ بالکل غلط عمل ہے۔ Canonical XML — xmllint --c14n — وہ واحد معیاری شکل بناتا ہے جس تک دو برابر دستاویزات پہنچتی ہیں، اور XML پر ڈیجیٹل دستخط اسی پر انحصار کرتے ہیں۔ دستخط شدہ دستاویز کو pretty-print کرنا اس کے دستخط توڑ دیتا ہے، اور یہ سبق سیکھنے کا سب سے مہنگا طریقہ ہے۔
اکثر پوچھے جانے والے سوالات
کیا میرا XML کہیں محفوظ کیا جاتا ہے؟
نہیں۔ نہ کوئی سرور کال ہے نہ لاگنگ، اور کچھ بھی محفوظ نہیں کیا جاتا۔ صفحہ لوڈ ہونے کے بعد آپ انٹرنیٹ بند کر سکتے ہیں اور یہ کام کرتا رہتا ہے۔ یہاں یہ بات جتنی لگتی ہے اس سے زیادہ اہم ہے: لوگ آن لائن فارمیٹر میں API ریسپانسز، کنفیگ فائلیں اور ایرر پے لوڈز پیسٹ کرتے ہیں، اور ان میں اکثر ٹوکنز، کسٹمرز کے ریکارڈز اور اندرونی ہوسٹ نیمز ہوتے ہیں۔
فارمیٹنگ کے بعد کیا کچھ برقرار رہتا ہے؟
کمنٹس، CDATA سیکشنز، پروسیسنگ انسٹرکشنز، XML ڈیکلیریشن اور تمام نیم اسپیس پری فکسز۔ ایٹریبیوٹس کی ترتیب ویسی ہی رہتی ہے جیسی لکھی گئی۔ جس ایلیمنٹ میں صرف ٹیکسٹ ہو وہ ایک ہی لائن پر رہتا ہے، کیونکہ <title>Hello</title> کو تین لائنوں میں توڑنا زیادہ خوبصورت نہیں — اور ملے جلے مواد والی دستاویز میں اس سے ٹیکسٹ کا اصل مطلب بدل جائے گا۔
کیا انڈینٹ کرنے سے میرے XML کا مطلب بدل جائے گا؟
جس ایلیمنٹ میں صرف دوسرے ایلیمنٹس ہوں، اس میں نہیں۔ لیکن XML میں کوئی عام اصول نہیں کہ خالی جگہ غیر اہم ہے — ملے جلے مواد میں، جہاں ٹیکسٹ اور ایلیمنٹس ساتھ ساتھ ہوں، شامل کی گئی خالی جگہ ٹیکسٹ کا حصہ ہی ہوتی ہے۔ اسی لیے یہاں صرف ٹیکسٹ والے ایلیمنٹس کو توڑنے کے بجائے ایک لائن پر چھوڑ دیا جاتا ہے۔ اگر آپ کی دستاویز میں واقعی ملا جلا مواد ہے اور خالی جگہ اس کے لیے اہم ہے تو منیفائی کرنا زیادہ محفوظ عمل ہے۔
کیا یہ HTML کے ساتھ کام کرتا ہے؟
صرف اس صورت میں جب HTML درست ساخت والا XML ہو — جو زیادہ تر حقیقی HTML نہیں ہوتا۔ بغیر بند کیے <br>، <img> اور <li> ٹیگز، بغیر کوٹس کے ایٹریبیوٹس اور اکیلے ایمپرسینڈ سب HTML میں جائز اور XML میں ناجائز ہیں۔ یہاں کا پارسر سخت XML پارسر ہے، اس لیے وہ اندازہ لگانے کے بجائے انہیں خرابی کے طور پر رپورٹ کرے گا۔ XHTML اور SVG بالکل ٹھیک فارمیٹ ہوتے ہیں۔
اور SVG؟
جی ہاں — SVG بھی XML ہے، اور منیفائی شدہ SVG پڑھنے کا یہ اچھا طریقہ ہے۔ پاتھس، گریڈیئنٹس اور اندر موجود اسٹائلز سب بغیر تبدیلی کے آتے ہیں؛ صرف ایلیمنٹس کے درمیان کی خالی جگہ بدلتی ہے۔
کیا سائز کی کوئی حد ہے؟
دستیاب میموری، نہ کہ ہماری طرف سے لگائی گئی کوئی حد۔ چند میگا بائٹس کی دستاویزات فوراً فارمیٹ ہو جاتی ہیں؛ بہت بڑی دستاویزات کی حد یہ ہے کہ ایک وقت میں کتنا رکھا جا سکتا ہے، ہماری طرف کی کوئی چیز نہیں۔
جاننا مفید ہے: صرف درست ساخت (well-formedness) کی جانچ۔ دستاویز میں ٹیگز کا توازن، درست نیسٹنگ اور جائز حروف چیک کیے جاتے ہیں اور اسے دوبارہ انڈینٹ کیا جاتا ہے — لیکن کوئی DTD یا XSD نہ لایا جاتا ہے نہ لاگو کیا جاتا ہے، اس لیے ایک فائل صاف فارمیٹ ہو کر بھی اپنی اسکیما کے لحاظ سے غلط ہو سکتی ہے۔ نیم اسپیسز بالکل ویسے ہی رکھے جاتے ہیں جیسے لکھے گئے ہیں۔
یہ ٹول اپنی ویب سائٹ پر لگائیں
کسی بھی بلاگ، کلاس پیج یا ہیلپ آرٹیکل کے لیے مفت۔ ایک اسنیپٹ پیسٹ کریں اور آپ کے وزیٹرز اسے سیدھا آپ کے صفحے پر استعمال کر سکیں گے۔