Parser TOML

TOML (Tom's Obvious Minimal Language) to minimalny format plikow konfiguracyjnych zaprojektowany tak, aby byl latwy do czytania i pisania. Jest standardowym formatem konfiguracji dla Rust (Cargo.toml), pakietowania Python (pyproject.toml) i wielu innych nowoczesnych narzedzi programistycznych.

Specyfikacje

Typowe zastosowania

  • Parsowanie Cargo.toml w celu uzyskania zaleznosci i metadanych projektow Rust
  • Odczyt pyproject.toml dla konfiguracji budowania Python (PEP 518/621)
  • Przetwarzanie konfiguracji Hugo, Zola lub innych generatorow stron statycznych
  • Edycja plikow konfiguracyjnych Deno (deno.toml)
  • Walidacja konfiguracji przed wdrozeniem

Funkcje

  • Pelna obsluga specyfikacji TOML v1.0.0
  • Parsowanie tabel, tablic tabel i zagniezdzonych struktur
  • Obsluga tabel i tablic inline
  • Obsluga wartosci daty/czasu
  • Konwersja do JSON, YAML lub XML
  • Walidacja skladni z komunikatami bledow

Przyklady

Rust Cargo.toml

Wypróbuj →

Manifest Cargo definiujacy metadane pakietu i zaleznosci.

[package]
name = "my-project"
version = "0.1.0"
edition = "2021"

[dependencies]
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1", features = ["full"] }

Python pyproject.toml

Wypróbuj →

Konfiguracja projektu Python z systemem budowania i metadanymi.

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "my-package"
version = "1.0.0"
dependencies = ["requests>=2.28"]

Wskazowki

  • TOML uzywa = dla par klucz-wartosc, w odroznieniu od dwukropkow w YAML.
  • Lancuchy znakow musza byc w cudzyslowach. Uzyj """ dla lancuchow wieloliniowych.
  • Tabele ([table]) tworza zagniezdzone struktury.
  • Tablice tabel uzywaja skladni [[array]].

Zrozumienie Parser TOML

TOML (Tom's Obvious Minimal Language) to format plikow konfiguracyjnych zaprojektowany tak, aby byl jednoznaczny i latwy do odczytu. Stworzony przez Toma Preston-Wernera (wspolzalozyciela GitHub), TOML czysto odwzorowuje sie na tablice hashujaca i jest celowo prostszy od YAML, bedac jednoczesnie bardziej ekspresyjny niz pliki INI. Wersja 1.0.0 zostala sfinalizowana w 2021 roku.

Projekt TOML koncentruje sie na jasnosci. Klucze i wartosci uzywaja prostej skladni "key = value". Tabele (sekcje) sa oznaczane [nawiasami kwadratowymi], tworzac zagniezdzone struktury bez wrazliwosci na wciecia. Tablice tabel uzywaja [[podwojnych nawiasow kwadratowych]] do definiowania powtarzajacych sie sekcji. TOML natywnie obsluguje lancuchy znakow, liczby calkowite, zmiennoprzecinkowe, wartosci logiczne, daty, czasy i daty-czasy jako typy pierwszoklasowe, eliminujac niejednoznacznosci parsowania czeste w JSON i YAML.

Ekosystem Rust wczesnie przyjal TOML z Cargo.toml jako formatem manifestu pakietu. Python podazyl z pyproject.toml (PEP 518 i PEP 621), czyniąc go nowoczesnym zamiennikiem dla setup.py i setup.cfg. TOML pojawia sie takze w narzedziach Go, Deno (deno.toml), Hugo i wielu innych narzedziach programistycznych ceniących wyraźna, czytelna konfiguracje.

TOML zamienia elastycznosc na przewidywalnosc. W odroznieniu od YAML istnieje tylko jeden sposob reprezentowania kazdej struktury danych. Nie ma kotwic, aliasow, niespodzianek z niejawna koercja typow ani znaczacych bialych znakow. Kompromisem jest to, ze gleboko zagniezdzone struktury staja sie rozwlekle, poniewaz kazdy poziom wymaga wlasnego naglowka tabeli.

TOML wyroznia sie w plaskich lub umiarkowanie zagniezdzonych plikach konfiguracyjnych, ktore ludzie czesto edytuja. Jego jednoznaczna skladnia unika pulapek YAML, takich jak koercja wartosci logicznych i bledy wciec, bedac jednoczesnie bardziej czytelny niz JSON do celow konfiguracyjnych. TOML to naturalny wybor dla manifestow projektow (Cargo.toml, pyproject.toml) i konfiguracji narzedzi. YAML pozostaje lepiej dopasowany do gleboko zagniezdzonych struktur, takich jak manifesty Kubernetes, a JSON jest standardem wymiany danych miedzy systemami.

Skladnia [[podwojnych nawiasow kwadratowych]] tworzy tablice tabel, gdzie kazde wystapienie naglowka dodaje nowy element do tablicy. Na przyklad [[products]] pojawiajace sie trzy razy tworzy tablice trzech obiektow produktow, kazdy z wlasnymi parami klucz-wartosc zebranymi w kolejnosci. TOML obsluguje rowniez jednoliniowe komentarze za pomoca symbolu hash (#), ktore moga pojawiac sie w osobnej linii lub po wartosci. Nie ma skladni komentarzy wieloliniowych, ale wariant jednoliniowy jest nadal znaczacą przewagą nad JSON, ktory nie ma zadnej obslugi komentarzy.

Tabele i tabele inline sluza roznym celom. Tabele uzywaja skladni [header] i rozciagaja sie na wiele linii, co czyni je czytelnymi dla sekcji z wieloma kluczami. Tabele inline uzywaja nawiasow klamerowych w jednej linii (key = { a = 1, b = 2 }) i musza byc zdefiniowane w calosci w tej jednej linii — nie moga byc rozszerzane po definicji. Jako ogolna zasada, uzywaj standardowych tabel dla czytelnosci, gdy sekcja ma wiecej niz dwa lub trzy klucze.

← Powrot do wszystkich narzedzi