TOML v0.1.0
Tom's Obvious, Minimal Language.
Tom Preston-Wernerによる。
警告:この仕様はまだ大きく変化しています。1.0とマークされるまでは、不安定であると仮定し、それに応じて対応してください。
目的
TOMLは、明らかな意味論により読みやすい、最小限の構成ファイル形式を目指しています。TOMLは、一意にハッシュテーブルにマッピングされるように設計されています。TOMLは、さまざまな言語でデータ構造に簡単に解析できるはずです。
仕様
- TOMLは大文字と小文字を区別します。
- 空白文字とは、タブ(0x09)またはスペース(0x20)のことです。
コメント
ハッシュ記号を使ってあなたの考えを述べてください。ハッシュ記号から行末までがコメントになります。
# I am a comment. Hear me roar. Roar.
key = "value" # Yeah, you can do this.
文字列
ProTip™: この仕様はJSONの文字列定義と同じであることに気付くかもしれません。ただし、TOMLはUTF-8エンコーディングを要求します。これは意図的なものです。
文字列は、引用符で囲まれた単一行の値です。文字列には有効なUTF-8文字のみを含める必要があります。引用符、バックスラッシュ、制御文字(U+0000~U+001F)を除く、任意のUnicode文字を使用できます。
"I'm a string. \"You can quote me\". Name\tJos\u00E9\nLocation\tSF."
便宜上、いくつかの一般的な文字にはコンパクトなエスケープシーケンスがあります。
\b - backspace (U+0008)
\t - tab (U+0009)
\n - linefeed (U+000A)
\f - form feed (U+000C)
\r - carriage return (U+000D)
\" - quote (U+0022)
\/ - slash (U+002F)
\\ - backslash (U+005C)
\uXXXX - unicode (U+XXXX)
任意のUnicode文字は、\uXXXX
形式でエスケープできます。
その他の特殊文字は予約されており、使用された場合、TOMLはエラーを生成する必要があります。これは、Windows上のパスは常に二重バックスラッシュを使用する必要があることを意味します。
wrong = "C:\Users\nodejs\templates" # note: doesn't produce a valid path
right = "C:\\Users\\nodejs\\templates"
バイナリデータには、Base64またはその他の適切なエンコーディングを使用することをお勧めします。そのエンコーディングの処理はアプリケーション固有になります。
整数
整数は、単独の数字です。負の数を表現することもできます。最小64ビットサイズが想定されます。
42
-17
浮動小数点数
浮動小数点数は、1つのドットを含む数字です。小数点の左右には少なくとも1つの数字が必要です。64ビット(倍精度)が想定されます。
3.1415
-0.01
ブール値
ブール値は、あなたが慣れているトークンです。常に小文字です。
true
false
日時
日時はISO8601形式の日付ですが、完全なZulu形式のみが許可されます。
1979-05-27T07:32:00Z
配列
配列は、角括弧で囲まれた他のプリミティブ値です。空白は無視されます。要素はコンマで区切られます。データ型を混ぜることはできません。
[ 1, 2, 3 ]
[ "red", "yellow", "green" ]
[ [ 1, 2 ], [3, 4, 5] ]
[ [ 1, 2 ], ["a", "b", "c"] ] # this is ok
[ 1, 2.0 ] # note: this is NOT ok
配列は複数行にすることもできます。そのため、空白文字だけでなく、角括弧間の改行も無視されます。閉じ括弧の前に終端コンマを含めることができます。
key = [
1, 2, 3
]
key = [
1,
2, # this is ok
]
ハッシュ
キーを作成するには2つの方法があります。「キーグループ」と「キー」と呼びます。どちらも通常のキーですが、キーグループの値は常に単一のハッシュのみです。
キーグループは、単独の行で角括弧で囲んで表示されます。配列は値のみであるため、配列と区別できます。
[keygroup]
その下に、次のキーまたはEOFまで、そのキーグループのキー/値ペアが続きます。キーは等号の左側、値は等号の右側にあります。キーは最初の空白文字以外から始まり、等号の手前の最後の空白文字以外で終わります。キーグループ内のキー/値ペアは順序付けられていません。
[keygroup]
key = "value"
キーとその値は、好きなだけインデントできます。タブまたはスペースを使用できます。なぜなら、ネストされたハッシュを持つことができるからです。
ネストされたハッシュは、ドットを含むキーグループで示されます。キーグループの名前は自由に付けることができますが、ドットは使用しないでください。ドットは予約されています。
[key.tater]
type = "pug"
JSONの世界では、次の構造になります。
{ "key": { "tater": { "type": "pug" } } }
すべてのスーパーキーを指定する必要はありません。TOMLは自動的に処理します。
# [x] you
# [x.y] don't
# [x.y.z] need these
[x.y.z.w] # for this to work
ハッシュテーブルに変換された場合、空のキーグループは、キーの値が空のハッシュテーブルになることを意味します。
以前のキーを上書きしないように注意してください。それは愚かです。そしてエラーを生成する必要があります。
# DO NOT WANT
[fruit]
type = "apple"
[fruit.type]
apple = "yes"
冗談でしょ?
はい。
でもなぜ?
ハッシュにマッピングされる適切な人間が読める形式が必要であり、YAMLの仕様は80ページもあり、私を怒らせるからです。いいえ、JSONはカウントされません。なぜそうなのか分かります。
ああ、神様、あなたは正しい
はい。手伝いたいですか?プルリクエストを送信してください。またはパーサーを作成してください。勇敢になりましょう。
実装
実装がある場合は、プルリクエストを送信してこのリストに追加してください。READMEにパーサーがサポートするコミットSHA1またはバージョンタグを記載してください。
- C#/.NET - https://github.com/LBreedlove/Toml.net
- C#/.NET - https://github.com/rossipedia/toml-net
- C#/.NET - https://github.com/RichardVasquez/TomlDotNet
- C (@ajwans) - https://github.com/ajwans/libtoml
- C++ (@evilncrazy) - https://github.com/evilncrazy/ctoml
- Clojure (@lantiga) - https://github.com/lantiga/clj-toml
- Clojure (@manicolosi) - https://github.com/manicolosi/clojoml
- CoffeeScript (@biilmann) - https://github.com/biilmann/coffee-toml
- Erlang - https://github.com/kalta/etoml.git
- Erlang - https://github.com/kaos/tomle
- Go (@thompelletier) - https://github.com/pelletier/go-toml
- Go (@laurent22) - https://github.com/laurent22/toml-go
- Go w/ Reflection (@BurntSushi) - https://github.com/BurntSushi/toml
- Haskell (@seliopou) - https://github.com/seliopou/toml
- Haxe (@raincole) https://github.com/raincole/haxetoml
- Java (@agrison) - https://github.com/agrison/jtoml
- Java (@johnlcox) - https://github.com/johnlcox/toml4j
- Java (@mwanji) - https://github.com/mwanji/toml4j
- Java - https://github.com/asafh/jtoml
- Java w/ ANTLR (@MatthiasSchuetz) - https://github.com/mschuetz/toml
- Julia (@pygy) - https://github.com/pygy/TOML.jl
- Literate CoffeeScript (@JonathanAbrams) - https://github.com/JonAbrams/tomljs
- node.js - https://github.com/aaronblohowiak/toml
- node.js/browser - https://github.com/ricardobeat/toml.js (npm install tomljs)
- node.js - https://github.com/BinaryMuse/toml-node
- node.js (@redhotvengeance) - https://github.com/redhotvengeance/topl (topl npm package)
- node.js/browser (@alexanderbeletsky) - https://github.com/alexanderbeletsky/toml-js (npm browser amd)
- Objective C (@mneorr) - https://github.com/mneorr/toml-objc.git
- Objective-C (@SteveStreza) - https://github.com/amazingsyco/TOML
- Ocaml (@mackwic) https://github.com/mackwic/to.ml
- Perl (@alexkalderimis) - https://github.com/alexkalderimis/config-toml.pl
- Perl - https://github.com/dlc/toml
- PHP (@leonelquinteros) - https://github.com/leonelquinteros/php-toml.git
- PHP (@jimbomoss) - https://github.com/jamesmoss/toml
- PHP (@coop182) - https://github.com/coop182/toml-php
- PHP (@checkdomain) - https://github.com/checkdomain/toml
- PHP (@zidizei) - https://github.com/zidizei/toml-php
- Python (@socketubs) - https://github.com/socketubs/pytoml
- Python (@f03lipe) - https://github.com/f03lipe/toml-python
- Python (@uiri) - https://github.com/uiri/toml
- Python - https://github.com/bryant/pytoml
- Python (@elssar) - https://github.com/elssar/tomlgun
- Python (@marksteve) - https://github.com/marksteve/toml-ply
- Ruby (@jm) - https://github.com/jm/toml (toml gem)
- Ruby (@eMancu) - https://github.com/eMancu/toml-rb (toml-rb gem)
- Ruby (@charliesome) - https://github.com/charliesome/toml2 (toml2 gem)
- Ruby (@sandeepravi) - https://github.com/sandeepravi/tomlp (tomlp gem)
- Scala - https://github.com/axelarge/tomelette
バリデータ
- Go (@BurntSushi) - https://github.com/BurntSushi/toml/tree/master/tomlv
TOMLパーサーのための言語非依存テストスイート
- toml-test (@BurntSushi) - https://github.com/BurntSushi/toml-test
エディタサポート
- Emacs (@dryman) - https://github.com/dryman/toml-mode.el
- Sublime Text 2 (@lmno) - https://github.com/lmno/TOML
- TextMate (@infininight) - https://github.com/textmate/toml.tmbundle
- Vim (@cespare) - https://github.com/cespare/vim-toml
エンコーダ
- PHP (@ayushchd) - https://github.com/ayushchd/php-toml-encoder