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
[edytuj | edytuj kod]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
[edytuj | edytuj kod]# 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
[edytuj | edytuj kod]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
[edytuj | edytuj kod]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ż
[edytuj | edytuj kod]Przypisy
[edytuj | edytuj kod]- ↑ 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