YAML遵循工藝流程的標準程序。YAML中的本機數據結構包括節點等簡單表示。它也稱爲表示節點圖。
它包括正在序列化以創建序列化樹的映射、序列和標量。通過序列化,對象被轉換爲字節流。
序列化事件樹有助於創建字符流的表示形式,如下圖所示。
反向過程將字節流解析爲序列化事件樹。然後,將節點轉換爲節點圖。這些值稍後將在YAML本機數據結構中轉換。下圖說明了這一點;
YAML中的信息有兩種使用方式:機器處理和人類消費。YAML中的處理器用作在上圖中的互補視圖之間轉換信息的過程的工具。本章描述了YAML處理器在給定應用程式中必須提供的信息結構。
YAML包含一個序列化過程,用於以串行格式表示數據對象。YAML信息的處理包括表示、序列化、表示和解析三個階段。讓我們詳細討論每一個問題。
Representation
YAML使用三種節點表示數據結構:序列、映射和標量。
Sequence
序列是指有順序的條目數,它映射鍵值對的無序關聯。它對應於Perl或Python數組列表。
下面顯示的代碼是序列表示的一個示例−
product: - sku : BL394D quantity : 4 description : Football price : 450.00 - sku : BL4438H quantity : 1 description : Super Hoop price : 2392.00
Mapping
另一方面,映射表示字典數據結構或哈希表。下面是一個相同的例子;
batchLimit: 1000 threadCountLimit: 2 key: value keyMapping: <What goes here?>
Scalars
標量表示字符串、整數、日期和原子數據類型的標準值。注意,YAML還包括指定數據類型結構的節點。有關標量的更多信息,請參閱本教程的第6章。
Serialization
在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']
Presentation
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" ] } } } } }
Parsing
解析是表示的逆過程;它包含一個字符流並創建一系列事件。它丟棄表示過程中引入的導致序列化事件的詳細信息。解析過程可能由於輸入格式錯誤而失敗。這基本上是一個檢查山藥是否成型的程序。
考慮下面提到的一個YAML示例;
--- environment: production classes: nfs::server: exports: - /srv/share1 - /srv/share3 parameters: paramter1
它用三個連字符表示文檔的開頭,後面在文檔中定義了各種屬性。
YAML lint是YAML的在線解析器,有助於解析YAML結構以檢查它是否有效。YAML lint的官方連結如下所述:http://www.yamllint.com/
您可以看到如下所示的解析輸出;