Skip to content

Latest commit

 

History

History
1606 lines (1033 loc) · 49.1 KB

YAML.pod

File metadata and controls

1606 lines (1033 loc) · 49.1 KB

名前

YAML - YAML Ain't Markup Language (tm) (YAMLはマークアップ言語ではありません)

概要

use YAML;

# Load a YAML stream of 3 YAML documents into Perl data structures.
# 3 つの YAML ドキュメントを含む YAML ストリームを Perl データ構造に
# ロードする.
my ($hashref, $arrayref, $string) = Load(<<'...');
---
name: ingy
age: old
weight: heavy
# I should comment that I also like pink, but don't tell anybody.
# ピンクもすきですが, それは秘密です. 
favorite colors:
    - red
    - green
    - blue
---
- Clark Evans
- Oren Ben-Kiki
- Ingy dE<ouml>t Net
--- >
You probably think YAML stands for "Yet Another Markup Language". It
ain't! YAML is really a data serialization language. But if you want
to think of it as a markup, that's OK with me. A lot of people try
to use XML as a serialization format.

おそらく YAML は "Yet Another Markup Language" だと思っているでしょ
う. しかしそれは違います! YAML は実際にはデータ直列化言語です. 
しかし YAML をマークアップ言語と捉えたいのならそれもよいでしょう. 
多くの人々は XML を直列化の書式として使っていることですし. 

"YAML" is catchy and fun to say. Try it. "YAML, YAML, YAML!!!"

"YAML" は覚えやすく言いやすいです. どうぞご一緒に. 
"YAML, YAML, YAML!!!"
...

# Dump the Perl data structures back into YAML.
# Perl データ構造から YAML にダンプ.
print Dump($string, $arrayref, $hashref); 

# YAML::Dump is used the same way you'd use Data::Dumper::Dumper
# YAML::Dump は Data::Dumper::Dumper と同じように使うことができます. 
use Data::Dumper;
print Dumper($string, $arrayref, $hashref);

説明

YAML.pm モジュールは YAML 1.0 仕様に基づく YAML ローダ及びダンパーを 実装しています. http://www.yaml.org/spec/

YAML は可読性に優れた汎用的なデータ直列化(シリアル化)言語です. YAML は近頃のほとんどのプログラミング言語(もちろん Perl も含みます!!!) のデータ構造を表現することができます.

YAML の構文については YAML 仕様を参照してください.

なぜ YAML はクールなのか

YAML is readable for people.

YAML は読みやすい.

YAML は複雑なデータ構造から明確な意味を作ります. YAML が特別な データダンプツールであることに気づくべきでしょう. データ構造は インデントを通して見渡せるし, 再帰データを扱うこともできます. また, 項目キーはデフォルトでソートされます. 加えてデータの形式に 対応する様々な種類のスカラー値をサポートしています.

YAML is editable.

YAML は編集しやすい.

YAMLは設定ファイルとして優れた構文となるように一からデザインされています. ほとんどすべてのプログラムは設定ファイルを必要としているでしょう. そしてなぜ毎回新しい構文を発明しようとするのですか? なぜ XML の 複雑さや Perl コードそのものに悩まされなければならないのですか?

YAML is multilingual.

YAML はマルチリンガル.

YAML は Unicode をサポートしています. しかし実際にはプログラミング言語に 任されています. YAML は Perl, Python, Ruby, Tcl, PHP, JavaScript, Java の直列化の 必要性に見合うように設計されています. またこれらの言語間で相互に操作 できるように設計されています. これは Perl が生成した YAML は Python で 処理することが可能なことを意味します.

YAML is taint safe.

YAML は汚染に安全.

直列化のために Data::Dumper の様なモジュールを使うと, ファイルや伝送路に だれも干渉できない限りにおいてなら安全でしょう. これは直列化したデータ 構造を展開するのに Perl の eval() 組み込み関数が必要となることに 由来します. だれかがファイルを削除してしまうような断片を入れてしまうこと があるかもしれません.

YAML のパーサには eval は全く必要としません.

YAML は完全に機能します.

YAML は一般的な Perl のデータ構造を正確に直列化し, データの関連を 失うことなく展開できます. とはいっても 100% 完璧にはなりません(100% 完璧なシリアライザはありませんし, どんなシリアライザも 100% 完璧には なれません), Data::Dumper, Storable, XML::Dumper, Data::Denter なども 同様です.

YAML.pm はコード(サブルーティン)リファレンスやタイプグラブを処理する こともできます. (まだ実験的なものですが.) これらの機能は Perl の 他のシリアライゼーションモジュールにはない機能です.

YAML is extensible.

YAML は拡張可能です.

YAML 言語はそれ自身の問題を解決するのに十分柔軟にデザインされています. 自分自身の記述には Perl のハッシュ, 配列, スカラーと似た3つの基本的な 構造があります. デフォルトではこれらは Perl で等価に対応します. しかし各 YAML ノードは完全に異なる作法で処理するための, タグ付け (又はタイプシステム)もサポートしています. YAML は Perl の型グロブ の様な変わった構造もサポートすることができます.

Perl での YAML の実装

このモジュール, YAML.pm は実際には Perl での YAML モジュールの インターフェースでしかありません. YAML の基本的なインターフェース は2つの関数, Dump 及び Load から成ります. その実際の動作は YAML::Dumper 及び YAML::Loader モジュールで 実装されています.

異なる YAML モジュールの配布物では YAML.pm, YAML::Loader, YAML::Dumper をサブクラス化して作ることが出来ます. 例えば YAML-Simple は, YAML::Simple, YAML::Dumper::Simple, YAML::Loader::Simple から成ります.

どうして YAML の実装が1つだけじゃないのかって? YAML はシンプルなデータ形式であろうと提案しているのですが, 実際のところ深く複雑です. YAML の仕様を完全に実装するのは ひどく大変なことなのです.

そんな事情から, 私は現在3つの異なる YAML 実装を使っています.

YAML

メインの YAML ディストリビューションで, ピュア Perl での 完全な YAML 仕様のサポートを行っています. しかし, 一番高速といわけでも一番安定しているというわけでもありません. 現在でも, YAML.pm には多くの既知のバグが残っています. とはいえ Perl のデータ構造を読みやすい形式に出力する 一番優れたツールでしょう.

YAML::Lite

YAML::Lite のアピールポイントは, 人々が多く利用する, そして小さく, 速く, 安定した, ピュアPerl形式として提案するだけに, YAML を 90% に落としている点にあります. YAML::Liteは, 自分にできない処理を求められると単にdieします.

YAML::Syck

libsyck という, Ruby プログラミング言語(そして Python, PHP, Pugs でも)使われている C 言語ベースの YAML 処理ライブラリがあります. これはとても高速ですが, それ自身のバグもあります. また, C コンパイラも必要になります.

POD ERRORS

Hey! The above document had some coding errors, which are explained below:

Around line 294:

=over without closing =back

Around line 349:

'=end original and is 10 times faster than YAML.pm.' is invalid. (Stack: =over; =begin original)