Skip to main content

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.