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/
您可以看到解析的输出,如下所示 −