XML (eXtensible Markup Language) este un format text pentru stocarea și transmiterea datelor structurate folosind tag-uri personalizate. Este utilizat pe scară largă în fișierele de configurare, servicii web și dezvoltarea Android. Potrivit consorțiului W3C, specificația XML rămâne un standard stabil din 2008. XML asigură o structură strictă a datelor cu posibilitatea de validare prin scheme.
Principalele puncte
XML este un limbaj de marcare care definește un set de reguli pentru codificarea documentelor într-un format lizibil atât de om, cât și de mașină. Spre deosebire de HTML, XML nu are un set fix de tag-uri — dezvoltatorul își creează propriile tag-uri corespunzătoare structurii datelor.
XML a fost dezvoltat de consorțiul W3C în 1996 ca un subset simplificat al SGML (Standard Generalized Markup Language). Scopul principal al XML este separarea conținutului de prezentarea datelor. Spre deosebire de HTML, care descrie aspectul, XML descrie structura și semnificația datelor.
Proprietatea cheie a XML este extensibilitatea. Dacă în proiect apar noi tipuri de date, dezvoltatorul adaugă pur și simplu tag-uri noi fără a modifica structura existentă. Acest lucru face XML convenabil pentru stocarea pe termen lung a datelor și schimbul între diferite sisteme.
Sintaxa XML este mai strictă decât HTML. Fiecare tag de deschidere trebuie să aibă un tag de închidere corespunzător, atributele sunt încadrate în ghilimele, numele tag-urilor sunt sensibile la majuscule și minuscule. Documentul trebuie să aibă exact un element rădăcină care conține toate celelalte.
Un document XML poate începe cu o declarație care indică versiunea XML și codificarea. Apoi urmează elementul rădăcină, în interiorul căruia pot exista elemente imbricate, atribute, conținut text și comentarii. Elementele goale se scriu ca
<?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 trebuie să respecte regulile de bază: tag-urile de închidere sunt obligatorii pentru fiecare tag de deschidere, imbricarea este strictă (intersectarea tag-urilor este interzisă), valorile atributelor sunt întotdeauna în ghilimele. Încălcarea oricărei reguli face documentul invalid și nu poate fi procesat.
Spațiile de nume XML (XML Namespaces) rezolvă problema conflictelor de nume atunci când într-un document sunt utilizate elemente din diferite dicționare. Spațiul de nume este definit de atributul xmlns cu un URI care identifică unic dicționarul.
XML Schema (XSD) este un limbaj de descriere a structurii unui document XML. XSD definește care elemente și atribute sunt permise, tipurile lor de date, obligativitatea și restricțiile. Schemele permit validarea automată a documentului înainte de procesare, ceea ce este critic pentru soluțiile de integrare.
| Tehnologie | Scop | Exemplu |
|---|---|---|
| DTD | Validare de bază a structurii | Vechi, mai puține posibilități |
| XSD | Tipizare strictă și validare | Standard industrial |
| RELAX NG | Alternativă compactă la XSD | Mai simplu și mai lizibil decât XSD |
| XSLT | Transformarea XML în alte formate | XML în HTML, PDF, CSV |
| XPath | Navigare și selecție de noduri | Interogări în arborele XML |
XML joacă un rol cheie în dezvoltarea Android. Sistemul de operare Android utilizează XML pentru descrierea interfeței de utilizator (fișiere de layout), configurarea aplicației (AndroidManifest.xml), resurse (șiruri de caractere, culori, teme) și grafică vectorială (VectorDrawable). Pe iOS, XML este folosit mai rar, în principal pentru Storyboard și fișiere de configurare plist.
În Android, fiecare ecran al aplicației este descris de un fișier XML cu o ierarhie de componente View: ConstraintLayout, LinearLayout, TextView, Button. Această abordare separă logica aplicației de prezentare, simplificând întreținerea și adaptarea la diferite ecrane. Fișierele XML de resurse permit localizarea aplicației fără modificarea codului.
Un fișier de layout tipic conține un ConstraintLayout rădăcină cu elemente imbricate, fiecare având atribute de poziționare, dimensiune și stil. Android compilează XML în formatul binar AXML pentru optimizarea performanței la pornire.
<?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>
Parsarea XML pe platformele mobile se realizează cu două abordări principale: DOM (Document Object Model) încarcă întregul document în memorie ca un arbore, SAX (Simple API for XML) citește documentul în flux, apelând handler-e de evenimente. DOM este convenabil pentru documente mici, SAX — pentru fișiere mari cu limitări de memorie.
Pe Android sunt disponibile parsere încorporate: XmlPullParser pentru analiză în flux și DocumentBuilder pentru abordarea DOM. Pe iOS se folosește Foundation XMLParser cu protocol de delegat. Pentru serializarea obiectelor în XML sunt adesea utilizate biblioteci precum SimpleXML în PHP sau Jackson XML în Java.
În Android se recomandă utilizarea XmlPullParser pentru parsarea eficientă a XML-ului. Parserul funcționează în modul eveniment: apelează next() pentru a trece la următorul element și returnează tipul de eveniment (START_TAG, TEXT, END_TAG). Acest lucru permite procesarea documentelor de orice dimensiune cu un consum minim de memorie.
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
}
Exemplele de utilizare XML arată rolul său în proiecte reale. Pe lângă dezvoltarea Android, XML este folosit pentru configurarea compilării, descrierea datelor și fluxul de documente. Cunoașterea sintaxei XML este necesară pentru lucrul cu Maven, servicii SOAP și multe instrumente enterprise.
Fișierul pom.xml descrie proiectul Maven: dependențe, plugin-uri, versiuni și profiluri de compilare. Fiecare dependență este specificată prin tag-urile groupId, artifactId și version. Maven încarcă automat bibliotecile specificate din depozite.
<?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>
Alegerea între XML și JSON depinde de cerințele specifice ale proiectului. JSON este potrivit pentru REST API, aplicații mobile și configurații unde sunt importante compactitatea și viteza. XML este de neînlocuit în sistemele Enterprise, fluxul de documente și dezvoltarea Android, unde sunt necesare validare strictă, spații de nume și transformare a datelor.
XML câștigă în scenariile cu stocarea pe termen lung a documentelor. Datorită schemelor XSD, documentele XML pot fi validate automat, ceea ce este critic pentru sistemele medicale, financiare și juridice. Transformările XSLT permit generarea de HTML, PDF și alte formate dintr-o singură sursă XML, simplificând fluxul de documente.
JSON, la rândul său, a devenit standardul pentru web API și aplicații mobile. Simplitatea integrării cu JavaScript, dimensiunea mai mică și viteza mare de parsare fac din JSON alegerea preferată pentru REST API, mesaje WebSocket și fișiere de configurare. Pentru majoritatea proiectelor noi se recomandă începerea cu JSON și trecerea la XML doar la apariția unor cerințe specifice.
Întrebări frecvente
XML descrie structura și conținutul datelor, HTML — aspectul și prezentarea. XML permite crearea oricăror tag-uri, HTML are un set fix. XML este mai strict în sintaxă: toate tag-urile trebuie să fie închise, HTML admite tag-uri neînchise. XML — pentru date, HTML — pentru afișare.
XSD (XML Schema Definition) este un limbaj de descriere a structurii unui document XML. XSD definește care elemente și atribute sunt permise, tipurile lor de date, obligativitatea și restricțiile. Schema permite validarea automată a documentului XML înainte de procesare, prevenind erorile și garantând integritatea datelor.
Pe Android pentru parsarea XML utilizați XmlPullParser — un parser încorporat în flux. Acesta funcționează în modul eveniment: procesează START_TAG, TEXT și END_TAG într-o buclă, gestionând memoria eficient. Pentru documente mici este potrivit parserul DOM prin DocumentBuilderFactory, care încarcă întregul document în memorie ca un arbore de noduri.
DTD (Document Type Definition) este un mecanism vechi de validare cu posibilități limitate: nu suportă tipuri de date (totul sunt șiruri) și spații de nume. XSD este un înlocuitor modern cu suport pentru tipuri de date (numere, date, enumerări), spații de nume și extensibilitate. XSD însăși este un document XML, DTD folosește propria sintaxă.
Spațiile de nume previn conflictele de nume atunci când un document XML combină elemente din surse diferite. De exemplu, în layout-ul Android, tag-ul View poate proveni atât din android.view, cât și dintr-o bibliotecă. Atributul xmlns cu URI identifică unic sursa fiecărui element și atribut.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și