TOML

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

TOMLformat 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].

Porównanie formatów
Format Formalny standard Elastyczny standard Silnie typowany Łatwa implementacja   Czytelny dla człowieka Pozwala na komentarze
JSONTakNieTakTakTakNie
YAMLTakNieTakTakTakTak
TOMLTakNieTakTakTakTak
ININieTakNieTakTakTak

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

  1. Jest proposal dla TOML zawarty w application/toml, ale nigdy nie został oficjalnie zarejestrowany IANA's Media Types.
  2. Home · toml-lang/toml Wiki · GitHub [online], github.com [dostęp 2024-04-26] (ang.).
  3. The Manifest Format - The Cargo Book [online], rust-lang.org [dostęp 2024-04-26] (ang.).
  4. Home · toml-lang/toml Wiki · GitHub [online], github.com [dostęp 2024-04-26] (ang.).
  5. GitHub - toml-lang/toml: Tom's Obvious, Minimal Language [online], github.com [dostęp 2024-04-26] (ang.).
  6. proceedings/scipy2017/geoffrey_poore.html [online], scipy.org [dostęp 2024-04-26].
  7. toml-intro.rst [online], american.edu [dostęp 2024-04-26] (ang.).
  8. What is wrong with TOML?
  9. An INI critique of TOML

Linki zewnętrzne