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還包括指定數據類型結構的節點。
序列化
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/
可以看到解析的輸出,如下所示 -