Podobnie jak HTML, XML używa nawiasów ostrokątnych i znaku ampersand do oznaczania znaczników, więc te znaki nie mogą pojawić się w treści tekstowej wprost — dokument przestaje być poprawnym XML-em, a parser zatrzymuje się z błędem zamiast zignorować problem, tak jak robi to przeglądarka z uszkodzonym HTML-em.
Pięć obowiązkowych encji
W przeciwieństwie do HTML-a, który definiuje setki nazwanych encji, specyfikacja XML wymaga tylko pięciu:
<— zamiast<>— zamiast>&— zamiast&'— zamiast apostrofu'"— zamiast cudzysłowu"
Cudzysłowy trzeba escapować tylko wewnątrz wartości atrybutów, natomiast < i & — w dowolnym miejscu treści tekstowej.
Gdzie to naprawdę ma znaczenie
Krajowy System e-Faktur (KSeF) opiera się na formacie XML (schemat FA_VAT), a nazwa firmy zawierająca ampersand — na przykład "Kowalski & Wspólnicy" — unieważnia całą fakturę, jeśli znak nie zostanie zescapowany. Ten sam problem dotyczy kanałów RSS portali informacyjnych: jeden nagłówek z niezescapowanym & psuje cały kanał dla każdego czytnika, który próbuje go wczytać.
Dlaczego XML jest bardziej rygorystyczny niż HTML
Przeglądarki zwykle tolerują błędny HTML i próbują wyświetlić stronę mimo błędów. Parsery XML tak nie działają: jeden niezescapowany ampersand albo nawias ostrokątny unieważnia cały dokument, a przetwarzanie zatrzymuje się z błędem.
Kiedy się to przydaje
- Przygotowanie tekstu wprowadzonego przez użytkownika przed wstawieniem do dokumentu XML (kanały, pliki konfiguracyjne, wiadomości SOAP).
- Diagnostyka: zobaczenie surowego tekstu ukrytego za encjami w otrzymanym XML-u.
- Ręczna edycja plików XML bez psucia struktury dokumentu.
Alternatywa dla encji: sekcja CDATA
Gdy blok tekstu zawiera wiele znaków specjalnych — na przykład fragment HTML-a lub kodu osadzony w XML-u — wygodniej jest opakować go w <![CDATA[...]]>, gdzie < i & nie wymagają escapowania i są traktowane jak zwykły tekst. Jedynym wyjątkiem jest sekwencja ]]>, która zamyka CDATA i dlatego nie może wystąpić wewnątrz samej zawartości sekcji.