序章
YAML は、「YAML Ain't a Markup Language」の再帰的な頭字語です。この言語が開発された時点では、YAML は実際には「Yet Another Markup Language」の略でした。
YAML の構文は他の高級言語に似ており、リスト、ハッシュ テーブル、スカラーなどのデータ形式を簡単に表現できます。これは、空白のインデントと多くの外観に依存する機能を使用しており、データ構造、さまざまな構成ファイル、デバッグコンテンツのダンプ、ファイルアウトラインの表現や編集に特に適しています (例: 多くの電子メールヘッダー形式は YAML に非常に近い)。
YAML の構成ファイルのサフィックスは .yml です (例: runob.yml )。
基本的な文法
- 大文字と小文字を区別
- インデントを使用して階層関係を示す
- インデントにはタブは使用できません。スペースのみが使用できます。
- 同じレベルの要素が左揃えである限り、インデントされたスペースの数は重要ではありません。
- 「#」はコメントを意味します
データの種類
YAML は次のデータ型をサポートします。
- オブジェクト: キーと値のペアのコレクション。マッピング/ハッシュ/ディクショナリとも呼ばれます。
- 配列: 順番に並べられた値の集合。シーケンス(sequence)/リスト(list)とも呼ばれます。
- スカラー: 単一の割り切れない値
YAMLオブジェクト
オブジェクトのキーと値のペアは、コロン構造を使用してkey: valueを表し、コロンの後にスペースを追加する必要があります。
key:{key1: value1, key2: value2, …}を使用することもできます。
インデントを使用して階層関係を示すこともできます。
key:
child-key: value
child-key2: value2
より複雑なオブジェクト形式の場合は、疑問符とスペースを使用して複雑なキーを表し、コロンとスペースを使用して値を表すことができます。
?
- complexkey1
- complexkey2
:
- complexvalue1
- complexvalue2
これは、オブジェクトの属性が配列 [complexkey1, complexkey2] であり、対応する値も配列 [complexvalue1, complexvalue2] であることを意味します。
YAML配列
- で始まる行は、配列を形成することを意味します。
- A
- B
- C
YAML は多次元配列をサポートしており、インラインを使用して表現できます。
key: [value1, value2, ...]
データ構造の子メンバーは配列であるため、項目の下にスペースを 1 つインデントできます。
-
- A
- B
- C
比較的複雑な例:
companies:
-
id: 1
name: company1
price: 200W
-
id: 2
name: company2
price: 500W
これは、 Companies 属性が配列であり、各配列要素が id、name、price の 3 つの属性で構成されることを意味します。
配列はフロー形式で表すこともできます。
companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]
複合構造
配列とオブジェクトは、次のような複合構造を形成できます。
languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org
json に変換すると次のようになります。
{
languages: [ 'Ruby', 'Perl', 'Python'],
websites: {
YAML: 'yaml.org',
Ruby: 'ruby-lang.org',
Python: 'python.org',
Perl: 'use.perl.org'
}
}
スカラー
スカラーは、最も基本的な割り切れない値であり、次のものが含まれます。
- 弦
- ブール値
- 整数
- 浮動小数点数
- ヌル
- 時間
- 日にち
例を使用して、スカラーの基本的な使用法をすぐに理解します。
boolean:
- TRUE #true,True都可以
- FALSE #false,False都可以
float:
- 3.14
- 6.8523015e+5 #可以使用科学计数法
int:
- 123
- 0b1010_0111_0100_1010_1110 #二进制表示
null:
nodeName: 'node'
parent: ~ #使用~表示null
string:
- 哈哈
- 'Hello world' #可以使用双引号或者单引号包裹特殊字符
- newline
newline2 #字符串可以拆成多行,每一行会被转化成一个空格
date:
- 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime:
- 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
引用
& アンカーと * エイリアスは、以下を参照するために使用できます。
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *defaults
test:
database: myapp_test
<<: *defaults
に相当:
defaults:
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
test:
database: myapp_test
adapter: postgres
host: localhost
&はアンカー ポイントを確立するために使用され (デフォルト)、<<は現在のデータにマージすることを意味し、*はアンカー ポイントを参照するために使用されます。
別の例を次に示します。
- &showell Steve
- Clark
- Brian
- Oren
- *showell
次のように JavaScript コードに変換します。
[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]