kなんとかの日記 このページをアンテナに追加

2009-07-23

YAML 1.2 仕様書リリース

| 23:42 |  YAML 1.2 仕様書リリース - kなんとかの日記 を含むブックマーク

YAML 1.2 の仕様書が正式公開されました。

YAMLメーリングリストに流れたClark C. Evansのメールに、今回の変更点が紹介されてました。それによると、今回の目玉はずばり「JSONの仕様を取り込む」ことです。つまり、YAML1.2からはYAMLJSONの完全なスーパーセットということになります。

今までもYAMLパーサをJSONパーサのかわりに使うことはできたのですが、実はYAMLJSONとで細かい差異があったため(特に「:」と「,」の直後の空白の有無)、YAMLパーサがすべてのJSONファイルをパースできたわけではありません。しかし今回の仕様変更で、YAMLパーサはすべてのJSONファイルを正しくパースできるようになりました。

The primary objective of the 1.2 revision of this specification is to bring YAML into compliance with JSON as an official subset. An expected source of incompatibility with prior versions of YAML, especially the syck implementation, is the change in implicit typing rules. We have removed odd and infrequent implicit rules and have updated these rules to align them with JSON's productions. In this version of YAML, boolean values may be serialized as ``true`` or ``false``; the empty scalar as ``null``. Unquoted numeric values are a superset of JSON's numeric production. Other changes in the specification were production bug fixes and defining 3 built-in implicit typing rule sets: untyped, strict JSON, and the default YAML typing.

The primary objective of the 1.1 revision of this specification was to fix problems with tagging rules. In particular the single exclamation was reserved for locally defined types and a simple prefixing mechanism was included to help usability. This revision also fixed numerous production edge cases and introduced a type repository.


なお個人的な意見としては、「別にJSONと非互換でもいいじゃん」です。これだけJSONパーサがたくさんあるのに、わざわざYAMLパーサをJSONパーサとして使う必要なんかないじゃん?

noplansnoplans 2009/07/24 12:33 いろいろとご迷惑をおかけしました……。非常に面白い発表で楽しませていただきました。ありがとうございました!

kwatchkwatch 2009/07/25 10:41 迷惑だなんてとんでもない! マイナー番組を見ていただいただけでも、こちらが感謝すべきことです。どうもありがとうございました。

2008-10-04

PyYAML 3.06 Release

| 15:57 |  PyYAML 3.06 Release - kなんとかの日記 を含むブックマーク

PyYAML 3.06 がリリースされた

PyYAML は YAML の最新仕様である YAML 1.1 に準拠し、かつバグも少なく、今現在いちばんおすすめの YAML ライブラリ

(Ruby の Syck は YAML 1.0 だからちょっと古いし、バグも多い。)

なお文字列を dump するときに、PyYAML では non-ascii characters をエンコードする・しないを指定できる。

# -*- coding: utf-8 -*-
import yaml
list1 = [ {'name': u"ルルーシュ"}, {'name': u"ナナリー"} ]

print yaml.dump(list1, encoding='utf8')
# 結果:
# - {name: "\u30EB\u30EB\u30FC\u30B7\u30E5"}
# - {name: "\u30CA\u30CA\u30EA\u30FC"}

print yaml.dump(list1, encoding='utf8', allow_unicode=True)
# 結果:
# - {name: ルルーシュ}
# - {name: ナナリー}

これに対し、Ruby ではよく String#to_yaml で日本語が化けるという文句を聞くけど、いまだ解消されてない。

また JRuby は独自の YAML ライブラリを使っているけど、これが String ベースじゃなくて byte array ベースなので、日本語がそもそも通らない。

そんな状況だから、日本語を含む文字列を dump して YAML にしたい人は、Python を使うといいと思うよ。

mitarasimitarasi 2008/10/04 13:20 ギアスが終わり少し淋しくなったけどまぁ〜頑張りましょう

kwatchkwatch 2008/10/04 16:01 コードギアスを無料配信していた Biglobe ストリームが、今度は世界名作劇場を流してくれているので、それを見ることにします。

通りすがり通りすがり 2008/10/04 16:12 マジレスすると、クッキーから取得した値をSQLで利用することがあるため、クラック目的で’ or 0=0’みたいな文字列を突っ込むってことじゃないかなぁ・・・。リンク先読んでないけど。
確かにApacheでクッキーをアクセスログに吐き出す設定をしないと、管理者からは気付きにくいのは確か。
でも、セキュリティホールっつーか、SQLに与える値をエスケープしないのは、今時単なるバグだよね。

mitarasimitarasi 2008/10/04 21:05 何をいってるのかちんぷんかんぷん

2008-03-24

とても素敵なデータ表現言語(やや難あり)

| 15:23 |  とても素敵なデータ表現言語(やや難あり) - kなんとかの日記 を含むブックマーク

とても素敵なデータ表現言語(やや難あり)

JSONは便利なデータ表現なんだけど、

  1. 型情報が付加できない
  2. ハッシュのキーに引用符を付けるのがイヤ

という理由で(2番目はあまり本質的ではないけど)、JSON改(後でXionに改名)というデータ表現を提案しました。

JSON:

{
 "familyName" : "板東",
 "givenName" : "トン吉",
 "age" : 27,
 "sex" : "male",
 "company" :
  {
   "name" : "(株)東西トラベル",
   "url" : "http://www.example.jp/tozai-travel/"
  },
 "hobbies" : ["盆栽", "釣り", "版画"]
}

JSON改(Xion):

Person {
 familyName : "板東",
 givenName : "トン吉",
 age : 27,
 sex : Sex "male",
 company :
  Company {
   name : "(株)東西トラベル",
   url : URL "http://www.example.jp/tozai-travel/"
  },
 hobbies : ["盆栽", "釣り", "版画"]
}

JSON改の表現では、Person, Sex, Company, URLがデータ型を示す識別子(型名、ソート)です。

とても素敵なデータ表現言語(やや難あり) - 檜山正幸のキマイラ飼育記

うーん、これなら YAML でいいと思う。YAML だと「!Sex "male"」とかでタグを使った明示的な型指定ができるし、ハッシュのキーに引用符をつける必要もない。JSON との互換性もあるし、循環構造も表現できるし、日時 (timestamp) もサポートしている。


YAMLも書きやすく読みやすいですね。構文フレーバー(好み)の問題かもしれませが、循環構造を表す(そうしたい)ときは、JSONのほうがやや有利な気がします。

http://d.hatena.ne.jp/m-hiyama/20060524#c1149125319

循環構造を表すなら YAML だ。JSON では循環構造を表せない。YAML なら anchor と alias を使うことで、何の苦もなく循環構造を表現できる。