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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође