Wat is het YAML-bestandsformaat?
.yaml is een tekstbestandsformaat dat wordt gebruikt voor het uitwisselen van gegevens tussen verschillende applicaties. YAML - kort voor *YAML Ain't Markup Language* - is een standaard voor het organiseren van informatie in een menselijk leesbaar, platformonafhankelijk formaat met behulp van op inspringing gebaseerde key: value paren gecodeerd in UTF-8. Het parsen van .yaml bestanden vereist dat er een YAML-bibliotheek is geïnstalleerd; populaire bibliotheken zijn onder meer PyYAML (Python), js-yaml (JavaScript) en SnakeYAML (Java). .yaml bestanden worden soms opgeslagen met de .yml extensie, die functioneel identiek is. Naast gegevensuitwisseling worden .yaml bestanden doorgaans gebruikt voor het serialiseren van gegevens en voor het schrijven van configuratiebestanden in tools zoals Docker Compose, Kubernetes en GitHub Actions.
Serialisatie
Serialisatie is een term die wordt gebruikt in de informatica. Serialisatie is een proces waarbij gegevens of objecten worden vertaald naar een formaat dat kan worden opgeslagen, verzonden en later weer kan worden gereconstrueerd. Bijvoorbeeld, twee instellingen die gegevens uitwisselen in een gestandaardiseerd formaat met verschillende applicaties, moeten die gegevens serialiseren voordat ze worden verzonden. Geserialiseerde gegevens kunnen ook worden opgeslagen in een bestand - .yaml, .xml, .json, .toml, enz. - en vervolgens naar de ontvangers worden verzonden.
Een .yaml document kan optioneel beginnen met de --- document-startmarkering en eindigen met ...; dit maakt ook meerdere documenten binnen één bestand mogelijk. Sinds YAML 1.2 (2009, herzien in 2021) is elk geldig JSON-bestand ook geldig YAML.
Beveiliging & veiligheid
RISICO: MEDIUMEen YAML-bestand is platte tekst en voert zichzelf niet uit, dus het lezen ervan is veilig. Twee reële risico's: (1) configuratie-YAML (CI-pipelines, Compose, K8s, Ansible) bevat vaak geheimen - tokens, wachtwoorden, sleutels - dus plak deze niet in onbetrouwbare online validators en commit ze niet openbaar. (2) Programmatisch gevaar: het laden van onbetrouwbare YAML met een onveilige parser (bijv. PyYAML's yaml.load in plaats van yaml.safe_load) kan willekeurige objecten/code uitvoeren - gebruik altijd de veilige lader voor bestanden die u niet vertrouwt. Bewerkingsrisico: een tab of een verkeerd uitgelijnde spatie verandert stilletjes de betekenis, dus valideer na het bewerken.
Formaatdetails
in een notendopProgramma's die YAML-bestanden openen
Technische details
diepe specificaties| Bestandsextensie | .yaml (ook .yml) |
| MIME-type | application/yaml |
| Codering | UTF-8 platte tekst; geen binaire header of magic bytes |
| Structuur | Op inspringing gebaseerde key: value paren; inspringing gebruikt alleen spaties - tabs zijn verboden door de specificatie |
| Documentmarkeringen | --- markeert het begin van het document, ... markeert het einde; meerdere documenten kunnen in één bestand naast elkaar bestaan |
| Native datatypes | Strings, integers, floats, booleans, null, sequences (lijsten), mappings (dictionaries), timestamps |
| Specificatieversie | YAML 1.2 (2009, herzien in 2021); vervangt YAML 1.1 (2005) en YAML 1.0 (2001) |
| JSON-compatibiliteit | Sinds YAML 1.2 is elk geldig JSON-document ook geldig YAML - JSON is een strikte subset |
| Commentaren | Enkelregelige commentaren beginnend met # ; kunnen op een eigen regel staan of inline na een waarde |
| Multiline strings | Literal block scalar (|) behoudt regeleinden; folded scalar (>) converteert regeleinden naar spaties |
| Anchors en aliases | & definieert een benoemd anker en * verwijst (alias) ernaar, wat hergebruik van waarden zonder duplicatie mogelijk maakt |
| Ontwikkelaars | Clark Evans, Ingy döt Net, Oren Ben-Kiki |
| Veelvoorkomende toepassingen | Configuratiebestanden (Kubernetes, Docker Compose, GitHub Actions, Ansible), dataserialisatie, OpenAPI-definities |
| Aanhalingstekens | Ongequoteerde, enkel gequoteerde ('...') en dubbel gequoteerde ("...") strings worden allemaal ondersteund; dubbel gequoteerd staat escape-reeksen toe |
| Uitgebracht | 2001 (YAML 1.0); YAML 1.1 (2005); current YAML 1.2 (2009, revised 2021) |
| Open standaard | Ja · royaltyvrij |
| Specificatie | yaml.org |