اکس ام ال (XML) چیست؟

پوستر طراحی شده توسط انجمن
پوستر طراحی شده توسط انجمن


توضیح اولیه

یکی از مشتقات زبان SGML است و مخفف Extensible Markup Language هست.

اول از همه باید بدونیم که این فرمت برای ذخیره سازی و انتقاال اطلاعات بین برنامه ها استفاده میشه.

الگو و استفاده این فرمت رو خیلی جاها میتونید ببینید. مثل صفحات HTML، فید RSS، فرمت SVG، فایل های config (تنظیمات) برنامه ها و... - بنابراین دونستن مفاهیم پایه اش برای برنامه نویسا ی امر واجبه


از ویژگی ها مهم اش میشه به موارد زیر اشاره کرد

  1. ساختار XML به قدری انعطاف پذیره که شما میتونید به راحتی اون رو با برنامه تون وفق بدید. (Extensible )
  2. ا XML میتونه اطلاعات رو همراه با metadata ( اطلاعات جزئی تر که در مورد خود ی سری اطلاعات هستن رو meta data میگن ) ذخیره کنه ( ویژگی زبون های markup )
  3. ا XML یک فرمت جهانی و شناخته شدس که خیلی جاها ازش استفاده میشه


ساختار فایل

ا XML Declaration

خب معمولا اول فایل های XML ی قسمت داریم که بهش میگن XML Declaration و توش اطلاعات کلی در مورد اون فایل مثل ورژن خود xml ( اره xml هم ورژن بندی داره) و نوع encoding اش رو مینویسن ( مثلا utf-8 یا utf-16) ( بعدا باید ی مقاله در مورد utf-8 بنویسم )

ی چیزی شبیه به این

<?xml version = &quot1.0&quot encoding = &quotUTF-8&quot?>

که با <?xml شروع میشه و با هم تموم میشه. ی سری attribute هم داره که اون اطلاعات کلی رو مشخص میکنن. ( جلو تر در مورد attribute توضیح دادم )


تگ - tag

به چیزایی میگن که بین علامت بزرگتر و کوچیکتر میاد که دو نوع داره:

  • تگ باز
<tag>
  • تگ بسته
</tag>

همون طور که میبینید توی تگ بسته، بعد از علامت کوچیکتر، ی اسلش ( / ) هم داره


برای اسم تگ میشه از کاراکتر های خط فاصله ( - )، و دو نقطه ( : ) ، نقطه ( . ) حروف انگلیسی و عدد هم استفاده کرد. ولی نمیشه از کلمه های رزور شده مثل خود xml استفاده کرد و اسم تگ حتما باید با حروف انگلیسی یا زیرخط ( _ ) شروع بشه.

مثلا چنین چیزی هم قبوله:

<strange-tag_name:what>


المان - Element

به جفت تگ باز و بسته میگن المان. مثل این:

<tag> </tag>

حالا بین این جفت میتونه المان های دیگه یا حتی متن خالی بیاد ( که بهش میگن بدنه اون المان) مثلا:

<wrapper>
    <my-tag>  just a sentence  </my-tag>
</wrapper>

( فقط برای اطلاعات عمومی بدونید معنی wrapper میشه دربردارنده - که من اینجا به عنوان ی دربردارنده المان my-tag ازش استفاده کردم که اسمش به کارش بخوره D: )

اگر المان تون بدنه نداشته باشه مثل:

<no-body></no-body>

میتونه به صورت یکسره هم نوشته بشه:

<no-body />


ویژگی یا خاصیت - Attribute

یک attribute یک جفت "نام" و "مقدار" هست که بعد از اسم تگ باز نوشته میشه و ی سری اطلاعات جزئی تر رو مشخص میکنه. قاعده نوشتن قسمت "نام" مثال قاعده tag هست. مقدارش بعد از یک علامت تساوی ( = ) توی کوتیشن دوتایی میاد.

<person  name = &quotHamid&quot   age = &quot20&quot>

اینجا ی تگ به نام person دارم که دوتا attribute داره:

  • اولی که name هست و مقدارش Hamid هست
  • دومی که age هست و مقدارش 20 هست


کامنت یا نظر - Comment

کامنت به تیکه کد یا متنی میگن که برنامه نویس یا سازنده اون فایل برای خودش یا بقیه مینویسه و عملا برنامه کامپیوتری که ازش استفاده میکنه هیچ کاری باهاش نداره.

کامنت ها با --!> شروع میشن و با <-- تموم میشن. هر چیزی که بین این دوتا علامت بیاد، توسط برنامه هدف نادیده گرفته میشه.

<!-- Your comment -->

آیا XML ی زبون برنامه نویسیه؟

زبون برنامه نویسی به زبونی میگن که قواعد نوشتاری و واژه نامه خاص خودش رو داره و برای این استفاده میشه که علمیات خاصی رو توی کامپیوتر اجرا کنه و نحوه اجرای اون رو توضیح داده باشه. از اونجایی که XML هیچ الگوریتم یا نحوه اجرایی رو بیان نمیکنه، پس زبون برنامه نویسی محسوب نمیشه


ا XML یک زبون markup هست

همونطور که بالاتر گفتم، XML اطلاعات شما رو میتونه همراه meta-data ذخیره کنه. به همین دلیل بهش میگیم یک زبون markup. ا attribute ها meta-data های المان های شما رو مشخص میکنن.

مثلا فرض کنید که میخوایم اطلاعات کامنت های این پست رو (شما فکر کنید قسمت کامنت ها پره D: ) به صورت XML ذخیره کنیم.

خب هر کامنت این اطلاعات رو داره:

دیاگرام بخش های هر کامنت
دیاگرام بخش های هر کامنت


این اطلاعات رو میتونم توی xml به روش های مختلفی نمایش بدم. ولی یکی از روش هاش اینه:

کد xml کامنت
کد xml کامنت

همونطور که میبینید، متن توی بدنه المان comment محتوای اصلیم رو که متن کامنت بود گذاشتم و با استفاده از attribute های date و user-id ، تاریخ و آیدی کسی که کامنت گذاشته رو هم مشخص کردم.

ی روش دیگه ذخیره اطلاعات کامنت
ی روش دیگه ذخیره اطلاعات کامنت


خب تصویر بالا، ی روش دیگه ذخیره اطلاعات همون کامنت رو نشون میده. فرقایی با روش اول داره. مثلا اینجا هربخش از هم جدا شدن و توی المان مربوط به خودشون ذخیره شدن.


یک فرق دیگه ای که وجود داره اینه که من تاریخ رو به یک صورت دیگه نوشتم ( توی المان date) و با ویژگی type نوع تاریخی که توی المان date اومده رو مشخص کردم. نوع تاریخ به صورت unix-time نوشته شده که تاریخ رو با یک عدد صحیح 64 بیتی نشون داده. توی این مثال، 1641328200 خود داده هست و اون قسمت type = "unix-time"i جزء meta-data ( اطلاعاتی که در مورد اطلاعات اصلی هست ) محسوب میشه.

به زبونایی که میشه برای اطلاعاتت meta-data مشخص کنی، میگن markup.


توی مثال زیر هم اطلاعات رأس های یک مثلث و یک شکل 6 ضلعی رو توی یک صفحه به صورت فایل XML نشون دادیم. ( که دید واضح تری پیدا کنید D: )

ی صفحه نقاشی ساده
ی صفحه نقاشی ساده


گوشه بالا سمت چپ نقطه 0 و 0 حساب میشه و اندازه صفحه 216 در 114 هست

کد xml اش
کد xml اش


دیدید سخت نبود؟ دفعه بعد هم ی فایل xml دیدید، بازش کنید ببینید اطلاعاتش رو چطور ذخیره کرده D:

منابع:

https://www.tutorialspoint.com/xml/xml_syntax.htm

https://www.w3schools.com/xml/xml_elements.asp