XML (eXtensible Markup Language) to tekstowy format przechowywania i przesyłania strukturyzowanych danych z użyciem własnych znaczników. Jest szeroko stosowany w plikach konfiguracyjnych, usługach sieciowych i programowaniu na Androida. Według danych konsorcjum W3C, specyfikacja XML pozostaje stabilnym standardem od 2008 roku. XML zapewnia ścisłą strukturę danych z możliwością walidacji przez schematy.
Najważniejsze
XML to język znaczników, który definiuje zestaw reguł kodowania dokumentów w formacie czytelnym zarówno dla człowieka, jak i maszyny. W przeciwieństwie do HTML, XML nie ma ustalonego zestawu tagów — programista tworzy własne tagi odpowiadające strukturze danych.
XML został opracowany przez konsorcjum W3C w 1996 roku jako uproszczony podzbiór SGML (Standard Generalized Markup Language). Głównym celem XML jest oddzielenie treści od prezentacji danych. W przeciwieństwie do HTML, który opisuje wygląd, XML opisuje strukturę i znaczenie danych.
Kluczową właściwością XML jest rozszerzalność. Jeśli w projekcie pojawiają się nowe typy danych, programista po prostu dodaje nowe tagi bez zmiany istniejącej struktury. To czyni XML wygodnym do długoterminowego przechowywania danych i wymiany między różnymi systemami.
Składnia XML jest bardziej rygorystyczna niż HTML. Każdy tag otwierający musi mieć odpowiadający tag zamykający, atrybuty są ujęte w cudzysłów, nazwy tagów są wrażliwe na wielkość liter. Dokument musi mieć dokładnie jeden element główny zawierający wszystkie pozostałe.
Dokument XML może zaczynać się od deklaracji określającej wersję XML i kodowanie. Następnie następuje element główny, wewnątrz którego mogą znajdować się zagnieżdżone elementy, atrybuty, treść tekstowa i komentarze. Puste elementy zapisuje się jako
<?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 musi przestrzegać podstawowych zasad: tagi zamykające są obowiązkowe dla każdego otwierającego, zagnieżdżanie jest ścisłe (przekraczanie tagów jest zabronione), wartości atrybutów zawsze w cudzysłowiu. Naruszenie którejkolwiek zasady czyni dokument nieprawidłowym i nie nadaje się do parsowania.
Przestrzenie nazw XML (XML Namespaces) rozwiązują problem konfliktu nazw, gdy w jednym dokumencie używane są elementy z różnych słowników. Przestrzeń nazw jest określana atrybutem xmlns z URI jednoznacznie identyfikującym słownik.
XML Schema (XSD) to język opisu struktury dokumentu XML. XSD określa, które elementy i atrybuty są dozwolone, ich typy danych, obowiązkowość i ograniczenia. Schematy umożliwiają automatyczną walidację dokumentu przed przetwarzaniem, co jest kluczowe dla rozwiązań integracyjnych.
| Technologia | Przeznaczenie | Przykład |
|---|---|---|
| DTD | Podstawowa walidacja struktury | Stara, mniej możliwości |
| XSD | Ścisła typizacja i walidacja | Standard w branży |
| RELAX NG | Kompaktowa alternatywa dla XSD | Prostsza i czytelniejsza niż XSD |
| XSLT | Transformacja XML do innych formatów | XML do HTML, PDF, CSV |
| XPath | Nawigacja i wybór węzłów | Zapytania do drzewa XML |
XML odgrywa kluczową rolę w programowaniu na Androida. System operacyjny Android używa XML do opisu interfejsu użytkownika (pliki layoutów), konfiguracji aplikacji (AndroidManifest.xml), zasobów (ciągi znaków, kolory, motywy) i grafiki wektorowej (VectorDrawable). Na iOS XML jest używany rzadziej, głównie do Storyboard i plików konfiguracyjnych plist.
W Android każdy ekran aplikacji jest opisany plikiem XML z hierarchią komponentów View: ConstraintLayout, LinearLayout, TextView, Button. To podejście oddziela logikę aplikacji od widoku, upraszczając utrzymanie i adaptację do różnych ekranów. Pliki XML z zasobami umożliwiają lokalizację aplikacji bez zmiany kodu.
Typowy plik layoutu zawiera główny ConstraintLayout z zagnieżdżonymi elementami, z których każdy ma atrybuty położenia, rozmiaru i stylu. Android kompiluje XML do binarnego formatu AXML w celu optymalizacji wydajności podczas uruchamiania.
<?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>
Parsowanie XML na platformach mobilnych odbywa się dwoma głównymi podejściami: DOM (Document Object Model) ładuje cały dokument do pamięci jako drzewo, SAX (Simple API for XML) czyta dokument strumieniowo, wywołując procedury obsługi zdarzeń. DOM jest wygodny dla małych dokumentów, SAX — dla dużych plików z ograniczeniami pamięci.
Na Android dostępne są wbudowane parser: XmlPullParser do analizy strumieniowej i DocumentBuilder dla podejścia DOM. Na iOS używany jest Foundation XMLParser z protokołem delegata. Do serializacji obiektów do XML często stosuje się biblioteki takie jak SimpleXML w PHP lub Jackson XML w Javie.
W Android zaleca się używanie XmlPullParser do efektywnego parsowania XML. Parser działa w trybie zdarzeniowym: wywołuje next() w celu przejścia do następnego elementu i zwraca typ zdarzenia (START_TAG, TEXT, END_TAG). Pozwala to przetwarzać dokumenty dowolnego rozmiaru przy minimalnym zużyciu pamięci.
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
}
Przykłady użycia XML pokazują jego rolę w rzeczywistych projektach. Oprócz programowania na Androida, XML jest używany do konfiguracji kompilacji, opisu danych i obiegu dokumentów. Znajomość składni XML jest niezbędna do pracy z Maven, usługami SOAP i wieloma narzędziami enterprise.
Plik pom.xml opisuje projekt Maven: zależności, wtyczki, wersje i profile kompilacji. Każda zależność jest określana tagami groupId, artifactId i version. Maven automatycznie pobiera wskazane biblioteki z repozytoriów.
<?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>
Wybór między XML a JSON zależy od konkretnych wymagań projektu. JSON nadaje się do REST API, aplikacji mobilnych i konfiguracji, gdzie ważne są zwartość i szybkość. XML jest niezastąpiony w systemach Enterprise, obiegu dokumentów i programowaniu na Androida, gdzie potrzebna jest ścisła walidacja, przestrzenie nazw i transformacja danych.
XML wygrywa w scenariuszach z długoterminowym przechowywaniem dokumentów. Dzięki schematom XSD dokumenty XML można walidować automatycznie, co jest kluczowe dla systemów medycznych, finansowych i prawnych. Transformacje XSLT umożliwiają generowanie HTML, PDF i innych formatów z jednego źródła XML, co upraszcza obieg dokumentów.
Z kolei JSON stał się standardem dla web API i aplikacji mobilnych. Prostota integracji z JavaScript, mniejszy rozmiar i wysoka szybkość parsowania czynią JSON preferowanym wyborem dla REST API, komunikatów WebSocket i plików konfiguracyjnych. W przypadku większości nowych projektów zaleca się zaczynanie od JSON i przejście na XML tylko w razie pojawienia się specyficznych wymagań.
Często zadawane pytania
XML opisuje strukturę i treść danych, HTML — wygląd i prezentację. XML pozwala tworzyć dowolne tagi, HTML ma ustalony zestaw. XML jest bardziej rygorystyczny w składni: wszystkie tagi muszą być zamykane, HTML dopuszcza niezamknięte tagi. XML — dla danych, HTML — do wyświetlania.
XSD (XML Schema Definition) to język opisu struktury dokumentu XML. XSD określa, które elementy i atrybuty są dozwolone, ich typy danych, obowiązkowość i ograniczenia. Schemat umożliwia automatyczną walidację dokumentu XML przed jego przetworzeniem, zapobiegając błędom i gwarantując integralność danych.
Na Android do parsowania XML używaj XmlPullParser — wbudowanego parsera strumieniowego. Działa on w trybie zdarzeniowym: przetwarza START_TAG, TEXT i END_TAG w pętli, zarządzając pamięcią efektywnie. Dla małych dokumentów odpowiedni jest parser DOM przez DocumentBuilderFactory, który ładuje cały dokument do pamięci jako drzewo węzłów.
DTD (Document Type Definition) to stary mechanizm walidacji z ograniczonymi możliwościami: nie obsługuje typów danych (wszystko to ciągi znaków) ani przestrzeni nazw. XSD to nowoczesny zamiennik z obsługą typów danych (liczby, daty, wyliczenia), przestrzeni nazw i rozszerzalności. XSD sama jest dokumentem XML, DTD używa własnej składni.
Przestrzenie nazw zapobiegają konfliktom nazw, gdy dokument XML łączy elementy z różnych źródeł. Na przykład w layout Android tag View może pochodzić zarówno z android.view, jak i z biblioteki. Atrybut xmlns z URI jednoznacznie identyfikuje źródło każdego elementu i atrybutu.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również