軸索とは

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つの手順で作成できます。







  1. <tag>



    tag {



    置き換えます
  2. </tag>



    }



    置き換えます
  3. attr=value



    attr: value



    置き換えattr: value



  4. テキストを二重引用符( "



    )で囲みます
  5. コンマ文字( ,



    )を削除するか、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



は同様のフォーマットスタイルもサポートしています。

たとえば、比較のために:









 person name: "Alex" age: 25
      
      







 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 }
      
      






All Articles