The YAML Format

According to the official YAML website, YAML is "a human friendly data serialization standard for all programming languages". The Symfony Yaml component implements a subset of the YAML specification. Specifically, it implements the minimum set of features needed to use YAML as a configuration file format.

YAML の公式 Web サイトによると、YAML は「すべてのプログラミング言語の人間に優しいデータシリアル化標準」です。 Symfony Yaml コンポーネントは、YAML 仕様のサブセットを実装しています。具体的には、構成ファイル形式として YAML を使用するために必要な最小限の機能セットを実装します。

Scalars

The syntax for scalars is similar to the PHP syntax.

スカラーの構文は、PHP 構文に似ています。

Strings

Strings in YAML can be wrapped both in single and double quotes. In some cases, they can also be unquoted:

YAML の文字列は、一重引用符と二重引用符の両方で囲むことができます。場合によっては、引用符を付けないこともできます。
1
2
3
4
5
A string in YAML

'A single-quoted string in YAML'

"A double-quoted string in YAML"

Quoted styles are useful when a string starts or end with one or more relevant spaces, because unquoted strings are trimmed on both end when parsing their contents. Quotes are required when the string contains special or reserved characters.

引用符で囲まれたスタイルは、文字列が 1 つ以上の関連するスペースで開始または終了する場合に便利です。文字列に特殊文字または予約文字が含まれている場合は、引用符が必要です。

When using single-quoted strings, any single quote ' inside its contents must be doubled to escape it:

単一引用符で囲まれた文字列を使用する場合、内容内の単一引用符 ' を二重にしてエスケープする必要があります。
1
'A single quote '' inside a single-quoted string'

Strings containing any of the following characters must be quoted. Although you can use double quotes, for these characters it is more convenient to use single quotes, which avoids having to escape any backslash \:

次の文字を含む文字列は引用符で囲む必要があります。二重引用符を使用できますが、これらの文字には単一引用符を使用する方が便利です。これにより、バックスラッシュをエスケープする必要がなくなります \:
  • :, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, `

The double-quoted style provides a way to express arbitrary strings, by using \ to escape characters and sequences. For instance, it is very useful when you need to embed a \n or a Unicode character in a string.

二重引用符で囲まれたスタイルは、\ を使用して文字とシーケンスをエスケープすることにより、任意の文字列を表現する方法を提供します。たとえば、文字列に \n または Unicode 文字を埋め込む必要がある場合に非常に便利です。
1
"A double-quoted string in YAML\n"

If the string contains any of the following control characters, it must be escaped with double quotes:

文字列に次の制御文字が含まれる場合は、二重引用符でエスケープする必要があります。
  • \0, \x01, \x02, \x03, \x04, \x05, \x06, \a, \b, \t, \n, \v, \f, \r, \x0e, \x0f, \x10, \x11, \x12, \x13, \x14, \x15, \x16, \x17, \x18, \x19, \x1a, \e, \x1c, \x1d, \x1e, \x1f, \N, \_, \L, \P
    \0、\x01、\x02、\x03、\x04、\x05、\x06、\a、\b、\t、\n、\v、\f、\r、\x0e、\x0f、\x10 ,\x11, \x12, \x13, \x14, \x15, \x16, \x17, \x18,\x19, \x1a, \e, \x1c, \x1d, \x1e, \x1f, \N,\ _、\L、\P

Finally, there are other cases when the strings must be quoted, no matter if you're using single or double quotes:

最後に、一重引用符または二重引用符を使用しているかどうかに関係なく、文字列を引用符で囲む必要がある他のケースがあります。
  • When the string is true or false (otherwise, it would be treated as a boolean value);
    文字列が true または false の場合 (そうでない場合は、ブール値として扱われます)。
  • When the string is null or ~ (otherwise, it would be considered as a null value);
    文字列が null または ~ の場合 (そうでない場合は、null 値と見なされます)。
  • When the string looks like a number, such as integers (e.g. 2, 14, etc.), floats (e.g. 2.6, 14.9) and exponential numbers (e.g. 12e7, etc.) (otherwise, it would be treated as a numeric value);
    整数(2、14 など)、浮動小数点数(2.6、14.9 など)、指数(12e7 など)など、文字列が数値のように見える場合(それ以外の場合は、数値として扱われます) ;
  • When the string looks like a date (e.g. 2014-12-31) (otherwise it would be automatically converted into a Unix timestamp).
    文字列が日付のように見える場合 (例: 2014-12-31) (それ以外の場合は、Unix タイムスタンプに自動的に変換されます)。

When a string contains line breaks, you can use the literal style, indicated by the pipe (|), to indicate that the string will span several lines. In literals, newlines are preserved:

文字列に改行が含まれている場合、パイプ (|) で示されるリテラル スタイルを使用して、文字列が複数の行にまたがることを示すことができます。インテラル、改行は保持されます:
1
2
3
|
  \/ /| |\/| |
  / / | |  | |__

Alternatively, strings can be written with the folded style, denoted by >, where each line break is replaced by a space:

別の方法として、文字列は > で示される折り畳みスタイルで書くことができ、各改行はスペースに置き換えられます。
1
2
3
4
5
6
7
8
9
10
11
12
13
>
  This is a very long sentence
  that spans several lines in the YAML.

# This will be parsed as follows: (notice the trailing \n)
# "This is a very long sentence that spans several lines in the YAML.\n"

>-
  This is a very long sentence
  that spans several lines in the YAML.

# This will be parsed as follows: (without a trailing \n)
# "This is a very long sentence that spans several lines in the YAML."

Note

ノート

Notice the two spaces before each line in the previous examples. They won't appear in the resulting PHP strings.

前の例の各行の前にある 2 つのスペースに注意してください。結果の PHP 文字列には表示されません。

Numbers

1
2
# an integer
12
1
2
# an octal
0o14
1
2
# an hexadecimal
0xC
1
2
# a float
13.4
1
2
# an exponential number
1.2e+34
1
2
# infinity
.inf

Nulls

Nulls in YAML can be expressed with null or ~.

YAML の null は、null または ~ で表現できます。

Booleans

Booleans in YAML are expressed with true and false.

YAML のブール値は true と false で表現されます。

Dates

YAML uses the ISO-8601 standard to express dates:

YAML は ISO-8601 標準を使用して日付を表現します。
1
2001-12-14T21:59:43.10-05:00
1
2
# simple date
2002-12-14

Collections

A YAML file is rarely used to describe a simple scalar. Most of the time, it describes a collection. YAML collections can be a sequence (indexed arrays in PHP) or a mapping of elements (associative arrays in PHP).

YAML ファイルが単純なスカラーを記述するために使用されることはめったにありません。ほとんどの場合、コレクションを記述します。 YAML コレクションは、シーケンス (PHP のインデックス付き配列) または要素のマッピング (PHP の連想配列) にすることができます。

Sequences use a dash followed by a space:

シーケンスでは、ダッシュの後にスペースを使用します。
1
2
3
- PHP
- Perl
- Python

The previous YAML file is equivalent to the following PHP code:

以前の YAML ファイルは、次の PHP コードと同等です。
1
['PHP', 'Perl', 'Python'];

Mappings use a colon followed by a space (: ) to mark each key/value pair:

マッピングでは、コロンとそれに続くスペース (: ) を使用して、各キーと値のペアをマークします。
1
2
3
PHP: 5.2
MySQL: 5.1
Apache: 2.2.20

which is equivalent to this PHP code:

これは、次の PHP コードと同等です。
1
['PHP' => 5.2, 'MySQL' => 5.1, 'Apache' => '2.2.20'];

Note

ノート

In a mapping, a key can be any valid scalar.

マッピングでは、キーは任意の有効なスカラーにすることができます。

The number of spaces between the colon and the value does not matter:

コロンと値の間のスペースの数は重要ではありません。
1
2
3
PHP:    5.2
MySQL:  5.1
Apache: 2.2.20

YAML uses indentation with one or more spaces to describe nested collections:

YAML は、1 つ以上のスペースを含むインデントを使用して、ネストされたコレクションを記述します。
1
2
3
4
5
6
'symfony 1.0':
  PHP:    5.0
  Propel: 1.2
'symfony 1.2':
  PHP:    5.2
  Propel: 1.3

The above YAML is equivalent to the following PHP code:

上記の YAML は、次の PHP コードと同等です。
1
2
3
4
5
6
7
8
9
10
[
    'symfony 1.0' => [
        'PHP'    => 5.0,
        'Propel' => 1.2,
    ],
    'symfony 1.2' => [
        'PHP'    => 5.2,
        'Propel' => 1.3,
    ],
];

There is one important thing you need to remember when using indentation in a YAML file: Indentation must be done with one or more spaces, but never with tabulators.

YAML ファイルでインデントを使用する際に覚えておく必要がある重要な点が 1 つあります。インデントには 1 つ以上のスペースを使用する必要がありますが、タブレータは使用しないでください。

You can nest sequences and mappings as you like:

シーケンスとマッピングを好きなようにネストできます:
1
2
3
4
5
6
'Chapter 1':
  - Introduction
  - Event Types
'Chapter 2':
  - Introduction
  - Helpers

YAML can also use flow styles for collections, using explicit indicators rather than indentation to denote scope.

YAML は、スコープを示すためにインデントではなく明示的なインジケーターを使用して、コレクションにフロー スタイルを使用することもできます。

A sequence can be written as a comma separated list within square brackets ([]):

シーケンスは、角括弧 ([]) 内のコンマ区切りのリストとして記述できます。
1
[PHP, Perl, Python]

A mapping can be written as a comma separated list of key/values within curly braces ({}):

マッピングは、中括弧 ({}) 内のキー/値のコンマ区切りリストとして記述できます。
1
{ PHP: 5.2, MySQL: 5.1, Apache: 2.2.20 }

You can mix and match styles to achieve a better readability:

スタイルを組み合わせて、読みやすさを向上させることができます。
1
2
'Chapter 1': [Introduction, Event Types]
'Chapter 2': [Introduction, Helpers]
1
2
'symfony 1.0': { PHP: 5.0, Propel: 1.2 }
'symfony 1.2': { PHP: 5.2, Propel: 1.3 }

Comments

Comments can be added in YAML by prefixing them with a hash mark (#):

YAML でコメントを追加するには、先頭にハッシュ マーク (#) を付けます。
1
2
3
# Comment on a line
"symfony 1.0": { PHP: 5.0, Propel: 1.2 } # Comment at the end of a line
"symfony 1.2": { PHP: 5.2, Propel: 1.3 }

Note

ノート

Comments are ignored by the YAML parser and do not need to be indented according to the current level of nesting in a collection.

コメントは YAML パーサーによって無視され、コレクション内のネストの現在のレベルに従ってインデントする必要はありません。

Explicit Typing

The YAML specification defines some tags to set the type of any data explicitly:

YAML 仕様では、データの型を明示的に設定するためのいくつかのタグが定義されています。
1
2
3
4
5
6
7
8
9
10
11
12
13
data:
    # this value is parsed as a string (it's not transformed into a DateTime)
    start_date: !!str 2002-12-14

    # this value is parsed as a float number (it will be 3.0 instead of 3)
    price: !!float 3

    # this value is parsed as binary data encoded in base64
    picture: !!binary |
        R0lGODlhDAAMAIQAAP//9/X
        17unp5WZmZgAAAOfn515eXv
        Pz7Y6OjuDg4J+fn5OTk6enp
        56enmleECcgggoBADs=

Unsupported YAML Features

The following YAML features are not supported by the Symfony Yaml component:

次の YAML 機能は、Symfony Yaml コンポーネントではサポートされていません:
  • Multi-documents (--- and ... markers);
    マルチドキュメント ( --- および ... マーカー);
  • Complex mapping keys and complex values starting with ?;
    ? で始まる複雑なマッピング キーと複雑な値。
  • Tagged values as keys;
    キーとしてタグ付けされた値。
  • The following tags and types: !!set, !!omap, !!pairs, !!seq, !!bool, !!int, !!merge, !!null, !!timestamp, !!value, !!yaml;
    次のタグとタイプ: !!set、!!omap、!!pairs、!!seq、!!bool、!!int、!!merge、!!null、!!timestamp、!!value、!​​!yaml;
  • Tags (TAG directive; example: %TAG ! tag:example.com,2000:app/) and tag references (example: !<tag:example.com,2000:app/foo>);
    タグ (TAG ディレクティブ。例: %TAG ! tag:example.com,2000:app/) およびタグ参照 (例: !);
  • Using sequence-like syntax for mapping elements (example: {foo, bar}; use {foo: ~, bar: ~} instead).
    要素のマッピングにシーケンスのような構文を使用する (例: {foo, bar}; 代わりに {foo: ~, bar: ~} を使用)。