Konfiguracja TOML (.toml)
TOML StandardowyTom's Obvious Minimal Language (TOML) to jednoznaczny, skoncentrowany na człowieku format konfiguracyjny stworzony przez współzałożyciela GitHub Toma Prestona-Wernera, szeroko adoptowany w nowoczesnych ekosystemach programistycznych, w tym w języku Rust (Cargo) i Python (pyproject.toml).
Konwertuj TOML na JSON
Darmowy konwerter z TOML na JSON w przeglądarce. Konwertuj pliki natychmiast na swoim urządzeniu.
Inspekcja i metadane
Systemy operacyjne i analizatory plików identyfikują pliki TOML, sprawdzając początkową sekwencję bajtów binarnych:
Podpis nagłówka na poziomie bajtów (Magic Bytes)
Systemy operacyjne i analizatory plików identyfikują pliki TOML, sprawdzając początkową sekwencję bajtów binarnych:
PODPIS HEX (OFFSET 0):
5B ... 5DREPREZENTACJA ASCII: [...]
Normalizacja: TOML v1.0.0 Specification
Specyfikacja techniczna
| Architektura kontenera | Human-readable configuration file mapping unequivocally to a hash table, structured with [tables] and key = value pairs |
| Kompresja | Uncompressed text stream |
| Kolejność bajtów (Endianness) | UTF-8 text stream |
| Przestrzenie kolorów | N/A (Configuration File) |
| Kanały i struktura | Tables, arrays of tables, inline tables, strings, integers, floats, booleans, and RFC 3339 datetimes |
| Maks. wymiary | Unbounded text length |
| Przezroczystość | None |
| Streaming i progresywne ładowanie | Sequential line-by-line configuration parsing |
Techniczna macierz porównawcza: TOML a konkurencja
| Atrybut techniczny | TOML (Bieżący) | YAML | JSON | INI |
|---|---|---|---|---|
| Ryzyko niejednoznaczności | Żadne (ściśle jednoznaczna specyfikacja) | Wysokie (błędy typu 'problem z Norwegią' w YAML dotyczące wartości logicznych) | Żadne (ścisłe typy danych) | Umiarkowane (brak formalnego standardu) |
| Natywne typy daty i czasu | Natywna obsługa daty i czasu według RFC 3339 | Niejawne analizowanie ciągów znaków / dat | Brak (tylko ciągi znaków) | Brak (tylko ciągi znaków) |
| Obsługa komentarzy | Natywna (komentarze #) | Natywna (komentarze #) | Brak dozwolonych komentarzy | Natywna (komentarze ; i #) |
| Główny ekosystem | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, potoki CI/CD | API internetowe, komunikacja w przeglądarce | Starsze systemy Windows, konfiguracja Git |
Typowe tryby uszkodzeń i przewodnik odzyskiwania szesnastkowego
Błąd analizatora (parsera): 'Duplicate key in table' lub 'Invalid table header'.
Główna przyczyna: Próba ponownego zdefiniowania istniejącego klucza lub przestrzeni nazw tabeli w dokumencie.
Odzyskiwanie: Zweryfikuj i sformatuj składnię TOML za pomocą formatera TOML w File2File.
Analiza bezpieczeństwa i wektory ataku na parser
Analizatory TOML muszą chronić przed skażeniem prototypu (prototype pollution) oraz wyczerpaniem zasobów procesora wynikającym z patologicznego zagnieżdżania tablic tabel.
Znane wektory ataku
- Skażenie prototypu w parserach TOML języka JavaScript wstrzykujące właściwości do obiektu Object.prototype.
- Atak typu odmowa usługi (DoS) poprzez głęboko zagnieżdżone deklaracje tablic tabel.
- Nieograniczona alokacja pamięci podczas analizowania masowych tablic wewnątrz wiersza (inline array).
Najlepsze praktyki obronne:
Pochodzenie historyczne i kamienie milowe
Główne zalety
- Całkowicie jednoznaczny: mapuje się czysto i przewidywalnie na tablicę mieszającą (hash table) bez zaskakującego dopasowywania typów.
- Wbudowana obsługa natywnych typów daty i czasu (znaczniki czasu RFC 3339, daty, godziny) bez konieczności uciekania znaków (escaping).
- Przyjęty jako oficjalny standard formatu konfiguracji dla nowoczesnych narzędzi językowych (Rust Cargo.toml, Python pyproject.toml).
Ograniczenia techniczne i wady
- Głęboko zagnieżdżone, wielopoziomowe drzewa obiektów mogą stać się rozwlekłe w porównaniu do języka YAML.
- Składnia dla tablic tabel ([[table.array]]) może być nieintuicyjna dla początkujących.
- Mniej kompaktowy niż JSON w przypadku wysokowydajnej wymiany danych API między maszynami.
Ciekawe informacje techniczne
- TOML został stworzony przez Toma Prestona-Wernera, który jest również współzałożycielem serwisu GitHub oraz twórcą Gravatar i SemVer (Semantic Versioning).
- Plik 'Cargo.toml' w każdym projekcie w języku Rust określa wszystkie zależności pakietów i flagi kompilatora w formacie TOML.
- W przeciwieństwie do JSON, TOML natywnie obsługuje komentarze (przy użyciu znaku '#') oraz łańcuchy wielolinijkowe.
Często zadawane pytania techniczne
Do czego służy TOML?
TOML służy do konfiguracji oprogramowania, najczęściej w pliku Cargo.toml języka Rust, pyproject.toml Pythona, konfiguracjach Go Hugo oraz w narzędziach kontenerowych.
Dlaczego TOML jest preferowany nad YAML w konfiguracji?
TOML pozwala uniknąć znanych błędów parsowania YAML w przypadkach brzegowych (takich jak zamiana nieujętego w cudzysłów 'NO' na wartość logiczną false), pozostając przy tym czytelnym dla człowieka dzięki komentarzom i przejrzystym tabelom.
Jak mogę przekonwertować TOML na JSON lub YAML?
Możesz błyskawicznie przekonwertować pliki TOML na format JSON lub YAML za pomocą File2File.app bezpośrednio w przeglądarce internetowej.
Powiązane pary konwersji TOML
Konwersja plików konfiguracyjnych TOML na format JSON przekształca przyjazne dla człowieka ustawienia właściwości w ścisły obiekt danych, który aplikacje internetowe mogą natychmiast przeanalizować.
Konwersja plików konfiguracyjnych JSON na format TOML upraszcza ręczną edycję, zachowując jednocześnie wszystkie hierarchiczne dane strukturalne w postaci par klucz-wartość.