Jmenné prostory bez prefixu

Upravit obsah stránky

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

  1. Otevři konfiguraci akce (např. save-file) a přejdi na část, kde se pracuje s jmennými prostory.
  2. 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.
  3. 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.