日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

YAML第一章 基本概念及语法

發(fā)布時(shí)間:2023/12/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 YAML第一章 基本概念及语法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

YAML第一章 基本概念及語法

簡介

本文對YAML的基本概念及語法進(jìn)行了詳細(xì)的分析,尤其是對YAML的語法進(jìn)行了詳細(xì)的闡述,旨在希望通過本文能對YAML有一個(gè)基本的了解,能夠書寫YAML文檔。

聲明

本文中的內(nèi)容屬于個(gè)人總結(jié)整理而來,個(gè)人水平有限,對于部分細(xì)節(jié)難免有理解錯(cuò)誤及遺漏之處,如果您在閱讀過程中有所發(fā)現(xiàn),希望您能指正,同時(shí)文章中的部分內(nèi)容也參考了其它大神的文章,如果文章中的內(nèi)容侵犯了您的權(quán)益,表示非常歉意,請您指出,我將盡快修改。

如果您進(jìn)行轉(zhuǎn)載,請標(biāo)明出處。

YAML學(xué)習(xí)筆記一 YAML基本概念及語法(http://www.liyubin.com/articles/2019/03/14/1552529532355.html)

YAML基本概念

1. YAML簡介

YAML,是一個(gè)可讀性高,用來表達(dá)資料序列的編程語言。YAML參考了其他多種語言,包括:XML、C語言、Python、Perl以及電子郵件格式。目YAML是”YAML Ain’t a Markup Language”(YAML不是一種置標(biāo)語言)的遞歸縮寫。在開發(fā)的這種語言時(shí),YAML 的意思其實(shí)是:”Yet Another Markup Language”(仍是一種置標(biāo)語言),但為了強(qiáng)調(diào)這種語言以數(shù)據(jù)做為中心,而不是以置標(biāo)語言為重點(diǎn),而用返璞詞重新命名。

YAML官方文檔中給的定義很簡單,即:“YAML Ain’t Markup Language” (abbreviated YAML) is a data serialization language designed to be human-friendly and work well with modern programming languages for common everyday tasks. This specification is both an introduction to the YAML language and the concepts supporting it; it is also a complete reference of the information needed to develop applications for processing YAML.

2. YAML VS XML,YAML VS Json,…

網(wǎng)上有很多關(guān)于這類的文章的描述,不過多介紹,有興趣的可以自行搜索比較,看看各路大神對YAML的分析

3. YAML不足

YAML沒有自己的數(shù)據(jù)類型的定義,而是使用實(shí)現(xiàn)語言的數(shù)據(jù)類型。一個(gè)YAML文件,在不同語言中解析后得到的數(shù)據(jù)類型可能會不同,由于其兼容性問題,不同語言間的數(shù)據(jù)流轉(zhuǎn)不建議使用YAML。

YAML基本語法

1. YAML語法

  • 基本格式要求

    • YAML使用可打印的Unicode編碼作為標(biāo)準(zhǔn)字符編碼,可以使用UTF-8或者UTF-16
    • YAML對于大小寫是敏感的
    • YAML文件使用.yaml做為后綴
    • YAML使用縮進(jìn)代表層級關(guān)系,同時(shí)縮進(jìn)只能使用空格,不能使用tab鍵(推薦:在各種語言中為了使用代碼統(tǒng)一,可以在各編輯器中設(shè)置使用空格來替換Tab,一般使用4個(gè)空格),對于空格的數(shù)量沒有特別的要求,但相同的層級在左對齊
  • 基本類型

    • 內(nèi)置類型

      類型表示方法備注
      整數(shù)!!int可使用10進(jìn)制,2進(jìn)制,8進(jìn)制,16進(jìn)制表示
      浮點(diǎn)數(shù)!!float
      布爾!!bool可以是True,true,tRue,False等,忽略大小寫
      字符串!!str復(fù)雜的情況下可以文本塊
      二進(jìn)制!!binary也是字符串類型
      日期時(shí)間!!timestamp采用ISO8601格式
      空值!!
      集合!!set
      序列!!seq----
      鍵值表!!map鍵是唯一的
      鍵值列表!!omap
      對象列表!!pairs

      特別指出:對于二進(jìn)制類型來說本質(zhì)是上一個(gè)base64的文本塊,如:

      picture: !!binary |R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5OTk6enp56enmleECcgggoBADs=
    • 常量值

      表示單個(gè)的,不可再分的值,主要的結(jié)構(gòu)有:整數(shù),浮點(diǎn)數(shù),字符串,NULL,日期,布爾,時(shí)間

      布爾型類型:

      值為true/false,完全忽略大小寫 isstudent: trUe

      浮點(diǎn)數(shù):

      固定小數(shù): pi: 3.1415926科學(xué)計(jì)數(shù)法表示: pi: 31415926e-8負(fù)無窮: minmin: -.inf無效數(shù)字: notnum: .NaN

      整型值:可以使用10進(jìn)制、2進(jìn)制、8進(jìn)制、16進(jìn)制表示

      10進(jìn)制: intvalue: 1232進(jìn)制: intvalue: 0b1010_10108進(jìn)制: intvalue: 0o3416進(jìn)制: intvalue: 0xFFFF

      字符串/文本塊:

      strvalue: newline字符串類的值,也可以使用單引號或雙引號,若字符串中包含有空格或者特殊字符,則必須使用單引號或者雙引號,雙引號與單引號還有不同,雙引號不會對特殊字符轉(zhuǎn)義,若單引號之中還有單引號,則必須連續(xù)使用兩個(gè)單引號轉(zhuǎn)義 字符串可以拆成多行,每一行會被轉(zhuǎn)成一個(gè)空格,對于多行字符串可以使用|保留換行符,也可以使用>折疊換行,使用+表示保留文字塊末尾的換行,使用-表示刪除字符串末尾的換行 字符串也可以HTML標(biāo)記strvalue: 'new\nline' 使用單引號相當(dāng)于{ strvalue: 'new\\nline' }strvalue: "new\nline" 使用雙引號相當(dāng)于{ strvalue: 'new\nline' },雙引號不會對特殊字符轉(zhuǎn)義strvalue: newline 字符串可以拆成多行,每一行會被轉(zhuǎn)成一個(gè)空格,相當(dāng)于{ strvalue: 'new line' }strvalue: |newline 使用|來表示需要保留換行符,相當(dāng)于{ strvalue: 'new\nline\n' }strvalue: >newline 使用>折疊換行,相當(dāng)于{ strvalue: 'new line\n' }strvalue: |+newline 使用+表示保留末尾的換行,相當(dāng)于{ strvalue: 'new\nline\n' }strvalue: |-newline 使用-表示刪除末尾的換行,相當(dāng)于{ strvalue: 'new\nline' }strvalue: |<p style="color: red">newline</p> 相當(dāng)于{ strvalue: '<p style="color: red">\n newline\n</p>\n' }

      日期類型:

      日期必須使用ISO 8601格式,即:yyyy-MM-dd date: 2019-03-13

      時(shí)間類型:

      時(shí)間使用ISO 8601格式,時(shí)間和日期之間使用T連接,使用+或者-代表時(shí)區(qū) datetime: 2019-03-13T20:49:33+08:00

      NULL類型:

      使用~表示null nullvalue: ~相當(dāng)于{ nullvalue: null }
    • 鍵值表、映射、哈希、字典

      鍵值對的集合,使用冒號(: )代表,格式為key: value,需要注意的是冒號后面需要添加一個(gè)空格,如:

      Block style: !!mapClark : EvansBrian : IngersonOren : Ben-Kiki Flow style: !!map { Clark: Evans, Brian: Ingerson, Oren: Ben-Kiki }相當(dāng)于{ 'Block style': { Clark: 'Evans', Brian: 'Ingerson', Oren: 'Ben-Kiki' },'Flow style': { Clark: 'Evans', Brian: 'Ingerson', Oren: 'Ben-Kiki' } }

      當(dāng)鍵是一個(gè)列表或者鍵值表時(shí),需要使用問號(? )表示復(fù)雜的鍵,如:

      ? - blue- red- green : Color也可以使用流式表示 ? [blue, reg, green]: Color相當(dāng)于:{ 'blue,red,green': 'Color' }
    • 數(shù)組、序列、列表

      一組按次序排列的值,使用短橫線(- )代表數(shù)組,格式為- value,需要注意的短橫線后面需要添加一個(gè)空格,如:

      student:- jone- steven- bob

      數(shù)組可以使用復(fù)雜的類型,比如:

      classes:- id: 1001name: joneage: 12- id: 1002name: stevenage: 14-id: 1003name: bobage: 15

      數(shù)組中復(fù)雜的類型,也可以使用流式(flow)方式表示,如:

      classes: [{id: 1001, name: jone, age: 12},{id: 1002, name: steven, age: 14},{id: 1003, name: bob,age: 15}]
  • 注釋

    YAML中使得#做為注釋,從這個(gè)字符一直到行尾,都會被忽略

  • 文檔開始與結(jié)束符

    使用三個(gè)短橫線(—),表示一個(gè)文檔的開始,一般情況下在同一個(gè)文件中有有多個(gè)時(shí)使用
    使用三個(gè)點(diǎn)號(…),表示一個(gè)文檔的結(jié)束,一般情況下和—共同使用。尤其是對于網(wǎng)絡(luò)傳輸或者流來說,作為明確的結(jié)束符號有利于軟件的處理。

    比如: ```--- id: 1001 name: jone age: 12 ... --- id: 1002 name: steven age: 14 ...```
  • 類型強(qiáng)制轉(zhuǎn)換

    可以使用雙感嘆號(!!),表示需要進(jìn)行類型轉(zhuǎn)換,如:

    使用!!str將整型及bool型強(qiáng)制轉(zhuǎn)成字符串string:- !!str 123456- !!str true

    具體的內(nèi)置類型可以參看上述的類型描述中

  • 引用

    可以使用&符號來定義描點(diǎn),可以使用*來引用定義的描點(diǎn),可以使用<<來合并到當(dāng)前數(shù)據(jù)中,如:

    defaults: &defaults adapter: postgres host: localhostdevelopment:database: myapp_development<<: *defaultstest:database: myapp_test<<: *defaults相當(dāng)于defaults:adapter: postgreshost: localhostdevelopment:database: myapp_developmentadapter: postgreshost: localhosttest:database: myapp_testadapter: postgreshost: localhost
  • 指令符號

    在單一的文檔中可以使用指導(dǎo)指令,一般情況下定義在文檔的開始早于開始符號(—),使用百分比符號(%),在YAML1.1中定義了兩個(gè)指導(dǎo)指令:

    • %YAML 指導(dǎo)指令,用來識別文件的YAML版本號,放在文檔的首行
    • %TAG 指導(dǎo)指令,被用在URI的字首標(biāo)記,這個(gè)方法在標(biāo)記節(jié)點(diǎn)的型態(tài)時(shí)相當(dāng)有用

    TODO:有待進(jìn)一步補(bǔ)充

  • 自定義類型或標(biāo)識

    可以使用單個(gè)感嘆號(!)表示自定義類型

    TODO:有待進(jìn)一步補(bǔ)充

2. YAML各種語言的實(shí)現(xiàn)

YAML語言已經(jīng)有了多種語言的實(shí)現(xiàn),具體的參見YAML官網(wǎng),此處將會重點(diǎn)介紹一下C#中YAML的實(shí)現(xiàn)。

章節(jié)

  • YAML學(xué)習(xí)筆記 總章
  • 第一章 YAML基本概念及語法
  • 第二章 YAML與Unity
  • 第三章 C#解析YAML

參考資料

  • YAML 技術(shù)研究
  • YAML官網(wǎng)
  • YAML Tutorial
  • YAML快速入門
  • YAML詳解 是什么
  • 通過一篇YAML來學(xué)習(xí)YAML
  • YAML在線格式化校驗(yàn)工具

總結(jié)

以上是生活随笔為你收集整理的YAML第一章 基本概念及语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。