TOML
Rozszerzenia pliku | .toml |
---|---|
Typ MIME | Nie zarejestrowany[1] |
Data opracowania | 23 II 2013 |
Ostatnia wersja | v1.0.0 (11 stycznia, 2021) |
Otwarty format? | tak |
Strona internetowa |
TOML – format plików konfiguracyjnych. Stworzony został z myślą o łatwości czytania i pisania dzięki oczywistej semantyce, która stawia sobie za cel „minimalizm” i ma na celu jednoznaczne mapowanie do słownika. Jego specyfikacja jest typu open source i jest wspierana przez wkład od społeczności. TOML jest używany w wielu projektach oprogramowania[2][3] i jest zaimplementowany w wielu językach programowania[4]. Nazwa „TOML” to skrót od „Tom's Obvious, Minimal Language”[5], odnoszący się do jego twórcy, Toma Prestona-Wernera.
Składnia
Składnia TOML składa się głównie z par klucz = "wartość"
, [nazwa sekcji]
i # komentarz
. Składnia TOML nieco przypomina składnię plików INI, ale w przeciwieństwie do nich zawiera formalną specyfikację, podczas gdy format pliku INI posiada wiele konkurencyjnych wariantów.
Jego specyfikacja zawiera listę obsługiwanych typów danych: String, Integer, Float, Boolean, Datetime, Array i Table.
Przykład
# To jest przykładowy dokument TOML title = "TOML Example" [owner] name = "Tom Preston-Werner" dob = 1979-05-27T07:32:00-08:00 # Data [database] server = "192.168.1.1" ports = [ 8001, 8001, 8002 ] connection_max = 5000 enabled = true [servers] # Wcięcia (tab lub spacje) są dozwolone ale nie wymagane [servers.alpha] ip = "10.0.0.1" dc = "eqdc10" [servers.beta] ip = "10.0.0.2" dc = "eqdc10" [clients] data = [ ["gamma", "delta"], [1, 2] ] # Wewnątrz tablic można łamać linie hosts = [ "alpha", "omega" ]
Porównanie z innymi formatami
Poniższa tabela opiera się na specyfikacji TOML i jest porównaniem z innymi popularnymi formatami plików konfiguracyjnych (INI, JSON i YAML). Na konferencji SciPy 2017 został zaprezentowany język BespON[6] jako format pliku konfiguracyjnego odpowiedniego dla modelowania i symulacji. Pojawiło się tam także omówienie możliwości wykorzystania do tego celu języka TOML[7].
Format | Formalny standard | Elastyczny standard | Silnie typowany | Łatwa implementacja | Czytelny dla człowieka | Pozwala na komentarze |
---|---|---|---|---|---|---|
JSON | Tak | Nie | Tak | Tak | Tak | Nie |
YAML | Tak | Nie | Tak | Tak | Tak | Tak |
TOML | Tak | Nie | Tak | Tak | Tak | Tak |
INI | Nie | Tak | Nie | Tak | Tak | Tak |
Krytyka
Od pierwszego wydania TOML spotkał się z kilkoma krytykami. Projekt StrictYAML wymienia następujące punkty jako problematyczne w TOML: [8]
- TOML jest rozwlekły, nie jest DRY i cierpi na szum syntaktyczny
- Hierarchie TOML są trudne do wywnioskowania na podstawie samej składni
- Nadmierna komplikacja: podobnie jak YAML, TOML ma zbyt wiele funkcji
- W TOML składnia określa typy danych („typowanie składnią”)
Projekt libconfini opublikował od tego czasu bardziej obszerną krytykę TOML z prowadzoną perspektywy INI, [9] wymieniając (między innymi) następujące punkty jako problematyczne:
- TOML pozwala plikowi konfiguracyjnemu decydować o typach danych (składnia definiuje typy), gdy de facto decyduje o tym aplikacja kliencka, a każdy niezgodny typ zostanie i tak zignorowany lub konwertowany na oczekiwany typ (w zależności od parsera)
- TOML ponownie wprowadza to, czego języki przyjazne dla człowieka zwykle próbują się pozbyć: rozwlekłą składnię i konieczność używania cudzysłowów dla łańcuchów
- W składni TOML zawsze rozróżniana jest wielkość liter, pomimo faktu, że istnieją sytuacje, w których pliki konfiguracyjne muszą nie uwzględniać wielkości liter (jak na przykład pliki konfiguracyjne mapujące system plików FAT32 lub znaczniki HTML)
- TOML używa nawiasów kwadratowych dla tablic, chociaż nawiasy kwadratowe są już zarezerwowane dla nazw tabel; ponadto każda specjalna składnia dla tablic przywraca język do typowania za pomocą składni
- TOML zabrania wypełniania tabeli w różnych krokach, przez co scalanie kilku plików konfiguracyjnych jest problematyczne
- TOML arbitralnie wprowadza składnię dat
- TOML umożliwia (ale odradza) tworzenie kluczy o nazwie będącej pustym łańcuchem
- Reguł TOML nie można wywnioskować z treści pliku, dlatego edycja pliku TOML wymaga wcześniejszej znajomości języka
- TOML jest niekompatybilny wstecznie z INI
Zobacz też
Przypisy
- ↑ Jest proposal dla TOML zawarty w
application/toml
, ale nigdy nie został oficjalnie zarejestrowany IANA's Media Types. - ↑ Home · toml-lang/toml Wiki · GitHub [online], github.com [dostęp 2024-04-26] (ang.).
- ↑ The Manifest Format - The Cargo Book [online], rust-lang.org [dostęp 2024-04-26] (ang.).
- ↑ Home · toml-lang/toml Wiki · GitHub [online], github.com [dostęp 2024-04-26] (ang.).
- ↑ GitHub - toml-lang/toml: Tom's Obvious, Minimal Language [online], github.com [dostęp 2024-04-26] (ang.).
- ↑ proceedings/scipy2017/geoffrey_poore.html [online], scipy.org [dostęp 2024-04-26] .
- ↑ toml-intro.rst [online], american.edu [dostęp 2024-04-26] (ang.).
- ↑ What is wrong with TOML?
- ↑ An INI critique of TOML
Linki zewnętrzne
- Oficjalna strona TOML
- Repozytorium TOML na GitHub