5分でYAMLを知る

5903 ワード

1分目:簡単なリスト
あなたの友达はあなたに次のような手紙を送りました.
- Memoirs Found in a Bathtub
- Snow Crash
- Ghost World

同時に、彼はあなたに上記の順序でこれらの本を読むように要求して、彼はあなたとこれらの本の内容について検討したいと思っています.
YAMLでは,これらの順序付きリスト(list)をシーケンス(sequence)と呼ぶ.シーケンスには、プログラムにこのシーケンスをロードすると、シーケンスは変更されません.
多くの柔軟な言語では、このシーケンスとその値に指定したインデックスでアクセスできます.このシーケンスの最初の項目を0で表します.
PHP、Perl、またはRubyでは、次のことができます.
print $book_list[0];

印刷結果は次のとおりです.
Memoirs Found in a Bathtub

これも上の書籍リストの最初の項目です.
その他のリスト
リスト(Lists)は、様々なデータを含むことができる.
---
- 1           # Numbers
- Snow Crash  # Strings
- 2003-07-24  # Dates

上のリストは、YAMLドキュメントの開始を表すドキュメント分割子(document separator)の3つの「-」で始まります.もちろん、次のような複数のドキュメントを分割することもできます.
---
- Harry Potter and the Prisoner of Azkaban
- Harry Potter and the Goblet of Fire
- Harry Potter and the Order of the Phoenix
---
- Memoirs Found in a Bathtub
- Snow Crash
- Ghost World

2分目:簡単な辞書
Harry Potterを読むことに夢中になっていると、友人から新しいリストが送られてきました.このリストには作者の名前が含まれています.
Stanislaw Lem: Memoirs Found in a Bathtub
Neal Stephenson: Snowcrash
Daniel Clowes: Ghost World

上の辞書には順番がありませんが、作者一人一人が本の名前に対応しています.あなたの友达はあなたが作者によってあなたの欲しい本を見つけることができることを望んでいます.(前に「-」がないことに注意)
YAMLでは、このような辞書構造をmapと呼び、mapは通常、ペアのデータを格納するために使用され、冒頭の左側をkey、右側をvalueと呼ぶ.
keyはmapからデータを取得するインデックスとして使用されます.
PHPまたはRubyでは、次のように書くことができます.
print $books_by_author['Daniel Clowes'];

次のように印刷されます.
Ghost World

SequenceのMap
あなたの友达はあなたに更新されたリストを送って、作者、本名を含めて、そして一定の順序があって、あなたがこの順序で読むことができることを望んでいます.
---
- Stanislaw Lem: Memoirs Found in a Bathtub
- Neal Stephenson: Snowcrash
- Daniel Clowes: Ghost World

上記のシーケンスでは、各項目はmapであり、ある集合(collection)が別の集合を含む場合、ネスト(nesting)と呼ばれる.
3分目:メールボックスの中身
3分目に私たちはまずスピードを落として、先生はあなたの友达にこんなに邪魔させて、私は間もなくあなたがきっと気が狂うと思っていました.
冉私たちはあなたのポストを見に来ました.あなたはアパートに住んでいます.あなたのポストには小さな口しかありません.隣には他の何百ものポストがあります.
自分のポストをチェックして5通の手紙を見つけました.2通は隣のJim O'Connorにあげたもので、1通は「Hank Bross.:the Car Wash!」というものです.の会社の、他の2通の手紙はあなた自身のです.
あなたは自分のメールボックスに多く出てきた手紙にクレームをつけるつもりで、郵便局に手紙を送って、彼らにこれがあなたにどれだけ迷惑をかけたかを見せるつもりです.
今日の日付とメールボックスの手紙を含む新しいYAMLドキュメントを開始しました.
---
date: 2003-07-25
letters to:
  "Hank Bros.: the Car Wash!": 1
  Jim O'Connor: 2
  Myself: 2

この例では、1つのmapが別のmapをネストし、最初のMAPのkeyは、その値はletters toがネストされたMAPであり、2番目のMAPはインデント配列である.
PHPまたはRUBYでは、次のようにアクセスできます.
print $mailbox['letters to']['Myself'];

次のように印刷されます.
2 

「Hank Bross.:the Car Wash!」双銀号で拡大したのは、この中には冒好が含まれているからだ.そうしないと、トラブルを起こし、どちらがkeyでどちらがvalueなのか分からない可能性があります.
4分目:詳細
郵便局からいくつかの説明をもらいました.
---
Concerning Car Washes: >
  We are sorry to have misplaced this letter.
  We were told by a reliable source that you
  were the owner of "Hank Bros.: the Car Wash!".
  Sorry.

郵便局の仕事は間違っていますが、YAMLのもう一つの特徴であるブロックを示しています.彼らの情報にはblockが使われています.
YAMLでは、1つのblockは1つ以上のスペースをインデントするテキストです.
これは番号より大きいことに注意してください:>.「folded block」の始まりを表します.folded blockとは、1行1行で文のすぐ隣に段落を構成し、この段落は私たちがテキストを読むように読むことができます.
上記のメッセージは、YAMLリーダーから見れば2行に分かれ、1つのリターン改行で分割されます.
Controlling Words
上のニュースはまだ終わっていません.これは後ろのものです.
Concerning "Jim O'Connor": |
  You are receiving Jim O'Connor's mail for several reasons:
  - The nameplate on your mailbox still says his name.
  - He has told our postman that you screen his mail.
  - He is living in your ceiling.
  - He held a raygun to the postmans head.

これは少し変に見えますが、郵便局の人は縦線を使って、元の大きい番号に取って代わりました.これは何か違いがありますか.
パイプpipeとも呼ばれる縦線は、literal blockの開始を表す.literal blockは、各文が1節になっていることを示し、このブロックはコンピュータが読み取るように、文字値になります.
YAMLリーダーは上のブロックを5行とします(1行目は空行).
5分目:これが全部ですか.
今ではYAMLもこれだけのもののように見えますが、リストや辞書の集合にすぎませんか?
これは私たちが5分で話せる最も基本的なもので、続ける前に、最後の概念を見てみましょう.
この5分間のチュートリアルを1人で読む時間の記録です.
---
name: Dirk Hockeybranch
minutes spent: 
 - 1.02
 - 1.34
 - 0.7
 - 0.89
 - 0.94

上記では、mapにシーケンス(sequence)をネストし、シーケンスの各項目は、ステップ数にかかる時間を表しています.誰もが自分の読む時間をこのように送ってくれたら、YAML in Five-Point-On-Two Minutesのようなより正確な名前を用意する必要があります.これは少し華やかで実在しないだろう.△このようなドキュメントを書くには、多くの紙面が必要かもしれません.
気の利いたYAMLユーザーは、inline sequenceを使用して時間を記録する可能性があります.
---
name: Dirk Hockeybranch
minutes spent: [1.02, 1.34, 0.7, 0.89, 0.94]

短いリストでは、それらをすべて1行に部屋に置いて、各項目の間をカンマで分割して、最後に中括弧で囲むことができます.
Inline mapsも似ています.
---
minutes spent: {one: 1.02, two: 1.34, three: 0.7,
                four: 0.89, five: 0.94}

以上も慎重に使用し、BLOCKはinline sequencesやInline mapsでは使用できません.
結論
時間を見て、どのくらいですか.5分?それとも10分ですか.
もっとYAMLを勉強したいなら、行ってみることをお勧めします.
YAML Cookbook
ああ、とても良いマニュアルで、YAMLをもっと詳しく説明します.YAMLが提供している機能に驚くに違いありません.
最後に、この文章を読むのに時間を費やしてくれてありがとう.
 
以下は私が見つけたリソースです.あなたに役に立つかもしれません.
1.YAMLふるさと:[url]http://yaml.org/[/url]
2.XML問題:YAMLによるXMLの改良:[url]http://www-900.ibm.com/developerWorks/cn/xml/x-matters/part23/index.shtml[/url]
3.YAML仕様1.0が最近発売された[url]http://yaml.org/spec/[/url]