قالببندی XML چیست؟
XML (زبان نشانهگذاری توسعهپذیر) یک فرمت متنی استانداردشده W3C برای اسناد ساختاریافته و تبادل داده است. قالببندی — که زیباسازی یا pretty-printing نیز نامیده میشود — یک منبع XML خوشفرمت را دریافت کرده و آن را به گونهای بازتورفتگی میکند که هر عنصر، ویژگی، توضیح، دستورالعمل پردازش و بخش CDATA به راحتی قابل بررسی باشد. درخت سند تجزیهشده دقیقاً حفظ میشود؛ تنها فاصلهسفید بین عناصر تغییر میکند.
قالببندی XML چگونه کار میکند؟
ورودی شما کاملاً در مرورگر با استفاده از API های بومی DOMParser و XMLSerializer به علاوه یک تورفتگیساز بازگشتی سفارشی پردازش میشود. مراحل کلی عبارتاند از:
- ورودی شما عیناً از textarea خوانده میشود — هر بایتی که پیست کردید به صورت محلی در حافظه نگهداشته میشود.
- مرورگر آن را با
new DOMParser().parseFromString(text, 'application/xml')تجزیه میکند. اگر ورودی خوشفرمت نباشد، تجزیهکننده یک گره<parsererror>تعبیه میکند که محتوای متنی آن راهنمای خط و ستون موتور را حمل میکند — آنها عیناً در نوار خطا نشان داده میشوند. - در صورت تجزیه موفق، یک تورفتگیساز سفارشی درخت DOM را به صورت اول-عمق پیموده، هر عنصر، مجموعه ویژگی، بخش CDATA، توضیح و دستورالعمل پردازش را در خط مستقل در عمق فعلی تولید میکند. تگهای void خودبسته وقتی گزینه روشن است رعایت میشوند.
- حالت کوچکسازی خط لوله را برعکس میکند:
XMLSerializer().serializeToString(doc)یک فرم یکخطی تولید میکند، سپس یک regex حفاظتشده فاصلهسفید بین عناصر را بدون لمس متن داخل بلوکهای CDATA یا گرههای متنی غیرفاصلهسفید حذف میکند. - خروجی در textarea فقطخواندنی نوشته میشود، نوار خطا پاک میشود، و دکمه دانلود نتیجه را به عنوان یک فایل
.xmlبستهبندی میکند که میتوانید ارسال کنید یا به یک ticket ضمیمه کنید.
چرا XML را با این ابزار زیباسازی کنیم؟
- حریم خصوصی: هر گذر تجزیه، قالببندی و کوچکسازی در مرورگر شما اتفاق میافتد. XML هرگز به سرورهای ما نمیرسد — بدون آپلود، بدون telemetry، بدون حساب کاربری.
- خطاهای دقیق: وقتی ورودی ناقص است، تجزیهکننده دقیقاً همان خط و ستونی که موتور مرورگر گزارش میدهد را نشان میدهد، نه یک حدس ساختگی — همان اعداد که در DevTools میبینید.
- چرخه رفت و برگشت وفادارانه: قالببندی کنید سپس کوچک کنید و بایتهای معادل سند اصلی خود را دریافت میکنید — قالببندی هرگز namespace ها را دوباره کانونیسازی نمیکند یا ترتیب ویژگیها را بازنویسی نمیکند.
- سریع: DOMParser خالص به علاوه یک تورفتگیساز ~۶۰ خطی، پاکتهای SOAP چند مگابایتی و تکههای OOXML را فوری مدیریت میکند، بدون کتابخانه خارجی برای دانلود.
کاربردهای رایج قالببندی XML کداماند؟
زیباسازی XML در انتشار وب، یکپارچهسازی سازمانی و آرشیو داده نمود پیدا میکند:
- بررسی فید RSS / Atom: یک پادکست یا متن فید خبری پیست کنید تا metadata کانال، ترتیب آیتمها و پیشوندهای namespace را قبل از انتشار تأیید کنید.
- اشکالزدایی SOAP: یک envelope کپیشده از Wireshark یا یک لاگ کلاینت SOAP قالببندی کنید تا بخشهای Header، Body و Fault در نگاه اول قابل دیدن باشند.
- ممیزی sitemap: یک sitemap.xml از یک رقیب یا سایت staging خود را دوباره تورفتگیگذاری کنید تا ورودیها را بشمارید و hreflang های جایگزین را به ازای هر URL تأیید کنید.
یک مثال از قالببندی XML چگونه است؟
پیست کردن یک <feed><entry><title>Hello</title></entry></feed> سه عنصری و فشردن قالببندی با گزینه تورفتگی ۲ فاصله یک سند چهار خطی با هر عنصر در خط مستقل، تورفته بر اساس عمق تولید میکند. تغییر به Minify با همان ورودی آن را به رشته بایت اصلی برمیگرداند. چرخه رفت و برگشت برای هر سند خوشفرمت بدون اتلاف است.
آیا این به صورت آفلاین اجرا میشود؟
بله. خط لوله قالببندی و کوچکسازی کاملاً DOMParser + XMLSerializer به علاوه یک تورفتگیساز بازگشتی کوچک هستند که همه درون تب مرورگر اجرا میشوند. هیچچیز آپلود نمیشود، هیچ service worker ورودی شما را پروکسی نمیکند، و صفحه برای مرحله قالببندی هیچ درخواست شبکهای انجام نمیدهد. تنها ترافیک خروجی داراییهای استاندارد بارگذاری صفحه هستند (CSS، فونتها، analytics) — XML شما هرگز به Ultim8Soft نمیرسد.
آیا قالببندی سند را تغییر میدهد؟
هیچ تغییر معنایی وجود ندارد. قالببندی فقط فاصلهسفید بین عناصر را بازنویسی میکند. نام عناصر، مقادیر ویژگیها، محتوای متنی، بارهای CDATA، توضیحات و دستورالعملهای پردازش بایت به بایت حفظ میشوند. اعلانهای namespace و پیشوندها دقیقاً همانطور که ورودی نوشته قرار میگیرند — قالببند هرگز ویژگیها را دوباره کانونیسازی یا تنظیم مجدد نمیکند. خروجی به همان درخت DOM ورودی تجزیه میشود.
CDATA / توضیحات / دستورالعملهای پردازش چگونه مدیریت میشوند؟
هر کدام عیناً در خط مستقل در عمق تورفتگی فعلی تولید میشوند. بارهای CDATA در <![CDATA[…]]> بدون بازتورفتگی داخل پوشانده میشوند — مشخصه میگوید محتوای CDATA مات است، بنابراین قالببند هرگز آن را لمس نمیکند. توضیحات از <!-- … --> استفاده میکنند؛ دستورالعملهای پردازش از <?target data?>. هر سه یک چرخه قالببندی → کوچکسازی → قالببندی را با محتوای سالم طی میکنند.
تفاوت بین قالببندی و کوچکسازی XML چیست؟
قالببندی فاصلهسفید را گسترش میدهد تا انسانها بتوانند درخت سند را بخوانند؛ کوچکسازی آن را برای انتقال و ذخیرهسازی برمیگرداند. هر دو روی DOM تجزیهشده عمل میکنند نه رشته بایت خام، بنابراین یک چرخه رفت و برگشت قالببندی → کوچکسازی روی یک سند خوشفرمت بایتهای معادل فرم کوچکشده اصلی را تولید میکند. از جهت قالببندی هنگامی استفاده کنید که نیاز دارید یک بار XML را بخوانید یا diff کنید، و از جهت کوچکسازی وقتی میخواهید آن را از طریق یک API gateway اندازهگیریشده ارسال کنید یا داخل سند دیگری تعبیه کنید.
این قالببند XML از همان تجزیهکنندهای که مرورگر شما برای پاسخهای AJAX XHR و اسناد SVG استفاده میکند بهره میبرد، بنابراین هر XML خوشفرمت — RSS، Atom، SOAP، sitemap، OOXML، SVG — به صورت تمیز چرخه میزند. هر XML را در بالا پیست کنید، خروجی را کپی کنید یا به عنوان .xml دانلود کنید.