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:

  • &lt; – znak mniejszości (<);
  • &gt; – znak większości (>);
  • &amp; – ampersand (&);
  • &quot; – cudzysłów (");
  • &apos; – 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.