Speciální atributy xml:lang, xml:space, xml:base a xml:id

Prefix xml je předem svázaný s rezervovaným jmenným prostorem. Atributy xml:lang, xml:space, xml:base a xml:id mají definovaný význam, ale jeho využití závisí i na aplikaci a parseru.

Autor: Aktualizováno

Čtyři důležité atributy

AtributVýznam
xml:langjazyk obsahu; platí i pro potomky, dokud jej nepřepíší
xml:spacezáměr aplikace při práci s whitespace: default nebo preserve
xml:basezákladní URI pro vyhodnocení relativních URI
xml:ididentifikátor typu ID podle zpracování xml:id

URI prefixu xml je http://www.w3.org/XML/1998/namespace. Prefix nemusíš deklarovat a nesmíš ho přiřadit jinému URI. Jiné prefixy naopak nesmí používat tento rezervovaný prostor.

xml:lang

Jazyk a přepsání na potomkovi
<text xml:lang="cs">Ahoj <citace xml:lang="en">hello</citace>.</text>

Jazykový tag používá pravidla BCP 47, například cs nebo en-GB. Atribut určuje jazyk obsahu a hodnot atributů, není příkazem k překladu. Prázdná hodnota značí, že jazyk není určen, a ruší zděděnou informaci. Funkce XPath lang() zohledňuje jazyk předků.

xml:space

Záměr zachovat bílé znaky
<ukazka xml:space="preserve">  dva úvodní prostory
nový řádek</ukazka>

Hodnota preserve vyjadřuje záměr zachovat whitespace. Default dovoluje běžné chování aplikace. Atribut nevypíná normalizaci konců řádků ani hodnot atributů podle XML a nezaručuje, že každý formatter nebo renderer zachová původní bajty. Zkontroluj, zda ho konkrétní aplikace respektuje.

xml:base

Relativní adresa s kontextem
<katalog xml:base="https://example.cz/data/"><soubor href="cenik.xml"/></katalog>

Aplikace, která vyhodnocuje href jako URI a respektuje XML Base, získá adresu https://example.cz/data/cenik.xml. Vnořené xml:base se vyhodnocuje vůči zděděnému základu. Samotný parser nemusí žádný soubor stahovat; atribut href také není univerzálně speciální.

xml:id

Identifikátor bez DTD
<kapitoly><kapitola xml:id="uvod">Úvod</kapitola></kapitoly>

Procesor podporující xml:id rozpozná identifikátor bez deklarace ID v DTD. Normalizovaná hodnota musí být NCName a identifikátory mají být v dokumentu jedinečné. Ne každý parser má zpracování xml:id nebo vyhledání přes ID zapnuté; ověř podporu například před použitím XPath id().

Časté chyby

  • lang bez prefixu není xml:lang.
  • xml:space="true" není povolená hodnota.
  • xml:base mění kontext relativních adres, ne text atributů.
  • Obyčejný atribut id není automaticky typu ID.

Obecná pravidla prefixů najdeš v jmenných prostorech.

Dědění na konkrétním příkladu

Jazyk a základní adresa platí i pro potomky
<dokument xml:lang="cs" xml:base="https://example.cz/navody/">
  <odkaz href="uvod.xml"/>
  <cast xml:lang="en" xml:base="en/">
    <odkaz href="intro.xml"/>
  </cast>
</dokument>

První odkaz zdědí češtinu a základ https://example.cz/navody/. Aplikace respektující XML Base z něj odvodí https://example.cz/navody/uvod.xml. Druhý odkaz patří anglické části; její relativní xml:base se spojí se základem předka, takže výsledná adresa je https://example.cz/navody/en/intro.xml.

Hodnota href ve stromu zůstává intro.xml. Změnil se kontext jejího vyhodnocení, ne text atributu. Při vyříznutí části dokumentu a přesunu do jiného souboru proto zkontroluj, zda se zachoval jazyk a základní adresa. Pravidla vyhodnocení popisuje XML Base, oddíl 4.