การใช้สัญลักษณ์ท่อใน YAML คืออะไร?


127

ฉันเพิ่งเริ่มใช้ yaml และมีคำถามเกี่ยวกับสัญลักษณ์ไปป์ (|) ที่ใช้กับหลายบรรทัด YAML มีไวยากรณ์เหมือนด้านล่างหรือไม่

ทดสอบ: | 6+

จากสองไฟล์ YAML ด้านล่างไฟล์แรกใช้งานได้และไฟล์ที่สองไม่ทำงาน ฉันไม่รู้ว่าอะไรเป็นสาเหตุของสิ่งนี้

ไฟล์แรก

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

ไฟล์ที่สอง

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

ไฟล์ที่สองคือของลูกค้า

ฉันใช้ XMLBeans และได้รับข้อผิดพลาดนี้:

com.esotericsoftware.yamlbeans.parser.Parser $ ParserException: สาย 17, 12 คอลัมน์: คาดหวัง 'บล็อกสิ้น' แต่ก็พบว่าการทำแผนที่บล็อกเริ่มต้น"

คำตอบ:


180

สัญลักษณ์ไปป์ที่ท้ายบรรทัดใน YAML หมายความว่าข้อความที่เยื้องตามหลังควรตีความเป็นค่าสเกลาร์แบบหลายบรรทัด ดูข้อมูลจำเพาะ YAML

โดยเฉพาะอย่างยิ่งไปป์ระบุว่า (ยกเว้นการเยื้อง) ค่าสเกลาร์ควรตีความตามตัวอักษรในลักษณะที่รักษาการขึ้นบรรทัดใหม่ ในทางกลับกัน>อักขระระบุว่าสเกลาร์ "พับ" แบบหลายบรรทัดตามหลังซึ่งหมายความว่าบรรทัดใหม่จะถูกแปลงเป็นช่องว่าง ตัวอย่างเช่น:

>>> 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+ส่วนหนึ่งเป็นตัวบ่งชี้การเยื้อง (ข้อกำหนดที่ชัดเจนของวิธีการที่หลายพื้นที่ของการเยื้องควรจะใช้) กับ "เคี้ยวตัวบ่งชี้" +ซึ่งควบคุมวิธีการที่ช่องว่างพิเศษในตอนท้ายของตัวอักษรเกลาควรได้รับการจัดการ

ข้อผิดพลาดที่คุณได้รับเป็นข้อผิดพลาด: เนื่องจากการเยื้องควรสัมพันธ์กับองค์ประกอบระดับบล็อกปัจจุบัน ดังนั้นในกรณีนี้มันควรจะเป็น4+แทน6+เพราะองค์ประกอบสุดท้ายระดับบล็อกเป็นรายการอาร์เรย์ (ตามที่ระบุไว้-) และตัวอักษรจะเยื้อง 4 จากมัน ค่อนข้างน่าแปลกใจที่การfinal: |ทำแผนที่ไม่ถือเป็นองค์ประกอบบล็อกแม้ว่าค่าของมันจะเป็นแบบหลายเส้น มันเป็นเรื่องที่สมเหตุสมผลหากคุณคิดเกี่ยวกับเรื่องนี้ - มันยังคงเป็นเพียงการแมปคีย์: ค่า "แบบ" ซับเดียว " ค่านี้เกิดขึ้นจากการใช้ไวยากรณ์พิเศษสำหรับค่าสเกลาร์แบบหลายบรรทัด สับสน แต่ก็สอดคล้องกัน ...


6
เมื่อคุณพูดว่า "ควรใช้การเยื้องกี่บรรทัด" คุณหมายถึงอักขระการเยื้อง (สมมติว่าเว้นวรรค) หรือเส้นจริงๆ?
ROunofF

5
@ROunofF คำตอบสี่ขวบและคุณเป็นคนแรกที่ชี้ให้เห็น ควรพูดว่า "ช่องว่างของการเยื้อง" ฉันจะแก้ไข
Iguananaut


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.