ブログ  前の月  次の月 

たけまる / 2007-02


2007-02-22 Thu

_ Perl - Google::Data::JSON [perl][gdata]

(2007-12-03 追記) 変換ルールと使い方を追加しました.

昨年 11月,GData フィードが JSON をサポートすると,他にもいくつか
の Web サービスが JSON に対応するようになりました.最近では,XML
Web サービスを JSON に変換するのも流行ってるようです.

XML から JSON への変換は技術的には簡単ですが,標準化された方法がな
いのが難点です.特に,リテラル要素を指す Key 名や XML 宣言の扱い方,
名前空間の表現方法については一意に決まらないので,統一したほうがよ
さそうです.

いまのところ,もっとも知られている変換方法は GData だと思いますの
で,GData の変換ルールをまとめてみました.

- 属性は文字列プロパティに変換
XML
<link href="http://example.com/collection" rel="self"/>
JSON
{ "link": {
    "href": "http://example.com/collection",
    "rel": "self"
} }

- 子要素はオブジェクトプロパティに変換 (テキスト要素のキーは "$t")
XML
<author>
  <name>Foo Bar</name>
  <email>foo@example.com</email>
</author>
JSON
{ "author": {
    "name": { "$t": "Foo Bar" },
    "email": { "$t": "foo@example.com" }
} }

- 複数存在する要素は配列プロパティに変換
XML
<link href="http://example.com/"/>
<link href="http://example.com/collection" rel="self"/>
JSON
{ "link": [
    { "href": "http://example.com/" },
    { "href": "http://example.com/collection", "rel": "self" }
] }

この GData 変換を Perl モジュールにしてみました.

Google::Data::JSON

このモジュールは XML → JSON だけでなく,逆変換もできます.また,
XML, JSON, XML::Atom オブジェクト, Hash Reference の間で自由に変換
できます.

使い方は簡単です.
use Google::Data::JSON qw(gdata);

# XML -> JSON
$json = gdata($xml)->as_json;

# XML -> HASH
$hash = gdata($xml)->as_hash;

# XML::Atom object -> JSON
$json = gdata($atom)->as_json;

# JSON -> XML
$xml = gdata($json)->as_xml;

Referrer (Inside): [2007-12-03-1]

2007-02-13 Tue

_ Perl - XML::Atom::Service [perl][atompub]

Perl には Atom サービス文書とカテゴリ文書の実装がなかった
[2006-12-11] ので,作成してみました.CPAN にあります.

XML::Atom::Service

下のようにしてインストールできます.
$ cpan XML::Atom::Service

使い方は XML::Atom::Feed などとほとんど同じです.詳しくは POD を見
てください.

なお,XML::Atom::Category に,「親要素の名前空間を引き継いでしまう」
というバグがあったので (フィード・エントリ文書とサービス・カテゴリ
文書は名前空間が異なる),XML::Atom::Categories に下のコードを記述
して強制的に直しておきました.

 *{XML::Atom::Category::element_ns} = sub { 
     $XML::Atom::Util::NS_MAP{$XML::Atom::DefaultVersion}
 };

これによって,XML::Atom::Category は親要素にかかわらず,指定された
Atom バージョン ($XML::Atom::DefaultVersion) に対応する名前空間を
返すようになります.
Referrer (Inside): [2007-07-01-1]

2007-02-07 Wed

_ Atom 出版プロトコル - メディアタイプ仕様の和訳 [atompub]

以下のドキュメントは,IETF Internet-Draft "The application/atom+xml
Type Parameter" を対訳形式で和訳したものです.厳密さより読みやすさ
を優先し,意訳を多用しています.ご了承ください.

翻訳作業はこのブログの著者が行いました.ドキュメントには翻訳上の誤
りがある可能性があり,内容について一切保証をするものではありません.
正確さを求める場合には必ず原文を参照してください.当方は,この文書
によって利用者が被るいかなる損害の責任を負いません.

誤りなどを見つけましたら,takemaru _at_ teahut . sakura . ne . jp
までお願いします.

draft-ietf-atompub-typeparam-00-ja.txt

■ 概要

Atom シンジケーションフォーマット (RFC 4287) では,Atom フィード文
書とエントリ文書を表す 'application/atom+xml' メディアタイプを定め
た.本文書では,そのふたつの Atom 文書を区別するためのオプショナル
な 'type' パラメータを定める.