JSONML

JSONマークアップ言語
インターネットメディアの種類
application/jsonml+json (非公式)
フォーマットの種類マークアップ言語Webテンプレートシステム
延長からXMLJSONJavaScript

JsonML ( JSONマークアップ言語)は、XML(拡張マークアップ言語)とJSON (JavaScript Object Notation)間のマッピングに使用される軽量マークアップ言語です。XML文書またはXMLフラグメントをJSONデータ構造に変換することで、 WebブラウザなどのJavaScript環境での使いやすさを向上させ、XMLパーサーのオーバーヘッドなしでXMLデータを操作できるようにします。

JsonMLは、 Ajax (Asynchronous JavaScript and XML)ウェブアプリケーションにおいて最も適用性が高い。JsonMLは、XHTML(eXtensible HyperText Markup Language)をクライアントに転送し、クライアントで決定論的にDOM (Document Object Model)要素に再構築するために用いられる。構築段階では、プログレッシブエンハンスメント戦略を用いることで、静的な要素に動的な動作を組み込むことができる。[ 1 ]

JsonMLは、JBST(JsonML+ブラウザサイドテンプレート)と呼ばれる複雑なクライアントサイドテンプレートを作成するための基盤構造としても使用できます。[ 2 ] JBSTの構文はJSP(JavaServer Pages)やASP.NET (Active Server Pages .NET)のユーザーコントロールに似ています。インタラクティブな例はjsonml.orgのウェブサイトで入手できます。

構文

XMLからJsonMLへの変換は部分的に可逆的です。XML名前空間は、要素名の前に名前空間プレフィックスを付加することで処理されます。 例えば、<myns:myElement/>は になります。["myns:myElement"]

変換例

JsonMLを使用すると、あらゆるXML文書をJSON文字列として一意に表現できます。構文は以下のとおりです。

JsonMLエンコード 元のXML
[ "人物" , { "作成日時" : "2006-11-11T19:23" , "変更日時" : "2006-12-31T23:59" }, [ "名" , "ロバート" ], [ "姓" , "スミス" ], [ "住所" , { "種類" : "自宅" }, [ "番地" , "12345 シックススアベニュー" ], [ "市" , "エニータウン" ], [ "州" , "CA" ], [ "郵便番号" , "98765-4321" ] ] ]
<!-- 人物レコードの XML 表現 --> <person created= "2006-11-11T19:23" changed= "2006-12-31T23:59" > <firstName> Robert </firstName> <lastName> Smith </lastName> <address type= "home" > <street> 12345 Sixth Ave </street> <city> Anytown </city> <state> CA </state> <postalCode> 98765-4321 </postalCode> </address> </person>

「通常の」JSON 変換では、よりコンパクトな表現が生成されますが、キーと値のペアが属性であるかノードであるかを定義しないため、ドキュメントの構造情報の一部が失われます。

{ "person" : { "address" : { "city" : "Anytown" , "postalCode" : "98765-4321" , "state" : "CA" , "street" : "12345 Sixth Ave" , "type" : "home" }, "created" : "2006-11-11T19:23" , "firstName" : "Robert" , "lastName" : "Smith" , "modified" : "2006-12-31T23:59" }}

「オブジェクト形式」の誤称

JSONユーザーグループのスレッドにおいて、ダグラス・クロックフォードは「JsonML」という用語を「配列形式」と「オブジェクト形式」という2つの形式を表すために誤って使用しました。[ 3 ]これは、クロックフォードが「配列形式」と呼んでいたものを指すJsonMLという用語の誤用でした。[ 4 ]

検証

JsonML は次の JSON スキーマで検証できます。

{ "type" : "array" , "minItems" : 1 , "maxItems" : 3 , "items" : [ { "type" : "string" }, { "oneOf" : [ { "type" : "object" }, { "type" : "string" }, { "type" : "array" , "items" : { "$ref" : "#" }} ]}, { "oneOf" : [ { "type" : "string" }, { "type" : "array" , "items" : { "$ref" : "#" }} ]} ] }

類似技術との比較

XML/XSLT

XMLとXSLT(Extensible Stylesheet Language Transformations)もクライアント側のテンプレートを作成でき、どちらもデータとは別にテンプレートをキャッシュできます。JBSTは、異なる種類の制御言語を混在させる必要がなく、テンプレート内で JavaScriptをネイティブに使用します。

インナーHTML

一見似たようなタスクを実行するために使用されているように見えますが、JsonMLとinnerHTMLは全く異なります。InnerHTMLではすべてのマークアップを正確な形式で記述する必要があるため、サーバーがマークアップをレンダリングするか、プログラマーがJavaScriptで高負荷な文字列連結を実行するかのいずれかになります。

JsonMLはJBSTを介してクライアントサイドテンプレートを使用します。つまり、HTMLはビルド時にJavaScriptテンプレートに変換されます。実行時にはデータが提供され、DOM要素が生成されます。生成されたDOM要素は、既存の要素に挿入したり置き換えたりできますが、innerHTMLでは余分なDOM要素を作成せずにこれを行うのは容易ではありません。再バインディングは追加データのリクエストのみを必要とし、これは完全に展開されたマークアップよりもサイズが小さくなります。その結果、マークアップはデータとは別に リクエストまたはキャッシュされるため、パフォーマンスが大幅に向上することがよくあります。

HTML メッセージパターン/ブラウザ側テンプレート

簡潔さの観点から、innerHTMLはHTMLメッセージパターン[ 5 ]スタイルのAjaxで推奨される手法です。しかし、JsonFx [ 6 ]のようなツールは、ブラウザサイドで完全なテンプレートAjaxパターンを提供しながら、JsonMLとJBSTの実装を簡素化することを目的としています。[ 7 ]

参考文献

  1. ^ McKamey, Stephen M. (2007年2月3日). 「JsonML - DOM要素への動作のバインディング」 .公式ウェブサイト. JsonML.org. 2010年8月14日時点のオリジナルよりアーカイブ。 2011年1月7日閲覧
  2. ^ McKamey, Stephen M. (2008年8月3日). 「JsonML + Browser-Side Templating (JBST)」 .公式ウェブサイト. JsonML.org . 2011年1月7日閲覧
  3. ^ 「Json: メッセージ: Org.json.JSONML.java」2012年4月27日時点のオリジナルよりアーカイブ2009年2月12日閲覧。
  4. ^ 「JsonML(JSONマークアップ言語)」
  5. ^ 「HTMLメッセージ」 . AjaxPatterns.orgについて. AjaxPatterns.org. 2012年7月1日時点のオリジナルよりアーカイブ。 2011年1月7日閲覧
  6. ^ 「Welcome to JsonFx.NET」 . JsonFx.NET公式ウェブサイト. Stephen M. McKamey . 2011年1月7日閲覧
  7. ^ 「ブラウザサイドテンプレート」 AjaxPatterns.org. 2012年7月7日時点のオリジナルよりアーカイブ2011年1月7日閲覧。