XML (eXtensible Markup Language) یک فرمت متنی برای ذخیره و انتقال دادههای ساختاریافته با استفاده از برچسبهای سفارشی است. این فرمت به طور گسترده در فایلهای پیکربندی، خدمات وب و توسعه Android استفاده میشود. به گفته کنسرسیوم W3C، مشخصات XML از سال 2008 یک استاندارد پایدار باقی مانده است. XML ساختار دادهای دقیقی با قابلیت اعتبارسنجی از طریق طرحها فراهم میکند.
نکات اصلی
XML یک زبان نشانهگذاری است که مجموعهای از قوانین برای رمزگذاری اسناد در قالبی قابل خواندن برای انسان و ماشین تعریف میکند. برخلاف HTML، XML مجموعه ثابتی از برچسبها ندارد — توسعهدهنده برچسبهای خود را متناسب با ساختار داده ایجاد میکند.
XML در سال 1996 توسط کنسرسیوم W3C به عنوان زیرمجموعه سادهشده SGML (Standard Generalized Markup Language) توسعه یافت. هدف اصلی XML جداسازی محتوا و نمایش دادهها است. برخلاف HTML که ظاهر را توصیف میکند، XML ساختار و معنی دادهها را توصیف میکند.
ویژگی کلیدی XML توسعهپذیری آن است. اگر نوع داده جدیدی در پروژه ظاهر شود، توسعهدهنده بدون تغییر ساختار موجود، به سادگی برچسبهای جدیدی اضافه میکند. این امر XML را برای ذخیرهسازی طولانیمدت دادهها و تبادل بین سیستمهای مختلف مناسب میسازد.
نحو XML سختگیرانهتر از HTML است. هر برچسب باز باید یک برچسب بسته متناظر داشته باشد، ویژگیها در گیومه قرار میگیرند، نام برچسبها به حروف بزرگ و کوچک حساس هستند. سند باید دقیقاً یک عنصر ریشه داشته باشد که شامل تمام عناصر دیگر است.
سند XML میتواند با اعلامیهای شروع شود که نسخه XML و رمزگذاری را مشخص میکند. سپس عنصر ریشه میآید که در داخل آن میتوانند عناصر تودرتو، ویژگیها، محتوای متنی و نظرات وجود داشته باشد. عناصر خالی به صورت
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book id="bk001">
<title>XML Developer Guide</title>
<author>John Smith</author>
<price currency="USD">29.99</price>
<published>2026-03-15</published>
</book>
<book id="bk002">
<title>Advanced XML Schemas</title>
<author>Jane Doe</author>
<price currency="USD">49.99</price>
</book>
</catalog>
Well-formed XML باید قوانین اساسی را رعایت کند: برچسبهای بسته برای هر برچسب باز الزامی است، تودرتو بودن دقیق است (تداخل برچسبها ممنوع است)، مقادیر ویژگیها همیشه در گیومه هستند. نقض هر قانونی سند را نامعتبر کرده و قابل تجزیه نیست.
فضاهای نام XML (XML Namespaces) مشکل تداخل نامها را زمانی که در یک سند از عناصر فرهنگهای مختلف استفاده میشود حل میکنند. فضای نام با ویژگی xmlns با یک URI که فرهنگ را به طور یکتا شناسایی میکند تعیین میشود.
XML Schema (XSD) زبانی برای توصیف ساختار سند XML است. XSD مشخص میکند که کدام عناصر و ویژگیها مجاز هستند، انواع دادههای آنها، الزامی بودن و محدودیتها. طرحها امکان اعتبارسنجی خودکار سند را قبل از پردازش فراهم میکنند که برای راهحلهای یکپارچهسازی حیاتی است.
| فناوری | هدف | مثال |
|---|---|---|
| DTD | اعتبارسنجی پایه ساختار | قدیمی، امکانات کمتر |
| XSD | تایپسازی دقیق و اعتبارسنجی | استاندارد صنعتی |
| RELAX NG | جایگزین فشرده برای XSD | سادهتر و خواناتر از XSD |
| XSLT | تبدیل XML به فرمتهای دیگر | XML به HTML، PDF، CSV |
| XPath | پیمایش و انتخاب گرهها | پرسوجوهای درخت XML |
XML نقش کلیدی در توسعه Android ایفا میکند. سیستم عامل Android از XML برای توصیف رابط کاربری (فایلهای طرحبندی)، پیکربندی برنامه (AndroidManifest.xml)، منابع (رشتهها، رنگها، تمها) و گرافیک برداری (VectorDrawable) استفاده میکند. در iOS، XML کمتر استفاده میشود، عمدتاً برای Storyboard و فایلهای پیکربندی plist.
در Android، هر صفحه از برنامه با یک فایل XML با سلسلهمراتب مؤلفههای View توصیف میشود: ConstraintLayout، LinearLayout، TextView، Button. این رویکرد منطق برنامه را از نمایش جدا میکند و نگهداری و تطبیق با صفحههای مختلف را ساده میکند. فایلهای XML منابع امکان بومیسازی برنامه را بدون تغییر کد فراهم میکنند.
یک فایل طرحبندی معمولی شامل ConstraintLayout ریشه با عناصر تودرتویی است که هر کدام دارای ویژگیهای مکان، اندازه و سبک هستند. Android XML را برای بهینهسازی عملکرد در هنگام راهاندازی به فرمت باینری AXML کامپایل میکند.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/welcome"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/click"
app:layout_constraintTop_toBottomOf="@id/title"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
تجزیه XML در پلتفرمهای موبایل با دو رویکرد اصلی انجام میشود: DOM (Document Object Model) کل سند را به عنوان درخت در حافظه بارگذاری میکند، SAX (Simple API for XML) سند را به صورت جریانی میخواند و کنترلکنندههای رویداد را فراخوانی میکند. DOM برای اسناد کوچک مناسب است، SAX — برای فایلهای بزرگ با محدودیت حافظه.
در Android تجزیهکنندههای داخلی در دسترس هستند: XmlPullParser برای تجزیه جریانی و DocumentBuilder برای رویکرد DOM. در iOS از Foundation XMLParser با پروتکل نمایندگی استفاده میشود. برای سریالسازی اشیاء به XML اغلب از کتابخانههایی مانند SimpleXML در PHP یا Jackson XML در Java استفاده میشود.
در Android برای تجزیه مؤثر XML توصیه میشود از XmlPullParser استفاده کنید. تجزیهکننده در حالت رویدادی کار میکند: برای حرکت به عنصر بعدی next() را فراخوانی میکند و نوع رویداد (START_TAG، TEXT، END_TAG) را بازمیگرداند. این امکان پردازش اسناد با هر اندازهای را با حداقل مصرف حافظه فراهم میکند.
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserException
import java.io.IOException
fun parseCatalog(parser: XmlPullParser): List<Book> {
val books = mutableListOf<Book>()
var eventType = parser.getEventType()
var currentBook: Book? = null
while (eventType != XmlPullParser.END_DOCUMENT) {
when (eventType) {
XmlPullParser.START_TAG -> {
when (parser.getName()) {
"book" -> currentBook = Book()
"title" -> parser.next()
"author" -> parser.next()
}
}
XmlPullParser.TEXT -> {
currentBook?.apply {
title = parser.getText() ?: ""
}
}
XmlPullParser.END_TAG -> {
if (parser.getName() == "book") {
currentBook?.let { books.add(it) }
}
}
}
eventType = parser.next()
}
return books
}
نمونههای استفاده XML نقش آن را در پروژههای واقعی نشان میدهد. علاوه بر توسعه Android، XML برای پیکربندی کامپایل، توصیف دادهها و گردش اسناد استفاده میشود. آشنایی با نحو XML برای کار با Maven، خدمات SOAP و بسیاری از ابزارهای سازمانی ضروری است.
فایل pom.xml پروژه Maven را توصیف میکند: وابستگیها، افزونهها، نسخهها و پروفایلهای کامپایل. هر وابستگی با برچسبهای groupId، artifactId و version مشخص میشود. Maven به طور خودکار کتابخانههای مشخص شده را از مخازن بارگیری میکند.
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
</project>
انتخاب بین XML و JSON به نیازهای خاص پروژه بستگی دارد. JSON برای REST API، برنامههای موبایل و پیکربندیهایی که فشردگی و سرعت مهم هستند مناسب است. XML در سیستمهای سازمانی، گردش اسناد و توسعه Android که نیاز به اعتبارسنجی دقیق، فضاهای نام و تبدیل داده دارند غیرقابل جایگزین است.
XML در سناریوهای ذخیرهسازی طولانیمدت اسناد برتری دارد. به لطف طرحهای XSD، اسناد XML را میتوان به طور خودکار اعتبارسنجی کرد که برای سیستمهای پزشکی، مالی و حقوقی حیاتی است. تبدیلهای XSLT امکان تولید HTML، PDF و سایر فرمتها را از یک منبع XML فراهم میکند که گردش اسناد را ساده میکند.
از سوی دیگر، JSON به استانداردی برای APIهای وب و برنامههای موبایل تبدیل شده است. سادگی یکپارچهسازی با JavaScript، اندازه کوچکتر و سرعت بالای تجزیه، JSON را به انتخاب ارجح برای REST API، پیامهای WebSocket و فایلهای پیکربندی تبدیل میکند. برای بیشتر پروژههای جدید توصیه میشود با JSON شروع کنید و تنها در صورت ظهور نیازهای خاص به XML منتقل شوید.
سوالات متداول
XML ساختار و محتوای دادهها را توصیف میکند، HTML — ظاهر و نمایش را. XML امکان ایجاد هر برچسبی را فراهم میکند، HTML مجموعه ثابتی دارد. XML در نحو سختگیرانهتر است: همه برچسبها باید بسته شوند، HTML برچسبهای باز را مجاز میداند. XML — برای دادهها، HTML — برای نمایش.
XSD (XML Schema Definition) زبانی برای توصیف ساختار سند XML است. XSD مشخص میکند که کدام عناصر و ویژگیها مجاز هستند، انواع دادهها، الزامی بودن و محدودیتهای آنها. طرح امکان اعتبارسنجی خودکار سند XML را قبل از پردازش فراهم میکند و از خطاها جلوگیری کرده و یکپارچگی دادهها را تضمین میکند.
در Android برای تجزیه XML از XmlPullParser — تجزیهکننده جریانی داخلی استفاده کنید. این تجزیهکننده در حالت رویدادی کار میکند: START_TAG، TEXT و END_TAG را در یک حلقه پردازش میکند و حافظه را به طور مؤثر مدیریت میکند. برای اسناد کوچک، تجزیهکننده DOM از طریق DocumentBuilderFactory که کل سند را به عنوان درخت گره در حافظه بارگذاری میکند مناسب است.
DTD (Document Type Definition) یک مکانیزم اعتبارسنجی قدیمی با قابلیتهای محدود است: از انواع داده (همه چیز رشته است) و فضاهای نام پشتیبانی نمیکند. XSD جایگزین مدرنی با پشتیبانی از انواع داده (اعداد، تاریخها، شمارشها)، فضاهای نام و توسعهپذیری است. XSD خود یک سند XML است، DTD از نحو خاص خود استفاده میکند.
فضاهای نام از تداخل نامها جلوگیری میکنند زمانی که یک سند XML عناصری از منابع مختلف را ترکیب میکند. به عنوان مثال، در طرحبندی Android، برچسب View میتواند هم از android.view و هم از یک کتابخانه باشد. ویژگی xmlns با URI منبع هر عنصر و ویژگی را به طور یکتا شناسایی میکند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید