TOML
[Tom's Obvious Minimal Language]
Format plików konfiguracyjnych
dla człowieka.
TOML dąży do tego, żeby był minimalnym formatem dla plików konfiguracji, który jest łatwy do czytania z powodu oczywistej semantyki. TOML jest zaprojektowany do tego, by jednoznacznie odpowiadał tablicy asocjacyjnej. TOML powinien być łatwy do przetwarzania na struktury danych w wielu różnych językach.
# 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"
-
-
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
-
-
- 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 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: