建设国际网站,济南网站建设就选搜点网络ok,一手楼房可以做哪个网站,静态网页是什么意思今天在看Linux kernel里的device tree的documentation时#xff0c;发现里面的文档格式都是YAML的#xff0c;用来描述devicetree某类结点的格式#xff0c;所以就了解了一下。 YAML是一种易理解的数据序列化语言#xff0c;此文件格式通常用于创建配置文件#xff0c;它的…今天在看Linux kernel里的device tree的documentation时发现里面的文档格式都是YAML的用来描述devicetree某类结点的格式所以就了解了一下。YAML是一种易理解的数据序列化语言此文件格式通常用于创建配置文件它的对象序列化能力使它成为JSON等语言的可行替代品。在过去的几年里其受欢迎程度稳步上升。YAML 具有广泛的编程语言支持并且很容易映射到本地数据结构。它也很容易被人类阅读这就是为什么它是配置文件的一个好选择。YAML是为人类互动而设计的是另一种数据序列化语言JSON的严格超集。但由于它是一个严格的超集它可以做JSON可以做的一切甚至更多。一个主要的区别是换行符和缩进在YAML中实际上是有意义的而JSON则使用方括号和大括号。YAML发明于2001年缩写是Yet Another Markup Language。但维护者将其更名为YAML Aint Markup Language以更加强调其面向数据的特性。YAML是一种数据序列化格式其文件后缀名是 .yml / .yaml。强调人类可读与简洁结构常用于配置文件与数据交换。YAML文件的基本结构是一个地图。你可以把它叫做字典、哈希或对象这取决于你的编程语言或心情。当前的最新版本是1.2.2。之前版本是1.01.1。版本升级到1.2以后有三个子版本1.2.01.2.1和1.2.2。Github地址https://github.com/yaml/官网https://yaml.org/在官网列出了各个编程语言下使用yaml的库。总的来说YAML大部分都是键值对keys and values。key: value让我们来看一个简单的YAML文件---doe: a deer, a female deerray: a drop of golden sunpi: 3.14159xmas: truefrench-hens: 3calling-birds:- huey- dewey- louie- fredxmas-fifth-day:calling-birds: fourfrench-hens: 3golden-rings: 5partridges:count: 1location: a pear treeturtle-doves: two该文件以三个破折号开始。这些破折号表示一个新的YAML文档的开始。YAML 支持多个文档符合要求的解析器会将每一组破折号识别为一个新文档的开始。接下来我们看到构成一个典型YAML文档的大部分结构一个键值对。Doe是一个指向字符串值的键a deer, a female deer.。YAML支持的不仅仅是字符串值。该文件以六个键值对开始。它们有四种不同的数据类型。Doe和ray是字符串。Pi是一个浮点数字。Xmas是一个布尔值。French-hens是一个整数。你可以用单引号或双引号将字符串括起来也可以不用引号。YAML 将未加引号的数字识别为整数或浮点数。第七项是一个数组。Calling-birds有四个元素每个元素都由一个开头的破折号表示。我在Calling-birds中用两个空格缩进了这些元素。缩进是YAML表示嵌套的方式。各个文件的空格数可以不同但不允许使用制表符。我们将在下面看看缩进是如何使用的。最后我们看到xmas-fifth-day它里面还有五个元素每个元素都是缩进的。我们可以把xmas-fifth-day看作一个字典它包含两个字符串、两个整数和另一个字典。YAML 支持键值的嵌套以及混合类型。在我们深入研究之前让我们看看这个文档在JSON中的样子。使用这个方便的JSON到YAML的转换器JSON to YAML converterhttps://www.json2yaml.com/{doe: a deer, a female deer,ray: a drop of golden sun,pi: 3.14159,xmas: true,french-hens: 3,calling-birds: [huey,dewey,louie,fred],xmas-fifth-day: {calling-birds: four,french-hens: 3,golden-rings: 5,partridges: {count: 1,location: a pear tree},turtle-doves: two}}JSON和YAML有类似的功能大多数文件都可以在这两种格式之间转换。Outline Indentation and Whitespace 大纲缩进和空格空格是YAML格式的一部分。除非另有说明换行符表示一个字段的结束。你用缩进的方式构造YAML文档。缩进程度可以是一个或多个空格。该规范禁止使用制表符因为不同工具对它们的处理方式不同。比如上面的例子缩进就是两个空格。比如下面格式foo: barpleh: helpstuff:foo: barbar: foo实际的值是foo : barpleh : helpstuff : {foo: bar, bar: foo}Comments注释以#符号开始。它们可以出现在一个值之后也可独占一行。# This is a full line commentfoo: bar # this is a comment, too注释是为了人阅读方便而YAML处理器会忽略它们。YAML DatatypesYAML的键值对中的值是标量的。它们的作用类似于Perl、Javascript和Python等语言中的标量类型。通常情况下将字符串用引号括起来数字不加引号解析器就能区分出来了。但这仅仅是冰山一角。YAML 能够做的事情还有很多。Scalar Types 标量类型你可以使用各种标量类型作为值数字、布尔和字符串无论是否有引号。比如version: 2键中的单词可以用下划线、破折号或空格分隔。比如pinctrl-use-default:type: boolean键值对和字典 Key-Value Pairs and Dictionaries键值是YAML的基本构建模块。YAML 文档中的每个条目都是至少一个字典的成员。键总是一个字符串。值是一个标量因此它可以是任何数据类型。所以正如我们已经看到的值可以是一个字符串一个数字或另一个字典。数值类型 Numeric typesYAML 可以识别数字类型。我们在上面看到了浮点和整数。YAML 支持其他几种数字类型。一个整数可以是十进制、十六进制或八进制。---foo: 12345bar: 0x12d4plop: 023332正如你所期望的0x表示一个值是十六进制的而前导零表示一个八进制的值。YAML同时支持固定和指数浮点数。---foo: 1230.15bar: 12.3015e05最后我们可以表示非数字NAN / not-a-number或无穷大 / infinity。---foo: .infbar: -.Infplop: .NANFoo是无穷大bar是负的无穷大plop是NAN。Strings 字符串YAML 字符串是 Unicode 的。在大多数情况下你不需要用引号。---foo: this is a normal string但如果我们想处理转义序列我们需要使用双引号。---foo: this is not a normal string\nbar: this is not a normal string\nYAML将第一个值处理为以回车键和换行键( carriage return and linefeed)结束。由于第二个值没有引号YAML将其视为两个字符。YAML中单引号不会解释转义字符串。字符串的值可以跨越多于一行。通过fold大于字符你可以在一个块中指定一个字符串。bar: this is not a normal string itspans more thanone linesee?但这样赋值后会忽略换行实际上相当于bar : this is not a normal string it spans more than one line see?Blockpipe管道字符有类似的功能但YAML完全按原样解释该字段。bar: |this is not a normal string itspans more thanone linesee?这样的换行符也包含在值中bar : this is not a normal string itspans more thanone linesee?如果一个键的值是一个多行字符串你可以使用|字符的literal block风格。这在定义shell命令时特别有用command: |if [ ${CIRCLE_BRANCH} master ];then ansible-playbook site.yml -i production;fi注意多行字符串的前导缩进将被删除。Nulls 空值你可以用tilde或无引号的null字符串来输入nulls。---foo: ~bar: null这样使用工具打印出这个键的值可能如下foo : Nonebar : None这个使用Python打印出的值显示在Python里null的显示是None。Booleans 布尔值YAML用关键字True、On和Yes表示真。假则用False、Off或No表示。---foo: Truebar: Falselight: OnTV: OffArrays 数组你可以在单行上指定数组或列表---items: [ 1, 2, 3, 4, 5 ]names: [ one, two, three, four ]或者放到多行上---items:- 1- 2- 3- 4- 5names:- one- two- three- four多行格式对包含复杂对象而不是标量的列表很有用。---items:- things:thing1: hueythings2: deweything3: louie- other things:key: value一个数组可以包含任何有效的YAML值。列表中的值不一定是相同的类型。Dictionaries 字典 或者叫Collection Types 集合类型我们在上面介绍了字典但它们还有更多的意义。像数组一样你可以把字典的内容一行显示。我们在上面看到了这种格式。这是python打印字典的方式。---foo: { thing1: huey, thing2: louie, thing3: dewey }同样的内容也可以改成像前面一样的跨行显示你要做的就是使用缩进来创建字典或集合---foo:thing1: hueything2: louiething3: dewey可以多级嵌套。Advanced Options 高级选项Chomp Modifiers多行的字符串可能以空格(比如换行符)结束根据你希望文档被处理的方式你可能希望保留或不保留。YAML 有 strip chomp 和 preserve chomp 操作符。要保存最后一个字符请在fold或block运算符上添加一个加号。bar: this is not a normal string itspans more thanone linesee?这样bar的值就不再是一行而是多行。使用| 操作符时默认时保留换行符如果要去掉这个结尾换行符请使用strip(剥离) 操作符即减号。bar: |-this is not a normal string itspans more thanone linesee?Multiple documents 多文档一个文档以三个破折号(dash)开始以三个句号(periods)结束。一些YAML处理器需要文档的开始运算符。结束符通常是可选的。例如Java的Jackson不会处理没有开始的YAML文件但Python的PyYAML可以。当一个文件包含多个文档时你通常会使用文档结束操作符。总结YAML 是一种强大的语言可用于配置文件、应用程序之间的消息和保存应用程序的状态。我们介绍了它最常用的功能包括如何使用内置的数据类型和结构复杂的文件。一些平台支持YAML的高级功能包括自定义数据类型。注意YAML不允许使用制表符tab所以如果你使用这些字符缩进请让你的文本编辑器将其转换为空格。主要参考https://www.cloudbees.com/blog/yaml-tutorial-everything-you-need-get-started其他参考1检查YAML语法的在线工具http://www.yamllint.com/2YAML官网规范https://yaml.org/spec/1.2.2/3将JSON转换为YAML的在线工具https://www.bairesdev.com/tools/json2yaml/4YAML快速学习https://learnxinyminutes.com/docs/yaml/5YAML说明https://circleci.com/blog/what-is-yaml-a-beginner-s-guide/