yaml格式文件編寫規(guī)范

本文引用自:https://www.cnblogs.com/BlogNetSpace/p/8444861.html

1. 認識 YAML

YAML(發(fā)音 /?j?m?l/)是一個類似 XML牲距、JSON 的數(shù)據(jù)序列化語言。其強調(diào)以數(shù)據(jù)為中心竞帽,旨在方便人類使用瞧剖;并且適用于日常常見任務(wù)的現(xiàn)代編程語言灭袁。因而 YAML 本身的定義比較簡單,號稱“一種人性化的數(shù)據(jù)格式語言”。

1.1 YAML 的設(shè)計目標:
  • 人類容易閱讀

  • 可用于不同程序間的數(shù)據(jù)交換

  • 適合描述程序所使用的數(shù)據(jù)結(jié)構(gòu)幅聘,特別是腳本語言

  • 豐富的表達能力與可擴展性

  • 易于使用

1.2 YAML 與 XML狼犯、JSON
  • YAML 與 XML

    • 具有 XML 同樣的優(yōu)點余寥,但比 XML 更加簡單、敏捷等
  • YAML 與 JSON

    • JSON 可以看作是 YAML 的子集悯森,也就是說 JSON 能夠做的事情宋舷,YAML 也能夠做

    • YAML 能表示得比 JSON 更加簡單和閱讀,例如“字符串不需要引號”瓢姻。所以 YAML 容易可以寫成 JSON 的格式祝蝠,但并不建議這種做

    • YAML 能夠描述比 JSON 更加復(fù)雜的結(jié)構(gòu),例如“關(guān)系錨點”可以表示數(shù)據(jù)引用(如重復(fù)數(shù)據(jù)的引用)幻碱。

1.3 YAML 組織結(jié)構(gòu)

YAML 文件可以由一或多個文檔組成(也即相對獨立的組織結(jié)構(gòu)組成)续膳,文檔間使用“---”(三個橫線)在每文檔開始作為分隔符。同時收班,文檔也可以使用“...”(三個點號)作為結(jié)束符(可選)坟岔。如下圖所示:

文檔示圖
  • 如果只是單個文檔,分隔符“---”可省略摔桦。

  • 每個文檔并不需要使用結(jié)束符“...”來表示結(jié)束社付,但是對于網(wǎng)絡(luò)傳輸或者流來說,作為明確結(jié)束的符號邻耕,有利于軟件處理鸥咖。(例如不需要知道流關(guān)閉就能知道文檔結(jié)束)

YAML 認為數(shù)據(jù)由以下三種結(jié)構(gòu)組成:(每個文檔由三種結(jié)構(gòu)混合組成)

  • 標量 (相當于數(shù)據(jù)類型)

  • 序列 (相當于數(shù)組和列表)

  • 鍵值表(相當于 Map 表)

2. YAML 編寫規(guī)范

它的基本語法規(guī)則如下:

      1)大小寫敏感

      2)使用縮進表示層級關(guān)系

      3)縮進時不允許使用Tab鍵,只允許使用空格兄世。

      4)縮進的空格數(shù)目不重要啼辣,只要相同層級的元素左側(cè)對齊即可
  • 規(guī)范一:文檔使用 Unicode 編碼作為字符標準編碼,例如 UTF-8

  • 規(guī)范二:使用“#”來表示注釋內(nèi)容

    # 客戶訂單
    date: 2015-02-01
    customer:
      - name: Jai
    items:
      - no: 1234         # 訂單號
      - descript: cpu
    
    
  • 規(guī)范三:使用空格作為嵌套縮進工具御滩。通常建議使用兩個空格縮進鸥拧,不建議使用 tab (甚至不支持)

  • 規(guī)范四:序列表示

    • 使用“-”(橫線) + 單個空格表示單個列表項

      --- # 文檔開始
      - 第一章 簡介
      - 第二章 設(shè)計目錄
      
      
    • 使用"[]"表示一組數(shù)據(jù)

      --- # 文檔開始
      [blue, red, green]
      
      
    • 組合表示党远。每個結(jié)構(gòu)都可以嵌套組成復(fù)雜的表示結(jié)構(gòu)。

      --- # 文檔開始
      - [blue, red, green]     # 列表項本身也是一個列表
      - [Age, Bag]
      - site: {osc:www.oschina.net, baidu: www.baidu.com}  # 這里是同 鍵值表 組合表示
      
  • 規(guī)范五:鍵值表

    • 使用 “:”(冒號) + 空格表示單個鍵值對

      # 客戶訂單
      date: 2015-02-01
      customer:
        - name: Jai
      items:
        - no: 1234         # 訂單號
        - descript: cpu
        - price: ¥800.00
      
      
    • 使用"{}"表示一個鍵值表

      # 客戶訂單
      date: 2015-02-01
      customer:
        - name: Jai
      items: {no: 1234, descript: cpu, price: ¥800.00}
      
      
    • "? " 問號+空格表示復(fù)雜的鍵富弦。當鍵是一個列表或鍵值表時沟娱,就需要使用本符號來標記。

       # 使用一個列表作為鍵
       ? [blue, reg, green]: Color
       # 等價于
       ? - blue
         - reg
         - gree
       : Color
      
      
    • 組合表示腕柜。每個結(jié)構(gòu)都可以嵌套組成復(fù)雜的表示結(jié)構(gòu)济似。

       Color:
          - blue
          - red
          - green
      
       # 相當于 (也是 JSON 的表示)
       {Color: [blue, red, green]}
      
       div:
          - border: {color: red, width: 2px}
          - background: {color: green}
          - padding: [0, 10px, 0, 10px]
      
       # 使用縮進表示的鍵值表與列表項
       items:
          - item: cpu
            model: i3
            price: ¥800.00
          - item: HD
            model: WD
            price: ¥450.00
      
       # 上面使用 “-” 前導(dǎo)與縮進來表示多個列表項,相當于下面的JSON表示
       items: [{item:cpu, model:i3, price:¥800.00}, {item:HD, model:WD, price: ¥450.00}]
      
      
  • 規(guī)范六:文本塊

    • 使用 “|” 和文本內(nèi)容縮進表示的塊:保留塊中已有的回車換行盏缤。相當于段落塊

      yaml: |      # 注意 ":" 與 "|" 之間的空格
         JSON的語法其實是YAML的子集砰蠢,大部分的JSON文件都可以被YAML的解釋器解釋。
      
      
    • 使用 “>” 和文本內(nèi)容縮進表示的塊:將塊中回車替換為空格唉铜,最終連接成一行娩脾。

      yaml: >      # 注意 ":" 與 ">" 之間的空格,另外可以使用空行來分段落
         JSON的語法其實是YAML的子集打毛,
         大部分的JSON文件都可以被YAML的解釋器解釋柿赊。
      
      
    • 使用定界符“”(雙引號)、‘’(單引號)或回車表示的塊:最終表示成一行幻枉。

      yaml:     # 使用回車的多行碰声,最終連接成一行。
         JSON的語法其實是YAML的子集熬甫,
         大部分的JSON文件都可以被YAML的解釋器解釋胰挑。
      
      yaml:     # 使用了雙引號,雙引號的好處是可以轉(zhuǎn)義椿肩,即在里面可以使用特殊符號
         "JSON的語法其實是YAML的子集瞻颂,
         大部分的JSON文件都可以被YAML的解釋器解釋。"
      
      
  • 規(guī)范七:數(shù)據(jù)類型的約定

    • 對一些常用數(shù)據(jù)類型的表示格式進行了約定郑象,包括:

       integer: 12345     # 整數(shù)標準形式
       octal: 0o34        # 八進制表示贡这,第二個是字母 o
       hex: 0xFF          # 十六進制表示
      
       float: 1.23e+3     # 浮點數(shù)
       fixed: 13.67       # 固定小數(shù)
       minmin: -.inf      # 表示負無窮
       notNumber: .NaN    # 無效數(shù)字
      
       null:              # 空值
       boolean: [true, false] # 布爾值
       string: '12345'    # 字符串
      
       date: 2015-08-23   # 日期
       datetime: 2015-08-23T02:02:00.1z  # 日期時間
       iso8601: 2015-08-23t21:59:43.10-05:00  # iso8601 日期格式
       spaced: 2015-08-23 21:59:43.10 -5      # ?
      
      
    • “!”(嘆號)顯式指示類型,或自定義類型標識厂榛。單嘆號通常是自定義類型盖矫,雙嘆號是內(nèi)置類型

       isString: !!str 2015-08-23     # 強調(diào)是字符串不是日期數(shù)據(jù)
       picture: !!binary |            # Base64  圖片
           R0lGODlhDAAMAIQAAP//9/X
           17unp5WZmZgAAAOfn515eXv
           Pz7Y6OjuDg4J+fn5OTk6enp
           56enmleECcgggoBADs=
       #下面是內(nèi)置類型
       !!int               # 整數(shù)類型
       !!float             # 浮點類型
       !!bool              # 布爾類型
       !!str               # 字符串類型
       !!binary            # 也是字符串類型
       !!timestamp         # 日期時間類型
       !!null              # 空值
       !!set               # 集合
       !!omap, !!pairs     # 鍵值列表或?qū)ο罅斜? !!seq               # 序列,也是列表
       !!map               # 鍵值表
      
       #下面是一些例子:
       --- !!omap
       - Mark: 65
       - Sammy: 63
       - Key: 58
      
       --- !!set           # 注意击奶,“?”表示鍵為列表辈双,在這里列表為 null
       ? Mark
       ? Sammy
       ? Key
      
       # 下面是自定義的類型或標識
       %TAG ! tag:clarkevans.com,2002:   # % 是指令符號
       --- !shape
       # Use the ! handle for presenting
       # tag:clarkevans.com,2002:circle
       - !circle
         center: &ORIGIN {x: 73, y: 129}
         radius: 7
       - !line
         start: *ORIGIN
         finish: { x: 89, y: 102 }
       - !label
         start: *ORIGIN
         color: 0xFFEEBB
         text: Pretty vector drawing.
      
      
  • 規(guī)范八:錨點與引用,定義數(shù)據(jù)的復(fù)用柜砾。

    • 第一步:使用 “&” 定義數(shù)據(jù)錨點(即要復(fù)制的數(shù)據(jù))

    • 第二步:使用 “*” 引用上述錨點數(shù)據(jù)(即數(shù)據(jù)的復(fù)制目的地)

       ---
       hr:
         - Mark McGwire
         # Following node labeled SS
         - &SS Sammy Sosa            # 定義要復(fù)制的數(shù)據(jù)
       rbi:
         - *SS # Subsequent occurrence   這里是數(shù)據(jù)復(fù)制目標
         - Ken Griffey
      

詳盡語法見官網(wǎng):http://www.yaml.org/spec/1.2/spec.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末湃望,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌证芭,老刑警劉巖瞳浦,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異檩帐,居然都是意外死亡术幔,警方通過查閱死者的電腦和手機另萤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門湃密,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人四敞,你說我怎么就攤上這事泛源。” “怎么了忿危?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵达箍,是天一觀的道長。 經(jīng)常有香客問我铺厨,道長缎玫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任解滓,我火速辦了婚禮赃磨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洼裤。我一直安慰自己邻辉,他們只是感情好,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布腮鞍。 她就那樣靜靜地躺著值骇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪移国。 梳的紋絲不亂的頭發(fā)上吱瘩,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音迹缀,去河邊找鬼搅裙。 笑死,一個胖子當著我的面吹牛裹芝,可吹牛的內(nèi)容都是我干的部逮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼嫂易,長吁一口氣:“原來是場噩夢啊……” “哼兄朋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤颅和,失蹤者是張志新(化名)和其女友劉穎傅事,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體峡扩,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡蹭越,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了教届。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片响鹃。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖案训,靈堂內(nèi)的尸體忽然破棺而出买置,到底是詐尸還是另有隱情,我是刑警寧澤强霎,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布忿项,位于F島的核電站,受9級特大地震影響城舞,放射性物質(zhì)發(fā)生泄漏轩触。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一家夺、第九天 我趴在偏房一處隱蔽的房頂上張望脱柱。 院中可真熱鬧,春花似錦秦踪、人聲如沸褐捻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柠逞。三九已至,卻和暖如春景馁,著一層夾襖步出監(jiān)牢的瞬間板壮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工合住, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绰精,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓透葛,卻偏偏與公主長得像笨使,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子僚害,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容