why - (3 tanda hubung / tanda hubung) di file yaml?

116

Jadi saya baru saja mulai menggunakan YAMLfile daripada application.propertieskarena lebih mudah dibaca. Saya melihat di YAMLfile yang mereka mulai ---. Saya mencari di Google dan menemukan penjelasan di bawah ini.

YAML menggunakan tiga tanda hubung (“---”) untuk memisahkan perintah dari konten dokumen. Ini juga berfungsi untuk menandai dimulainya dokumen jika tidak ada arahan.

Selain itu, saya mencoba sampel tanpa ---dan mengerti bahwa tidak wajib memilikinya.

Saya rasa saya tidak memiliki pemahaman yang jelas tentang directivedan document. Adakah yang bisa menjelaskan dengan contoh sederhana?

Andy
sumber
3
Sudahkah Anda memeriksa spesifikasi YAML? Ini cukup banyak menggambarkan apa itu direktif atau dokumen . Maaf, ini memenuhi syarat untuk idownvotedbecau.se/noresearch di buku saya.
lexicore
19
@lexicore Saya memeriksa dokumen sebelum mencoba contoh. Tetapi saya tidak mendapatkan pemahaman yang jelas dan saya pikir saya akan mengerti lebih baik jika seseorang menjelaskan. Saya minta maaf jika tampilannya sangat mendasar, FYI saya hanya pemula.
Andy

Jawaban:

66

Seperti yang sudah Anda ketahui, tiga tanda hubung ---digunakan untuk menandai dimulainya dokumen , yaitu:

  1. Untuk memberi sinyal bahwa dokumen dimulai setelah arahan , yaitu, %YAMLatau %TAGgaris sesuai dengan spesifikasi saat ini. Sebagai contoh:

    %YAML 1.2
    %TAG !foo! !foo-types/
    ---
    myKey: myValue
    
  2. Untuk memberi tanda bahwa dokumen dimulai ketika Anda memiliki beberapa dokumen yaml dalam aliran yang sama , misalnya, file yaml:

    doc 1
    ---
    doc 2
    

    Jika doc 2 memiliki beberapa arahan sebelumnya, maka kita harus menggunakan tiga titik ...untuk menunjukkan akhir dari doc 1 (dan awal dari arahan potensial sebelum doc 2) ke parser. Sebagai contoh:

    doc 1
    ...
    %TAG !bar! !bar-types/
    ---
    doc 2
    

Spesifikasi ini bagus untuk pelaksana parser yaml. Namun, saya merasa artikel ini lebih mudah dibaca dari sudut pandang pengguna.

Yi Ou
sumber
Saya membaca aturan produksi 211 dalam spesifikasi YAML 1.2 sedemikian rupa sehingga Anda tidak memerlukan indikator akhir dokumen bahkan jika Anda memiliki arahan dalam dokumen berikut, satu-satunya hal yang diperlukan dalam hal itu adalah Anda memiliki akhir- indikator direktif (di awal l-explicit-document).
Anthon
Pemahaman saya tentang penggunaan tiga titik didasarkan pada kalimat spesifikasi berikut : "Jika dokumen tidak diakhiri oleh garis penanda akhir dokumen, maka dokumen berikut harus dimulai dengan garis penanda akhir arahan." Membutuhkan dokumen untuk memulai dengan penanda akhir arahan ---berarti tidak ada arahan yang diizinkan untuk dokumen itu. Jadi jika doc 2 memiliki arahan, doc 1 harus diakhiri dengan penanda akhir dokumen ....
Yi Ou
Faktanya, definisi l-eksplisit-document melarang arahan untuknya: "Sebuah dokumen eksplisit dimulai dengan arahan eksplisit baris penanda akhir tetapi tanpa arahan."
Yi Ou
Aturan 211 secara eksplisit memiliki arahan di luar l-eksplisit-document, dan saya tidak yakin apakah kutipan teks Anda bahkan bertentangan dengan itu. Dalam kasus apapun, parser YAML Python mengimplementasikannya dengan cara itu (yaitu Anda tidak memerlukan indikator akhir-dokumen yang eksplisit sebelum arahan dokumen berikutnya).
Anthon
Saya tidak melihat Aturan 211 mengizinkan arahan sebelumnya l-explicit-document. Ekspresi l-document-prefix*tidak mengandung arahan. Saya tidak akrab dengan parser Python Yaml, tapi pertanyaan yang menarik adalah apakah itu hanya melompati arahan secara diam-diam, jika tidak didahului oleh titik.
Yi Ou
55

Tidak wajib memilikinya jika Anda tidak memulai YAMLdengan arahan. Jika itu masalahnya, Anda harus menggunakannya.

Yuk simak dokumentasinya

3.2.3.4. Arahan

Setiap dokumen dapat dikaitkan dengan satu set arahan. Direktif memiliki nama dan urutan parameter opsional. Arahan adalah instruksi untuk prosesor YAML, dan seperti semua detail presentasi lainnya tidak tercermin dalam pohon serialisasi YAML atau grafik representasi . Versi YAML ini mendefinisikan dua arahan, “YAML” dan “TAG”. Semua arahan lainnya disimpan untuk versi YAML yang akan datang.

Salah satu contohnya juga dapat ditemukan di dokumentasi untuk direktifYAML

%YAML 1.2 # Attempt parsing
           # with a warning
---
"foo"
Yassin Hajaj
sumber