Yaml-quick-guide

提供:Dev Guides
移動先:案内検索

YAML-はじめに

YAML Ain’t Markup Language is a data serialization language that matches user’s expectations about data. It designed to be human friendly and works perfectly with other programming languages. It is useful to manage data and includes Unicode printable characters. This chapter will give you an introduction to YAML and gives you an idea about its features.

フォーマット

以下に示すテキストを考慮してください-

Quick brown fox jumped over the lazy dog.

このためのYAMLテキストは以下に示すように表されます-

yaml.load(Quick brown fox jumped over the lazy dog.)
>>'Quick brown fox jumped over the lazy dog.'

YAMLは文字列形式の値を取り、上記のように出力を表すことに注意してください。

次の例の助けを借りてYAMLのフォーマットを理解しましょう-

3.1415926の値を持つ「pi」の次のポイント番号を検討します。 YAMLでは、以下に示すように浮動小数点数として表されます-

>>> yaml.load('3.1415926536')
3.1415926536

以下のように、複数の値が特定のデータ構造にロードされるとします-

eggs
ham
spam
French basil salmon terrine

これをYAMLにロードすると、値はリストの形式である配列データ構造で取得されます。 出力は次のようになります-

>>> yaml.load('''
   - eggs
   - ham
   - spam
   - French basil salmon terrine
   ''')
['eggs', 'ham', 'spam', 'French basil salmon terrine']

特徴

YAMLには、データマークアップ言語とドキュメントマークアップを区別するために、重要な構造を持つマークアップ言語が含まれています。 YAMLの設計目標と機能を以下に示します-

  • アジャイル手法のネイティブデータ構造と、Perl、Python、PHP、Ruby、JavaScriptなどの言語に対応
  • YAMLデータはプログラミング言語間で移植可能です
  • データ整合性のあるデータモデルを含む
  • 人間が読みやすい
  • 一方向処理をサポート
  • 実装と使用のしやすさ

YAML-基本

Now that you have an idea about YAML and its features, let us learn its basics with syntax and other operations. Remember that YAML includes a human readable structured format.

YAMLファイルを作成するためのルール

あなたがYAMLでファイルを作成しているときは、次の基本的なルールを覚えておく必要があります-

  • YAMLは大文字と小文字を区別します
  • ファイルには、拡張子として .yaml が必要です
  • YAMLでは、YAMLファイルの作成中にタブを使用できません。代わりにスペースが許可されます

YAMLファイルの基本コンポーネント

YAMLの基本的なコンポーネントは以下で説明されています-

従来のブロック形式

このブロック形式は、 hyphen + space を使用して、指定されたリストの新しいアイテムを開始します。 以下に示す例を観察してください-

--- # Favorite movies
 - Casablanca
 - North by Northwest
 - The Man Who Wasn't There

インライン形式

インライン形式は*カンマとスペース*で区切られ、アイテムはJSONで囲まれます。 以下に示す例を観察してください-

--- # Shopping list
   [milk, groceries, eggs, juice, fruits]

折り畳まれたテキスト

折り畳まれたテキストは、改行をスペースに変換し、先頭の空白を削除します。 以下に示す例を観察してください-

- {name: John Smith, age: 33}
- name: Mary Smith
  age: 27

YAMLのすべての基本的な規則に従う構造を以下に示します-

men: [John Smith, Bill Jones]
women:
  - Mary Smith
  - Susan Williams

YAML基本要素の概要

  • YAMLの基本要素の概要は次のとおりです。YAMLのコメントは()文字で始まります。
  • コメントは他のトークンと空白で区切る必要があります。
  • 空白のインデントは、構造を示すために使用されます。
  • タブはYAMLファイルのインデントとして含まれていません。
  • リストのメンバーは、先頭にハイフン(-)が付いています。
  • リストのメンバーは角括弧で囲まれ、コンマで区切られます。
  • 連想配列は、キーと値のペアの形式でコロン*(:)を使用して表されます。 それらは中括弧 *\ {} で囲まれています。
  • 単一のストリームを持つ複数のドキュメントは、3つのハイフン(---)で区切られます。
  • 各ファイルで繰り返されるノードは、最初はアンパサンド()で示され、後にアスタリスク(*)マークで示されます。
  • YAMLは常に、コロンとコンマをリストの区切り文字として使用し、その後にスカラー値のスペースが必要です。
  • ノードには、感嘆符()または二重感嘆符( !! )のラベルを付け、その後にURIまたはURLに展開できる文字列を付ける必要があります。

YAML-インデントと分離

Indentation and separation are two main concepts when you are learning any programming language. This chapter talks about these two concepts related to YAML in detail.

YAMLのインデント

YAMLには必須のスペースは含まれません。 さらに、一貫性を保つ必要はありません。 有効なYAMLインデントは以下に示されています-

a:
   b:
      - c
      -  d
      - e
f:
      "ghi"
  • YAMLでインデントを使用する際は、次のルールを覚えておく必要があります:フローブロックは、少なくとも現在のブロックレベルを囲むいくつかのスペースを使用する必要があります。
  • YAMLのフローコンテンツは複数の行にまたがっています。 フローコンテンツの先頭は* \ {または [*で始まります。 *ブロックリスト項目には、周囲のブロックレベルと同じインデントが含まれます。これは、-がインデントの一部と見なされるためです。

対象ブロックの例

例でインデントを示す次のコードを観察します-

--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
   given  : Chris
   family : Dumars
   address:
      lines: |
            458 Walkman Dr.
            Suite #292
      city    : Royal Oak
      state   : MI
      postal  : 48046
ship-to:* id001
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
   - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

文字列の分離

文字列は二重引用符で囲まれた文字列を使用して区切られます。 特定の文字列の改行文字をエスケープすると、完全に削除されてスペース値に変換されます。

この例では、文字列のデータ型を持つ配列構造としてリストされた動物のリストに焦点を当てています。 すべての新しい要素は、プレフィックスとして記載されているように、ハイフンのプレフィックスでリストされます。

-
 - Cat
 - Dog
 - Goldfish
-
 - Python
 - Lion
 - Tiger

YAMLの文字列表現を説明する別の例を以下に示します。

 errors:
      messages:
         already_confirmed: "was already confirmed, please try signing in"
         confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
         expired: "has expired, please request a new one"
         not_found: "not found"
         not_locked: "was not locked"
         not_saved:
            one: "1 error prohibited this %{resource} from being saved:"
            other: "%{count} errors prohibited this %{resource} from being saved:"

この例は、ユーザーがキーの側面に言及するだけで使用でき、それに応じて値を取得できるエラーメッセージのセットを参照します。 このYAMLのパターンは、YAMLを初めて使用するユーザーが理解できるJSONの構造に従います。

YAML-コメント

Now that you are comfortable with the syntax and basics of YAML, let us proceed further into its details. In this chapter, we will see how to use comments in YAML.

  • YAMLは単一行コメント*をサポートしています。 その構造は、例の助けを借りて以下で説明されています-
# this is single line comment.
  • YAMLは複数行コメント*をサポートしていません。 あなたが複数の行にコメントを提供したい場合は、以下の例に示すように行うことができます-
# this
# is a multiple
# line comment

コメントの特徴

YAMLのコメントの機能は以下のとおりです-

  • コメント付きブロックは実行中にスキップされます。
  • コメントは、指定されたコードブロックの説明を追加するのに役立ちます。
  • コメントはスカラー内に現れてはなりません。
  • YAMLにはハッシュ記号(#)をエスケープする方法が含まれていないため、複数行の文字列内にコメントを生の文字列値から分割する方法はありません。

コレクション内のコメントは以下に示されています-

key: #comment 1
   - value line 1
   #comment 2
   - value line 2
   #comment 3
   - value line 3

YAMLブロックにコメントを付けるためのショートカットキーの組み合わせは Ctrl + Q です。

あなたが Sublime Text editor を使用している場合、ブロックにコメントするための手順は以下に記載されています-

ブロックを選択します。 LinuxおよびWindowsでは「CTRL +/」、Macオペレーティングシステムでは「CMD +/」を使用します。 ブロックを実行します。

*Visual Studio Code Editor* を使用している場合、同じ手順が適用されることに注意してください。 YAMLファイルの作成には、ほとんどのオペレーティングシステムでサポートされ、開発者が使いやすいショートカットキーが含まれているため、 *Sublime Text Editor* を使用することを常にお勧めします。

YAML-コレクションと構造

YAML includes block collections which use indentation for scope. Here, each entry begins with a new line. Block sequences in collections indicate each entry with a dash and space (-). In YAML, block collections styles are not denoted by any specific indicator. Block collection in YAML can distinguished from other scalar quantities with an identification of key value pair included in them.

マッピングは、JSON構造に含まれるキー値の表現です。 多言語サポートシステムおよびモバイルアプリケーションでのAPIの作成でよく使用されます。 マッピングでは、コロンとスペース)を使用したキー値ペア表現を使用します。

スカラーのシーケンスの例、たとえば以下に示すボール選手のリストを検討してください-

- Mark Joseph
- James Stephen
- Ken Griffey

次の例は、スカラーからスカラーへのマッピングを示しています-

hr: 87
avg: 0.298
rbi: 149

次の例は、スカラーをシーケンスにマッピングすることを示しています-

European:
- Boston Red Sox
- Detroit Tigers
- New York Yankees

national:
- New York Mets
- Chicago Cubs
- Atlanta Braves

コレクションは、以下に示すシーケンスマッピングに使用できます-

-
name: Mark Joseph
hr: 87
avg: 0.278
-
name: James Stephen
hr: 63
avg: 0.288

コレクションでは、YAMLはインデントを使用してスペースを示すのではなく、明示的なインジケーターを使用するフロースタイルを含みます。 コレクション内のフローシーケンスは、角括弧で囲まれたコンマ区切りリストとして記述されます。 symphonyのようなPHPフレームワークに含まれるコレクションのベストイラスト。

[PHP, Perl, Python]

これらのコレクションはドキュメントに保存されます。 YAMLでのドキュメントの分離は、3つのハイフンまたはダッシュ(---)で示されます。 ドキュメントの最後には、3つのドット(…)が付いています。

YAMLでのドキュメントの分離は、3つのダッシュ(---)で示されます。 ドキュメントの終わりは、3つのドット(…)で表されます。

文書表現は、以下に記載されている構造形式と呼ばれています-

# Ranking of 1998 home runs
---
- Mark Joseph
- James Stephen
- Ken Griffey

# Team ranking
---
- Chicago Cubs
- St Louis Cardinals

スペースを組み合わせた疑問符は、構造の複雑なマッピングを示します。 ユーザーはブロックコレクション内に、ダッシュ、コロン、疑問符を含む構造を含めることができます。 次の例は、シーケンス間のマッピングを示しています-

- 2001-07-23
? [ New York Yankees,Atlanta Braves ]
: [ 2001-07-02, 2001-08-12, 2001-08-14]

YAML-スカラーとタグ

Scalars in YAML are written in block format using a literal type which is denoted as(|). It denotes line breaks count. In YAML, scalars are written in folded style (>) where each line denotes a folded space which ends with an empty line *or more indented* line.

新しい行は、リテラルに保存されています-

ASCII Art
--- |
\//||\/||
//|| ||__

折り畳まれた改行は、以下に示すように、*インデントされた行*と*空白行*のために保持されます-

>
Sammy Sosa completed another
fine season with great stats.
63 Home Runs
0.288 Batting Average
What a year!

YAMLフロースカラーには、プレーンスタイルと引用符付きスタイルが含まれます。 二重引用符スタイルには、さまざまなエスケープシーケンスが含まれます。 フロースカラーには複数の行を含めることができます。この構造では、改行は常に折り畳まれます。

plain:
This unquoted scalar
spans many lines.
quoted: "So does this
quoted scalar.\n"

YAMLでは、タグなしのノードは特定のタイプのアプリケーションで指定されます。 タグ仕様の例では、通常、YAMLタグリポジトリに seq、map および str タイプを使用します。 タグは、以下のように言及されている例として表されます-

整数タグ

これらのタグには整数値が含まれます。 数値タグとも呼ばれます。

canonical: 12345
decimal: +12,345
sexagecimal: 3:25:45
octal: 014
hexadecimal: 0xC

浮動小数点数

これらのタグには、10進値と指数値が含まれます。 また、指数タグとも呼ばれます。

canonical: 1.23015e+3
exponential: 12.3015e+02
sexagecimal: 20:30.15
fixed: 1,230.15
negative infinity: -.inf
not a number: .NaN

その他のタグ

さまざまな整数値、浮動値、文字列値が埋め込まれています。 したがって、その他のタグと呼ばれます。

null: ~
true: y
false: n
string: '12345'

YAML-完全な長さの例

The following full-length example specifies the construct of YAML which includes symbols and various representations which will be helpful while converting or processing them in JSON format. These attributes are also called as key names in JSON documents. These notations are created for security purposes.

上記のYAML形式は、デフォルト、アダプター、およびホストのさまざまな属性を、さまざまな他の属性とともに表します。 YAMLはまた、生成されたすべてのファイルのログを保持し、生成されたエラーメッセージの追跡を維持します。 指定されたYAMLファイルをJSON形式に変換すると、次のように目的の出力が得られます-

defaults: &defaults
   adapter:  postgres
   host:     localhost

development:
   database: myapp_development
   <<: *defaults

test:
   database: myapp_test
   <<: *defaults

YAMLをJSON形式に変換して、出力を確認しましょう。

{
   "defaults": {
      "adapter": "postgres",
      "host": "localhost"
   },
   "development": {
      "database": "myapp_development",
      "adapter": "postgres",
      "host": "localhost"
   },
   "test": {
      "database": "myapp_test",
      "adapter": "postgres",
      "host": "localhost"
   }
}

プレフィックス「<<:*」が付いたデフォルトキーは、同じコードスニペットを繰り返し記述する必要がなく、必要に応じて含まれます。

YAML-プロセス

YAML follows a standard procedure for Process flow. The native data structure in YAML includes simple representations such as nodes. It is also called as Representation Node Graph.

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

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

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

YAMLプロセス

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

YAMLには、データオブジェクトをシリアル形式で表すためのシリアル化手順が含まれています。 YAML情報の処理には、*表現、シリアル化、プレゼンテーション、解析*の3つの段階が含まれます。 それぞれについて詳しく説明します。

表現

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

シーケンス

順序とは、順序付けられたエントリの数を指し、キーと値のペアの順序付けられていない関連付けをマップします。 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構造を解析して有効かどうかを確認するのに役立ちます。 YAML lintの公式リンクは以下のとおりです:http://www.yamllint.com/

以下に示すように解析の出力を見ることができます-

YAML Lint

YAML-情報モデル

This chapter will explain the detail about the procedures and processes that we discussed in last chapter. Information Models in YAML will specify the features of serialization and presentation procedure in a systematic format using a specific diagram.

情報モデルの場合、プログラミング環境間で移植可能なアプリケーション情報を表すことが重要です。

YAML情報モデル

上記の図は、グラフ形式で表される通常の情報モデルを表しています。 YAMLでは、ネイティブデータの表現はルート化され、接続され、タグ付きノードの有向グラフです。 有向グラフに言及すると、有向グラフを持つノードのセットが含まれます。 情報モデルで述べたように、YAMLは3種類のノードをサポートします-

  • シーケンス
  • スカラー
  • マッピング

これらの表現ノードの基本的な定義については、前の章で説明しました。 この章では、これらの用語の概略図に注目します。 次のシーケンス図は、さまざまなタイプのタグとマッピングノードを持つ凡例のワークフローを表しています。

凡例のシーケンス図ワークフロー

ノードには、シーケンスノード、スカラーノード、および*マッピングノード*の3つのタイプがあります。

シーケンス

シーケンスノードはシーケンシャルアーキテクチャに従い、0個以上のノードの順序付きシリーズを含みます。 YAMLシーケンスには、同じノードが繰り返し含まれている場合と、単一のノードが含まれている場合があります。

スカラー

YAMLのスカラーのコンテンツには、一連のゼロの形式で表現できるUnicode文字が含まれています。 一般に、スカラーノードにはスカラー量が含まれます。

マッピング

マッピングノードには、キーと値のペアの表現が含まれます。 マッピングノードのコンテンツには、キーと値のペアと、キー名を一意に維持するという必須条件の組み合わせが含まれます。 シーケンスとマッピングは集合的に集合を形成します。

上記の図に示されているように、スカラー、シーケンス、およびマッピングは体系的な形式で表されていることに注意してください。

YAML-構文文字

Various types of characters are used for various functionalities. This chapter talks in detail about syntax used in YAML and focuses on character manipulation.

インジケータ文字

インジケーター文字には、YAMLドキュメントのコンテンツを記述するために使用される特別なセマンティクスが含まれます。 次の表にこれを詳細に示します。

Sr.No. Character & Functionality
1

_

ブロックシーケンスエントリを示します

2

?

マッピングキーを示します

3

:

マッピング値を示します

4

,

フロー収集エントリを示します

5

[

フローシーケンスを開始します

6

]

フローシーケンスを終了します

7

\{

フローマッピングを開始します

8

}

フローマッピングを終了します

9

#

コメントを示します

10

&

ノードのアンカープロパティを示します

11 別名ノードを示します
12

!

ノードのタグを示します

13 *

リテラルブロックスカラーを示します

14

>

折りたたみブロックスカラーを示します

15

`

引用符で囲まれたフロースカラーを単一引用符で囲む

16

"

二重引用符で囲まれたフロースカラーを二重引用符で囲む

17

次の例は、構文で使用される文字を示しています-

%YAML 1.1
---
!!map {
   ? !!str "sequence"
   : !!seq [
      !!str "one", !!str "two"
   ],
   ? !!str "mapping"
   : !!map {
      ? !!str "sky" : !!str "blue",
      ? !!str "sea" : !!str "green",
   }
}

# This represents
# only comments.
---
!!map1 {
   ? !!str "anchored"
   : !local &A1 "value",
   ? !!str "alias"
   : *A1,
}
!!str "text"

YAML-構文プリミティブ

In this chapter you will learn about the following aspects of syntax primitives in YAML −

  • 生産パラメータ
  • インデントスペース
  • 分離スペース
  • 無視される行プレフィックス
  • 行折り

各側面を詳細に理解しましょう。

生産パラメータ

生産パラメーターには、特定の生産で使用されるパラメーターのセットと許容値の範囲が含まれます。 生産パラメータの次のリストはYAMLで使用されます-

インデント

文字 n または m で示されます。文字ストリームは、含まれるブロックのインデントレベルによって異なります。 多くのプロダクションでは、これらの機能をパラメーター化しています。

コンテキスト

*c* で示されます。 YAMLは、*ブロックスタイル*と*フロースタイル*の2つのコンテキストグループをサポートしています。

スタイル

sで示されます。 スカラーコンテンツは、5つのスタイルのいずれかで表示できます。

むしゃむしゃ

*t* で示されます。 ブロックスカラーは、ブロックのトリミングに役立つ多くのメカニズム( *strip、clip* 、 *keep* )を提供します。 むち打つことは、新しいライン文字列のフォーマットに役立ちます。 ブロックスタイルの表現が使用されます。 むちゃくちゃプロセスは、インジケータの助けを借りて発生します。 インジケータは、改行文字列でどの出力を生成するかを制御します。 改行は*(-)*演算子で削除され、改行は*(+)*演算子で追加されます。

加工プロセスの例を以下に示します-

strip: |-
   text↓
clip: |
   text↓
keep: |+
   text↓

指定されたYAMLの例を解析した後の出力は次のとおりです-

指定されたYAMLの解析後の出力

インデントスペース

YAML文字ストリームでは、インデントは、ゼロ個以上の文字による改行文字として定義されます。 留意すべき最も重要な点は、インデントにはタブ文字を含めないことです。 インデントの文字は、ノードのコンテンツ情報の一部と見なされることはありません。 より良い理解のために次のコードを観察します-

%YAML 1.1
---
!!map {
   ? !!str "Not indented"
   : !!map {
      ? !!str "By one space"
      : !!str "By four\n spaces\n",
      ? !!str "Flow style"
      : !!seq [
         !!str "By two",
         !!str "Still by two",
         !!str "Again by two",
      ]
   }
}

インデント後に表示できる出力は次のとおりです-

{
   "Not indented": {
      "By one space": "By four\n spaces\n",
      "Flow style": [
         "By two",
         "Still by two",
         "Again by two"
      ]
   }
}

分離スペース

YAMLはトークン間の分離にスペース文字を使用します。 最も重要な注意点は、YAMLの区切りにはタブ文字を含めないことです。

次のコードは、分離スペースの使用方法を示しています-

{ · first: · Sammy, · last: · Sosa · }
{
   "\u00b7 last": "\u00b7 Sosa \u00b7",
   "\u00b7 first": "\u00b7 Sammy"
}

無視される行プレフィックス

空の接頭辞には、先頭の空白も含むスカラー型に応じて常にインデントが含まれます。 プレーンスカラーにはタブ文字を含めないでください。 一方、引用符で囲まれたスカラーにはタブ文字が含まれる場合があります。 ブロックスカラーはインデントに完全に依存します。

次の例は、系統的な方法で無視された行プレフィックスの動作を示しています-

%YAML 1.1
---
!!map {
   ? !!str "plain"
   : !!str "text lines",
   ? !!str "quoted"
   : !!str "text lines",
   ? !!str "block"
   : !!str "text·®lines\n"
}

ブロックストリームのために達成された出力は次のとおりです-

{
   "plain": "text lines",
   "quoted": "text lines",
   "block": "text\u00b7\u00aelines\n"
}

行折り

行の折り畳みにより、読みやすくするために長い行を分割できます。 短い行が多いほど、読みやすくなります。 行の折り畳みは、長い行の元のセマンティクスに注目することによって実現されます。 次の例は、行の折りたたみを示しています-

%YAML 1.1
--- !!str
"specific\L\
trimmed\n\n\n\
as space"

あなたは次のようにJSON形式で行の折りたたみの出力を見ることができます-

"specific\u2028trimmed\n\n\nas space"

YAML-文字ストリーム

In YAML, you come across various character streams as follows −

  • 指令
  • ドキュメント境界マーカー
  • 書類
  • 完全なストリーム

この章では、それらについて詳しく説明します。

指令

ディレクティブは、YAMLプロセッサで使用される基本的な命令です。 ディレクティブは、シリアル化ツリーに反映されないコメントのようなプレゼンテーションの詳細です。 YAMLでは、プライベートディレクティブを定義する方法はありません。 このセクションでは、関連する例とともにさまざまなタイプのディレクティブについて説明します-

予約済みディレクティブ

次の例に示すように、予約済みディレクティブは3つのハイフン文字(---)で初期化されます。 予約済みのディレクティブは、JSONの特定の値に変換されます。

%YAML 1.1
--- !!str
"foo"

YAMLディレクティブ

YAMLディレクティブはデフォルトのディレクティブです。 JSONに変換される場合、フェッチされる値には、前後の文字にスラッシュ文字が含まれます。

%YAML 1.1
---
!!str "foo"

ドキュメント境界マーカー

YAMLはこれらのマーカーを使用して、1つのストリームに複数のドキュメントを含めることができます。 これらのマーカーは、YAMLドキュメントの構造を伝えるために特別に使用されます。 「---」で始まる行は、新しいドキュメントを開始するために使用されることに注意してください。

次のコードは、例を使用してこれについて説明します-

%YAML 1.1
---
!!str "foo"
%YAML 1.1
---
!!str "bar"
%YAML 1.1
---
!!str "baz"

書類

YAMLドキュメントは、単一のルートノードとして提示される単一のネイティブデータ構造と見なされます。 ディレクティブ、コメント、インデント、スタイルなどのYAMLドキュメントのプレゼンテーションの詳細は、それらに含まれるコンテンツとは見なされません。

YAMLで使用されるドキュメントには2つのタイプがあります。 彼らはこのセクションで説明されています-

明示的なドキュメント

ドキュメント開始マーカーで始まり、その後にルートノードが表示されます。 YAMLの明示的な宣言の例を以下に示します-

---

some: yaml

...

この例には、明示的な開始マーカーと終了マーカーが含まれており、この例では「---」および「…」です。 指定されたYAMLをJSON形式に変換すると、以下に示すような出力が得られます-

{
   "some": "yaml"
}

暗黙のドキュメント

これらのドキュメントは、ドキュメント開始マーカーで始まりません。 以下のコードを確認してください-

fruits:
   - Apple
   - Orange
   - Pineapple
   - Mango

これらの値をJSON形式に変換すると、以下に示すように出力が単純なJSONオブジェクトとして取得されます-

{
   "fruits": [
      "Apple",
      "Orange",
      "Pineapple",
      "Mango"
   ]
}

完全なストリーム

YAMLには、文字ストリームと呼ばれる一連のバイトが含まれています。 ストリームは、文字エンコーディングを示すバイト順を含むプレフィックスで始まります。 完全なストリームは、文字エンコードを含むプレフィックスで始まり、その後にコメントが続きます。

完全なストリーム(文字ストリーム)の例は以下に示されています-

%YAML 1.1
---
!!str "Text content\n"

YAML-ノードのプロパティ

Each presentation node includes two major characteristics called anchor *and tag*. Node properties may be specified with node content, omitted from the character stream.

ノード表現の基本的な例は次のとおりです-

%YAML 1.1
---
!!map {
   ? &A1 !!str "foo"
   : !!str "bar",
   ? !!str &A2 "baz"
   : *a1
}

ノードアンカー

アンカープロパティは、将来の参照用のノードを表します。 ノード内のYAML表現の文字ストリームは、*アンパサンド(&)*インジケータで示されます。 YAMLプロセッサは、アンカー名を表現の詳細とともに保持する必要はありません。 次のコードはこれを説明します-

%YAML 1.1
---
!!map {
   ? !!str "First occurence"
   : &A !!str "Value",
   ? !!str "Second occurence"
   : *A
}

アンカーノードで生成されたYAMLの出力を以下に示します-

---
!!map {
   ? !!str "First occurence"
   : !!str "Value",
   ? !!str "Second occurence"
   : !!str "Value",
}

ノードタグ

タグプロパティは、ノードを完全に定義するネイティブデータ構造のタイプを表します。 タグは()インジケータで表されます。 タグは、表現グラフの固有の部分と見なされます。 次の例は、ノードタグを詳細に説明します-

%YAML 1.1
---
!!map {
   ? !<tag:yaml.org,2002:str> "foo"
   : !<!bar> "baz"
}

ノードコンテンツ

ノードコンテンツは、フローコンテンツまたはブロック形式で表すことができます。 ブロックコンテンツは行末まで拡張され、インデントを使用して構造を示します。 各コレクションの種類は、特定の単一のフローコレクションスタイルで表すことも、単一のブロックと見なすこともできます。 次のコードはこれを詳細に説明します-

%YAML 1.1
---
!!map {
   ? !!str "foo"
   : !!str "bar baz"
}

%YAML 1.1
---
!!str "foo bar"

%YAML 1.1
---
!!str "foo bar"

%YAML 1.1
---
!!str "foo bar\n"

YAML-ブロックスカラーヘッダー

In this chapter, we will focus on various scalar types which are used for representing the content. In YAML, comments may either precede or follow scalar content. It is important to note that comments should not be included within scalar content.

複数のキーで使用する場合を除き、すべてのフロースカラースタイルに複数の行を含めることができます。

スカラーの表現は以下のとおりです-

%YAML 1.1
---
!!map {
   ? !!str "simple key"
   : !!map {
      ? !!str "also simple"
      : !!str "value",
      ? !!str "not a simple key"
      : !!str "any value"
   }
}

ブロックスカラーヘッダーの生成された出力は以下に示されています-

{
   "simple key": {
      "not a simple key": "any value",
      "also simple": "value"
   }
}

ドキュメントマーカースカラーコンテンツ

この例のすべての文字は、内部スペース文字を含むコンテンツと見なされます。

%YAML 1.1
---
!!map {
   ? !!str "---"
   : !!str "foo",
   ? !!str "...",
   : !!str "bar"
}

%YAML 1.1
---
!!seq [
   !!str "---",
   !!str "...",
   !!map {
      ? !!str "---"
      : !!str "..."
   }
]

プレーン改行は、以下に示す例で表されます-

%YAML 1.1
---
!!str "as space \
trimmed\n\
specific\L\n\
none"

同じために対応するJSON出力は以下に記載されています-

"as space trimmed\nspecific\u2028\nnone"

YAML-フロースタイル

Flow styles in YAML can be thought of as a natural extension of JSON to cover the folding content lines for better readable feature which uses anchors and aliases to create the object instances. In this chapter, we will focus on flow representation of the following concepts −

  • エイリアスノード
  • 空のノード
  • Flow Scalarスタイル
  • フロー収集スタイル *フローノード

エイリアスノードの例を以下に示します-

%YAML 1.2
---
!!map {
   ? !!str "First occurrence"
   : &A !!str "Foo",
   ? !!str "Override anchor"
   : &B !!str "Bar",
   ? !!str "Second occurrence"
   :* A,
   ? !!str "Reuse anchor"
   : *B,
}

上記のコードのJSON出力は以下のとおりです-

{
   "First occurrence": "Foo",
   "Second occurrence": "Foo",
   "Override anchor": "Bar",
   "Reuse anchor": "Bar"
}

コンテンツが空のノードは、空のノードと見なされます。 次の例はこれを示しています-

%YAML 1.2
---
!!map {
   ? !!str "foo" : !!str "",
   ? !!str "" : !!str "bar",
}

JSONの空のノードの出力は以下のように表されます-

{
   "": "bar",
   "foo": ""
}

フロースカラースタイルには、二重引用符、単一引用符、およびプレーンタイプが含まれます。 同じための基本的な例を以下に示します-

%YAML 1.2
---
!!map {
   ? !!str "implicit block key"
   : !!seq [
      !!map {
         ? !!str "implicit flow key"
         : !!str "value",
      }
   ]
}

上記の例のJSON形式での出力を以下に示します-

{
   "implicit block key": [
      {
         "implicit flow key": "value"
      }
   ]
}

YAMLのフローコレクションは、別のフローコレクション内のブロックコレクションにネストされています。 フローコレクションエントリは、カンマ)インジケータで終了します。 次の例は、フロー収集ブロックを詳細に説明します-

%YAML 1.2
---
!!seq [
   !!seq [
      !!str "one",
      !!str "two",
   ],

   !!seq [
      !!str "three",
      !!str "four",
   ],
]

JSONでのフロー収集の出力を以下に示します-

[
   [
      "one",
      "two"
   ],
   [
      "three",
      "four"
   ]
]

JSONのようなフロースタイルには、開始インジケーターと終了インジケーターが含まれます。 プロパティを持たない唯一のフロースタイルは、プレーンスカラーです。

%YAML 1.2
---
!!seq [
!!seq [ !!str "a", !!str "b" ],
!!map { ? !!str "a" : !!str "b" },
!!str "a",
!!str "b",
!!str "c",]

上記のJSON形式のコードの出力は以下のとおりです-

[
   [
      "a",
      "b"
   ],

   {
      "a": "b"
   },

   "a",
   "b",
   "c"
]

YAML-ブロックスタイル

YAML includes two block scalar styles: literal *and folded*. Block scalars are controlled with few indicators with a header preceding the content itself. An example of block scalar headers is given below −

%YAML 1.2
---
!!seq [
   !!str "literal\n",
   !!str "·folded\n",
   !!str "keep\n\n",
   !!str "·strip",
]

デフォルトの動作を持つJSON形式での出力は以下のとおりです-

[
   "literal\n",
   "\u00b7folded\n",
   "keep\n\n",
   "\u00b7strip"
]

ブロックスタイルの種類

ブロックスタイルには、 literal、folded、keep 、および strip スタイルの4つのタイプがあります。 これらのブロックスタイルは、ブロックチョッピングシナリオの助けを借りて定義されます。 ブロックのむしゃむしゃシナリオの例を以下に示します-

%YAML 1.2
---
!!map {
   ? !!str "strip"
   : !!str "# text",
   ? !!str "clip"
   : !!str "# text\n",
   ? !!str "keep"
   : !!str "# text\n",
}

以下に示すように、JSONの3つの形式で生成された出力を確認できます-

{
   "strip": "# text",
   "clip": "# text\n",
   "keep": "# text\n"
}

YAMLでのむしゃむしゃは、さまざまな形式で解釈される最後の改行と後続の空行を制御します。

ストリッピング

この場合、最後の改行と空行はスカラーコンテンツから除外されます。 チョッピングインジケーター「-」で指定されます。

クリッピング

明示的なチョッピングインジケーターが指定されていない場合、クリッピングはデフォルトの動作と見なされます。 最終的なブレーク文字は、スカラーのコンテンツに保持されます。 クリッピングの最良の例は、上記の例に示されています。 改行 "\ n" 文字で終了します。

維持

維持とは、「+」チョッピングインジケータの表現を使用した追加のことです。 作成された追加の行は折り畳みの対象になりません。 追加の行は折り畳まれません。

YAML-シーケンススタイル

To understand sequence styles, it is important to understand collections. The concept of collections and sequence styles work in parallel. The collection in YAML is represented with proper sequence styles. If you want to refer proper sequencing of tags, always refer to collections. Collections in YAML are indexed by sequential integers starting with zero as represented in arrays. The focus of sequence styles begins with collections.

宇宙の惑星の数を、コレクションとして作成できるシーケンスとして考えてみましょう。 次のコードは、宇宙の惑星のシーケンススタイルを表現する方法を示しています-

# Ordered sequence of nodes in YAML STRUCTURE
Block style: !!seq
- Mercury   # Rotates - no light/dark sides.
- Venus     # Deadliest. Aptly named.
- Earth     # Mostly dirt.
- Mars      # Seems empty.
- Jupiter   # The king.
- Saturn    # Pretty.
- Uranus    # Where the sun hardly shines.
- Neptune   # Boring. No rings.
- Pluto     # You call this a planet?
Flow style: !!seq [ Mercury, Venus, Earth, Mars,      # Rocks
                    Jupiter, Saturn, Uranus, Neptune, # Gas
                    Pluto ]                           # Overrated

次に、JSON形式の順序付きシーケンスの次の出力を見ることができます-

{
   "Flow style": [
      "Mercury",
      "Venus",
      "Earth",
      "Mars",
      "Jupiter",
      "Saturn",
      "Uranus",
      "Neptune",
      "Pluto"
   ],

   "Block style": [
      "Mercury",
      "Venus",
      "Earth",
      "Mars",
      "Jupiter",
      "Saturn",
      "Uranus",
      "Neptune",
      "Pluto"
   ]
}

YAML-フローマッピング

Flow mappings in YAML represent the unordered collection of key value pairs. They are also called as mapping node. Note that keys should be maintained unique. If there is a duplication of keys in flow mapping structure, it will generate an error. The key order is generated in serialization tree.

フローマッピング構造の例を以下に示します-

%YAML 1.1
paper:
   uuid: 8a8cbf60-e067-11e3-8b68-0800200c9a66
   name: On formally undecidable propositions of  Principia Mathematica and related systems I.
   author: Kurt Gödel.
tags:
   - tag:
      uuid: 98fb0d90-e067-11e3-8b68-0800200c9a66
      name: Mathematics
   - tag:
      uuid: 3f25f680-e068-11e3-8b68-0800200c9a66
      name: Logic

JSON形式のマッピングされたシーケンス(順不同リスト)の出力は以下のとおりです-

{
   "paper": {
      "uuid": "8a8cbf60-e067-11e3-8b68-0800200c9a66",
      "name": "On formally undecidable propositions of Principia Mathematica and related systems I.",
      "author": "Kurt Gödel."
   },
   "tags": [
      {
         "tag": {
            "uuid": "98fb0d90-e067-11e3-8b68-0800200c9a66",
            "name": "Mathematics"
         }
      },
      {
         "tag": {
            "uuid": "3f25f680-e068-11e3-8b68-0800200c9a66",
            "name": "Logic"
         }
      }
   ]
}

上記のようにこの出力を観察すると、キー名がYAMLマッピング構造で一意に維持されていることが観察されます。

YAML-ブロックシーケンス

The block sequences of YAML represent a series of nodes. Each item is denoted by a leading “-“ indicator. Note that the “-“ indicator in YAML should be separated from the node with a white space.

ブロックシーケンスの基本的な表現は以下のとおりです-

block sequence:
··- one↓
  - two : three↓

ブロックシーケンスをよりよく理解するには、次の例をご覧ください。

例1

port: &ports
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *ports

JSON形式のブロックシーケンスの出力は以下のとおりです-

{
   "port": {
      "adapter": "postgres",
      "host": "localhost"
   },
   "development": {
      "database": "myapp_development",
      "adapter": "postgres",
      "host": "localhost"
   }
}

YAML-フェイルセーフスキーマ

A YAML schema is defined as a combination of set of tags and includes a mechanism for resolving non-specific tags. The failsafe schema in YAML is created in such a manner that it can be used with any YAML document. It is also considered as a recommended schema for a generic YAML document.

タイプ

フェイルセーフスキーマには、 Generic Mapping および Generic Sequence の2種類があります。

汎用マッピング

連想コンテナを表します。 ここで、各キーは関連付け内で一意であり、正確に1つの値にマップされます。 YAMLにはキー定義の制限はありません。

一般的なマッピングを表すための例を以下に示します-

Clark : Evans
Ingy : döt Net
Oren : Ben-Kiki
Flow style: !!map { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }

JSON形式の一般的なマッピング構造の出力は以下に示されています-

{
   "Oren": "Ben-Kiki",
   "Ingy": "d\u00f6t Net",
   "Clark": "Evans",
   "Flow style": {
      "Oren": "Ben-Kiki",
      "Ingy": "d\u00f6t Net",
      "Clark": "Evans"
   }
}

汎用シーケンス

シーケンスのタイプを表します。 これには、ゼロから始まる連続した整数でインデックス付けされたコレクションが含まれます。 !! seq タグで表されます。

Clark : Evans
Ingy : döt Net
Oren : Ben-Kiki
Flow style: !!seq { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }

この一般的なフェイルセーフシーケンスの出力

schema is shown below:
{
   "Oren": "Ben-Kiki",
   "Ingy": "d\u00f6t Net",
   "Clark": "Evans",
   "Flow style": {
      "Oren": "Ben-Kiki",
      "Ingy": "d\u00f6t Net",
      "Clark": "Evans"
   }
}

YAML-JSONスキーマ

JSON schema in YAML is considered as the common denominator of most modern computer languages. It allows parsing JSON files. It is strongly recommended in YAML that other schemas should be considered on JSON schema. The primary reason for this is that it includes key value combination which are user friendly. The messages can be encoded as key and can be used as and when needed.

JSONスキーマはスカラーであり、値がありません。 JSONスキーマのマッピングエントリは、nullが有効として扱われるキーと値のペアの形式で表されます。

ヌルのJSONスキーマは次のように表されます-

!!null null: value for null key
key with null value: !!null null

JSON表現の出力は以下に記載されています-

{
   "null": "value for null key",
   "key with null value": null
}

次の例は、ブールJSONスキーマを表します-

YAML is a superset of JSON: !!bool true
Pluto is a planet: !!bool false

以下は、JSON形式で同じための出力です-

{
   "YAML is a superset of JSON": true,
   "Pluto is a planet": false
}

次の例は、整数のJSONスキーマを表します-

negative: !!int -12
zero: !!int 0
positive: !!int 34
{
   "positive": 34,
   "zero": 0,
   "negative": -12
}

JSONスキーマのタグは、次の例で表されます-

A null: null
Booleans: [ true, false ]
Integers: [ 0, -0, 3, -19 ]
Floats: [ 0., -0.0, 12e03, -2E+05 ]
Invalid: [ True, Null, 0o7, 0x3A, +12.3 ]

以下に示すように、JSON出力を見つけることができます-

{
   "Integers": [
      0,
      0,
      3,
      -19
   ],

   "Booleans": [
      true,
      false
   ],
   "A null": null,

   "Invalid": [
         true,
         null,
         "0o7",
         58,
         12.300000000000001
   ],

   "Floats": [
      0.0,
      -0.0,
      "12e03",
      "-2E+05"
   ]
}