nsessl / schema

XML schémata pro Národní standard pro elektronické systémy spisové služby
3 stars 1 forks source link

Numerické datové typy jsou definované jako xs:integer #82

Open ondrej-smetana opened 2 months ago

ondrej-smetana commented 2 months ago

Ve verzi standardu 2023 došlo ke změně definice elementů obsahujících číslo z xs:int na xs:integer. Tato zdánlivě nepatrná změna má poměrně velký dopad na podobu kódu generovaného z těchto schémat.

Jedná se totiž o jinak definované datové typy.

xs:int je definován jako 32bit integer s příslušným rozsahem:

obrazek

xs:integer je definován jako obecné číslo s neomezeným rozsahem:

obrazek

Pokud je element nadefinovaný jako xs:integer, nevygeneruje se do kódu jako integer, protože se předpokládá, že hodnota v xml může velikost integeru přesáhnout. Např. v Javě se defaultně takový element vygeneruje jako typ BigInteger. Nástroje v prostředí .NET dokonce takový element vygenerují jako String. Při práci s takto generovanými objekty je nutné numerické hodnoty zbytečně převádět.

OAS-Prochazka commented 1 month ago

Vyjádření garanta XML za ICT Unii: Zde si dovolím nesouhlasit s tím, že by byla definice typu jako takového problém. Např.: xscgen --integer=int ermsTypes.xsd vygeneruje všechny definice jako int. Vracet se v rozhraní zpět mi nepřijde logické. Většina dodavatelů má již definované rozhraní podle definice z roku 2023. Navíc, v době 64bitových procesorů se 32bitové definice jeví jako poněkud archaické a přikláněl bych se k zachování současné 64 bit definice.