YAML-プロセス

YAMLは、プロセスフローの標準的な手順に従います。YAMLのネイティブデータ構造には、ノードなどの単純な表現が含まれています。これは、表現ノードグラフとも呼ばれます。

これには、シリアル化ツリーを作成するためにシリアル化されるマッピング、シーケンス、およびスカラー量が含まれます。シリアル化では、オブジェクトはバイトのストリームで変換されます。

シリアル化イベントツリーは、次の図に示すように、文字ストリームのプレゼンテーションを作成するのに役立ちます。

逆の手順では、バイトのストリームを解析してシリアル化されたイベントツリーにします。その後、ノードはノードグラフに変換されます。これらの値は、後でYAMLネイティブデータ構造に変換されます。下の図はこれを説明しています-

YAMLの情報は、次の2つの方法で使用されます。 machine processing そして human consumption。YAMLのプロセッサは、上記の図の補完的なビュー間で情報を変換する手順のツールとして使用されます。この章では、YAMLプロセッサが特定のアプリケーション内で提供する必要のある情報構造について説明します。

YAMLには、データオブジェクトをシリアル形式で表すためのシリアル化手順が含まれています。YAML情報の処理には、次の3つの段階があります。Representation, Serialization, Presentation and parsing。それぞれについて詳しく説明しましょう。

表現

YAMLは、次の3種類のノードを使用してデータ構造を表します。 sequence, mapping そして scalar

シーケンス

シーケンスとは、順序付けられたエントリ数を指し、キーと値のペアの順序付けられていない関連付けをマップします。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

3つのハイフンで、後で定義されるさまざまな属性を持つドキュメントの開始を表します。

YAML lintはYAMLのオンラインパーサーであり、YAML構造を解析して有効かどうかを確認するのに役立ちます。YAMLlintの公式リンクは以下のとおりです。http://www.yamllint.com/

以下に示すように、解析の出力を確認できます。