Jmenné prostory bez prefixu
V rámci akcí lze odesílat nebo ukládat XML soubory s pevně daným formátem (např. ISDOC pro výměnu účetních dokladů a podobně). Standardně platí, že uzly v XML jmenném prostoru mohou být kvalifikované libovolným prefixem (prefix je jen „alias“ pro namespace URI). Některé implementace bohužel tento standard nedodržují a vyžadují, aby byly uzly:
-
zařazeny do jmenného prostoru, ale zároveň
-
bez uvedení prefixu v názvu uzlu (tj. uzly mají být v namespace, ale bez prefix:element).
Doteď se tvorba XML v akcích spoléhala na korektní standardní chování, ale okolnosti nás vedly k úpravě.
Co se změnilo
Přidali jsme volbu, která umožní:
-
ponechat uzel v jmenném prostoru,
-
ale ve výstupním XML generovat názvy uzlů bez prefixu.
Tato volba je dostupná v menu jmenných prostor jako: „NS bez prefixu“ (viz obr. dole)
Typický scénář
(příklad: save-file pro ISDOC)
Předpokládejme akci typu save-file, která ukládá ISDOC (viz obrázek).
Dále předpokládejme, že namespace je v definici označen prefixem (např. isdoc) a cílem je, aby se tento prefix nezobrazoval v názvech uzlů uvnitř souboru (např. Doklad místo isdoc:Doklad).
Jak volbu nastavit
-
Otevři konfiguraci akce (např. save-file) a přejdi na část, kde se pracuje s jmennými prostory.
-
Otevři menu jmenných prostorů:
-
kliknutím přímo na jmenný prostor, nebo
-
kliknutím na menu (ikonu tečky) za názvem uzlu.
-
Zvol položku „NS bez prefixu“.
Jak se to projeví v editoru a ve výstupu
V editoru / konfiguraci
-
Prefixy se po zapnutí volby symbolicky přeškrtnou.
-
Tím je signalizováno: namespace je stále nastavený (a interně identifikovaný prefixem), ale ve výstupu se prefix nepoužije.
Ve výstupním XML
-
Názvy uzlů se generují bez prefixu (např. Doklad místo isdoc:Doklad),
-
uzly jsou ale přesto zařazeny do správného jmenného prostoru (typicky jako default namespace přes xmlns="...").
<Invoice verze="1.0" xmlns="http://isdoc.cz/namespace/2013">
<header test="">
<dalsi-uzel>
<xsl:value-of select="''"/>
</dalsi-uzel>
</header>
<body test=""/>
</Invoice>
Poznámka k významu přeškrtnutého prefixu
I když se prefix ve výstupu neobjeví, systém ho dál používá jako interní identifikátor pro daný jmenný prostor v nastavení. Přeškrtnutí znamená pouze to, že se prefix nesmí propsat do názvů uzlů při generování výstupu.