YAMLってたべれるの?

おひさしぶりです。へたれのこみや(pinkmac)です。
YAMLとは何かを今更知ったので、覚え書きしておきます。
折角なので他のデータ形式もいっしょに見直してみることにしました。

サンプルデータ on XML

XML:
  1. <zgundam>
  2.     <organization name="エゥーゴ">
  3.         <person>
  4.             <name>カミーユ・ビダン</name>
  5.             <ms>Zガンダム</ms>
  6.         </person>
  7.         <person>
  8.             <name>クワトロ・バジーナ</name>
  9.             <ms>百式</ms>
  10.         </person>
  11.     </organization>
  12.     <organization name="ティターンズ">
  13.         <person>
  14.             <name>パプテマス・シロッコ</name>
  15.             <ms>ジ・O</ms>
  16.         </person>
  17.         <person>
  18.             <name>レコア・ロンド</name>
  19.             <ms>パラス・アテネ</ms>
  20.         </person>
  21.     </organization>
  22.     <organization name="アクシズ">
  23.         <person>
  24.             <name>ハマーン・カーン</name>
  25.             <ms>キュベレイ</ms>
  26.         </person>
  27.     </organization>
  28. </zgundam>

思いっきり偏ったサンプルで恐縮ですが、、
このデータ構造を、YAML、ついでにJSONで書いてみたいと思います。

YAML

特徴

  • YAML Ain't Markup Language の名が顕すようにマークアップ言語ではない
  • スキーマやDTDの概念がない
  • 利用可能な言語: Java / JavaScript / Perl / PHP / Python / Ruby / XML/

基本的な記述法

  • インデントで階層構造を表現
  • インデントにはスペースのみ利用可能。タブは使用できません
  • 配列・ハッシュ・スカラーでデータを表現
  • 日本語の扱いに難あり?
  • 詳しくはYAMLの仕様をご参照あれ
RUBY:
  1. #Zガンダムの登場人物
  2. ##エゥーゴ
  3. aeug:
  4.   - kamille
  5.     name:Kamille Bidan
  6.     sex:men
  7.     ms:z-gundam
  8.   - quattro
  9.     name:Quattro Vageena
  10.     sex:men
  11.     ms:type-100
  12.  
  13. ##ティターンズ
  14. titans:
  15.   - scirocco
  16.     name:Paptimus Scirocco
  17.     sex:men
  18.     ms:THE-O
  19.   - sarah
  20.     name:Sarah Zabiarov
  21.     sex:women
  22.     ms:messala
  23.   - reccoa
  24.     name:Reccoa Londe
  25.     sex:women
  26.     ms:palace-athene
  27.  
  28. ##アクシズ
  29. axis:
  30.   - haman
  31.     name:Haman Karn
  32.     sex:women
  33.     ms:qubeley

インデントだけで記述するスタイルは非常にシンプルですね。

JSON

特徴

  • JavaScript Object Notation
  • YAMLの「フロースタイル」をさらにstrictにしたものがJSONにあたる1 2
  • オブジェクトの内容は必ず連想配列
JavaScript:
  1. {
  2.   "zgundam": {
  3.     "organization": [
  4.       {
  5.         "name": "エゥーゴ",
  6.         "person": [
  7.           {
  8.             "name": "カミーユ・ビダン",
  9.             "sex": "men",
  10.             "MS": "Zガンダム"
  11.           },
  12.           {
  13.             "name": "クワトロ・バジーナ",
  14.             "sex": "men",
  15.             "MS": "百式"
  16.           }
  17.         ]
  18.       },
  19.       {
  20.         "name": "ティターンズ",
  21.         "person": [
  22.           {
  23.             "name": "ジェリド・メサ",
  24.             "sex": "men",
  25.             "MS": "マラサイ"
  26.           },
  27.           {
  28.             "name": "パプテマス・シロッコ",
  29.             "sex": "men",
  30.             "MS": "ジ・O"
  31.           },
  32.           {
  33.             "name": "サラ・ザビアロフ ",
  34.             "sex": "women",
  35.             "MS": "ボリノーク・サマーン"
  36.           },
  37.           {
  38.             "name": "レコア・ロンド",
  39.             "sex": "women",
  40.             "MS": "パラス・アテネ"
  41.           }
  42.         ]
  43.       },
  44.       {
  45.         "name": "アクシズ",
  46.         "person": {
  47.           "name": "ハマーン・カーン",
  48.           "sex": "men",
  49.           "MS": "キュベレイ"
  50.         }
  51.       }
  52.     ]
  53.   }
  54. }

もはや大分アタマがこんがらがってきましたが…
次の機会には各種実装からこれらを使ってみたいと思います。

  1. …といって語弊はない…よね? []
  2.  前述した、インデントを用いた記述方法は「ブロックスタイル」 []

« 再入門JavaScript -目次- – 新はてぶにフィッシング詐欺の危険性あり! »

No Comments »

No comments yet.

Leave a comment

 

WP-Design: Vlad -- Powered by WordPress -- XHTML 1.0