TOML:GitHubこれはYAMLを革命する運命です.


GitHubの現在の新しいプロジェクトはすでにCoffee Scriptに転用されました.Coffee ScriptはJavaScriptよりも簡潔で優雅です.同様に、GitHubもYAMLは簡潔で優雅ではないと思います.だからTOMLを作りました.
TOMLのフルネームはTom's Obviousで、Minimal Languageです.その著者はGitHub共同創始者Tom Preston-Wernerです.
TOMLのターゲット
TOMLの目標は簡単なプロファイル形式になることです.TOMLは、ハッシュ・テーブルに曖昧なくマッピングされ、複数の言語で解析されるように設計されている.
title = "TOML   "

[owner]
name = "Tom Preston-Werner"
organization = "GitHub"
bio = "GitHub Cofounder & CEO
Likes tater tots and beer." dob = 1979-05-27T07:32:00Z # 。 ? [database] server = "192.168.1.1" ports = [ 8001, 8001, 8002 ] connection_max = 5000 enabled = true [servers] # 。 Tab。TOML 。 [servers.alpha] ip = "10.0.0.1" dc = "eqdc10" [servers.beta] ip = "10.0.0.2" dc = "eqdc10" [clients] data = [ ["gamma", "delta"], [1, 2] ] # 。 hosts = [ "alpha", "omega" ]
TOMLは大きさや書き込みに敏感です.
コメント#を使用して注釈を表す:
# I am a comment. Hear me roar. Roar.
key = "value" # Yeah, you can do this.
文字列
文字列とJSONの定義は一致していますが、一つしかないです.
注釈は引用符で包んで、中の文字はUTF-8形式でなければなりません.引用符、バックスラッシュと制御文字(U+0000からU+001 Fまで)は、変換が必要です.
"I'm a string. \"You can quote me\". Name\tJos\u00E9
Location\tSF."
一般的な変換シーケンス:
\b     - backspace       (U+0008)
\t     - tab             (U+0009)

- 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)
保留されている特殊文字を使うと、TOMLはエラーを出します.例えば、Windowsプラットフォームでは、パスは2つのバックスラッシュを使用すべきである.
wrong = "C:\Users
odejs\templates" # : 。 right = "C:\\Users\
odejs\\templates"
バイナリデータはBase 64または他の適切な符号化を使用することを提案しています.具体的な処理は特定の応用に依存する.
整数
整数は小数点以下の数字です.マイナスを使いたいですか?直感でいいです.整数のサイズは最小64ビットです.
浮動小数点
浮動小数点小数点の両側に数字があります.64ビット精度です
3.1415
-0.01
ブール値
ブール値は常に小文字です.
true
false
日付と時刻
ISO 8601のフルフォーマットを使用します.
1979-05-27T07:32:00Z
行列
配列は大かっこで囲まれます.スペースは無視されます.要素はカンマ区切りを使用します.なお、データタイプの混在は禁止されています.
[ 1, 2, 3 ]
[ "red", "yellow", "green" ]
[ [ 1, 2 ], [3, 4, 5] ]
[ [ 1, 2 ], ["a", "b", "c"] ] #      。
[ 1, 2.0 ] #   :     。
配列は複数行可能です.つまり、スペース以外の四角い括弧の改行も無視されます.四角い括弧を閉じる前の最後の項目の後のコンマは許可されます.
テーブル
表(ハッシュ表や辞書ともいう)はキーパッドのセットです.これらは四角い括弧の中にあります.自行します.配列とは別に、配列は値だけです.
[table]
この下で、次のテーブルまたはEOFまでは、このテーブルのキーのペアです.キーは左で、値は右で、等号は真ん中です.キーは空ではない文字で始まり、等号前の空ではない文字で終了します.キーのペアは無秩序です.
[table]
key = "value"
任意でインデントできます.Tabまたはスペースを使ってください.なぜインデントしますか?表を入れ替えることができるからです.
ネストテーブルの表名には.が使われています.表の名前は自由にしてもいいです.ただ、点を使わないでください.点は保留です.
[dog.tater]
type = "pug"
以上は以下のJSON構造に相当する.
{ "dog": { "tater": { "type": "pug" } } }
あなたが望まないなら、すべての父の時計を宣言しなくてもいいです.TOMLはどのように処理するべきかを知っています.
# [x]  
# [x.y]    
# [x.y.z]   
[x.y.z.w] #      
空の表は許可されています.中にはキーのペアがありません.
親テーブルが直接定義されておらず、特定のキーが定義されていない限り、書き込みを継続できます.
[a.b]
c = 1

[a]
d = 2
しかし、キーとテーブルは何度も定義できません.こうするのは合法的ではない.
#     !

[a]
b = 1

[a]
c = 2
#      

[a]
b = 1

[a.b]
c = 2
テーブル配列
最後に紹介するタイプは表行列です.表配列は、両方の括弧内の表名来を包むことによって表現されます.同じ括弧の名前を使う表は同じ配列の要素です.表は書く順に挿入します.両方の括弧表にキーパッドがないと、空の表として扱われます.
[[products]]
name = "Hammer"
sku = 738594937

[[products]]

[[products]]
name = "Nail"
sku = 284758393
color = "gray"
以下のJSON構造に相当する.
{
  "products": [
    { "name": "Hammer", "sku": 738594937 },
    { },
    { "name": "Nail", "sku": 284758393, "color": "gray" }
  ]
}
テーブル配列もネストできます.サブテーブルに同じ括弧文法を使うだけです.各2つの括弧のサブテーブルは、最近定義されている上位の表要素に属しています.
[[fruit]]
  name = "apple"

  [fruit.physical]
    color = "red"
    shape = "round"

  [[fruit.variety]]
    name = "red delicious"

  [[fruit.variety]]
    name = "granny smith"

[[fruit]]
  name = "banana"

  [[fruit.variety]]
    name = "plantain"
以下のJSON構造に相当する.
{
  "fruit": [
    {
      "name": "apple",
      "physical": {
        "color": "red",
        "shape": "round"
      },
      "variety": [
        { "name": "red delicious" },
        { "name": "granny smith" }
      ]
    },
    {
      "name": "banana",
      "variety": [
        { "name": "plantain" }
      ]
    }
  ]
}
一般的なテーブルの定義を試みます.定義された配列の名前を使って解析エラーを投げます.
#      TOML

[[fruit]]
  name = "apple"

  [[fruit.variety]]
    name = "red delicious"

  #       
  [fruit.variety]
    name = "granny smith"
本当ですか
はい、そうです
どうしてですか
私たちは、ハッシュ・テーブルに迷わずにマッピングすることができる人間らしい読み取り可能なフォーマットが必要です.そして、YAMLの仕様は80ページもあります.いいえ、JSONは考えません.なぜか分かりますか?
あら、あなたは正しいです.
ははは!手伝いたいですか?合併をお願いします.または解像度を作成します.ちょっと勇敢に
実現する
もしあなたが実現しているなら、このリストにあなたの実装を追加してください.あなたの解像度のREADMEに、あなたの解像度サポートのSHA 1またはバージョン番号を表示してください.
  • 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
  • C+(@skytrif)-https://github.com/skystrife/cpptoml
  • Clojure(@lanttiga)-https://github.com/lantiga/clj-toml
  • Clojure(@manicoolosi)-https://github.com/manicolosi/clojoml
  • Coffee Script(@biilman)-https://github.com/biilmann/coffee-toml
  • Common Lisp(@pnanhan)-https://github.com/pnathan/pp-toml
  • エリック-https://github.com/kalta/etoml.git
  • エリック-https://github.com/kaos/tomle
  • Emacs Lisp(@gongoZ)-https://github.com/gongo/emacs-toml
  • Go(@thompellettier)-https://github.com/pelletier/go-toml
  • Go(@laurent 22)-https://github.com/laurent22/toml-go
  • Go w/Reflection(@BurntSushi)-https://github.com/BurntSushi/toml
  • ハスキー(@seliopou)-https://github.com/seliopou/toml
  • Haxe(@rancole)-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(@MatthiasSchetz)-https://github.com/mschuetz/toml
  • Jullia(@pygy)-https://github.com/pygy/TOML.jl
  • Literate Coffee Script(@Jonanhan Abrams)-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(@redhotventingen)-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(@jimumoss)-https://github.com/jamesmoss/toml
  • PHP(@coop 182)-https://github.com/coop182/toml-php
  • PHP(@checkdoman)-https://github.com/checkdomain/toml
  • PHP(@zdizai)-https://github.com/zidizei/toml-php
  • PHP(@yosymfony)-https://github.com/yosymfony/toml
  • Python(@socketubs)-https://github.com/socketubs/pytoml
  • Python(@f 03 lipe)-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
  • Python(@hit 9)-https://github.com/hit9/toml.py
  • 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 (toml 2 gem)
  • Ruby(@sandepravi)-https://github.com/sandeepravi/tomlp (tomlp gem)
  • Scara-https://github.com/axelarge/tomelette
  • 検証
    @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&3(@lmno)-https://github.com/lmno/TOML
  • TextMate(@infinight)-https://github.com/textmate/toml.tmbundle
  • Vim(@cespare)-https://github.com/cespare/vim-toml
  • エンコーダ
  • PHP(@ayushd)-https://github.com/ayushchd/php-toml-encoder
  • 原文TOML README翻訳SegmentFault