TOML-Parser

TOML (Tom's Obvious Minimal Language) ist ein minimales Konfigurationsdateiformat, das leicht zu lesen und zu schreiben ist. Es ist das Standard-Konfigurationsformat fuer Rust (Cargo.toml), Python-Paketierung (pyproject.toml) und viele andere moderne Entwicklungstools.

Spezifikationen

Haeufige Anwendungsfaelle

  • Cargo.toml fuer Rust-Projektabhaengigkeiten und Metadaten parsen
  • pyproject.toml fuer Python-Build-Konfiguration lesen (PEP 518/621)
  • Konfigurationen von Hugo, Zola oder anderen statischen Seitengeneratoren verarbeiten
  • Deno-Konfigurationsdateien bearbeiten (deno.toml)
  • Konfiguration vor dem Deployment validieren

Funktionen

  • Vollstaendige Unterstuetzung der TOML v1.0.0-Spezifikation
  • Tabellen, Arrays von Tabellen und verschachtelte Strukturen parsen
  • Inline-Tabellen und Arrays verarbeiten
  • Unterstuetzung fuer Datum/Uhrzeit-Werte
  • In JSON, YAML oder XML konvertieren
  • Syntaxvalidierung mit Fehlermeldungen

Beispiele

Rust Cargo.toml

Ausprobieren →

Ein Cargo-Manifest, das Paketmetadaten und Abhaengigkeiten definiert.

[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

Ausprobieren →

Eine Python-Projektkonfiguration mit Build-System und Metadaten.

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

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

Tipps

  • TOML verwendet = fuer Schluessel-Wert-Paare, anders als YAMLs Doppelpunkte.
  • Strings muessen in Anfuehrungszeichen stehen. Verwenden Sie """ fuer mehrzeilige Strings.
  • Tabellen ([table]) erstellen verschachtelte Strukturen.
  • Arrays von Tabellen verwenden die [[array]]-Syntax.

Verstaendnis TOML-Parser

TOML (Tom's Obvious Minimal Language) ist ein Konfigurationsdateiformat, das eindeutig und leicht lesbar sein soll. TOML wurde von Tom Preston-Werner (Mitgruender von GitHub) entwickelt und bildet sauber auf eine Hash-Tabelle ab. Es ist absichtlich einfacher als YAML, aber ausdrueckstaerker als INI-Dateien. Version 1.0.0 wurde 2021 finalisiert.

TOMLs Design konzentriert sich auf Klarheit. Schluessel und Werte verwenden eine einfache "key = value"-Syntax. Tabellen (Abschnitte) werden mit [eckigen Klammern] gekennzeichnet und erzeugen verschachtelte Strukturen ohne Einrueckungsabhaengigkeit. Arrays von Tabellen verwenden [[doppelte Klammern]], um wiederholte Abschnitte zu definieren. TOML unterstuetzt nativ Strings, Ganzzahlen, Gleitkommazahlen, Booleans, Daten, Uhrzeiten und Datum-Uhrzeiten als erstklassige Typen, wodurch Parsing-Mehrdeutigkeiten vermieden werden, die bei JSON und YAML ueblich sind.

Das Rust-Oekosystem hat TOML frueh mit Cargo.toml als Paketmanifest-Format uebernommen. Python folgte mit pyproject.toml (PEP 518 und PEP 621), was es zum modernen Ersatz fuer setup.py und setup.cfg macht. TOML erscheint auch in Go-Tools, Deno (deno.toml), Hugo und vielen anderen Entwicklertools, die explizite, lesbare Konfiguration schaetzen.

TOML tauscht Flexibilitaet gegen Vorhersehbarkeit. Im Gegensatz zu YAML gibt es nur eine Moeglichkeit, jede Datenstruktur darzustellen. Es gibt keine Anker, keine Aliases, keine impliziten Typkonvertierungs-Ueberraschungen und keine signifikanten Leerzeichen. Der Nachteil ist, dass tief verschachtelte Strukturen ausfuehrlich werden, da jede Ebene einen eigenen Tabellenkopf benoetigt.

TOML eignet sich hervorragend fuer flache oder maessig verschachtelte Konfigurationsdateien, die haeufig von Menschen bearbeitet werden. Seine eindeutige Syntax vermeidet YAML-Fallstricke wie Boolean-Konvertierung und Einrueckungsfehler und ist gleichzeitig lesbarer als JSON fuer Konfigurationszwecke. TOML ist die natuerliche Wahl fuer Projektmanifeste (Cargo.toml, pyproject.toml) und Tool-Konfiguration. YAML bleibt besser geeignet fuer tief verschachtelte Strukturen wie Kubernetes-Manifeste, und JSON ist der Standard fuer den Datenaustausch zwischen Systemen.

Die [[doppelte Klammern]]-Syntax erstellt Arrays von Tabellen, wobei jedes Vorkommen des Headers ein neues Element zum Array hinzufuegt. Zum Beispiel erstellt [[products]], das dreimal erscheint, ein Array von drei Produktobjekten, jedes mit eigenen Schluessel-Wert-Paaren in Reihenfolge. TOML unterstuetzt auch einzeilige Kommentare mit dem Hash-Symbol (#), die in einer eigenen Zeile oder nach einem Wert stehen koennen. Es gibt keine mehrzeilige Kommentarsyntax, aber die einzeilige Variante ist immer noch ein erheblicher Vorteil gegenueber JSON, das ueberhaupt keine Kommentarunterstuetzung bietet.

Tabellen und Inline-Tabellen dienen verschiedenen Zwecken. Tabellen verwenden die [Header]-Syntax und erstrecken sich ueber mehrere Zeilen, was sie fuer Abschnitte mit vielen Schluesseln lesbar macht. Inline-Tabellen verwenden geschwungene Klammern in einer einzelnen Zeile (key = { a = 1, b = 2 }) und muessen vollstaendig in dieser einen Zeile definiert werden — sie koennen nach der Definition nicht erweitert werden. Als Faustregel gilt: Verwenden Sie Standardtabellen fuer die Lesbarkeit, wenn ein Abschnitt mehr als zwei oder drei Schluessel hat.

← Zurueck zu allen Tools