什么是YAML?


YAML是YAML不是一種標記語言的外語縮寫 [1] (見前方參考資料原文內容);但為了強調這種語言以數據做為中心,而不是以置標語言為重點,而用返璞詞重新命名。它是一種直觀的能夠被電腦識別的數據序列化格式,是一個可讀性高並且容易被人類閱讀,容易和腳本語言交互,用來表達資料序列的編程語言。

它是類似於標准通用標記語言的子集XML數據描述語言,語法比XML簡單很多。

適用場景

腳本語言

由於實現簡單,解析成本很低,YAML特別適合在腳本語言中使用。列一下現有的語言實現:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript,Go 。除了Java 和 Go,其他都是腳本語言。

序列化

YAML比較適合做序列化。因為它是宿主語言數據類型直轉的。

配置文件

YAML做配置文件也不錯。寫YAML要比寫XML快得多(無需關注標簽或引號),並且比ini文檔功能更強。

比如Ruby on Rails的配置就選用的YAML。對ROR而言,這很自然,也很省事.

由於兼容性問題,不同語言間的數據流轉建議不要用YAML.

語言比較

雖然YAML是參考JSON,XML和SDL等語言,不過跟這些語言比起來,YAML仍有自己的特色。

JSON

JSON的語法是YAML1.2版的子集,同時非常接近YAML1.0與1.1版的子集,因此大部分的JSON文件都可以被YAML的剖析器剖析。這是因為JSON的語法結構和YAML的內置格式相同。雖然大范圍的分層也可以使用類似JSON的內置格式,不過YAML標准並不建議這樣使用,除非這樣編寫能讓文件可讀性增加。YAML的許多擴展在JSON是找不到的,如:進階資料形態、關系錨點、字串不需要雙引號、映射資料形態會儲存鍵值的順序。

JSON首先是一種機器交換格式。在這個假設前提下,如果只是API接口的調用,或者是跨程序語言間的數據交換,總之只要是機器生成交換數據,那就沒有YAML這種擴展語言出場的意義,都是標准化JSON直接搞定。

YAML和JSON的關系,猶如LESS和CSS——本身是一個規范標准的超集,便於人類識讀編寫。但又既可以通過一些輔助手段直接使用,更能向下編譯到符合標准的子集范圍之內。

XML和SDL

XML和SDL標簽概念,在YAML中是找不到的。對於數據結構序列(盡管這是有爭議的),標簽屬性的特色就是可以將資料及復雜資料附加資訊分離,並將各種原生數據結構(如:雜湊表、陣列)用同一種語言表示。YAML則以資料的可擴展性作為替代。(包括為了模擬物件的類別型態)在YAML本身的規范中,並沒有類似XML的語言定義文件綱要(language-defined document schema descriptors)──例如驗證自己本身的結構是否正確的文件。不過,YAML綱要描述語言(YAML schema descriptor language)是存在的。另外還有YAXML──用XML描述YAML的結構──可以讓XML Schema與XSLT轉換程式應用在YAML之上。況且,在一般使用的情況下,YAML豐富的定義型態之語法已經提供了足夠的方式來辨認YAML文件是否正確。

參考資料

The Official YAML Web Site
https://yaml.org/

YAML快速入門 - 簡書
https://www.jianshu.com/p/97222440cd08

YAML:很可能不如想象中那么好 - 雲+社區 - 騰訊雲
https://cloud.tencent.com/developer/news/281837


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM