Ga naar hoofdinhoud

Wat is YAML? De basis, syntaxis en use cases uitgelegd

YAML is een eenvoudig maar krachtig formaat voor configuraties, automatisering en gegevensserialisatie. Leer hoe het werkt met voorbeelden uit de praktijk!
Bijgewerkt 31 aug 2026  · 14 min lezen

Verkennen met AI

ChatGPTClaudePerplexity

Door de jaren heen heb ik met talloze configuratiebestanden gewerkt, en YAML springt eruit door zijn eenvoud en leesbaarheid. Of je nu workflows in Kubernetes opzet, services in Docker definieert of API-verzoeken structureert, YAML maakt complexe configuraties beter beheersbaar. De strakke, op inspringing gebaseerde structuur haalt de ruis weg van formats zoals XML, terwijl het toch flexibel blijft.

In deze gids neem ik je mee door de syntaxis, structuur, geavanceerde functies en best practices van YAML, zodat je er vol vertrouwen mee kunt werken. 

Wat is YAML?

YAML (Yet Another Markup Language / YAML Ain’t Markup Language) is een gegevensserialisatieformaat dat leesbaarheid en gebruiksgemak vooropstelt. Terwijl XML werkt met een mix van HTML-achtige geneste tags en JSON met accolades en aanhalingstekens (zoals Python-dictionaries), is YAML compacter en gebruikt het inspringing om structuur te definiëren, wat het mensvriendelijker maakt.

YAML ondersteunt verschillende gegevenstypen, waaronder scalars (strings, getallen, booleans), sequences (lijsten) en mappings (sleutel-waardeparen). Het wordt veel gebruikt in configuratiebestanden, infrastructuurautomatisering en gegevensuitwisseling, vooral in tools als Kubernetes, Docker en Ansible.

Daarnaast is YAML een superset van JSON, wat betekent dat geldige JSON-bestanden als YAML geparsed kunnen worden. YAML-bestanden hebben doorgaans de extensie .yaml of .yml.

Je kunt meer over YAML leren op de website!

YAML-syntaxis en -structuur

In dit onderdeel behandelen we de basisprincipes van de YAML-syntaxis, waaronder sleutel-waardeparen, lijsten, geneste data en commentaar.

Basisregels voor de syntaxis

Er zijn een paar basisregels voor YAML: 

  • Spatie-inspringing geeft structuur aan, vermijd dus tabs! 
  • Sleutel-waardeparen volgen de structuur key: value, vergelijkbaar met andere talen. 
  • Een streepje aan het begin van regels geeft een lijst aan. 
  • Met # maak je commentaarregels.
# Here is an example of YAML
name: John Doe
age: 30
skills:
  - Python
  - YAML

Sleutel-waardeparen

YAML stelt data voor als sleutel-waardeparen, vergelijkbaar met dictionaries in Python. Dit geeft vaak informatie door aan verschillende configuratiebestanden en instellingen. Je hoeft strings of sleutels niet te omgeven met aanhalingstekens; schrijf simpelweg de benodigde sleutel en waarde:

location: New York
country: USA
security-level: user

Lijsten in YAML

Lijsten worden weergegeven met streepjes (-). Hiermee kun je meerdere objecten onder één sleutel groeperen. Dit wordt visueel vaak als opsommingstekens getoond door markup-editors.

fruits:
  - Apple
  - Banana
  - Cherry

Geneste data

Met geneste structuren kun je hiërarchische data weergeven via inspringing. Zie het als geneste dictionaries. Door in te springen geef je aan welke sleutels subsets van andere sleutels zijn.

person:
  name: Alice
  details:
    age: 25
    city: London

Commentaar

Commentaar begint met # en wordt genegeerd door YAML-parsers. Dit zijn enkelregelige opmerkingen.

# This is a comment
username: admin
password: secret

Geavanceerde YAML-functies

YAML bevat krachtige functies zoals meerregelige strings, gegevenstypen en anchors, die documenten efficiënter en gestructureerder maken. In dit onderdeel verkennen we deze mogelijkheden met praktische voorbeelden.

Meerregelige strings

YAML ondersteunt meerregelige strings met | (letterlijk blok) of > (gevouwen blok). 

  • Het letterlijke blok | maakt een nieuwe regel \n bij elke regeleinde. 
  • Het gevouwen blok > maakt alleen een nieuwe regel bij opeenvolgende regeleinden.
literal: |
  This is a
  multi-line string.

folded: >
  This is another
  multi-line string.

Het bovenstaande wordt duidelijker met de output erbij.

  • Voor het | (letterlijk blok):
This is a
multi-line string.
  • Voor het > (gevouwen blok):
This is another multi-line string.

Gegevenstypen in YAML

YAML ondersteunt verschillende gegevenstypen, waaronder strings, getallen, booleans en null-waarden. Het detecteert typen automatisch op basis van de opmaak, maar staat ook expliciete typedefinities toe.

Het volgende voorbeeld toont het gebruik van basisgegevenstypen in YAML:

string_implicit: Hello, YAML!  # No quotes needed unless necessary
string_double_quoted: "Supports escape sequences like \n and \t"
string_single_quoted: 'Raw text, no escape sequences'

integer: 42  # Whole numbers
float: 3.14  # Numbers with decimals

boolean_true: true
boolean_false: false

null_value: null  # Null value
null_tilde: ~  # Another way to represent null

YAML staat expliciete typedefinities toe met !!type wanneer dat nodig is:

explicit_string: !!str 123  # Forces 123 to be a string
explicit_integer: !!int "42"  # Forces "42" to be an integer
explicit_float: !!float "3.14"  # Forces "3.14" to be a float

Omdat YAML vaak voor gestructureerde data wordt gebruikt, ondersteunt het:

  • Lijsten (sequences):
fruits:
  - Apple
  - Banana
  - Cherry
  • Woordenboeken (mappings):
person:
  name: Alice
  age: 30
  is_student: false

Anchors en aliassen

YAML laat je herbruikbare waarden definiëren met anchors (&) en deze later refereren met aliassen (*). Dit helpt redundantie in configuratiebestanden verminderen, waardoor ze overzichtelijker en makkelijker te onderhouden zijn.

defaults: &default_settings
  retries: 3
  timeout: 30

server1:
  host: example.com
  retries: *default_settings  # Reuses the retries value from defaults

De syntaxis <<: maakt het mogelijk om sleutel-waardeparen van een anchor te mergen in een andere mapping. Als een sleutel in beide voorkomt, overschrijft de nieuwe waarde de oorspronkelijke.

defaults: &default_settings
  retries: 3
  timeout: 30

server1:
  <<: *default_settings  # Merges all key-value pairs from default_settings
  host: example.com  # This key is added to the merged data

Dit is de uiteindelijke, opgeloste structuur:

server1:
  retries: 3
  timeout: 30
  host: example.com

Anchors en aliassen zijn vooral nuttig in grote configuratiebestanden waar waarden herhalen inefficiënt zou zijn. Ze helpen YAML-bestanden DRY te houden (Don’t Repeat Yourself) en maken updates eenvoudiger.

Veelvoorkomende use cases voor YAML

YAML wordt veel gebruikt in softwareontwikkeling, infrastructuurautomatisering en API-beheer. Door de mensvriendelijke syntaxis is het een voorkeursformaat voor configuratiebestanden, gegevensserialisatie en Infrastructure as Code (IaC). Laten we de meest gebruikelijke toepassingen verkennen.

Configuratiebestanden

YAML wordt veel gebruikt voor configuratie in applicaties zoals Docker Compose, Kubernetes en CI/CD-pijplijnen. Door de begrijpelijkheid kan iedereen eenvoudig Docker-YAML-setupbestanden oppakken en snappen wat er gebeurt.

version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
    environment:
      - NGINX_HOST=localhost
      - NGINX_PORT=80

De leesbaarheid van YAML en de ondersteuning voor anchors en aliassen helpen herhaling te verminderen, waardoor het onderhoudsvriendelijker is dan JSON of XML.

Leer meer over YAML en het gebruik in Docker in deze intermediate Docker-cursus.

Serialisatie en overdracht van data

YAML wordt gebruikt om data te serialiseren voor API’s en configuratiebeheertools, door complexe datastructuren om te zetten naar een mensleesbaar formaat dat ook eenvoudig door machines te parsen is. 

Bijvoorbeeld, een API-request body geformatteerd in YAML:

user:
  id: 123
  name: "John Doe"
  email: "johndoe@example.com"
  active: true

De op inspringing gebaseerde structuur van YAML haalt overbodige syntaxis weg, waardoor het lichter, leesbaarder en makkelijker te wijzigen is dan JSON.

Infrastructure as Code (IaC)

Configuratiebeheertools zoals Ansible en Kubernetes gebruiken YAML om systeemtoestanden te definiëren, processen te automatiseren en consistentie over omgevingen te waarborgen.

  • In Ansible wordt YAML gebruikt voor het schrijven van playbooks die systeemtoestanden, taken en afhankelijkheden definiëren, zodat infrastructuurcomponenten consistent geconfigureerd zijn. 
  • Kubernetes gebruikt YAML-manifests om resources zoals pods, services en deployments te definiëren, waardoor geautomatiseerde orkestratie van containerized applicaties mogelijk is.

Hier is een voorbeeld van een Kubernetes Pod-configuratie:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: app-container
      image: my-app:latest
      ports:
        - containerPort: 8080

Leer meer over hoe YAML wordt gebruikt in Kubernetes in deze Introduction to Kubernetes-cursus.

API-documentatie

API-specificaties zoals OpenAPI en Swagger gebruiken YAML om endpoints en datastructuren op een leesbare manier te definiëren. YAML wordt gebruikt om API-methoden, requestparameters, responseformaten en authenticatiemethoden te beschrijven.

Hier is een voorbeeld van een OpenAPI-specificatie in YAML:

openapi: 3.0.0
info:
  title: User API
  version: "1.0"
paths:
  /users:
    get:
      summary: Retrieve a list of users
      responses:
        "200":
          description: Successful response

OpenAPI-specificaties gebruiken bijvoorbeeld YAML om RESTful API’s te documenteren. Zo bieden ze een duidelijke blauwdruk voor het genereren van client-SDK’s, interactieve API-documentatie en geautomatiseerd testen. Dit gestructureerde formaat waarborgt consistentie tussen API-implementaties.

Werken met YAML-bestanden

YAML wordt veel gebruikt voor configuratiebestanden, automatisering en gegevensserialisatie, maar omdat het op inspringing vertrouwt, is correcte opmaak cruciaal. Zo lees, schrijf, valideer en bewerk je YAML effectief.

YAML lezen en schrijven in Python

De Python-bibliotheek PyYAML kan YAML parsen en genereren.

Stel, je hebt het volgende configuratie-YAML-bestand:

database:
  host: localhost
  port: 5432
  user: admin
  password: secret

Zo kun je in Python met je configuratiebestand werken:

import yaml

# Load YAML data
with open("config.yaml", "r") as file:
    data = yaml.safe_load(file)  # safe_load prevents arbitrary code execution

# Modify data (optional)
data["database"]["user"] = "new_user"

# Write YAML data
with open("output.yaml", "w") as file:
    yaml.dump(data, file, default_flow_style=False)

Als je geïnteresseerd bent in werken met JSON-data in Python, bekijk dan de comprehensieve Python JSON-tutorial.

YAML-bestanden valideren

Om de juiste structuur te waarborgen, kun je tools gebruiken om tabs in plaats van spaties op te sporen of gekke issues zoals herhaalde tekens, syntaxisproblemen en spaties aan het einde van regels.

Dit zijn enkele populaire YAML-validators:

YAML bewerken

Je kunt YAML in elke teksteditor schrijven en bewerken, maar lintingtools en syntaxiskleuring verbeteren de leesbaarheid.

Een paar van mijn favoriete editors:

  • VS Code (met YAML-plugins)
  • PyCharm (ingebouwde ondersteuning)
  • Sublime Text (met YAML-syntaxiskleuring)

Veelgemaakte fouten om te vermijden in YAML

Ondanks de eenvoud kun je bij YAML nog steeds makkelijk problemen en typfouten krijgen. In dit onderdeel bespreken we deze fouten en geven we best practices voor het schrijven van schone en correcte bestanden. Dit is ook waarom ik een linter of teksteditor aanbeveel!

Tabs en spaties door elkaar gebruiken

YAML vertrouwt op spaties voor inspringing—gebruik nooit spaties en tabs door elkaar. Tabs breken je YAML-script simpelweg. Dit is een bewuste keuze, omdat verschillende systemen tabs anders lezen, en daarom zijn spaties de voorkeursoptie om de impact te minimaliseren.

Onjuiste inspringing

Zorg voor consistente inspringing om parsefouten te voorkomen. Omdat inspringing de enige manier van YAML is om hiërarchie aan te duiden, kan onjuiste parsing problemen met je code veroorzaken. Je kunt een key: value-paar makkelijk op de verkeerde plek laten belanden, dus let goed op de inspringing!

Aanhalingstekens vergeten bij speciale tekens

Gebruik aanhalingstekens voor strings met speciale tekens of spaties. Dingen als backslashes, komma’s, uitroeptekens, enzovoort hebben aanhalingstekens nodig om als strings te worden gelezen.

path: "/home/user/documents"
message: "Hello, World!"

Met de juiste validatie, gestructureerd bewerken en Python’s PyYAML kun je efficiënt werken met YAML-bestanden en veelvoorkomende valkuilen vermijden.

Conclusie

YAML is een krachtig maar eenvoudig formaat dat veel wordt gebruikt voor configuratie, gegevensserialisatie en infrastructuurautomatisering. Door de syntaxis, structuur en best practices te begrijpen, kun je efficiënt met YAML werken in diverse toepassingen.

Wil je YAML in praktijkscenario’s toepassen?

FAQs

Is YAML universeel?

Zolang de gegevensbron of het doel YAML kan lezen, is het een haalbare en nuttige manier om data te serialiseren en te transporteren. Zorg ervoor dat je data verstuurt naar een doel dat YAML kan verwerken.

Is YAML veilig? Kunnen YAML-bestanden beveiligingsrisico’s introduceren?

YAML zelf is slechts een dataformaat, maar beveiligingsrisico’s ontstaan bij het parsen van onbetrouwbare YAML-bestanden. De standaardmethode yaml.load() in Python’s PyYAML kan willekeurige code uitvoeren die in YAML is ingebed, wat riskant is. Gebruik in plaats daarvan altijd yaml.safe_load() om onbedoelde uitvoering van kwaadaardige code te voorkomen. Zorg er bij het gebruik van YAML in applicaties ook voor dat je strikte schemavalidatie toepast om kwetsbaarheden te vermijden.

Kan YAML omgevingsvariabelen ondersteunen?

Ja! Hoewel YAML zelf geen omgevingsvariabelen verwerkt, staan veel tools (zoals Docker Compose en Kubernetes) toe dat je binnen YAML-bestanden naar omgevingsvariabelen verwijst.

Hoe ga je om met commentaar in YAML?

YAML ondersteunt enkelregelige opmerkingen met het #-symbool, maar ondersteunt geen meerregelige opmerkingen. Als je meerregelige opmerkingen nodig hebt, is een veelgebruikte workaround een dummy-sleutel zoals _comment te gebruiken. Dit is echter slechts een conventie en wordt niet genegeerd door YAML-parsers, tenzij je applicatie dit specifiek wegfiltert.


Tim Lu's photo
Author
Tim Lu
LinkedIn

Ik ben een data scientist met ervaring in ruimtelijke analyse, machine learning en datapijplijnen. Ik heb gewerkt met GCP, Hadoop, Hive, Snowflake, Airflow en andere data science- en engineeringprocessen.

Onderwerpen
Data-engineering

Leer meer over data engineering met deze cursussen!

Leerpad

Data-engineer in Python

40 Hr
Leer de vaardigheden die je nodig hebt om data efficiënt te verzamelen, op te schonen en te beheren, en om pijplijnen te plannen en te monitoren, zodat je je kunt onderscheiden op het gebied van data-engineering.
Bekijk detailsRight Arrow
Begin Met De Cursus
Meer zienRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer ZienMeer Zien