TOML konfiguracija (.toml)

Specifikacija Standard

Tom's Obvious Minimal Language (TOML) je nedvosmislen konfiguracioni format usredsređen na čoveka, koji je kreirao suosnivač GitHub-a Tom Preston-Werner, a koji je široko prihvaćen u modernim programskim ekosistemima, uključujući Rust (Cargo) i Python (pyproject.toml).

Konvertujte TOML u JSON

Besplatan konvertor TOML u JSON u pregledaču. Konvertujte datoteke odmah na svom uređaju.

Pregled i metapodaci

Operativni sistemi i analizatori datoteka identifikuju TOML datoteke proverom početnog binarnog niza bajtova:

Izaberite ili prevucite datoteke ovde

Privatno - datoteke nikada ne napuštaju vaš uređaj

ili nalepite Ctrl+V
Garancija privatnosti: bez prenosa podataka preko mreže 0 bajtova poslato spoljnim serverima. Sva obrada je izvršena lokalno u bezbednom okruženju vašeg pregledača.

Potpis zaglavlja na nivou bajtova (magični bajtovi)

Operativni sistemi i analizatori datoteka identifikuju TOML datoteke proverom početnog binarnog niza bajtova:

HEKSADECIMALNI POTPIS (OFFSET 0):

5B ... 5D

ASCII REPREZENTACIJA: [...]

Standardizacija: Specifikacija TOML v1.0.0

Tehničke specifikacije

Arhitektura kontejneraLjudima čitljiva konfiguraciona datoteka koja se nedvosmisleno preslikava u hash tabelu i strukturirana je pomoću [tabela] i parova ključ = vrednost
KompresijaNekomprimovani tekstualni tok
Bajtni redosled (Endianness)UTF-8 tekstualni tok
Prostori bojaNije primenljivo (konfiguraciona datoteka)
Kanali i strukturaTabele, nizovi tabela, tabele ugrađene u red, tekstualni nizovi, celi brojevi, decimalni brojevi, logičke vrednosti i datumi i vremena prema RFC 3339
Maksimalne dimenzijeNeograničena dužina teksta
TransparentnostNema
Strimovanje i progresivno učitavanjeSekvencijalno parsiranje konfiguracije, red po red

Tehnička matrica poređenja: TOML u odnosu na konkurente

Tehnički atributTOML (Trenutno)YAMLJSONINI
Rizik od dvosmislenostiNula (strogo nedvosmislena specifikacija)Visok (greške sa boolean vrednostima u YAML 'Norveškom problemu')Nula (strogi tipovi podataka)Umeren (nema formalnog standarda)
Izvorni tipovi datuma i vremenaIzvorna podrška za RFC 3339 datum i vremeImplicitno raščlanjivanje stringova i datumaNema (samo niske)Nema (samo niske)
Podrška za komentareIzvorno (# komentari)Izvorno (# komentari)Komentari nisu dozvoljeniIzvorno (; i # komentari)
Primarni ekosistemRust (Cargo), Python (PEP 518), GoKubernetes, Ansible, CI/CD procesiVeb API-ji, komunikacija u pregledačuNasleđeni Windows, Git konfig

Uobičajeni režimi oštećenja i vodič za heksadecimalni oporavak

Greška parsera: 'Duplicate key in table' ili 'Invalid table header'.

Osnovni uzrok: Pokušaj redefinisanja postojećeg ključa ili imenskog prostora tabele unutar dokumenta.

Oporavak: Potvrdite i reformatirajte TOML sintaksu pomoću File2File.app TOML Formatter-a.

Bezbednosna analiza i vektori napada parsera

TOML parseri se moraju braniti od zagađenja prototipa (prototype pollution) i iscrpljivanja CPU-a usled patološkog ugnježđivanja nizova tabela.

Poznati vektori napada

  • Zagađenje prototipa u JavaScript TOML parserima koji ubacuju svojstva u Object.prototype.
  • Uskraćivanje usluge (DoS) kroz duboko ugnježđene deklaracije nizova tabela.
  • Neograničena alokacija memorije tokom parsiranja masivnih ugrađenih nizova.

Najbolje prakse za zaštitu: Proverite ograničenja ugnežđivanja tabela i koristite objekte rečnika sigurne od zagađenja prototipa.

Istorijat i prekretnice

2021Zvanično objavljen TOML v1.0.0, čime je zamrznuta specifikacija osnovne sintakse.
2018Python standardizuje 'pyproject.toml' (PEP 518) kao moderan standard za konfiguraciju gradnje.
2013Tom Preston-Werner objavljuje TOML kako bi obezbedio čist konfiguracioni format bez složenosti YAML-a.

Ključne prednosti

  • Potpuno nedvosmislen: čisto i predvidivo se preslikava u heš tabelu bez iznenađujućih konverzija tipova.
  • Prvoklasna izvorna podrška za datume i vreme (RFC 3339 vremenske oznake, datumi, vreme) bez potrebe za stringovima i ekraniranjem.
  • Usvojen kao zvanični standardni konfiguracioni format za moderne alate jezika (Rust Cargo.toml, Python pyproject.toml).

Tehnička ograničenja i nedostaci

  • Duboko ugnježđena stabla objekata na više nivoa mogu postati opširna u poređenju sa YAML-om.
  • Sintaksa za nizove tabela ([[table.array]]) može biti neintuitivna za početnike.
  • Manje kompaktan od JSON-a za razmenu API podataka između mašina sa velikim protokom.

Zanimljivosti

  • TOML je kreirao Tom Preston-Werner, koji je takođe suosnivač GitHub-a i tvorac Gravatar-a i SemVer-a (Semantičko verzionisanje).
  • Cargo paketi koriste Cargo.toml za metapodatke, zavisnosti i ciljeve; Rust projekti sa drugim sistemima za izgradnju mogu koristiti druge fajlove.
  • Za razliku od JSON-a, TOML izvorno podržava komentare (korišćenjem znaka '#') i višelinijske niske.

Često postavljana tehnička pitanja

Čemu služi TOML?

TOML se koristi za konfiguraciju softvera, a najpoznatiji je u Rust-ovom Cargo.toml, Python-ovom pyproject.toml, Go Hugo konfiguracijama i alatima za kontejnere.

Zašto je TOML poželjniji u odnosu na YAML za konfiguraciju?

TOML izbegava poznate greške u parsiranju graničnih slučajeva YAML-a (kao što je nenavodeno „NO“ koje se pretvara u logičku vrednost false), a i dalje je razumljiv ljudima zahvaljujući komentarima i jasnim tabelama.

Kako mogu da konvertujem TOML u JSON ili YAML?

Možete trenutno da konvertujete TOML fajlove u JSON ili YAML koristeći File2File.app direktno u vašem veb pretraživaču.