XML (eXtensible Markup Language) — це текстовий формат для зберігання та передачі структурованих даних з використанням користувацьких тегів. Він широко застосовується у конфігураційних файлах, веб-сервісах та Android-розробці. За даними консорціуму W3C, специфікація XML залишається стабільним стандартом з 2008 року. XML забезпечує сувору структуру даних з можливістю валідації через схеми.
Головне
XML — це мова розмітки, яка визначає набір правил для кодування документів у форматі, читаному як людиною, так і машиною. На відміну від HTML, XML не має фіксованого набору тегів — розробники створюють власні теги, що відповідають структурі даних.
XML був розроблений консорціумом W3C у 1996 році як спрощена підмножина SGML (Standard Generalized Markup Language). Основна мета XML — відокремити вміст від презентації даних. На відміну від HTML, який описує зовнішній вигляд, XML описує структуру та зміст даних.
Ключова властивість XML — розширюваність. Якщо в проекті з’являються нові типи даних, розробник просто додає нові теги без зміни існуючої структури. Це робить XML зручним для довгострокового зберігання даних та обміну між різними системами.
Синтаксис XML суворіший, ніж у HTML. Кожен відкриваючий тег повинен мати відповідний закриваючий, атрибути беруться в лапки, а імена тегів чутливі до регістру. Документ повинен мати рівно один кореневий елемент, що містить усі інші.
XML-документ може починатися з декларації, яка вказує версію XML та кодування. Потім йде кореневий елемент, всередині якого можуть бути вкладені елементи, атрибути, текстовий вміст та коментарі. Порожні елементи записуються як <element />.
<?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 вирішують проблему конфлікту імен, коли в одному документі використовуються елементи з різних словників. Простір імен задається атрибутом 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), ресурсів (strings, colors, themes) та векторної графіки (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 рекомендує використовувати XmlPullParser для ефективного розбору XML. Парсер працює в подійному режимі: викликає 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 створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також