CDATA و کاراکترهای خاص

کاراکترهای ویژه XML، موجودیت‌ها و بخش‌های CDATA برای متن‌های حاوی کد

مشکل کاراکترهای خاص

در XML پنج کاراکتر معنی خاص دارند: <، >، &، " و '. اگر بخواهید آن‌ها را در متن استفاده کنید، دو راه دارید:

راه ۱: موجودیت‌ها (Entities)

کاراکترموجودیت
<<
>>
&&
""
''
<question>آیا 5 < 10 است؟</question>
<company>Johnson & Johnson</company>

راه ۲: بخش CDATA

وقتی متن شما پر از کاراکترهای خاص است (مثلاً قطعه کد جاوااسکریپت یا XML!)، escape کردن همه‌شان کابوس است. راه‌حل: بخش CDATA:

<script>
<![CDATA[
    function compare(a, b) {
        if (a < b && b > 0) {
            return "a is smaller";
        }
    }
]]>
</script>

هر چیزی بین <![CDATA[ و ]]> پارسر نادیده می‌گیرد — متن خام محسوب می‌شود!

موجودیت‌های عددی

می‌توانید هر کاراکتر یونیکد را با کد عددی‌اش بنویسید:

<      → <      (دهدهی)
<     → <      (شانزده‌شانزدهی)
®     → ®      (علامت ثبت)
😀  → 😀     (ایموجی!)

موجودیت‌های سفارشی (در DTD)

می‌توانید میانبرهای خودتان را تعریف کنید:

<!DOCTYPE message [
    <!ENTITY company "شرکت لرنینگ سیتی">
    <!ENTITY year "۲۰۲۶">
]>
<message>
    خوش آمدید به &company; — &year;
</message>

قوانین مهم CDATA

مثال واقعی: ذخیره کد در XML

<tutorial>
    <title>آموزش شرط در جاوااسکریپت</title>
    <code><![CDATA[
        if (age < 18) {
            console.log("نوجوان");
        } else if (age >= 18 && age < 60) {
            console.log("بزرگسال");
        }
    ]]>
قاعده کلی: برای یک یا دو کاراکتر از موجودیت استفاده کنید؛ برای بلوک‌های متنی حاوی کد CDATA بهترین انتخاب است.
یادتان باشد CDATA فقط برای پارسر است — برنامه‌ای که سند را می‌خواند متن خام را بدون کاراکترهای خاص دریافت می‌کند. پس هنگام تولید XML از داده کاربر، همچنان باید escape کنید یا از CDATA استفاده کنید تا ساختار سند نشکند.

این مبحث بخشی از دوره آموزش کامل XML است.

ابزارهای مرتبط