Abstrakt

Tento dokument je sdílenou specifikací pro základní datové typy pro použití v otevřených formálních normách ve smyslu § 3a odst. 3 zákona č. 106/1999 Sb., o svobodném přístupu k informacím. Specifikace je ilustrována příklady dat ve formátech JSON-LD [[json-ld11]] a tedy i JSON [[ECMA-404]], XML [[xml]], CSV [[rfc4180]] a RDF Turtle [[turtle]].

Specifikace

Základní datové typy dělíme na jednoduché, které již dále nejsou strukturovány, a složené, které se dělí na více položek.

Jednoduché datové typy

Jednoduché datové typy se už dále nedělí na jednotlivé položky. Pokud jsou strukturované, je jejich struktura určena již pouze syntaxí použitého datového typu.

Booleovská hodnota - Ano či ne

Booleovská hodnota se hodí pro reprezentaci vlastností, které mohou mít pouze dvě hodnoty - Ano či ne. Ve všech cílových otevřených formátech, tj. JSON-LD [[!json-ld11]] a tedy i JSON [[!ECMA-404]], XML [[!xml]], CSV [[!rfc4180]] a RDF Turlte [[!turtle]] se pro reprezentaci booleovské hodnoty používá typ xsd:boolean z jazyka XML Schema [[!xmlschema11-2-20120405]]. Hodnota true vyjadřuje Ano, false vyjadřuje Ne.

Nepoužívejte hodnoty jako Ano, 1, yes a podobně. Znesnadňujete tím použití dat.

Datum

Pro reprezentaci datumu se ve všech cílových otevřených formátech, tj. JSON-LD [[!json-ld11]] a tedy i JSON [[!ECMA-404]], XML [[!xml]], CSV [[!rfc4180]] a RDF Turlte [[!turtle]] používá typ xsd:date z jazyka XML Schema [[!xmlschema11-2-20120405]]. Tento datový typ umožňuje i explicitně zaznamenat časovou zónu. To se hodí například pro data, u kterých se dá předpokládat využití v jiné časové zóně.

Nepoužívejte hodnoty v jiných tvarech jako třeba 1. ledna 2019, 01-01-2019 a podobně. Znesnadňujete tím použití dat.

Čas

Pro reprezentaci času se ve všech cílových otevřených formátech, tj. JSON-LD [[!json-ld11]] a tedy i JSON [[!ECMA-404]], XML [[!xml]], CSV [[!rfc4180]] a RDF Turlte [[!turtle]] používá typ xsd:time z jazyka XML Schema [[!xmlschema11-2-20120405]]. Tento datový typ umožňuje i explicitně zaznamenat časovou zónu. To se hodí například pro časy, u kterých se dá předpokládat využití v jiné časové zóně.

Nepoužívejte hodnoty v jiných tvarech jako třeba 09:30, 9:30 a podobně. Znesnadňujete tím použití dat.

Datum a čas

Pro reprezentaci data a času jakožto jedné hodnoty se ve všech cílových otevřených formátech, tj. JSON-LD [[!json-ld11]] a tedy i JSON [[!ECMA-404]], XML [[!xml]], CSV [[!rfc4180]] a RDF Turlte [[!turtle]] používá typ xsd:dateTimeStamp z jazyka XML Schema [[!xmlschema11-2-20120405]]. Tento datový typ vyžaduje explicitně zaznamenat časovou zónu. Syntakticky se jedná se o spojení datových typů Datum a Čas pomocí znaku T.

Nepoužívejte hodnoty v jiných tvarech jako třeba 2019-01-01 09:30 (chybný oddělovač, neúplný čas), 1. ledna 2019 v 9:30 a podobně. Znesnadňujete tím použití dat.

Celé číslo

Pro reprezentaci celých čísel se ve všech cílových otevřených formátech, tj. JSON-LD [[!json-ld11]] a tedy i JSON [[!ECMA-404]], XML [[!xml]], CSV [[!rfc4180]] a RDF Turlte [[!turtle]] používá typ xsd:integer z jazyka XML Schema [[!xmlschema11-2-20120405]].

Nepoužívejte hodnoty v jiných tvarech jako třeba 4 815 (s oddělovačem) a podobně. Znesnadňujete tím použití dat.

Desetinné číslo

Pro reprezentaci desetinných čísel se ve všech cílových otevřených formátech, tj. JSON-LD [[!json-ld11]] a tedy i JSON [[!ECMA-404]], XML [[!xml]], CSV [[!rfc4180]] a RDF Turlte [[!turtle]] používá typ xsd:double z jazyka XML Schema [[!xmlschema11-2-20120405]]. Oddělovačem desetinných míst je . - tečka.

Nepoužívejte hodnoty v jiných tvarech jako třeba 4,24 (chybný oddělovač desetinných míst) a podobně. Znesnadňujete tím použití dat.

URI, IRI, URL

Pro reprezentaci webových identifikátorů a odkazů URI, IRI a URL se ve všech cílových otevřených formátech, tj. JSON-LD [[!json-ld11]] a tedy i JSON [[!ECMA-404]], XML [[!xml]], CSV [[!rfc4180]] a RDF Turlte [[!turtle]] používá typ xsd:anyURI z jazyka XML Schema [[!xmlschema11-2-20120405]]. URI, IRI ani URL nesmí obsahovat nezakódované mezery.

Řetězec

Pro reprezentaci kódů a jiných jednoduchých hodnot, kterým neodpovídá žádný existující datový typ z jazyka XML Schema [[!xmlschema11-2-20120405]], se použije xsd:string v kódování UTF-8. U všech formátů je třeba dodržovat pravidla pro nahrazování speciálních znaků, které se v textech mohou vyskytovat. Pokud se ale jedná o text v přirozeném jazyce, jako je název, popis apod., je třeba využít datový typ text v přirozeném jazyce.

Text

Pro texty v přirozeném jazyce je třeba specifikovat, v jakém jazyce jsou. Tato informace se pak dá využít ve vícejazyčných aplikacích či automatických překladačích.

Ve formátu JSON je třeba dodržet schéma pro vícejazyčné texty. Pokud může být textových hodnot v daném jazyce více, je třeba dodržet schéma pro více vícejazyčných textů.

Formáty XML a RDF umožňují přímo v datech specifikovat, ve kterém jazyce text je.

U formátu CSV je toto možno specifikovat pro každý sloupec ve schématu souboru, a také promítnout v názvu sloupce.

Složené datové typy

Složené datové typy se dále dělí na položky, které je pro úplné určení hodnoty třeba uvést.

Množství

Pro reprezentaci množství je třeba vždy uvést dvě položky - hodnotu a jednotku množství.

Hodnota
Vlastnost
hodnota
Typ
Desetinné číslo
Jméno
Hodnota množství
Příklad
12400.21
Jednotka

Pro specifikaci jednotky množství je třeba použít číselník UN/CEFACT Common Codes.

Vlastnost
jednotka
Typ
Řetězec
Jméno
Jednotka množství
Příklad
KGM
V datovém formátu RDF se pro specifikaci množství používá třída gr:QuantitativeValue ze slovníku GoodRelations.

Množství bez určení jednotky jsou těžko interpretovatelná. Při určování jednotky je třeba dodržet kódy z číselníku UN/CEFACT Common Codes, jinak se zesložiťuje použití dat.

Částka a jednotková částka

Pro reprezentaci peněžních částek je třeba vždy uvést výši částky a měnu částky. Pokud se jedná o jednotkovou částku, pak se také uvede jednotka.

Výše
Vlastnost
výše
Typ
Desetinné číslo
Jméno
Výše částky.
Příklad
12400.21
Měna

Pro určení měny je třeba použít IRI z evropského číselníku měn z EU Vocabularies.

Vlastnost
měna
Typ
IRI z evropského číselníku měn z EU Vocabularies.
Jméno
Měna částky
Příklad
http://publications.europa.eu/resource/authority/currency/CZK
Jednotka

Pro specifikaci jednotky množství je třeba použít číselník UN/CEFACT Common Codes.

Vlastnost
jednotka
Typ
Řetězec
Jméno
Jednotka ceny.
Příklad
KGM
V datovém formátu RDF se pro specifikaci ceny používá třída gr:PriceSpecification ze slovníku GoodRelations. Jelikož je již starší, tak jako specifikaci měny používá její kód formou řetězce. Ten lze do dat přidat pro zpětnou kompatibilitu, ale potřeba je zejména uvést měnu ve formě IRI z příslušného evropského číselníku.

Částky bez určení měny jsou těžko interpretovatelné. Při určování měny je třeba dodržet kódy z evropského číselníku, jinak se zesložiťuje použití dat.

Časový okamžik

Pro reprezentaci časových okamžiků lze použít datum, kombinaci data a času a nebo říci, že je časový okamžik nespecifikován. Pokud je jasné, který datový typ je v daném místě vhodný, použije se konkrétní datový typ, tedy datum či datum a čas. Často ale při tvorbě OFN není předem známo, jaká úroveň detailu bude pro určení okamžiku k dispozici. Aby se zabránilo různým reprezentacím této situace v různých OFN, je specifikována třída Časový okamžik.

Datum
Vlastnost
datum
Typ
Datum
Jméno
Datum okamžiku.
Příklad
2019-01-01+01:00
Datum a čas
Vlastnost
datum_a_čas
Typ
Datum a čas
Jméno
Datum a čas začátku okamžiku.
Příklad
2019-01-01T09:30:00+02:00
Nespecifikovaný okamžik
Vlastnost
nespecifikovaný
Typ
Booleovská hodnota - Ano či ne
Jméno
Nespecifikovaný časový okamžik
Popis
Nespecifikovaný časový okamžik, u kterého se ví, že jeho hodnota je neznámá. Jedná se o pro interoperabilitu výrazně lepší variantu, než si neznámou hodnotou uměle stanovit na 3333-03-03 či 9999-09-09 apod. nebo hodnotu vynechat.
Příklad
true
V datovém formátu RDF se pro specifikaci časového okamžiku používá slovník Time Ontology [[owl-time]].

Pokud je časový okamžik vždy určen datem a časem, pak je třeba použít vlastnosti s datovým typem Datum a čas, nikoliv dvojici vlastností kde je datum a čas odděleně.

Časový interval

Pro reprezentaci časových intervalů je potřeba buď uvést jejich začátek a konec, a nebo pouze jeden údaj, pokud ten druhý není znám, ale je známo, že se jedná o interval. Časový interval začíná a končí časovým okamžikem.

Začátek
Vlastnost
začátek
Typ
Časový okamžik
Jméno
Okamžik začátku intervalu.
Konec
Vlastnost
konec
Typ
Časový okamžik
Jméno
Okamžik konce intervalu.
V datovém formátu RDF se pro specifikaci časového intervalu používá slovník Time Ontology [[owl-time]].