TOML

Z Wikipedii, wolnej encyklopedii
TOML
Rozszerzenia pliku

.toml

Typ MIME

Nie zarejestrowany[1]

Data opracowania

23 II 2013

Ostatnia wersja

v1.0.0-rc.1 (3 kwietnia, 2020)

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[edytuj | edytuj kod]

Składnia TOML składa się głównie z par key = "value", [section names] i # comments. 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].

Porównanie formatów
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]

  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[edytuj | edytuj kod]