YAML 过程
YAML遵循一种标准的流程过程。YAML中的原生数据结构包括节点等简单表示形式。也称为表示节点图。
它包括映射、序列和标量数量,这些数量被序列化为创建序列化树。通过序列化,对象会被转换为一串字节流。
序列化事件树有助于创建字符流的展示方式,如下图所示。
反向过程将字节流解析为序列化事件树。然后,将节点转换为节点图。这些值稍后转换为YAML的原生数据结构。下图解释了这个过程 –
在YAML中的信息有两种使用方式: 机器处理 和 人类消费 。YAML中的处理器用作在上述图表的互补视图之间转换信息的过程的工具。本章描述了在给定应用程序中YAML处理器必须提供的信息结构。
YAML包括用于表示数据对象的序列化过程的过程。YAML信息的处理包括三个阶段: 表示、序列化、展示和解析。让我们详细讨论每个阶段。
表示
YAML使用三种类型的节点来表示数据结构: 序列、映射 和 标量 。
序列
序列指的是有序的条目数,它映射了无序的键值对关联。它对应于Perl或Python的数组列表。
下面的代码是序列表示的示例 –
product:
- sku : BL394D
quantity : 4
description : Football
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
映射
另一方面,映射代表字典数据结构或哈希表。以下是一个示例:
batchLimit: 1000
threadCountLimit: 2
key: value
keyMapping: <What goes here?>
标量
标量表示字符串、整数、日期和原子数据类型的标准值。请注意,YAML还包括指定数据类型结构的节点。有关标量的更多信息,请参阅本教程的第6章。
序列化
YAML中需要进行序列化过程,以实现人类友好的键顺序和锚点名称。序列化的结果是一个YAML序列化树。可以遍历该树来产生一系列与YAML数据相关的事件调用。
以下是一个序列化的示例 –
consumer:
class: 'AppBundle\Entity\consumer'
attributes:
filters: ['customer.search', 'customer.order', 'customer.boolean']
collectionOperations:
get:
method: 'GET'
normalization_context:
groups: ['customer_list']
itemOperations:
get:
method: 'GET'
normalization_context:
groups: ['customer_get']
演示
YAML序列化的最终输出被称为演示。它以一种人类友好的方式表示字符流。YAML处理器包括各种演示细节,用于创建流、处理缩进和格式化内容。这个完整的过程是根据用户的偏好进行的。
YAML演示过程的一个示例是创建JSON值的结果。请参考下面的代码以更好地理解。
{
"consumer": {
"class": "AppBundle\\Entity\\consumer",
"attributes": {
"filters": [
"customer.search",
"customer.order",
"customer.boolean"
]
},
"collectionOperations": {
"get": {
"method": "GET",
"normalization_context": {
"groups": [
"customer_list"
]
}
}
},
"itemOperations": {
"get": {
"method": "GET",
"normalization_context": {
"groups": [
"customer_get"
]
}
}
}
}
}
解析
解析是展示的逆过程;它接收一串字符并创建一系列事件。它会丢弃展示过程中引入的细节,从而引发序列化事件。解析过程可能因为输入的格式不正确而失败。它基本上是一个检查YAML是否格式正确的过程。
考虑下面的YAML示例:
---
environment: production
classes:
nfs::server:
exports:
- /srv/share1
- /srv/share3
parameters:
paramter1
使用三个连字符,表示文档的开始,后面定义了各种属性。
YAML lint是YAML的在线解析器,用于解析YAML结构以检查其是否有效。YAML lint的官方链接如下:http://www.yamllint.com/
您可以查看下面显示的解析输出−