YAML ne için kullanılır?

Başka bir metin verisi biçimi YAML'dir ( Yet Another Markup Language ; daha sonra YAML Ain't Markup Language ). Ağ üzerinden iletilmek üzere nesneleri seri hale getirmek için kullanılır (tıpkı XML ve JSON'un bu şekilde kullanılması gibi). İnsanlar tarafından okunabilir olduğu için örneğin Docker, Kubernetes, Ansible vb. uzantılar: .yaml veya .yml.

Dil sözdizimi

XML'de, etiketleri belirtmek için açılı ayraçlar ( <> ) kullanılır. JSON'da süslü parantezler ( {} ) kullanırız. YAML yeni satırlar ve girintiler kullanır.

Veriler, anahtarın bir dize olduğu ve değerin çeşitli veri türleri (dize, sayı, doğru/yanlış, dizi vb.) olabileceği anahtar-değer çiftleri olarak saklanır. Anahtarlar tırnak işaretleri olmadan yazılır.

YAML'de bilgilerin nasıl saklandığına bir göz atalım:

Tip java YAML
tamsayı
int number = 5
5 numara
Kesirli sayı
double number = 4.3
sayı: 4.3
Boole değişkeni
boolean valid = false
geçerli: yanlış
geçerli:
hayır geçerli: kapalı

* Geçerli boole değerleri: doğru/yanlış, evet/hayır, açık/kapalı.

Sicim
String city = "New York"
şehir: New York
şehir: 'New York'
şehir: "New York"

* Her üç seçenek de eşdeğerdir.

Özel karakterler içeren dize
String line = "aaa\nbbb"
satır: "aaa\nbbb"
Kodda yorum yapın
// comment
# Yorum
Nesne
public class Person {
  String name = "Dennis";
  int age = 32;
}

* Nesnenin sınıfı, nesnenin yapısını görebilmeniz için verilmiştir.

kişi:
  isim: "Dennis"
  yaş: 32

* Niteliklerden önceki girintiye dikkat edin. Tüm nitelikler için aynı olmalıdır.

Basit değerlerin listesi
var ages =
    List.of(1, 3, 5, 9, 78, -5);
yaşlar: [1, 3,5,9,78, -5]
yaşlar:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5

* Her iki seçenek de eşdeğerdir.
** Listenin her öğesi kısa çizgi ile işaretlenmiştir.

nesnelerin listesi
class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}List<Person> people = List.of(
        new Person("Ian", 21),
        new Person("Marina", 25),
        new Person("Owen", 73)      );
insanlar:
  - isim: "Ian"
    yaş: 21
  - isim: "Marina"
    yaş: 25
  - isim: "Owen"
    yaş: 73

Java'da olduğu gibi, bir listenin bir öğesi bir liste olabilir, yani nesneler iç içe olabilir. Listenin bir sonraki öğesini gösteren tire, ana anahtara göre yatay olarak kaydırılabilir veya doğrudan onun altına yerleştirilebilir. Önemli olan, tüm öğelerin aynı biçime sahip olmasıdır. Bu, karışıklığı ve belirsiz bir iç içe hiyerarşiyi önlemeye yardımcı olacaktır.

Yaş:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5
Yaş:
- 1
- 3
- 5
- 9
- 78
- -5

Metin değerleriyle çalışırken iki nüans daha vardır:

  1. Çok satırlı metin. Metni şu şekilde kaydedebiliriz:

    multilineText: "satır 1\nsatır 2\n...satır n"

    Ama bunu okumaya çalışmak çok tatsız olurdu. Yani | Metni farklı şekilde yazmak için kullanabileceğiniz (boru) sembolü:

    çok satırlıMetin: |
     satır 1
     satır 2
     ....
     satır n

    İkinci seçeneğin daha uygun olduğunu kabul edeceksiniz, değil mi?

  2. Uzun çizgiler. Metni bir satırda tutmak ve aynı zamanda IDE'nin görünür çalışma alanına sığmasını istiyorsanız > (büyüktür) sembolünü kullanabilirsiniz.

    singlelineText: >
     başla
     ...
     aynı satıra devam et
     ...
     bitir

    Tüm metin tek satır olarak ele alınacaktır.

Birkaç YAML veri yapısını tek bir dosyaya yazmanız gerekiyorsa, bunları --- (üç tire) ile ayırmanız gerekir. Pratikte buna nadiren ihtiyaç duyulur, ancak bu olasılığın farkında olmak en iyisidir.

YAML belgesi örneği

Bir Java veri yapısı (bir sınıf) ve buna karşılık gelen bir nesne oluşturalım ve nesneyi YAML olarak temsil etmeye çalışalım.

class Family {
   private Date weddingDate;
   private Person wife;
   private Person husband;
   private List<Person> children;

   // Getters and setters are omitted
}

class Person {
   private final String name;
   private final boolean isWoman;
   private int age;

   public Person(String name, int age, boolean isWoman) {
       this.name = name;
       this.age = age;
       this.isWoman = isWoman;
   }

// Getters and setters are omitted

}

public static void main(String[] args) {
   Person wife = new Person("Ann", 37, true);
   Person husband = new Person("Alex", 40, false);
   var children = List.of(
           new Person("Iris", 12, true),
           new Person("Olivia", 5, true)
   );
   Date weddingDate = new Date(/* some long */);

   Family family = new Family();
   family.setWeddingDate(weddingDate);
   family.setWife(wife);
   family.setHusband(husband);
   family.setChildren(children);
}

YAML'de geçerli gösterim:

---
düğünTarihi: 2000-12-03
eş:
 isim: Ann
 yaş: 37
 kadın: evet
koca:
 isim: Alex
 yaş: 40 kadın: çocuk
 yok :  - isim: İris    yaş: 12    kadın: doğru  - isim: Olivia    yaş: 5    isKadın: doğru ---