Lompat ke isi

YAML

Ensiklopedia Pengetahuan Universitas Islam Sultan Agung

YAML adalah format serialisasi data terbaca-manusia yang mengambil konsep dari bahasa-bahasa seperti XML, C, Python, Perl, serta format surat elektronik seperti yang tercantum dalam RFC 2822. YAML pertama kali diusulkan oleh Clark Evans pada tahun 2001 [1] yang merancang format ini bersama dengan Ingy döt Net dan Oren Ben-Kiki. YAML tersedia bagi beberapa bahasa dan skrip pemrograman.

Sejarah

YAML dikembangkan oleh Clark Evans, Oren Ben-Kiki, dan Ingy dot Net. Draf pertama YAML resmi dirilis sebagai versi 0.1 pada Mei 2001.[2] YAML mencapai rilis lengkap dalam versi 1.0 pada awal 2004.[3] Sebelum versi 1.0 selesai, YAML telah diimplementasikan lebih dulu seperti dalam Perl pada 2001 dan Ruby pada 2003.[4][5]

YAML aslinya merupakan kepanjangan dari "Yet Another Markup Language", tetapi pada April 2002 kepanjangannya telah berubah menjadi akronim rekursif dari "YAML Ain't Markup Language".[6]

Pada 2024, RFC 9512 menetapkan tipe MIME application/yaml untuk berkas YAML.[7]

Fitur

YAML dirancang untuk mudah dibaca dan ditulis oleh manusia dengan menerapkan penggunaan sensitif terhadap indentasi dan spasi kosong (whitespace). Indentasi YAML harus menggunakan spasi, bukan tab.

Contoh

Berikut ini adalah contoh metadata buku dalam YAML. Data judul dan pengarang merupakan bentuk pasangan kunci-nilai, sementara bahasa merupakan bentuk larik yang dinotasikan dengan daftar berbutir. <syntaxhighlight lang="yaml">judul: 1984 pengarang: "George Orwell" bahasa:

   - Inggris
   - Indonesia</syntaxhighlight>

Struktur data

YAML menetapkan tiga jenis struktur data, yaitu scalar, sequence, dan mapping. Scalar meliputi string, bilangan, stempel waktu, boolean, dan null. Sequence merupakan larik atau daftar yang urut. Mapping merupakan pasangan kunci-nilai yang tidak urut.

Sebuah scalar bisa diapit dengan tanda petik, khususnya ketika nilai mengandung bilangan tetapi diharuskan menjadi tipe string seperti 1984:<syntaxhighlight lang="yaml">"judul": "1984" "pengarang": "George Orwell" "bahasa":

   - "Inggris"
   - "Indonesia"</syntaxhighlight>

Tag

Tag digunakan untuk mengenali tipe data. Sebuah data bisa diberi tag secara jelas (eksplisit) dengan !, sementara data biasa akan diberikan tag secara tersirat oleh implementasi saat diproses. Contoh berikut menggunakan tag eksplisit, !!str pada nilai 1984 untuk mencegah diartikan sebagai bilangan bulat:[8]<syntaxhighlight lang="yaml">judul: !!str 1984 # sama dengan "1984" pengarang: "George Orwell" bahasa:

   - Inggris
   - Indonesia</syntaxhighlight>

Ekspresi blok dan alir

YAML memungkinkan dua gaya ekspresi, yaitu gaya blok (block) yang berbasis indentasi dan gaya alir (flow) yang mirip JSON. Contoh berikut menggunakan --- untuk menandakan dokumen baru:<syntaxhighlight lang="yaml">---

  1. Gaya blok

judul: 1984 pengarang: "George Orwell" bahasa:

   - Inggris
   - Indonesia

---

  1. Gaya alir

judul: 1984 pengarang: "George Orwell" bahasa: [ "Inggris", "Indonesia" ] # atau juga bisa { Inggris, Indonesia }</syntaxhighlight>

Anchor dan alias

Anchor dan alias adalah fitur YAML yang memungkinkan pengguna "menggunakan kembali" data tanpa harus mengulang penulisannya. Anchor ditandai dengan & dan alias ditandai dengan *.[9]<syntaxhighlight lang="yaml">- buku_1:

   judul: 1984
   pengarang: "George Orwell"
   bahasa: &bahasa
     [ "Inggris", "Indonesia" ]
  1. Nilai bahasa di sini sama dengan nilai bahasa pada buku_1

- buku_2:

   judul: "Art of War"
   pengarang: "Sun Tzu"
   bahasa: *bahasa</syntaxhighlight>

Penggunaan

YAML luas digunakan sebagai berkas konfigurasi untuk otomasi DevOps.[10] khususnya Kubernetes untuk konfigurasi berbagai sumber daya yang akan dipakai berbagai kontainer.[11] GitHub Actions dan GitLab CI/CD juga menggunakan YAML untuk konfigurasi alur kerja pembangunan perangkat lunak.[12][13]

TensorFlow sebelumnya mendukung konfigurasi model berbasis YAML hingga 2021.[14]

Keamanan implementasi

Beberapa implementasi kerap menghadapi celah keamanan karena rancangan YAML membolehkan tipe data yang ditentukan sendiri sehingga rentan disalahgunakan untuk eksekusi kode jarak jauh. Pada 2017, para ahli keamanan melaporkan celah pada implementasi Python PyYAML sebelum versi 5.1, CVE-2017-18342, bahwa API yaml.load() dapat dieksploitasi untuk menjalankan kode jarak jauh.[15] Kendati telah ditanggapi, perbaikannya tidak sepenuhnya tuntas karena masih bisa dieksploitasi melalui tag konstruktor PyYAML yang spesifik seperti !!python/object/apply. Celah ini dilaporkan dalam CVE-2019-20477.[16]

Sebuah penelitian dari 2019 menunjukkan bahwa fitur anchor dan alias bisa dieksploitasi sebagai serangan kegagalan layanan (denial-of-service) dengan cara kerja yang mirip bom zip.

Daftar pustaka

Pranala luar

Referensi

  1. Clark Evans. YAML Draft 0.1. Yahoo! Tech groups: sml-dev. 11 Mei 2001.
  2. Ingy döt Net. In The Beginning. The YAML Company. 12 Desember 2020.
  3. Ingy döt Net. YAML Ain't Markup Language (YAML™) 1.0. yaml.org. 29 Januari 2004.
  4. Ingy dot Net. YAML.pm. MetaCPAN.
  5. ChangeLog-1.8.0. Ruby Programming Language Documentation.
  6. Ingy döt Net. YAML Ain't Markup Language (YAML) (tm) 1.0. yaml.org. 7 April 2002.
  7. Tim Perry. 22 years later, YAML now has a media type. HTTP Tollkit. 20 Februari 2024.
  8. Serdar Yegulalp. 7 YAML gotchas to avoid—and how to avoid them. InfoWorld. 17 Agustus 2022.
  9. Optimize GitLab CI/CD configuration files. GitLab Docs.
  10. Thomas Ciaburn. Behold, the world's most popular programming language – and it is...wait, er, YAML?!?. The Register. 19 November 2018.
  11. Scott Fulton. How Kubernetes won, and why your business needs to know it. ZDNET.
  12. Steven Vaughan-Nichols. GitHub Actions moves GitHub into DevOps. ZDNET. 8 Agustus 2019.
  13. Jonathan Freeman. Review: GitLab rocks version control. Computerworld. 30 November 2016.
  14. Ax Sharma. Google's TensorFlow drops YAML support due to code execution flaw. BleepingComputer.
  15. Serdar Yegulalp. 7 YAML gotchas to avoid—and how to avoid them. InfoWorld. 17 Agustus 2022.
  16. 1806005 – (CVE-2019-20477) CVE-2019-20477 PyYAML: command execution through python/object/apply constructor in FullLoader. Red Hat Bugzilla. 21 Februari 2020.

Sumber dan atribusi

Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 28944576 (2026-02-09T05:08:13Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.