ソースコードの取得: learnyaml-jp.yaml
YAMLはデータのシリアライズ用言語で、 人間が直接読み書きしやすいようにデザインされています。
YAMLはJSONの厳格なスーパーセットで、 改行とインデントが構文的に意味を持つというPythonに似た仕様を追加しています。 しかしPythonとは異なりYAMLではインデントにタブ文字を使うことはできません。
--- # ドキュメント開始
# YAMLのコメントはこんな感じです。
##############
# スカラー型 #
##############
# (ドキュメント全体を含む)ルートオブジェクトはマップになります。
# これは他言語における辞書型、ハッシュ、オブジェクトなどと等価です。
キー: 値
別のキー: 別の値。
数値: 100
指数表記: 1e+12
# 1 はbooleanでなく数値として解釈されます。
# もしbooleanとして解釈してほしい場合はtrueを使います
boolean: true
null値: null
スペースを 含む キー: 値
# 文字列をクォートで囲う必要がないことに注意してください。
# しかし囲うこともできます。
しかし: 'クォートで囲まれた文字列。'
'キーもクォートで囲えます。': "keyの中で ':' を使いたいときに有用です。"
シングルクォート: 'には ''1つの'' エスケープパターンがあります'
ダブルクォート: "には多くのエスケープパターンがあります:\", \0, \t, \u263A,
\x0d\x0a == \r\n, など、他にもあります。"
# UTF-8/16/32文字はエンコードされている必要があります
上付き2: \u00B2
# 複数行の文字列は(| を使う)「リテラルブロック」、
# または、('>' を使う)「折り畳みブロック」として書くことができます
リテラルブロック: |
この文章のブロック全体が「リテラルブロック」キーの値になり、
改行は保持されます。
リテラルはインデントを解除するまで続き、先頭行のインデント文字数分を
各行のテキストの先頭から取り除きます。
「よりインデントの深い」行はその分のインデントを保持します -
この2行はスペース4個分インデントされます。
折り畳みスタイル: >
この文章のブロック全体が「折り畳みスタイル」の値になります。
しかしこちらの場合、全ての改行がスペース1個に置き換わります。
直前のような空行は改行文字に変換されます。
「よりインデントの深い」行も改行を保持します -
このテキストは2行にわたって表示されます。
##################
# コレクション型 #
##################
# 入れ子を表現するにはインデントを使います。
# スペース2個のインデントが好まれます(が必須ではありません)。
入れ子のマップ:
キー: 値
別のキー: 別の値
別の入れ子のマップ:
こんにちは: こんにちは
# マップのキーは文字列である必要はありません。
0.25: 小数のキー
# 複数行オブジェクトのような複雑なキーも使用可能です。
# ? の後にスペースを入れることで複雑なキーの開始を宣言できます。
? |
これはキーです
複数行あります
: そしてこれがその値です
# YAMLではシーケンスを複雑なキー構文で使うこともできます
# しかし、言語パーサーによってはエラーになるかもしれません
# 例
? - マンチェスター・ユナイテッド
- レアル・マドリード
: [2001-01-01, 2002-02-02]
# シーケンス(リストや配列と等価)はこんな感じです
# ('-' はインデントとしてカウントしてください):
シーケンス:
- アイテム1
- アイテム2
- 0.5 # シーケンスには異なる型の値を混在させられます
- アイテム4
- キー: 値
別のキー: 別の値
-
- これはシーケンスです
- 別のシーケンス内部
- - - 入れ子のシーケンス表記は
- 折り畳めます
# YAMLはJSONのスーパーセットなので、
# JSON形式のマップとシーケンスを書くこともできます:
jsonマップ: {"キー": "値"}
jsonシーケンス: [3, 2, 1, "発進"]
クォートは任意: {キー: [3, 2, 1, 発進]}
######################
# その他のYAMLの機能 #
######################
# YAMLには「アンカー」と呼ばれる便利な機能もあります。これによりコンテンツを
# ドキュメント内で簡単に複製できます。これらのキーはどちらも同じ値を持ちます:
アンカーされたコンテンツ: &anchor_name この文字列は2つのキーの値になります。
他のアンカー: *anchor_name
# アンカーは複製/継承プロパティとして使えます
ベース: &base
名前: みんな同じ名前を持ちます
# 記号 << はマージキー言語非依存型(Merge Key Language-Independent Type)
# と呼ばれます。これは指定された1つ以上のマップの全てのキーを現在のマップに
# 挿入することを示すために使われます。
foo:
<<: *base
年齢: 10
bar:
<<: *base
年齢: 20
# fooとbarも「名前: みんな同じ名前を持ちます」を持ちます
# YAMLにはタグもあり、明示的に型を宣言できます。
明示的な文字列: !!str 0.5
# 言語特有のタグを実装したパーサーもあり、例えばPythonの複素数型が使えます。
pythonの複素数型: !!python/complex 1+2j
# YAMLの複雑なキーでは言語特有のタグも使えます
? !!python/tuple [5, 7]
: 五十七
# Python上で {(5, 7): '五十七'} として扱われます
####################
# その他のYAMLの型 #
####################
# 文字列と数値がYAMLの理解できる唯一のスカラーではありません。
# ISO形式の日付や日時リテラルもパースされます。
日時: 2001-12-15T02:59:43.1Z
スペースを含む日時: 2001-12-14 21:59:43.10 -5
日付: 2002-12-14
# !!binaryタグは文字列の実体がバイナリblobのbase64エンコード表現であることを
# 示します。
gifファイル: !!binary |
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
# YAMLにはセット型もあり、それはこんな感じです:
セット:
? アイテム1
? アイテム2
? アイテム3
または: {アイテム1, アイテム2, アイテム3}
# セットは値がnullのただのマップで、直前のセットは以下と等価です:
セット2:
アイテム1: null
アイテム2: null
アイテム3: null
... # ドキュメント終了
提案がありますか?それとも修正が必要ですか? GitHubレポジトリでIssueを開くか自分でプルリクエストを作ってください。
Leigh Breneckiが初めて貢献し、後に1人の貢献者が更新してきました。