軸索とは

AXONは、オブジェクト、ドキュメント、およびデータをテキスト形式でシリアル化して表現するための表記法です。 JSONの シンプルさXMLの 拡張性、 YAMLの 読みやすさを兼ね備えています


pythonには、 一緒に遊ぶことができるpyaxonプロジェクトがあります。 ただし、 jsonモジュールの速度がそれほど劣らないように作成されました。 したがって、それは実情に適している可能性があります。


なぜアクソンなのか?


AXONは、 JSONXML短所または不便さに対処する試みとして登場しましたが、同時にその利点と機能を維持し、さらに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=valueattr: 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は一連のオブジェクトを表す場合があります


JSONXML制限の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 } 


Source: https://habr.com/ru/post/J304516/


All Articles