XML (Extensible Markup Language, rozszerzalny język znaczników) stanowi uniwersalny język znaczników przeznaczony do reprezentowania różnych danych w ustrukturyzowany sposób i jest standardem rekomendowanym oraz specyfikowanym przez organizację W3C. Jako format tekstowy niezależny od platformy, XML umożliwia zarówno przechowywanie, jak i przesyłanie danych w formacie czytelnym dla ludzi i maszyn.
XML zapewnia interoperacyjność między systemami, czytelność dla człowieka oraz bogaty ekosystem narzędzi do walidacji i transformacji.
Definicja i historyczne tło XML
XML powstał, by ujednolicić wymianę danych między heterogenicznymi systemami. XML stanowi podzbiór SGML (Standard Generalized Markup Language) i miał umożliwiać przetwarzanie danych SGML w sieci WWW oraz łączyć światy SGML i HTML. W 1998 roku został zatwierdzony jako rekomendacja W3C.
W odróżnieniu od HTML, który ma z góry określone znaczniki do prezentacji, XML pozwala tworzyć własne znaczniki opisujące znaczenie danych. XML 1.1 (2004) rozszerzył zasady dozwolonych znaków i zgodność z Unicode, lecz najczęściej używana jest wersja XML 1.0.
Fundamentalna struktura i składnia XML
XML opiera się na hierarchicznym modelu drzewa. Każdy dokument zaczyna się opcjonalną deklaracją XML i zawiera pojedynczy element główny, który obejmuje całą zawartość. Deklaracja może zawierać atrybuty version (1.0 lub 1.1) oraz opcjonalnie encoding i standalone.
Element składa się z otwierającego znacznika, treści i znacznika zamykającego. Znacznik początkowy zawiera nazwę elementu i opcjonalne atrybuty, a znacznik końcowy ma identyczną nazwę poprzedzoną ukośnikiem. Przykład: <TAG_NAME>TAG_CONTENT</TAG_NAME>.
Elementy puste można zapisać w formie samozamykającej. Empty tags upraszczają zapis elementów pozbawionych treści, np.: <element_pusty />.
Elementy, atrybuty i wartości w XML
Podstawę dokumentu tworzą elementy, atrybuty i wartości. Elementy XML składają się z pary znaczników i treści, mogą zawierać elementy potomne i tworzyć zagnieżdżone struktury. Atrybuty dostarczają metadanych o elemencie i mają postać nazwa=”wartość”, np.: <osoba imię="Jan" wiek="30">Jan Kowalski</osoba>.
Wartości mogą być tekstem, liczbą lub innymi typami danych. Dane binarne należy zakodować (np. Base64), co zwiększa rozmiar, ale zachowuje przenośność.
Atrybuty zwykle przechowują metainformacje, a elementy podrzędne — dane właściwe, np.: <książka ISBN="123-456-789"><tytuł>XML dla początkujących</tytuł></książka>.
Deklaracja XML i instrukcje przetwarzania
Dokument XML może rozpoczynać się deklaracją. Deklaracja określa wersję XML oraz kodowanie dokumentu, np.: <?xml version="1.0" encoding="UTF-8" standalone="no"?>.
Instrukcje przetwarzania (Processing Instructions) przekazują aplikacjom dodatkowe dyrektywy. Zaczynają się od <? i kończą na ?>, np. <?xml-stylesheet?> do powiązania arkusza stylów.
Model hierarchiczny i zagnieżdżanie elementów
Dokumenty XML mają strukturę drzewiastą: elementy mogą zawierać inne elementy. Element główny (root) jest jeden i obejmuje wszystkie pozostałe elementy.
Relacje rodzinne są kluczowe: elementy wewnątrz innego elementu to „dzieci”, element nadrzędny to „rodzic”, a elementy na tym samym poziomie to „rodzeństwo”. Przykład: <katalog><książka><tytuł>XML Basics</tytuł></książka></katalog>.
Kodowanie znaków i znaki specjalne
XML wspiera wiele schematów kodowania znaków. Każda aplikacja XML musi obsługiwać UTF-8, zgodny z ASCII dla kodów 0–127; powszechne są też UTF-16 i ISO‑8859‑x.
Kodowanie dokumentu wskazuje atrybut encoding w deklaracji XML, np.: <?xml encoding="ISO-8859-2"?>.
Aby w treści zapisać znaki o specjalnym znaczeniu, używa się encji. Oto pięć encji predefiniowanych w XML:
- < – znak mniejszości (
<); - > – znak większości (
>); - & – ampersand (
&); - " – cudzysłów (
"); - ' – apostrof (
').
Poprawność składniowa i strukturalna dokumentów XML
Dokument well-formed jest zgodny z gramatyką XML i tzw. well-formedness constraints. Najważniejsze zasady poprawności składniowej to:
- pary znaczników – każdy znacznik początkowy musi mieć odpowiadający mu znacznik końcowy;
- prawidłowe zagnieżdżanie – elementy nie mogą się krzyżować; zamknięcia muszą odzwierciedlać kolejność otwarć;
- pojedynczy element główny – w dokumencie może występować tylko jeden root;
- cytowanie atrybutów – wartości atrybutów muszą być ujęte w cudzysłów lub apostrof;
- unikalność atrybutów – element nie może mieć dwóch atrybutów o tej samej nazwie;
- zakaz w znacznikach – komentarze i instrukcje przetwarzania nie mogą występować wewnątrz znaczników.
Dokument valid jest zgodny z formalną definicją struktury (DTD lub XSD). W przypadku DTD obowiązują dodatkowe „validity constraints”.
DTD i definiowanie struktury dokumentów
DTD jest jednym z mechanizmów definiowania struktury XML. DTD określa dozwolone elementy, atrybuty, ich kolejność i relacje. Kluczowe funkcje DTD obejmują:
- wymagalność – wskazanie, które elementy są obowiązkowe, a które opcjonalne;
- kolejność – definiowanie sekwencji wystąpień elementów;
- ograniczenia atrybutów – dozwolone zestawy i wartości atrybutów.
Ograniczona ekspresyjność typów i reguł w DTD doprowadziła do upowszechnienia schematów XML (XSD).
XML Schema i zaawansowana walidacja
XML Schema (XSD) to rekomendowany przez W3C mechanizm walidacji struktury i typów danych. Umożliwia precyzyjne definiowanie typów, ograniczeń wartości oraz reguł wystąpień elementów i atrybutów. Schematy przechowuje się zwykle w plikach .xsd.
Walidację można wykonać także z linii poleceń w systemie Linux, np.:
xmllint --schema file.xsd plik.xml
Typy nazwane ułatwiają wielokrotne użycie tej samej definicji, a typy nienazwane służą pojedynczym, lokalnym konstrukcjom.
Przestrzenie nazw XML
Przestrzenie nazw zapobiegają konfliktom nazw między różnymi słownikami XML i są identyfikowane przez URI/IRI. Domyślną przestrzeń deklarujemy atrybutem xmlns, a przestrzeń z prefiksem — atrybutem xmlns:prefix.
Przykładowa deklaracja przestrzeni nazw i użycie prefiksów:
<root xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:svg="http://www.w3.org/2000/svg"><xsl:element>...</xsl:element><svg:element>...</svg:element></root>
Zakres deklaracji przestrzeni obowiązuje dla elementu, który ją deklaruje, oraz jego dzieci.
Przetwarzanie i parsowanie dokumentów XML
Do przetwarzania XML używa się parserów dostępnych w wielu językach (Java, Python, C# itd.). Podejścia do parsowania różnią się modelem pamięci i wydajnością:
- DOM – ładuje cały dokument do pamięci jako drzewo; wygodny do modyfikacji, mniej wydajny przy dużych plikach;
- SAX – podejście zdarzeniowe, przetwarzanie sekwencyjne; bardzo wydajne pamięciowo;
- StAX – streaming z kontrolą „pull”; kompromis między DOM i SAX.
Przykład parsowania w COBOL-u z obsługą błędów:
XML PARSE xml-document PROCESSING PROCEDURE xml-event-handler ON EXCEPTION DISPLAY 'XML document error ' XML-CODE STOP RUN NOT ON EXCEPTION DISPLAY 'XML document was successfully parsed.' END-XML
Transformacja XML za pomocą XSLT
XSLT służy do przekształcania dokumentów XML w inne formaty. Typowe zastosowania to generowanie HTML, PDF, CSV lub innego XML. Arkusz XSLT tworzą szablony (templates) dopasowywane do węzłów wejściowych, a transformacja startuje od szablonu pasującego do elementu głównego.
XSLT oferuje instrukcje warunkowe, iteracje oraz funkcje do pobierania i kopiowania wartości, co czyni go wszechstronnym narzędziem nie tylko do wizualizacji, ale i do przekształceń danych.
Zastosowania XML w wymianie danych
XML jest powszechny w biznesie i IT. Umożliwia wymianę dokumentów handlowych (zamówienia, potwierdzenia, faktury) i synchronizację danych produktowych w e‑commerce.
Najczęstsze zastosowania obejmują:
- systemy e‑commerce – synchronizacja cen, opisów i dostępności;
- CMS – modelowanie i przetwarzanie treści;
- bazy danych – przechowywanie danych o nieregularnej strukturze;
- integracja systemów – eksport/import danych między aplikacjami;
- aplikacje internetowe – niezależność od platformy i przenośność.
Web services i SOAP
SOAP (Simple Object Access Protocol) to protokół komunikacji oparty na XML, rekomendowany przez W3C. Wiadomość SOAP to dokument XML z elementami Envelope, Header, Body i Fault, zadeklarowanymi w przestrzeni nazw SOAP.
WSDL (Web Services Description Language) opisuje interfejs usługi: operacje, parametry wejściowe i dane wyjściowe. SOAP + WSDL umożliwiają interoperacyjną komunikację między aplikacjami.
RSS i syndykacja treści
RSS (Really Simple Syndication) to format oparty na XML do dystrybucji nagłówków i treści. Ułatwia śledzenie aktualności, wpisów blogowych i podcastów w czytnikach lub przeglądarkach.
Elektroniczna wymiana danych (EDI)
EDI to wymiana dokumentów w zunifikowanym formacie, często z użyciem XML. Automatyzacja przyspiesza przyjmowanie, przetwarzanie i rozliczanie dokumentów, a integracja z ERP eliminuje ręczne wprowadzanie danych.
Porównanie XML z HTML
Choć oba są językami znaczników, różnią się przeznaczeniem: HTML służy prezentacji, a XML — wymianie i przechowywaniu danych. Poniższa tabela podsumowuje kluczowe różnice:
| Aspekt | HTML | XML |
|---|---|---|
| Cel | Prezentacja zawartości | Wymiana i przechowywanie danych |
| Znaczniki | Predefiniowane | Niestandardowe, definiowane przez użytkownika |
| Typowanie | Brak formalnego typowania danych | Silne typowanie możliwe z użyciem schematów (np. XSD) |
| Skupienie | Jak wyświetlić dane | Co dane oznaczają |
| Rok wydania | 1993 | 1998 |
HTML dopuszcza luźniejszą składnię, natomiast XML jest rygorystyczny i może narzucać typy i reguły dzięki schematom.
XML a JSON – konkurencja formatów danych
JSON stanowi popularną alternatywę dla XML. Jest mniej rozwlekły i ma prostszą składnię, co poprawia wydajność i ułatwia debugowanie. Ma też naturalne związki z JavaScript.
XML wygrywa elastycznością modelowania dokumentów (m.in. atrybuty, treść mieszana, przestrzenie nazw) i dojrzałymi mechanizmami walidacji (DTD, XSD). Wybór zależy od wymagań projektu, walidacji i interoperacyjności.
Zalety XML
Najważniejsze atuty XML to:
- uniwersalność – działa w wielu domenach i na różnych platformach;
- rozszerzalność – możliwość definiowania własnych znaczników i atrybutów;
- samodokumentowanie – struktura i znaczniki opisują dane wprost;
- hierarchiczna struktura – przejrzyste drzewo elementów i relacji;
- walidacja – definicja struktury i typów danych dzięki DTD/XSD;
- czytelność dla człowieka – edycja w prostym edytorze tekstu;
- niezależność od platformy – łatwa wymiana między systemami.
Wady XML
Ograniczenia, o których warto pamiętać:
- wolumin – większe pliki niż w formatach bardziej zwartych (np. JSON);
- rozbudowana składnia – wiele znaczników utrudnia analizę w prostych przypadkach;
- koszt przetwarzania – parsowanie dużych dokumentów bywa czasochłonne;
- złożoność – skomplikowane struktury zwiększają ryzyko błędów;
- wymóg narzędzi – konieczność użycia parserów i bibliotek.
Praktyczne przykłady zastosowania XML
XML jest obecny w wielu sektorach. Najczęstsze scenariusze obejmują:
- medycynę – historia pacjentów, wyniki badań, diagnozy;
- finanse – raportowanie i wymiana danych transakcyjnych;
- logistykę – śledzenie przesyłek, łańcuch dostaw;
- telekomunikację – konfiguracje urządzeń i ustawienia;
- e‑commerce – katalogi produktów, zamówienia, faktury;
- administrację publiczną – obieg dokumentów i archiwizacja.
Plik Excel (XLSX): Rejestr aptek – stan na dzień podany w nazwie; plik XML: Rejestr aptek – stan na dzień podany w nazwie to przykład wdrożeń w sektorze publicznym.
Zaawansowane funkcje i rozszerzenia XML
SVG (Scalable Vector Graphics) to język opisu grafiki wektorowej oparty na XML, który pozwala renderować obrazy w dowolnym rozmiarze bez utraty jakości.
XMLDSIG (XML Signature) umożliwia podpisywanie i weryfikację integralności treści cyfrowych, co jest kluczowe dla bezpieczeństwa i autentyczności dokumentów XML.