XInclude: skládání XML z více souborů

XInclude skládá XML z více zdrojů v samostatné fázi zpracování. Umí vložit XML nebo prostý text; běžné parsování XML jej automaticky neprovádí.

Autor: Aktualizováno

Kořen a vložený fragment

Ulož první příklad jako hlavni.xml a druhý jako cast.xml ve stejné složce. Href se řeší vůči základnímu URI, které může ovlivnit xml:base.

Kořen a vložený fragment
<dokument xmlns:xi="http://www.w3.org/2001/XInclude">
 <xi:include href="cast.xml"/>
</dokument>

Vložený dokument

Po zpracování se na místě xi:include objeví element kapitola. Procesor může přidat xml:base nebo xml:lang pro zachování kontextu. Nejde o prosté slepení souborů.

Vložený dokument
<kapitola><nadpis>Úvod</nadpis></kapitola>

Text a náhradní obsah

Parse=text vloží znaky místo XML stromu. Encoding určuje kódování textového zdroje. Fallback poskytuje náhradu při chybě získání zdroje; není univerzální opravou neplatného XML.

Fragment uvnitř dokumentu: text a náhradní obsah
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="poznamka.txt" parse="text" encoding="UTF-8">
 <xi:fallback>Text není dostupný.</xi:fallback>
</xi:include>

Spuštění a bezpečnost

Lokálně můžeš vyzkoušet xmllint --xinclude hlavni.xml. Náš online parser pouze ověří XML syntaxi. Vypnutí DTD a externích entit nevypíná samostatnou fázi XInclude. Pro nedůvěryhodné vstupy ji vypni nebo omez resolver na schválené zdroje a velikosti.

Výsledek a řízený negativní test

Struktura výsledku z úvodních dvou souborů
<dokument xmlns:xi="http://www.w3.org/2001/XInclude"><kapitola><nadpis>Úvod</nadpis></kapitola></dokument>

Serializovaný výsledek může mít jinou deklaraci nebo doplněné xml:base. Zkontroluj, že počet xi:include klesl na nulu a vznikla jedna kapitola; namespace xi deklarovaný na kořeni může ve výstupu zůstat. Přejmenuj cast.xml a spusť stejný příkaz: bez fallback má zpracování nahlásit nedostupný zdroj.

Pro textový include ulož do poznamka.txt řetězec A & B. Vložený obsah je text a serializátor zapíše ampersand escapovaně. Nevkládá se jako XML element. Při nedostupném textovém zdroji s fallback z příkladu vznikne náhradní text. Pro soubor, který existuje, ale má chybnou XML syntaxi, nepovažuj fallback za obecnou opravu.

XInclude zpracuj v jasné fázi před cílovou validací, pokud schéma očekává již vložené kapitoly. Relativní adresy závisejí na base URI dokumentu; při čtení řetězce bez známého zdrojového souboru jej můžeš muset dodat v API. Pravidla definuje XInclude 1.0.

XInclude není xs:include ani XSLT import

Podobný název neznamená stejný postup. XInclude vkládá obsah do zpracovávaného dokumentu. xs:include připojuje další soubor schématu XSD a xsl:include připojuje pravidla transformace XSLT. Použití jednoho prvku nespouští ostatní mechanismy.

Pokud máš hlavni.xml s xi:include a schéma pro výsledný dokument, nejdřív proveď povolené vložení a potom validaci výsledku. Při validaci původního souboru by schéma vidělo xi:include místo požadované kapitoly. Tyto fáze odděluje i specifikace XInclude.