YAML'de boru sembolünün kullanımı nedir?


127

Yaml'de yeniyim ve birden çok satır için kullanılan boru sembolü (|) hakkında bir sorum var. YAML'nin aşağıdaki gibi bir sözdizimi var mı?

test: | 6+

Aşağıdaki iki YAML dosyasından ilki çalışıyor ve ikincisi çalışmıyor. Buna neyin sebep olduğunu bilmiyorum.

İlk Dosya

Name :
  -
   testing:
     val1
  -
   second:
     val2
  -
   third:
     val3
  -
   then
  - 
    final: |
     a
     aa
     aaa
     aaaa : 'test:'

İkinci Dosya

Name :
  -
   testing:
     val1
  -
   second:
     val2
  -
   third:
     val3
  -
   then
  - 
    final: |6+
      a
      aa
      aaa
      aaaa : 'test:'

İkinci dosya müşterinin dosyasıdır.

XMLBeans kullanıyorum ve şu hatayı alıyorum:

com.esotericsoftware.yamlbeans.parser.Parser $ ParserException: Satır 17, sütun 12: Bir 'blok sonu' bekleniyordu ancak bulundu: blok eşleme başlangıcı " .

Yanıtlar:


180

YAML'de bir satırın sonundaki dikey çizgi sembolü, sonraki girintili metnin çok satırlı bir skaler değer olarak yorumlanması gerektiğini belirtir. YAML spesifikasyonuna bakın .

Spesifik olarak, boru (girinti hariç) skaler değerin harfiyen satırları koruyacak şekilde yorumlanması gerektiğini belirtir. Tersine, >karakter çok satırlı "katlanmış" skalerin izlediğini, yani satırsonlarının boşluklara dönüştürüldüğünü belirtir. Örneğin:

>>> import yaml
>>> yaml.load("""
... |
...  This is a multi-line
...  literal style scalar.
... """)
'This is a multi-line\nliteral style scalar.\n'
>>> yaml.load("""
... >
...  This is a multi-line
...  folded scalar; new lines are folded into
...  spaces.
... """)
'This is a multi-line folded scalar; new lines are folded into spaces.\n'

6+Bölüm "chomping göstergesi" ile girinti göstergesi (girinti birçok alanlarda nasıl kullanılması gerektiği açık bir şartname) 'dir +skaler sabitin sonunda fazladan boşluk nasıl işleneceğini kontrol eder.

Aldığınız hata aldatıcıdır: Bunun nedeni, girintinin mevcut blok seviyesindeki öğeye göre olması gerektiğidir. Bu durumda , son blok düzeyi öğe dizi öğesi (tarafından belirtilen ) olduğu ve değişmez değer ondan 4 girintili olduğu için 4+bunun yerine olmalıdır . Şaşırtıcı bir şekilde, eşleme, değeri çok satırlı olmasına rağmen bir blok öğe olarak kabul edilmiyor. Bir düşünürseniz mantıklı geliyor - hala sadece 'tek satırlık' bir "anahtar: değer" eşlemesi. Değer, çok satırlı skaler değerler için özel bir sözdizimi kullanıyor. Kafa karıştırıcı, ama bir şekilde tutarlı ...6+-final: |


6
"Kaç satır girinti kullanılmalı" derken, girinti karakterlerini mi kastediyorsunuz (boşluk diyelim)? Yoksa gerçekten çizgiler mi?
ROunofF

5
@ROunofF Dört yaşında bir cevap ve bunu belirten ilk kişi sensin. "Girinti boşlukları" yazmalıdır. Ben düzelteceğim.
Iguananaut


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.