YAML書寫規範

http://www.bubuko.com/infodetail-2138939.htmlcss

 

 

1. 認識 YAML

 

  YAML是一個相似 XML、JSON 的標記性語言。YAML 強調以數據爲中心,並非以標識語言爲重點。於是 YAML 自己的定義比較簡單,號稱「一種人性化的數據格式語言」。html

1.1 YAML 的設計目標:
  • 人類容易閱讀node

  • 可用於不一樣程序間的數據交換數組

  • 適合描述程序所使用的數據結構,特別是腳本語言ruby

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

  • 易於使用數據結構

1.2 YAML 與 XML、JSON
  • YAML 與 XMLless

    • 具備 XML 一樣的優勢,但比 XML 更加簡單、敏捷等
  • YAML 與 JSON工具

    • JSON 能夠看做是 YAML 的子集,也就是說 JSON 可以作的事情,YAML 也可以作學習

    • YAML 能表示得比 JSON 更加簡單和閱讀,例如「字符串不須要引號」。因此 YAML 容易能夠寫成 JSON 的格式,但並不建議這種作

    • YAML 可以描述比 JSON 更加複雜的結構,例如「關係錨點」能夠表示數據引用(如重複數據的引用)。

1.3 YAML 組織結構

  YAML 文件能夠由一或多個文檔組成(也即相對獨立的組織結構組成),文檔間使用「---」(三個橫線)在每文檔開始做爲分隔符。同時,文檔也可使用「...」(三個點號)做爲結束符(可選)。以下圖所示:

技術分享

<br/>

  • 若是隻是單個文檔,分隔符「---」可省略。

  • 每一個文檔並不須要使用結束符「...」來表示結束,可是對於網絡傳輸或者流來講,做爲明確結束的符號,有利於軟件處理。(例如不須要知道流關閉就能知道文檔結束) <br/>

  YAML 認爲數據由如下三種結構組成:(每一個文檔由三種結構混合組成)

  • 標量 (至關於數據類型)

  • 序列 (至關於數組和列表)

  • 鍵值表(至關於 Map 表)

2. YAML 編寫規範

  • 規範一:文檔使用 Unicode 編碼做爲字符標準編碼,例如 UTF-8

  • 規範二:使用「#」來表示註釋內容

    # 客戶訂單 date: 2015-02-01 customer:  - name: Jai items:  - no: 1234 # 訂單號  - descript: cpu 
  • 規範三:使用空格做爲嵌套縮進工具。一般建議使用兩個空格縮進,不建議使用 tab (甚至不支持)

  • 規範四:序列表示

    • 使用「-」(橫線) + 單個空格表示單個列表項
      --- # 文檔開始 - 第一章 簡介 - 第二章 設計目錄 
    • 使用"[]"表示一組數據
      --- # 文檔開始 [blue, red, green] 
    • 組合表示。每一個結構均可以嵌套組成複雜的表示結構。
      --- # 文檔開始 - [blue, red, green] # 列表項自己也是一個列表 - [Age, Bag] - site: {osc:www.oschina.net, baidu: www.baidu.com} # 這裏是同 鍵值表 組合表示
  • 規範五:鍵值表

    • 使用 「:」(冒號) + 空格表示單個鍵值對
      # 客戶訂單 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} 
    • "? " 問號+空格表示複雜的鍵。當鍵是一個列表或鍵值表時,就須要使用本符號來標記。
      # 使用一個列表做爲鍵
       ? [blue, reg, green]: Color
       # 等價於
       ? - blue
         - reg - gree : Color 
    • 組合表示。每一個結構均可以嵌套組成複雜的表示結構。 

      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 # 上面使用 「-」 前導與縮進來表示多個列表項,至關於下面的JSON表示 items: [{item:cpu, model:i3, price:¥800.00}, {item:HD, model:WD, price: ¥450.00}] 
  • 規範六:文本塊

    • 使用 「|」 和文本內容縮進表示的塊:保留塊中已有的回車換行。至關於段落塊

      yaml: | # 注意 ":" 與 "|" 之間的空格 JSON的語法實際上是YAML的子集,大部分的JSON文件均可以被YAML的解釋器解釋。 若是你想更深刻的學習YAML,我建議你去 http://www.yaml.org 看看 
    • 使用 「>」 和文本內容縮進表示的塊:將塊中回車替換爲空格,最終鏈接成一行。

      yaml: > # 注意 ":" 與 ">" 之間的空格,另外可使用空行來分段落 JSON的語法實際上是YAML的子集, 大部分的JSON文件均可以被YAML的解釋器解釋。 若是你想更深刻的學習YAML,我建議你去 http://www.yaml.org 看看 
    • 使用定界符「」(雙引號)、‘’(單引號)或回車表示的塊:最終表示成一行。

      yaml: # 使用回車的多行,最終鏈接成一行。 JSON的語法實際上是YAML的子集, 大部分的JSON文件均可以被YAML的解釋器解釋。 yaml: # 使用了雙引號,雙引號的好處是能夠轉義,即在裏面可使用特殊符號 "JSON的語法實際上是YAML的子集, 大部分的JSON文件均可以被YAML的解釋器解釋。" 
  • 規範七:數據類型的約定

    • 對一些經常使用數據類型的表示格式進行了約定,包括:

       integer: 12345 # 整數標準形式  octal: 0o34 # 八進制表示,第二個是字母 o  hex: 0xFF # 十六進制表示  float: 1.23e+3 # 浮點數  fixed: 13.67 # 固定小數  minmin: -.inf # 表示負無窮  notNumber: .NaN # 無效數字  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 # ? 
    • 「!」(歎號)顯式指示類型,或自定義類型標識。單歎號一般是自定義類型,雙歎號是內置類型

       isString: !!str 2015-08-23 # 強調是字符串不是日期數據  picture: !!binary | # Base64 圖片 R0lGODlhDAAMAIQAAP//9/X 17unp5WZmZgAAAOfn515eXv Pz7Y6OjuDg4J+fn5OTk6enp 56enmleECcgggoBADs= #下面是內置類型 !!int # 整數類型 !!float # 浮點類型 !!bool # 布爾類型 !!str # 字符串類型 !!binary # 也是字符串類型 !!timestamp # 日期時間類型 !!null # 空值 !!set # 集合 !!omap, !!pairs # 鍵值列表或對象列表 !!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. 
  • 規範八:錨點與引用,定義數據的複用。

    • 第一步:使用 「&」 定義數據錨點(即要複製的數據)
    • 第二步:使用 「*」 引用上述錨點數據(即數據的複製目的地)
      --- hr: - Mark McGwire # Following node labeled SS - &SS Sammy Sosa # 定義要複製的數據 rbi: - *SS # Subsequent occurrence 這裏是數據複製目標 - Ken Griffey 
相關文章
相關標籤/搜索