ทำไม - (3 ขีด / ยัติภังค์) ในไฟล์ yaml


118

ดังนั้นฉันจึงเริ่มใช้YAMLไฟล์แทนapplication.propertiesเนื่องจากอ่านได้ง่ายขึ้น ฉันเห็นในไฟล์พวกเขาเริ่มต้นด้วยYAML ---ฉัน googled และพบคำอธิบายด้านล่าง

YAML ใช้สามขีด (“ ---”) เพื่อแยกคำสั่งออกจากเนื้อหาเอกสาร นอกจากนี้ยังทำหน้าที่ส่งสัญญาณการเริ่มต้นเอกสารหากไม่มีคำสั่ง

นอกจากนี้ฉันได้ลองใช้ตัวอย่างที่ไม่มี---และเข้าใจว่าไม่จำเป็นต้องมี

ผมคิดว่าผมไม่ได้มีความเข้าใจอย่างชัดเจนและdirective documentใครช่วยอธิบายด้วยตัวอย่างง่ายๆได้ไหม


3
คุณตรวจสอบข้อกำหนด YAML แล้วหรือยัง อธิบายได้ค่อนข้างดีว่าคำสั่งหรือเอกสารคืออะไร ขออภัยสิ่งนี้มีคุณสมบัติสำหรับidownvotedbecau.se/noresearchในหนังสือของฉัน
พจนานุกรม

19
@lexicore ฉันตรวจสอบเอกสารก่อนที่จะลองดูตัวอย่าง แต่ฉันไม่ได้รับความเข้าใจที่ชัดเจนและฉันคิดว่าฉันจะเข้าใจดีขึ้นถ้ามีคนอธิบาย ฉันขอโทษถ้ามันดูธรรมดามาก FYI ฉันเป็นแค่มือใหม่
Andy

คำตอบ:


69

ดังที่คุณทราบแล้วเครื่องหมายขีดกลางสามขีด---ใช้เพื่อส่งสัญญาณการเริ่มต้นเอกสารนั่นคือ:

  1. เพื่อส่งสัญญาณให้เอกสารเริ่มต้นหลังจากคำสั่งเช่น%YAMLหรือ%TAGบรรทัดตามข้อกำหนดปัจจุบัน ตัวอย่างเช่น:

    %YAML 1.2
    %TAG !foo! !foo-types/
    ---
    myKey: myValue
    
  2. ในการส่งสัญญาณเริ่มต้นเอกสารเมื่อคุณมีเอกสาร yaml หลายชุดในสตรีมเดียวกันเช่นไฟล์ yaml:

    doc 1
    ---
    doc 2
    

    หาก doc 2 มีคำสั่งก่อนหน้าเราจะต้องใช้จุดสามจุด...เพื่อระบุจุดสิ้นสุดของ doc 1 (และจุดเริ่มต้นของคำสั่งที่เป็นไปได้ก่อนหน้า doc 2) ไปยังตัวแยกวิเคราะห์ ตัวอย่างเช่น:

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

ข้อมูลจำเพาะนี้เหมาะสำหรับผู้ใช้ตัวแยกวิเคราะห์ yaml อย่างไรก็ตามฉันพบว่าบทความนี้อ่านง่ายขึ้นจากมุมมองของผู้ใช้


ฉันอ่านกฎการผลิต 211 ในข้อมูลจำเพาะ YAML 1.2 ในลักษณะที่คุณไม่ต้องการตัวบ่งชี้ท้ายเอกสารแม้ว่าคุณจะมีคำสั่งในเอกสารต่อไปนี้สิ่งเดียวที่จำเป็นในกรณีนั้นคือคุณมีจุดสิ้นสุด - ตัวบ่งชี้คำสั่ง (ที่จุดเริ่มต้นของl-explicit-document)
Anthon

ความเข้าใจของฉันเกี่ยวกับการใช้จุดสามจุดเป็นไปตามประโยคนี้ของข้อมูลจำเพาะ : "หากเอกสารไม่ได้ถูกยุติโดยบรรทัดเครื่องหมายสิ้นสุดเอกสารเอกสารต่อไปนี้จะต้องขึ้นต้นด้วยเส้นเครื่องหมายกำกับจุดสิ้นสุด" การ กำหนดให้เอกสารขึ้นต้นด้วย เครื่องหมายสิ้นสุดคำสั่ง---จะหมายความว่าไม่อนุญาตให้ใช้คำสั่งสำหรับเอกสารนั้น ดังนั้นหาก doc 2 มีคำสั่ง, doc 1 ...จะต้องสิ้นสุดลงด้วยเครื่องหมายท้ายเอกสาร
Yi Ou

ในความเป็นจริงคำจำกัดความของ l-Explicit-documentห้ามไม่ให้มีคำสั่งสำหรับมัน: "เอกสารที่ชัดเจนขึ้นต้นด้วยบรรทัดเครื่องหมายสิ้นสุดคำสั่งที่ชัดเจน แต่ไม่มีคำสั่ง"
Yi Ou

กฎ 211 มีคำสั่งที่อยู่นอกเอกสาร l-Explicit-document อย่างชัดเจนและฉันไม่แน่ใจว่าการอ้างถึงข้อความของคุณขัดแย้งกับสิ่งนั้นหรือไม่ ไม่ว่าในกรณีใดตัวแยกวิเคราะห์ Python YAML จะใช้วิธีนั้น (กล่าวคือคุณไม่จำเป็นต้องมีตัวบ่งชี้จุดสิ้นสุดของเอกสารที่ชัดเจนก่อนคำสั่งเอกสารถัดไป)
Anthon

ผมไม่ได้ดูกฎข้อ 211 l-explicit-documentคำสั่งอนุญาตให้ก่อน นิพจน์l-document-prefix*ไม่มีคำสั่ง ฉันไม่คุ้นเคยกับตัวแยกวิเคราะห์ Python Yaml แต่คำถามที่น่าสนใจก็คือมันจะข้ามคำสั่งอย่างเงียบ ๆ หรือไม่ถ้าพวกเขาไม่ได้นำหน้าด้วยจุด
Yi Ou

56

ไม่จำเป็นที่จะต้องมีหากคุณไม่ได้เริ่มต้น YAMLด้วยคำสั่ง หากเป็นกรณีนี้คุณควรใช้

มาดูเอกสารประกอบ

3.2.3.4 คำสั่ง

เอกสารแต่ละฉบับอาจเกี่ยวข้องกับชุดคำสั่ง คำสั่งมีชื่อและลำดับพารามิเตอร์ที่เป็นทางเลือก คำสั่งมีคำแนะนำในการประมวลผล YAML และนำเสนอเช่นรายละเอียดอื่น ๆ ยังไม่ได้สะท้อนให้เห็นในต้นไม้อนุกรม YAML หรือการเป็นตัวแทนของกราฟ YAML เวอร์ชันนี้กำหนดคำสั่ง 2 แบบคือ“ YAML” และ“ TAG” คำสั่งอื่น ๆ ทั้งหมดสงวนไว้สำหรับ YAML เวอร์ชันอนาคต

ตัวอย่างหนึ่งของสิ่งนี้สามารถพบได้ในเอกสารสำหรับคำสั่งYAML

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