v1.0.0

TOML

[Tom's Obvious Minimal Language]

Format plików konfiguracyjnych
dla człowieka.

# To jest dokument TOML

title = "TOML Example"

[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00

[database]
enabled = true
ports = [ 8000, 8001, 8002 ]
data = [ ["delta", "phi"], [3.14] ]
temp_targets = { cpu = 79.5, case = 72.0 }

[servers]

[servers.alpha]
ip = "10.0.0.1"
role = "frontend"

[servers.beta]
ip = "10.0.0.2"
role = "backend"
Dla TOML-a pierwszeństwem jest człowiek

TOML dąży do tego, żeby był minimalnym formatem dla plików konfiguracji, który:

  • jest łatwy do czytania z powodu oczywistej semantyki
  • jednoznacznie odpowiada tablicy asocjacyjnej
  • jest łatwy do przetwarzania na struktury danych w wielu różnych językach
TOML ma użyteczne typy rodzime
  • Pary klucz/wartość
  • Listy
  • Tabele
  • Tabele w jednej linii
  • Listy tabel
  • Liczby całkowite i zmiennoprzecinkowe
  • Wartości logiczne
  • Daty & czasy, z opcjonalnymi przesunięciami
TOML ma szerokie wsparcie

TOML już ma implementacje w większości popularnych języków programowania w użytku do dziś: C, C#, C++, Clojure, Dart, Elixir, Erlang, Go, Haskell, Java, JavaScript, Lua, Objective-C, Perl, PHP, Python, Ruby, Rust, Scala, Swift, … i wielu więcej.

Szybki przewodnik po TOML-u

Komentarze

TOML myśli, że wszystkie pliki konfiguracyjne powinny wspierać komentarze.

# To jest komentarz w TOML-u

# To jest wieloliniowy
# komentarz w TOML-u

Mocne ciągi znakowe

Są cztery sposoby, aby wyrazić ciągi znakowe: podstawowy, wieloliniowy podstawowy, dosłowny i wieloliniowy dosłowny. Podstawowe ciągi znakowe są otoczone cudzysłowami:

cz1 = "Jestem ciągiem znaków"
cz2 = "Możesz mnie \"zacytować\"."
cz3 = "Name\tJos\u00E9\nLoc\tSF."

Wieloliniowe podstawowe ciągi znakowe są otoczone trzema cudzysłowami z każdej strony i pozwalają na łamania linii. Uwzględnij ukośnik odwrotny na końcu linii, aby automatycznie usunąć spacje na początku kolejnej linii:

cz1 = """
Wlazł kotek na płotek
I mruga, i mruga."""

cz2 = """\
  Pchnąć w tę \
  łódź jeża lub \
  ośm skrzyń fig.\
  """

str2 staje się "Pchnąć w tę łódź jeża lub ośm skrzyń fig." (pojedyncze zdanie bez łamań linii).

Literały znakowe są otoczone cudzysłowami pojedynczymi. Nie ma tu ucieczek, więc widzisz to, co otrzymasz:

sciezka = 'C:\Users\nodejs\templates'
sciezka2 = '\\User\admin$\system32'
w_cudzyslowie = 'Tom "Dubs" Preston-Werner'
regex = '<\i\c*\s*>'

Ponieważ nie ma ucieczek, nie można zapisać pojedynczego cudzysłowu w literale znakowym otoczonym cudzysłowami pojedynczymi. Tutaj można zauważyć funkcję wieloliniowych literałów znakowych:

wr = '''\d{2} telefon[uy]? Apple('a)?'''
linie = '''
Pierwsze łamanie linii
jest usunięte z surowych
ciągów znakowych. Pozostałe
spacje są zachowane.
'''

Liczby

Liczby całkowite, zmiennoprzecinkowe, nieskończoność, a nawet NaN są wspierane. Możesz użyć notacji naukowej, a nawet separatorów tysięcy.

# liczby całkowite
lc1 = +99
lc2 = 42
lc3 = 0
lc4 = -17

# szesnastkowe z prefiksem `0x`
hex1 = 0xDEADBEEF
hex2 = 0xdeadbeef
hex3 = 0xdead_beef

# ósemkowe z prefiksem `0o`
oct1 = 0o01234567
oct2 = 0o755

# dwójkowe z prefiksem `0b`
bin1 = 0b11010110

# ułamki
lzp1 = +1.0
lzp2 = 3.1415
lzp3 = -0.01

# potęgi
lzp4 = 5e+22
lzp5 = 1e06
lzp6 = -2E-2

# oba
lzp7 = 6.626e-34

# separatory
lzp8 = 224_617.445_991_228

# nieskończoność
niesk1 = inf # nieskończoność dodatnia
niesk2 = +inf # nieskończoność dodatnia
niesk3 = -inf # nieskończoność ujemna

# nie-liczba
nie1 = nan
nie2 = +nan
nie3 = -nan 

Daty i czasy

TOML ukazuje wsparcie dla dat, czasów, i ich kombinacji, z przesunięciem lub bez.

# data i czas z przesunięciem
dcp1 = 1979-05-27T07:32:00Z
dcp2 = 1979-05-27T00:32:00-07:00
dcp3 = 1979-05-27T00:32:00.999999-07:00

# data i czas lokalny
dcl1 = 1979-05-27T07:32:00
dcl2 = 1979-05-27T00:32:00.999999

# data lokalna
dl1 = 1979-05-27

# czas lokalny
cl1 = 07:32:00
cl2 = 00:32:00.999999

Dalsza specyfikacja

TOML wspiera jeszcze więcej typów rodzimych i składni, przeczytaj wszystko na ten temat:

Zacznij pisać kod

TOML jest już zaimplementowane w ponad 40 językach programowania: