Extensible Data Notation: Porovnání verzí

Smazaný obsah Přidaný obsah
sp
Taco (diskuse | příspěvky)
doplnění o vestavěných elementech
Řádek 1:
{{Subpahýl|20191109171924}}
'''Extensible Data Notation''', známé jako '''EDN''' (výslovnost e-ed-n), je datový formát používaný pro zápis jazyka [[Clojure]] Je podobný [[JSON]], ale na rozdíl od něj podporuje více typů. Slouží pro přenos hodnot, není to typový systém, neobsahuje žádná schemata, validaci nebo něco podobného. Neobsahuje reference ani nic takového. Dokument neobsahuje žádnou kořenovou značku, je tedy vhodný pro streamování. Kódování textových řetězců je v UTF-8. Elementy jsou oddělovány bílými znaky, které nemají formátovací funkci (nadbytečné mezery se mohou vypustit bez ztráty informace).
 
=== Vestavěné elementy/typy ===
 
==== Null ====
Reprezentuje nulu, NULL, nil. Na cílové platformě by se měl číst s podobným významem přičemž NULL == NULL.
 
==== Bool ====
Tradiční booleanovská hodnota true, false.
 
==== Řetězec ====
Řetězce jsou uzavřeny v <code>"double quotes"</code> . Může zahrnovat více řádků. Jsou podporovány standardní escape C / Java sekvence<code>\t, \r, \n, \\ and \"</code> .
 
==== Znak ====
Znakům předchází zpětné lomítko: <code>\c</code>. Jsou připravené zkratky pro <code>\newline</code> , <code>\return</code> , <code>\space</code> a <code>\tab</code>. Dále znaky Unicode jsou reprezentovány <code>\uNNNN</code> jako v Javě. Za lomítkem nemůže být mezera.
 
==== Symbol ====
Symboly se používají k reprezentaci identifikátorů a měly by se mapovat na něco jiného než řetězce, pokud je to možné. Symboly jsou unikátní, symbol s jedním jménem by měl být reprezentován všude se stejnou identitou.
 
Symboly začínají nečíselným znakem a mohou obsahovat alfanumerické znaky a <code>. * + ! - _ ? $ % & = < ></code> <code>. * + ! - _ ? $ % & = < ></code> <code>. * + ! - _ ? $ % & = < ></code> . Pokud <code>-</code> , <code>+</code> nebo <code>.</code> jsou na prvním místě, druhý znak (pokud existuje) musí být nečíselný. Platí výjimka, že <code>: #</code> nejsou povoleny jako první znak. Další výjimku má <code>/</code> kterýžto má zvláštní význam. Může být použit pouze jednou uprostřed symbolu k oddělení ''předpony'' (často jmenného prostoru) od ''jména'' , např. <code>my-namespace/foo</code> . <code>/</code> sám o sobě je regulérním symbolem, ale jinak nemůže být ''předpona'' ani část ''názvu'' prázdná, pokud symbol obsahuje <code>/</code> .
 
Pokud má symbol ''předponu'' a <code>/</code> , měla by následující komponenta ''názvu'' dodržovat omezení prvního znaku pro symboly jako celek. Tím se má zabránit nejednoznačnosti při čtení kontextů, kde lze předpony považovat za implicitně zahrnuté jmenné prostory a následně je provádět.
 
==== Klíčové slovo ====
Jedná se o identifikátory, které jsou obvykle samopopisné. Sémanticky se podobají hodnotám výčtu. Klíčová slova se řídí pravidly symbolů, s výjimkou, že mohou (a musí) začínat <code>:fred</code> např . <code>:fred</code> nebo <code>:my/fred</code>. Klíčové slovo nemůže začínat <code>::</code>.
 
Pokud se klíčová slova překládají pomocí nějaké internacionalizace tak platí, že všechny instance stejného klíčového slova poskytují stejný objekt.
 
==== Cele číslo ====
Celá čísla se skládají z číslic <code>0</code> - <code>9</code>, případně s předponou <code>-</code> pro označení záporného čísla (explicitní uvedení <code>+</code> je povoleno). Žádné celé číslo než 0 nesmí začínat na 0. Očekává se přesnost 64 bitů (signed celé číslo). Celé číslo může mít příponu <code>N</code> , což znamená, že je požadována libovolná přesnost. -0 je platné celé číslo, které se neliší od 0.
 
==== Čísl s pohyblivou řádovou čárkou ====
Očekává se 64bitová (dvojitá) přesnost. Kromě toho číslo s pohyblivou řádovou čárkou může mít příponu <code>M</code> která označuje, že je požadována přesná přesnost.
 
==== Seznam ====
Seznam je posloupnost hodnot. Seznam jsou reprezentován prvky uzavřenými v závorkách <code>()</code>. Seznam může obsahovat hodnoty různých typů, a může být prázdný.
<code>(ab 42)</code>
 
==== Vektor ====
Vektor je posloupnost hodnot, který podporuje náhodný přístup. Vektor je reprezentován prvky uzavřenými v hranatých závorkách <code>[]</code> . Vektor může obsahovat hodnoty různých typů, a může být prázdný.
<code>[ab 42]</code>
 
==== Mapa ====
Mapa je soubor asociací mezi klíči a hodnotami. Map je reprezentována páry klíč a hodnota uzavřenými v složených závorkách <code>{}</code> , volitelně oddělených čárkou. Každý klíč by se měl objevit nanejvýš jednou. Nezáleží na pořadí. Vektor může být prázdný a může obsahovat hodnoty i klíče různých typů.
<code><nowiki>{:a 1, "foo" :bar, [1 2 3] four}</nowiki></code>
 
==== Set ====
Setje kolekce jedinečných hodnot. Set je reprezentován prvky uzavřenými v složených závorkách, před kterými je <code>#</code> <code>#{}</code> . Set může být prázdný. Nezáleží na pořadí, a hodnoty mohou být libovolného typu.
<code>#{ab [1 2 3]}</code>
 
==== Komentáře ====
'''edn''' podporuje pouze řádkové komentáře začínající <code>;</code>
 
==== Označené elementy ====
'''edn''' podporuje rozšiřitelnost pomocí jednoduchého mechanismu. <code>#</code> následovaný symbolem začínajícím abecedním znakem znamená, že ''tento symbol'' je ''značka''. Značka označuje sémantickou interpretaci ''následujícího prvku''. Předpokládá se, že implementace readeru (program, který zparsuje a zpracuje edn soubor) umožní klientům registrovat obslužné rutiny pro specifické značky. Když narazí na tag, ''reader'' nejprve přečte další prvek (který může být už hodnotou, nebo se může jednat o další tagované prvky), následně předá výsledek odpovídající rutině pro další interpretaci a výsledkem rutiny bude hodnota dat poskytovaná prvkem tag + tagged, tj. čtení/zpracování tagu a tagovaného elementu přinese jednu hodnotu. Tato hodnota je hodnota, která má být vrácena do programu, a není uživatelem dále interpretována jako edn data.
 
Sémantika tagu a typ a interpretace tagovaného elementu jsou definovány uživatelem.
<code>#myapp/Person {:first "Fred" :last "Mertz"}</code>
Pokud reader narazí na značku, pro kterou není registrován žádná obslužná rutine, není definováno co by se mělo stát. Zpracování může skončit chybou stejně tak může zpracování použít nějakou alternativní rutinu.
<br />
== Externí odkazy ==