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 и кодирането. Следва кореновият елемент, вътре в който могат да имате вложени елементи, атрибути, текстово съдържание и коментари. Празните елементи се записват като
<?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 се препоръчва използването на 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 услуги и много enterprise инструменти.
Файлът 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 е незаменим в Enterprise системи, документооборот и 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също