neden - (3 tire / tire) yaml dosyasında?


116

Bu yüzden daha okunaklı olduğu için YAMLdosyayı kullanmaya başladım application.properties. Başladıkları YAMLdosyalarda görüyorum ---. Googledim ve aşağıdaki açıklamayı buldum.

YAML, yönergeleri belge içeriğinden ayırmak için üç çizgi ("---") kullanır. Bu ayrıca, direktif yoksa bir belgenin başlangıcını işaret etmeye de hizmet eder.

Ayrıca, onsuz bir örnek denedim ---ve onlara sahip olmanın zorunlu olmadığını anladım.

Sanırım directiveve konusunda net bir anlayışa sahip değilim document. Herhangi biri lütfen basit bir örnekle açıklayabilir mi?


3
YAML spesifikasyonunu kontrol ettiniz mi? Bir direktifin veya belgenin ne olduğunu hemen hemen açıklar . Üzgünüm, bu idownvotedbecau.se/noresearch için kitabım için uygun .
lexicore

19
@lexicore Bir örneği denemeden önce dokümanlara baktım. Ama net bir anlayış alamadım ve birisi açıklasa daha iyi anlayacağımı düşündüm. Çok basit göründüyse özür dilerim, FYI Ben sadece bir acemiyim.
Andy

Yanıtlar:


66

Zaten öğrendiğiniz gibi, üç çizgi bir belgenin başlangıcını--- belirtmek için kullanılır , yani:

  1. Belge başlama sinyali için direktifler sonra yani, %YAMLya %TAGşimdiki spec göre hatlar. Örneğin:

    %YAML 1.2
    %TAG !foo! !foo-types/
    ---
    myKey: myValue
    
  2. Aynı akışta birden fazla yaml belgeniz olduğunda , örneğin bir yaml dosyası olduğunda belgenin başladığını bildirmek için:

    doc 1
    ---
    doc 2
    

    Belge 2'nin önceki yönergeleri varsa ..., çözümleyiciye belge 1'in sonunu (ve belge 2'den önceki olası yönergelerin başlangıcını) belirtmek için üç nokta kullanmamız gerekir . Örneğin:

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

Spesifikasyon, yaml ayrıştırıcı uygulayıcıları için iyidir. Ancak, bu makaleyi kullanıcı açısından okumayı daha kolay buluyorum .


YAML 1.2 spesifikasyonundaki üretim kuralı 211'i, aşağıdaki belgede direktifleriniz olsa bile bir belge bitiş göstergesine ihtiyacınız olmayacak şekilde okudum, bu durumda gerekli olan tek şey bir sona sahip olmanızdır. direktiflerin göstergesi (başındaki l-explicit-document).
Anthon

Üç nokta kullanımına ilişkin anlayışım , şartnamenin şu cümlesine dayanmaktadır : "Bir belge, bir belge sonu işaret çizgisi ile sonlandırılmamışsa, o zaman aşağıdaki belge bir yönerge son işaret çizgisi ile başlamalıdır." Başlamak için bir belgenin gerekli kılınması yönergeler son işaretçisi ---, bu belge için hiçbir yönergeye izin verilmediği anlamına gelir. Dolayısıyla, doc 2'nin yönergeleri varsa, belge 1, belge bitiş işaretiyle sonlandırılmalıdır ....
Yi Ou

Aslında, l-explicit-document tanımı bunun için yönergeleri yasaklar: "Açık bir belge, açık bir yönergeyle başlar, ancak yönergeler içermez."
Yi Ou

Kural 211, açık bir şekilde l-açık-belgenin dışında direktiflere sahiptir ve metinden alıntı yapmanızın bununla çelişse bile emin değilim. Her durumda, Python YAML çözümleyicileri bunu bu şekilde uygular (yani, sonraki belge yönergelerinden önce açık bir belge sonu göstergesine ihtiyacınız yoktur).
Anthon

Kural 211'in önceki yönergelere izin verdiğini görmüyorum l-explicit-document. İfade l-document-prefix*direktifler içermiyor. Python Yaml ayrıştırıcısına aşina değilim, ancak ilginç bir soru, yönergelerin başında noktalar gelmiyorsa, yönergeleri sessizce atlayıp atlamaması olabilir.
Yi Ou

55

YAMLBir direktifle başlamazsanız, onlara sahip olmak zorunlu değildir . Eğer durum buysa, onları kullanmalısınız.

Dokümantasyona bir göz atalım

3.2.3.4. Direktifler

Her belge bir dizi yönerge ile ilişkilendirilebilir. Bir direktifin bir adı ve isteğe bağlı bir parametre dizisi vardır. Yönergeler, YAML işlemcisine yönelik talimatlardır ve diğer tüm sunum ayrıntıları gibi YAML serileştirme ağacında veya gösterim grafiğinde yansıtılmaz . YAML'nin bu sürümü, "YAML" ve "TAG" adlı iki yönergeyi tanımlar. Diğer tüm yönergeler YAML'nin gelecekteki sürümleri için ayrılmıştır.

Bunun bir örneği, yönerge belgelerinde de bulunabilir .YAML

%YAML 1.2 # Attempt parsing
           # with a warning
---
"foo"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.