AXONは、オブジェクト、ドキュメント、およびデータをテキスト形式でシリアル化して表現するための表記法です。 JSONの シンプルさ 、 XMLの 拡張性、 YAMLの 読みやすさを兼ね備えています 。
pythonには、 一緒に遊ぶことができるpyaxonプロジェクトがあります。 ただし、 jsonモジュールの速度がそれほど劣らないように作成されました。 したがって、それは実情に適している可能性があります。
なぜアクソンなのか?
AXON
は、 JSON
とXML
短所または不便さに対処する試みとして登場しましたが、同時にその利点と機能を維持し、さらにYAML
固有の可読性を追加しました。
AXONにはJSONの「拡張」バージョンが含まれています
1. JSON
は2つの欠点があります。
- 識別子である属性/キーの名前は引用符で囲む必要があります。
- 新しいキーと値のペアを挿入すると、カンマを忘れやすくなります。
AXON
はこれらの不便を次のように解決します。
- 識別子である名前の引用を避けることができ ます 。
- コンマの分離は完全に省略され 、空白文字のみが要素の分離に使用されます。
その結果、プレゼンテーションがよりコンパクトになり、フォーマット時の認識が容易になります。
比較のために:
JSON
{ "name": "Alex", "birth": "1979-12-25", "email": "mail@example.com"} [ "Alex" "1979-12-25" "mail@example.com"]
AXON
{ name: "Alex" birth: ^1979-12-25 email: "mail@example.com"} [ "Alex" ^1979-12-25 "mail@example.com"]
2. JSON
はロード後のことを保証しません
{ "name": "Alex", "birth": "1979-12-25", "email": "mail@example.com"}
キー/属性の順序は保持されます。
AXON
は
{ name: "Alex" birth: ^1979-12-25 email: "mail@example.com"}
キーの順序を保持せずにmapping
変換されます。
同時に、それは述べられています
[ name: "Alex" birth: ^1979-12-25 email: "mail@example.com"]
キーの順序を維持しながら mapping
変換されます。
3. AXON
は、 ISO
形式で日付と時刻を表す構文をサポートしています。
- 日付
^2010-12-31
- 時間
^12:30 ^12:30:15 ^12:30+03:00 ^12:30:15-04:30
- 日時
^2010-12-31T12:30 ^2010-12-31T12:30:05.0125 ^2010-12-31T12:30+04:00 ^2010-12-31T12:30:05.0123-04:00
10進数を表すためだけでなく:
1D 123456789D 3.14D 1.23e-6D
4. AXON
では、非原子値ラベルを定義し、それらを内部参照として使用することもできます。 これにより、必要に応じて、シリアル化/逆シリアル化中に再利用可能な非アトミック値のコピーを作成できなくなります。
例:
[ { prev: &a (2012-12-30 10:00) next: &c (2012-01-01 12:00) } { prev: &b (2012-12-31 13:00) next: *a } { prev: *c next: *b } ]
ラベルには&
( &a &b &c
)プレフィックスがあり、リンクには*
( *a *b *c
)プレフィックスがあります。
AXONデータモデルには、よりコンパクトな表記のInfoset XML Modelオプションが含まれています
構造化データのXML
表現の具体例を考えてみましょう。
<person> <name>John Smith</name> <age>25</age> <address type="home"> <street>21 2nd Street</street> <city>New York</city> <state>NY</state> </address> <phone type="home">212-555-1234</phone> </person>
AXON
は、 XML
構造化データを表現XML
ためのより単純な構文のアイデアを実装しています。
person { name {"John Smith"} age {25} address { type: "home" street {"21 2nd Street"} city {"New York"} state {"NY"} } phone {type:"home" "212-555-1234"} }
AXON
プレゼンテーションは、 XML
から5つの手順で作成できます。
-
<tag>
をtag {
置き換えます -
</tag>
を}
置き換えます -
attr=value
をattr: value
置き換えattr: value
- テキストを二重引用符(
"
)で囲みます - コンマ文字(
,
)を削除するか、1つのスペースに置き換えます
この変換の結果は、元のXML
ドキュメントと構造的に同じです。 これは本質的に、 XML
ドキュメントを表すための構文的にコンパクトなフォームです。
比較のために、構造のサブ要素に同じインデントの原則を使用して、{}なしで複雑な要素をフォーマットするAXON
でプレゼンテーションを行います。
person name {"John Smith"} age {25} address type: "home" street {"21 2nd Street"} city {"New York"} state {"NY"} phone type: "home" "212-555-1234"
この表現は、すべての文字{and}と不要な空白行を削除することにより、前の表現から取得されます。
AXONはXMLとJSONを拡張します
XML
属性は単純な値のみを持つことができますAXON
、属性の値は( JSON
)任意の値にすることができます。 さらに、単純な値はタイプ( unicode
形式のテキスト 、 数値 、 10進数 、 日付と時刻 、 base64でエンコードされたバイト配列 )です。 AXON
は、 XML
要素に名前をXML
と同じように、オブジェクトに名前を付けることができるという意味で、 JSON
拡張と考えることができます。
例:
person name: "John Smith" age: 25 burn: 1975-10-21 locations: [ address type: "home" street: "21 2nd Street" city: "New York" state: "NY" ] contacts: [ phone type: "home" "212-555-1234" email type: "personal" "mail@example.com" ]
JSON
は、パーツの順序が重要な不規則な構造の表現に関連する1つの不便さがあります。 そのような構造では、名前による「直接」アクセスの結果としてではなく、名前による順次検索の結果として要素にアクセスします。
例として、構造化されたXML
ドキュメントを考えます。
<section title="Title"> <par style="normal">paragraph</par> <enumerate style="enum"> <item>item text</item> </enumerate> <par style="normal">paragraph</par> <itemize style="itemize"> <item>item text</item> </itemize> <par style="normal">paragraph</par> </section>
直接、構造を変換せずに、このドキュメントは要素の順序と再現性の重要性のためにJSON
変換されません。 名前付き要素のシーケンスをエミュレートする1つの翻訳オプションは次のとおりです。
{ "tag": "section", "@": {"title": "Title"}, "*": [ { "tag": "par", "@": {"style":"normal", "text":"paragraph"}}, { "tag":"enumerate", "@": {"style": "enumerate"}, "*": [ { "tag":"item", "@": {"text":"item text"}} ] }, { "tag": "par", "@": {"style":"normal", "text":"paragraph"}}, { "tag":"itemize", "*": [ { "tag":"item", "@": {"text":"item text"}} ] }, { "tag": "par", "@": {"style":"normal", "text":"paragraph"}} ] }
AXON
そのような構造は「1対1」に変換されます。
section title: "Title" par style: "normal" "paragraph" enumerate style: "enum" item { "item text" } par style: "normal" "paragraph" itemize style: "itemize" item { "Item text" } par style: "normal" "paragraph"
AXONはYAMLスタイルのフォーマットをサポートしています
YAML
の魅力的な側面は、 wiki
スタイルのプレゼンテーション形式です。 AXON
は同様のフォーマットスタイルもサポートしています。
たとえば、比較のために:
- {}なしのフォーマット(
YAML
スタイル)
person name: "Alex" age: 25
- {}およびインデント(
C/JSON
スタイル)を使用したフォーマット
person { name: "Alex" age: 25}
- コンパクトフォーマット
person{name:"Alex" age:25}
AXONは一連のオブジェクトを表す場合があります
JSON
とXML
制限の1つは、単一のルートオブジェクトを表すことです。 それどころか、 AXON
は一連のオブジェクトまたは一連の
表し
。一度に1つずつロードできる
ペアです。 例:
- 一連のオブジェクト
{ name: "Alex" age: 32 } { name: "Michael" age: 28 } { name: "Nick" age: 19 }
- キーを持つ一連のオブジェクト
alex: { message: "Hello" datetime: ^2015-07-12T12:32:35 } michael: { message: "How are you" datetime: ^2015-07-12T12:32:35 }