Zur Verteidigung von YAML
(opensource.posit.co)- YAML 1.2 ist ein einrückungsbasiertes Serialisierungsformat für von Menschen geschriebene verschachtelte Konfigurationsdateien und muss von Kritik an seiner Unzuverlässigkeit unterschieden werden, die aus älteren Erfahrungen mit PyYAML stammt
- Konfigurationsdateiformate haben sich als Reaktion auf die Grenzen früherer Generationen verändert, etwa die Flachheit von INI, die Ausführlichkeit von XML oder das Fehlen von Kommentaren und mehrzeiligen Strings in JSON
- TOML ist in flachen Strukturen wie
pyproject.tomlundCargo.tomlklar, aber bei tiefen verschachtelten Strukturen steigt durch Pfadwiederholungen und Tabellen-Arrays der Aufwand beim Lesen und Bearbeiten - Das YAML 1.2 Core Schema behandelt
yes,no,on,off,y,nals Strings und entfernt sexagesimale Zahlen sowie Timestamps als Kerntyp, wodurch frühere Probleme mit impliziter Typinferenz reduziert werden - py-yaml12 ist ein YAML-1.2-Parser und -Formatter für Python, der durch eine Rust-Implementierung sichere Standardwerte, 100% Konformität mit der
yaml-test-suiteund eine mit der PyYAML-C-Erweiterung konkurrenzfähige Performance bietet
Problemstellung
- In den letzten Jahren hat sich die Stimmung bei Konfigurationsdateiformaten in Richtung „YAML ist schlecht, TOML ist gut“ verschoben, doch die Bewertung von YAML muss Geschichte, Änderungen der Spezifikation und den Stand der Werkzeuge im Jahr 2026 zusammen betrachten
- Die Kritik an YAML war lange berechtigt, und selbst vorsichtige Nutzer erlebten unerwartetes Verhalten, aber die Spezifikation hat sich verändert und das Tooling-Ökosystem holt auf
- Die heutige Kritik an YAML lässt sich nur verstehen, wenn man auch die Abstammungslinie von Konfigurationsformaten betrachtet; es ist ein wiederkehrender Verlauf, in dem das nächste Format die Übertreibungen des vorherigen korrigieren soll
Eine kurze Geschichte der Konfigurationsdateiformate
- INI-Dateien kamen Anfang der 1980er mit MS-DOS und frühem Windows auf und waren ein flaches, leicht lesbares, von Menschen editierbares Format mit Schlüssel-Wert-Paaren, Abschnitten in eckigen Klammern und Semikolon-Kommentaren
- Für damalige Anforderungen wie Gerätetreiberkonfiguration, Schriftpfade oder Anwendungseinstellungen reichte INI aus, hatte aber strukturelle Grenzen: mehr als eine Ebene Verschachtelung war nicht möglich, und mangels formaler Spezifikation implementierten Parser jeweils eigene Dialekte
- XML wurde Ende der 1990er in der Enterprise-Softwarewelt breit übernommen und bot beliebige Hierarchien, Schemata, Namespaces, Transformationen und eine selbstbeschreibende Struktur, doch reale Konfigurationsdateien wurden sehr ausführlich und damit schwer von Hand wartbar
- JSON entstand als leichtgewichtigere Reaktion auf XML und ersetzte auf Basis der Einfachheit von JavaScript-Objektliteralen in den späten 2000ern und frühen 2010ern XML in Web-APIs, hat als Konfigurationsformat aber Einschränkungen wie fehlende Kommentare, fehlende mehrzeilige Strings und das Verbot nachgestellter Kommata
- YAML erschien 2001, TOML 2013, um die von JSON hinterlassene Lücke zu schließen; YAML bietet mit einrückungsbasierter Syntax beliebige Verschachtelung, mehrere Dokumente, Referenzen und benutzerdefinierte Typen, während TOML auf ein „standardisiertes INI“ mit expliziten Typen und formaler Spezifikation zielt
- Jedes neue Format einer Generation nahm die Übertreibungen des vorigen zum Ausgangspunkt, und viele der heutigen Probleme mit YAML sind weniger ein Resultat des Formatdesigns selbst als eines bestimmten Spezifikationsstands und der daran gebundenen Parser
Die Probleme, die gegen YAML sprachen
- Die Kritik an YAML ist kein konstruiertes Problem, sondern beruht auf realen Erfahrungen, die Programmierer über viele Jahre gemacht haben
- Das bekannteste Beispiel ist das Norway-Problem: In YAML 1.1 wurde der unquotierte Skalar
NOals booleschesfalseinterpretiert, sodassnoin einer Liste von Ländercodes zu einem Falschwert wurdecountries: - dk - fi - is - no - se["dk", "fi", "is", false, "se"] - Dieselbe Regel galt auch für
yes,on,off,y,nund verschiedene Groß-/Kleinschreibungsvarianten; Port-Mappings wie22:22wurden als sexagesimale Ganzzahlen gelesen, Versionsnummern wie10.23nicht als Strings, sondern als Fließkommazahlen, und datumsähnliche Werte als Timestamps interpretiert - Auch die in Data-Science- und Machine-Learning-Code natürlichen Variablennamen
nundykonnten unter den impliziten Bool-Regeln von YAML 1.1 statt als String-Schlüssel als SchlüsselFalseundTrueinterpretiert werden{"variables": {"x": "features", False: "sample_size", True: "target"}} - Die aggressive implizite Typinferenz von YAML 1.1 sollte Lesbarkeit fördern, indem etwa unquotiertes
trueals Bool gelesen wird, führte in realen Konfigurationsdateien aber zu größerer Unvorhersehbarkeit - Konfigurationsdateien werden oft selten bearbeitet und häufig von anderen Personen als dem ursprünglichen Autor geändert; dadurch können stille Fehlinterpretationen monatelang systemweit weitergetragen werden, was unerwartetes Verhalten in diesem Bereich besonders schwer erträglich macht
- Auch die Komplexität der gesamten YAML-Spezifikation wirkte belastend; die YAML-1.2.2-Spezifikation ist ein umfangreiches Dokument mit 10 Kapiteln und Abschnitten mit vierstufiger Nummerierung
- Es gibt viele Darstellungsformen für mehrzeilige Strings, und Anker sowie Aliase bilden ein mächtiges Referenzsystem, das für die meisten Konfigurationsaufgaben konzeptionell schwerer wirkt als nötig
- Sicherheitsprobleme rund um tag-basierte Objektdeserialisierung, insbesondere die Schwachstellen von
yaml.load()in Python, wurden zu einem bekannten Angriffsvektor; diese Kritikpunkte waren für YAML 1.1 und das damalige Tooling-Ökosystem gültig
Was TOML gut macht
- TOML ist in flachen oder nur leicht verschachtelten Konfigurationsstrukturen sauber, gut lesbar und eindeutig
- Die TOML-Syntax wirkt vertraut für alle, die INI-Dateien kennen, ergänzt aber explizite Typen, eine formale Spezifikation und verschachtelte Tabellen über punktgetrennte Schlüssel
pyproject.tomlundCargo.tomlsind typische Beispiele, in denen TOML gut passt, weil sie meist gut definierte Abschnitte mit ein oder zwei Ebenen Tiefe und vorhersagbarem Inhalt haben- In TOML stehen Strings immer in Anführungszeichen, sodass
nonicht mehrdeutig als Bool oder Wort gelesen werden kann; Ganzzahlen, Fließkommazahlen und Datumswerte sind erstklassige Typen, und Kommentare funktionieren wie erwartet - Die Übernahme durch PEP 518 im Python-Packaging-Ökosystem und der Einsatz von Cargo in der Rust-Community sprechen dafür, dass TOML für diesen Problemraum eine passende Wahl ist
- Die TOML-Spezifikation ist kurz genug, dass ein kompetenter Programmierer an einem Wochenende einen kompatiblen Parser schreiben kann, was zu einem großen, gut getesteten und konsistenten Parser-Ökosystem geführt hat
- TOML kennt keine Entsprechung zur Versionsspaltung zwischen YAML 1.1 und 1.2; TOML 1.0 ist überall einfach TOML 1.0
Wo TOML sperrig wird
- Wenn eine Konfigurationsdatei Tiefe ausdrücken muss, ist TOML bei Verschachtelung auf punktgetrennte Abschnittsüberschriften (
[servers.alpha]) oder Tabellen-Arrays ([[products]]) angewiesen, was mit zunehmender Tiefe schwerer lesbar wird - Martin Vejnár von PyTOML lehnte es ab, seine Bibliothek zu einer Abhängigkeit von
pipwerden zu lassen, und begründete das unter anderem mit der Erfahrung, dass die TOML-Syntax bei komplexeren Konfigurationsschemata unschön und schwer lesbar wird - In YAML vermittelt die Einrückung die Hierarchie auf einen Blick, während in TOML in jeder Abschnittsüberschrift der vollständige Pfad wiederholt werden muss
services: web: image: nginx:latest environment: DB_HOST: postgres DB_PORT: 5432 resources: limits: memory: 512M cpu: "0.5"[services.web] image = "nginx:latest" [services.web.environment] DB_HOST = "postgres" DB_PORT = 5432 [services.web.resources.limits] memory = "512M" cpu = "0.5" - Leser von TOML müssen aus einer Folge flacher qualifizierter Namen die Baumstruktur im Kopf rekonstruieren; laut Messungen in der StrictYAML-Dokumentation benötigt eine TOML-Datei für dieselben Daten wegen wiederholter Pfadpräfixe etwa 50% mehr Zeichen
- Python hat schon vor langer Zeit gezeigt, dass Einrückung als Struktur keine Schwäche, sondern eine Stärke ist, weil sie eine Klasse von Bugs beseitigt, bei der visuelle Struktur und grammatische Struktur auseinanderfallen
- YAML erbt diese Vorteile der Einrückungsstruktur, während TOML keine Einrückung verlangt und die Beziehung zwischen Schlüsseln und enthaltenen Tabellen daher nicht in der physischen Anordnung der Datei, sondern nur in den Abschnittsüberschriften steckt
- In tief verschachtelten Konfigurationsdateien ist TOML schwer zu scannen und nur mit Mühe sicher zu bearbeiten
Änderungen in YAML 1.2
- Die YAML-1.2-Spezifikation wurde 2009 veröffentlicht, die klärende Überarbeitung 1.2.2 im Oktober 2021 abgeschlossen
- Im YAML 1.2 Core Schema werden nur
true,falsesowieTrue,False,TRUE,FALSEals Boolesche Werte erkannt;yes,no,on,off,y,nsind normale Strings - Die sexagesimalen Zahlenliterale, die das
22:22-Problem verursachten, wurden vollständig entfernt, und Timestamps sind kein Kerntyp mehr; im Core Schema ist ein unquotiertes2026-05-05daher kein automatisch erkanntes Datum, sondern ein String - JSON ist zu einer strikten und korrekten Teilmenge von YAML 1.2 geworden; jedes gültige JSON-Dokument wird als YAML identisch geparst
- Die Regeln zur Tag-Interpretation sind strenger und klarer, und auch die Spezifikation selbst ist verständlicher formuliert und wird öffentlich auf GitHub gepflegt
- Das YAML, das viele Menschen kritisiert haben, ist YAML 1.1; die Spezifikation, die heute die Sprache prägt, ist das sicherere und besser vorhersagbare YAML 1.2
- Das Problem ist, dass die YAML-Erfahrung der Nutzer nicht durch die Spezifikation, sondern durch Parser vermittelt wird, und für die meisten Python-Nutzer ist dieser Parser PyYAML, das YAML 1.1 implementiert und seine Kernsemantik seit 2006 nicht grundlegend verändert hat
Die Landschaft der Python-YAML-Parser
- PyYAML ist die de-facto-Standardbibliothek für YAML in Python, kapselt für Performance die C-Bibliothek LibYAML und bietet zusätzlich einen reinen Python-Fallback
- PyYAML wird jede Woche millionenfach heruntergeladen und ist Abhängigkeit zahlloser Pakete, implementiert aber YAML 1.1 und ist damit die Wurzel vieler Erfahrungen im Python-Ökosystem nach dem Muster „YAML hat Ländercodes als Boolesche Werte geparst“
- Im PyYAML-Repository gibt es über 200 offene Issues und mehr als 100 offene Pull Requests; das Projekt wird zwar gepflegt, bewegt sich aber langsam, und ein Major-Release-Wechsel zur Semantik von YAML 1.2 ist bislang nicht Realität geworden
- ruamel.yaml unterstützt YAML 1.2 und bietet Round-Trip-Bearbeitung mit Erhalt von Kommentaren, Flow-Style und Schlüsselreihenfolge; für kommentartreue oder formatbewusste Bearbeitung ist es viel mächtiger als PyYAML
- ruamel.yaml ist jedoch im Standard-Round-Trip-Modus vorwiegend in reinem Python implementiert und daher deutlich langsamer als der C-basierte Fast Path von PyYAML; hinzu kommt eine Packaging-Historie mit Namespace-Paket-Problemen und Abhängigkeitsketten, die Deployment-Pipelines verwirrten
- StrictYAML implementiert eine absichtliche Teilmenge von YAML und entfernt sämtliche implizite Typinferenz, Tags, Anker und Flow-Style
- StrictYAML steht philosophisch eher TOML als vollständigem YAML nahe: ein sicheres, einfaches Format mit YAML-Einrückungssyntax, aber Python-exklusiv, ohne Implementierungen in anderen Sprachen und ohne Anspruch auf Spezifikationskonformität
- In dieser Landschaft fehlte bislang eine Bibliothek, die schnell ist, vollständige YAML-1.2-Konformität bietet und sich leicht als Ersatz für die Standardoberfläche von PyYAML einsetzen lässt
Vorstellung von py-yaml12
- py-yaml12 ist ein YAML-1.2-Parser und -Formatter für Python, implementiert in Rust für Geschwindigkeit und Korrektheit
- py-yaml12 baut auf der Rust-YAML-Bibliothek
saphyrauf und bietet eine kleine, fokussierte API mitparse_yaml(),read_yaml()zum Laden sowieformat_yaml()undwrite_yaml()zur Serialisierung -
Einfachheit
- Für die meisten Anwendungsfälle ist es so ausgelegt, durchgängig nur mit grundlegenden Python-Builtins wie
dict,list,int,float,strundNonezu arbeiten - Im allgemeinen Pfad gibt es keine speziellen Dokumentklassen oder benutzerdefinierten Knotentypen, und da YAML 1.2 eine Obermenge von JSON ist, wird jedes gültige JSON identisch geparst
- py-yaml12 erreicht 100% Konformität mit der von der Community gepflegten Sammlung aus Edge-Case- und Konformitätstests
yaml-test-suite - Das
noin einerregions-Liste wird unter dem YAML-1.1-Verhalten von PyYAML stillschweigend zuFalse, bleibt unter dem YAML-1.2-Verhalten von py-yaml12 aber wie von der Spezifikation verlangt der String"no" - Auch die Datei-APIs sind direkt: Schreibt man ein Python-Dictionary auf die Platte und liest es wieder ein, erhält man dasselbe Objekt in einem verlustfreien Round-Trip
- Für fortgeschrittene YAML-Funktionen wie getaggte Werte gibt es einen Wrapper-Typ
Yaml, der bei gewöhnlichen Konfigurationsaufgaben aber optional bleibt
- Für die meisten Anwendungsfälle ist es so ausgelegt, durchgängig nur mit grundlegenden Python-Builtins wie
-
Sicherheit
- Die Standardwerte von py-yaml12 zielen nicht nur auf Bequemlichkeit, sondern auch auf Sicherheit; PyYAML verfolgt hier den gegenteiligen Ansatz, indem Tags wie Befehle behandelt werden, sodass schon das Lesen einer YAML-Datei beliebigen Python-Code ausführen kann
- Wird eine YAML-Datei, die den Python-object-apply-Tag-Namensraum von PyYAML per Alias anspricht, mit
yaml.load(f, Loader=yaml.Loader)eingelesen, wird Python-Code ausgeführt, noch bevor ein normales Dictionary zurückgegeben wird - Im Beispiel sieht das Parsing-Ergebnis wie
{'debug': False, 'retries': 3}aus, aber zuvor wurde bereits die UmgebungsvariableYAML_PAYLOAD_RANauf'1'gesetzt, sodass man die Ausführung am Ergebnis allein nicht erkennt - py-yaml12 führt Tags, die nicht explizit gewählt wurden, nicht aus, sondern behandelt sie als Daten; nicht verarbeitete Tags werden als
Yaml-Wrapper mit Wert und Tag zurückgegeben
-
Geschwindigkeit
- Die Benchmarks von py-yaml12 vergleichen Lese- und Schreibperformance bei Dateigrößen von Kilobyte bis Megabyte mit dem reinen Python-Standardpfad von PyYAML, mit den LibYAML-basierten
CSafeLoaderundCSafeDumpersowie mit ruamel.yaml - Da die zentrale Parsing- und Formatting-Logik in kompiliertem Rust statt in interpretiertem Python implementiert ist, liefert py-yaml12 bei voller YAML-1.2-Konformität eine Performance, die mit der C-Erweiterung von PyYAML konkurrieren kann
- Unter den aktuellen Python-Bibliotheken gibt es nur wenige Optionen, die vollständige YAML-1.2-Konformität und Performance auf dem Niveau der PyYAML-C-Erweiterung zugleich bieten
- Die Benchmarks von py-yaml12 vergleichen Lese- und Schreibperformance bei Dateigrößen von Kilobyte bis Megabyte mit dem reinen Python-Standardpfad von PyYAML, mit den LibYAML-basierten
Fazit
- Die übliche Debatte YAML gegen TOML ist eher eine Debatte gegen eine problematische Form eines Formats, die so nicht mehr existiert; die Kritik war real, aber historisch geprägt
- Kritik an YAML zielt oft auf YAML 1.1, wie es über PyYAML erlebt wurde, nicht auf die Spezifikation und ein korrekt implementiertes YAML 1.2
- TOML bleibt eine gute Wahl für flache, überschaubare Konfigurationen, und
pyproject.tomlpasst gut in diese Rolle, aber die Behauptung, YAML sei grundsätzlich unsicher oder unvorhersehbar, hält gegenüber einem kompatiblen YAML-1.2-Parser nicht stand - Die wichtige Frage ist nicht abstrakt, welches Format das beste ist, sondern welches Format mit welchen Werkzeugen für eine konkrete Aufgabe gut passt
- Für komplexe, tief verschachtelte, von Menschen geschriebene Konfigurationsdateien ist YAML 1.2 mit modernem Parser eine starke Antwort, und Formate verbessern sich, indem jede Generation die rauen Kanten der vorherigen ausbessert
- Unter Python lässt sich mit
pip install py-yaml12eine moderne, spezifikationskonforme YAML-Erfahrung ausprobieren - In R bietet r-yaml12 dieselben Vorteile: vollständige YAML-1.2-Konformität, Rust-basierte Performance und sichere Standardwerte wie beim Python-Paket
1 Kommentare
Lobste.rs-Kommentare
Die Erklärung, YAML sei entstanden, um Lücken von JSON zu schließen, wirkt seltsam. Soweit ich mich erinnere, kam YAML aus der Perl-Community und ist möglicherweise ähnlich alt oder sogar älter als JSON.
Bei einem Blick in die tatsächliche Geschichte fand ich einen interessanten Beitrag von Ingy dot Net, einem der YAML-Schöpfer, der den Ursprung auf den Zeitraum zwischen November 1999 und Januar 2001 datiert.
Und laut diesem Artikel zur Geschichte von JSON tauchte eine primitive JSON-Form erstmals im April 2001 auf, als Nachrichten vom Server zum Client über versteckte iframes und
<script>-Tags geschickt wurden; zu einem eigenständigen Format wurde es erst 2002, als Douglas Crockford json.org veröffentlichte.Daher war YAML entweder etwas früher dran als JSON oder entwickelte sich, großzügig betrachtet, ungefähr zeitgleich. Es ist nicht korrekt zu sagen, YAML sei als Reaktion auf JSON oder zur Schließung von JSON-Lücken entstanden; YAML war in Wirklichkeit eine Reaktion auf XML. Auch JSON begann aus dem praktischen Grund, Daten direkt in
<script>-Tags einzubetten, aber dass es als einfachere Alternative zu XML populär wurde, lässt sich schwer bestreiten.Auch der Text selbst zeigt Spuren, als wäre er von einem LLM geschrieben, und das vorgestellte Projekt wirkt ebenfalls irgendwie vibe-coded.
Die einzelnen Sätze klingen plausibel, aber insgesamt bleibt es verwirrend. Auch dass TOML als Sprache mit Spezifikation verteidigt wird, während YAML dafür kritisiert wird, eine komplexe Spezifikation zu haben, wirkt etwas seltsam. Da fragt man sich fast, ob YAML ursprünglich gar keine Spezifikation hatte und TOML schon.
JSON ist faktisch eher ECMAScript-artiges Data-E. Auf der archivierten Data-E-Seite sieht man, dass auch sie auf XML reagierten.
Mit Inline-Tabellen sieht das „schlechte“ TOML-Beispiel so aus:
Das sieht völlig in Ordnung aus, und wenn es ums Zeichen-Zählen geht, wirkt es sogar kürzer als das YAML-Beispiel.
Wenn das Ziel des Artikels die Verteidigung von YAML ist, liegt es vielleicht außerhalb des Rahmens, aber TOML 1.1 und die neuen Inline-Tabellen hätten ruhig ebenfalls behandelt werden können. Sie lösen drei Dinge, die ich an JSON nicht mochte: unquotierte Schlüsselnamen, Kommentar-Strings und abschließende Kommata.
Python 3.15 unterstützt TOML 1.1, und die Übernahme von TOML 1.1 scheint deutlich besser zu laufen als die von YAML 1.2. Einen TOML-1.0-Parser auf 1.1 zu aktualisieren, dürfte fast trivial sein, aber ein Upgrade von YAML 1.1 auf 1.2 vermutlich nicht. Auf yaml.org finde ich nicht einmal leicht eine Änderungsliste, nur zwei riesige Spezifikationen.
Dinge wie das „Norway Problem“ sind für mich eher eine kleine Fußnote unter den Gründen, warum ich YAML nicht mag; in Wirklichkeit mag ich es nicht, weil es schwer zu bearbeiten ist, bedeutungstragenden Whitespace verwendet und insgesamt ziemlich komplex ist.
Ich denke, YAML, JSON und TOML haben jeweils ihren eigenen Bereich. Die Lücke, die ich lange als unbesetzt empfand, wird von https://kdl.dev/ gefüllt.
JSON = Datenaustausch mit beliebig tiefer Verschachtelung
YAML = flaches Containerformat für mehrzeilige Strings
TOML = fast flache Konfigurationsdateien
KDL = Ruby-artige DSL als Daten dargestellt
Ich mag YAML wegen Dingen wie dem Norway problem nicht. YAML 1.2 hat das etwas reduziert, aber wegen unquotierter Strings sind Zeichenketten wie
"","Null","true","FALSE"immer noch problematisch, und man braucht einen Encoder, der YAML versteht. Die allgemeine Komplexität mag ich auch nicht, aber der eigentliche Grund, warum ich YAML hasse, ist dieser:Auch PEP-8 empfiehlt nachdrücklich, keine Tabs für Einrückung zu verwenden
Die Logik „Nicht YAML ist schlecht, sondern YAML 1.1 war schlecht, und die meisten Parser sind nun einmal 1.1-Parser“ greift meiner Meinung nach nicht so gut, wie der Artikel es gern hätte
YAML, das diszipliniert eingesetzt wird, mag ich, und ich freue mich auch über neue High-Performance-Parser für YAML 1.2, aber wenn die „schlechte“ Version immer noch mehrheitlich verwendet wird, würde ich wohl etwas anderes nehmen. Wenn ich nicht kontrollieren kann, welcher Parser verwendet wird, und deshalb nicht darauf vertrauen kann, dass mein YAML korrekt interpretiert wird, dann ist YAML insgesamt immer noch in einem „schlechten“ Zustand
Alle sollten auf 1.2 umsteigen, aber bis dahin finde ich es okay, YAML mit Vorsicht zu behandeln
Bei dem Satz „Die YAML-vs.-TOML-Debatte ist meist eine Debatte, die ein Format angreift, das in seiner problematischen Form praktisch nicht mehr existiert; die Beschwerden sind real, aber historisch“ möchte ich angesichts von GitHub Actions und Kubernetes laut aufschreien
Die Verteidigung ist stark. Trotzdem ist TOML bei sehr einfachen Dokumenten lesbarer, und es ist leichter, Leute dazu zu bringen, TOML statt YAML zu verwenden
Leider gibt es bei der öffentlichen Entwicklerwahrnehmung von Tools eine lange Trägheit. Die Leute lesen irgendeine Geschichte, entscheiden sich dann, und wechseln zu einem anderen Tool, das sich öffentlich nichts zuschulden kommen ließ
Ich wünschte, der im Ruby-Interpreter enthaltene YAML-Parser würde YAML 1.2.2 unterstützen
Aber ich weiß nicht recht, wie man die neuere Version als Standard einführt, ohne das Ökosystem kaputtzumachen
Es wäre schön, wenn Konfigurationsdateiformate standardisierte Schemata angeben könnten. Dann könnte ein Editor eine beliebige Konfigurationsdatei ansehen und auf vertippte Schlüssel oder Typinkompatibilitäten hinweisen
Außerdem sollte dokumentiert werden können, wofür Schlüssel gedacht sind, etwa über Hover-Hinweise, und gültige Schlüssel sollten sich leicht per Autovervollständigung anbieten lassen. Noch besser wäre Unterstützung für einfache Assertions oder Verträge, um ungültige Werte abzufangen. Zum Beispiel sollte ein Schlüssel
"color"auf/#[a-fA-F0-9]{6}/passenIm Idealfall sollte man damit auch automatisch Datenstrukturen für Konfigurationsdateien erzeugen können
Es gibt mehrere Formate für Validierungsspezifikationen wie
XSDoderRelax NG, und ich bin mit XML-DTD am vertrautesten, deshalb kann ich zu den anderen nicht viel sagen$schema-Eigenschaft als Top-Level-Key zu setzen und damit auf eine JSON-Schema-Datei zu verweisen, die das richtige Schema definiert. Im Wesentlichen ist das XSD für JSON. Gute Editoren können darauf basierend meist Autovervollständigung und rote Wellenlinien anbietenDas Gute ist, dass TOML und YAML im Wesentlichen nur JSON mit anderer Syntax sind, sodass man in der Regel auch JSON-Schema-Dateien zusammen damit verwenden kann