TL;DR

extensible data notation の略で、値をやり取りするためのテキストのデータ記法である。edn を拡張したものが Clojure のプログラムの表現に使われている。

なぜ必要か

アプリケーションに十分な表現力を持ちながら、慣習や文脈に頼らない単純な記法を目指している。トップレベルを囲む要素がないので、ストリーミングや対話的な使い方に向いている。Datomic などのアプリケーションではデータ転送の形式として使われている。

edn は型システムやスキーマではなく、オブジェクトシステムでもない。参照型を持たず、値だけを表す。

仕組み

次の要素を表せる。

  • nil、真偽値(true、false)
  • 文字列、文字(\newline など)
  • シンボル、キーワード(: で始まるシンボル)
  • 整数(64 ビット符号付き。N を付けると任意精度)、浮動小数点数(64 ビット倍精度。M を付けると正確な精度)
  • リスト ()、ベクタ []、マップ {}、セット #{}

# に続くシンボルはタグで、次の要素の意味を表す。読み込み側はタグごとにハンドラを登録できる。組み込みのタグには、日時を表す #inst と UUID を表す #uuid がある。プレフィックスのないタグは組み込み用に予約されており、独自のタグにはプレフィックスが必要である。

; から行末まではコメントになる。#_ は次の要素を読んで捨てる。

例

[a b #_foo 42] ; [a b 42] として読まれる

Babashka の設定ファイル bb.edn は edn で書く。

関連

出典