| ファイル名拡張子 |
.jdt、.jdb [1] |
|---|---|
| インターネットメディアの種類 |
アプリケーション/jdata-テキスト、アプリケーション/jdata-バイナリ[1] |
| タイプコード | テキストとバイナリ |
| 開発者 | 千千芳 |
| 初回リリース | 2019年7月25日[1] |
| 最新リリース | 1.0 ドラフト2 2019年7月25日[2] |
| フォーマットの種類 | データ交換 |
| 延長 | 翻訳 |
| オープンフォーマット? | はい |
| Webサイト | オープンJデータ |
JData は、人間が読める (テキストベース) JSONおよび (バイナリ) UBJSON形式を使用して、汎用および科学的なデータ構造を表すように設計された、軽量のデータ注釈および交換オープン スタンダードです。JData 仕様は、特にMATLAB、Python、JavaScriptなどのプログラミング言語間での階層的かつ複雑なデータの交換を簡素化することを目的としています。JDataは、スカラー、N 次元配列、スパース/複素数値配列、マップ、テーブル、ハッシュ、リンク リスト、ツリー、グラフなど"name":value、幅広いデータ構造を格納するための JSON 互換構造の包括的なリストを定義し、各データ要素のオプションのデータ グループ化とメタデータをサポートします。生成されたデータ ファイルは JSON/UBJSON 仕様と互換性があり、ほとんどの既存のパーサーで簡単に処理できます。JData 定義の注釈キーワードにより、JSON での厳密に型指定されたバイナリ データ ストリームの格納、データ圧縮、リンク、および参照も可能になります。
歴史
JData 注釈スキームの初期開発は、広く使用されているオープンソースの MATLAB/ GNU Octave JSON リーダー/ライターである JSONLab Toolbox の開発の一環として、2011 年に始まりました。、、などの注釈付き ND 配列構造の大部分は、_ArrayType_JSONLab_ArraySize_の_ArrayData_初期リリースで実装されていました。2015 年に、JData 仕様の最初のドラフトが Iso2Mesh Wiki で開発され、2019 年以降、仕様のその後の開発は Github に移行されています。
リリース
JData バージョン 0.5
JData 仕様の v0.5 バージョンは、2019 年 5 月 15 日に公開された、仕様の最初の完全なドラフトおよび公開 RFC (Request for Comment) です。この仕様のプレビュー バージョンは、ND 配列、スパース配列と複素数値配列、バイナリ データ インターフェイス、データ レコード レベルの圧縮、ハッシュ、テーブル、ツリー、リンク リスト、グラフなど、科学データと研究に関連するデータ構造の大部分をサポートしています。また、データのリンクと参照の一般的な方法についても説明します。この仕様バージョンのリファレンス実装は、JSONLab v1.8 としてリリースされています。
JData バージョン 1 ドラフト 1
JData 仕様バージョン 1 のドラフト 1 は、2019 年 6 月 4 日にリリースされました。このリリースの主な変更点は、1) ND 配列要素のシリアル化順序が列優先から行優先に変更されたこと、2)_ArrayData_複雑な ND 配列の構成が 1 次元ベクトルから 2 行の行列に変更されたこと、3) ハッシュ データ JSON 表現で文字列以外の値を持つキーをサポートしたこと、4)_ByteStream_汎用バイナリ データまたはバイナリ ラージ オブジェクト (BLOB) をシリアル化するための新しいオブジェクトが追加されたことなどです。この仕様バージョンのリファレンス実装は、JSONLab v1.9 としてリリースされています。
JData バージョン 1 ドラフト 2
JData 仕様バージョン 1 のドラフト 2 は、2019 年 7 月 25 日にリリースされました。このリリースの主な変更点は、1)_ArrayShape_タグによる特殊行列の保存のサポート、2) すべての_ArrayCompression*_タグの名前を に変更_ArrayZip*_、3) 専用のテーブル データ キーワード_TableCols_、、_TableRows_およびの追加です_TableRecords_。この仕様バージョンのリファレンス実装は、JSONLab v2.0 としてリリースされています。
JData アノテーションの例
数値スカラー
数値はJSONまたはUBJSON仕様で直接サポートされています。数値は通常、JDataアノテーションに変換されても変更されません。ファイルとして保存する場合、数値はJSON/UBJSON数値形式で直接保存されます。例:
特殊定数と文字列
いくつかの特別な定数、つまり「NaN」、「Infinity」、「-Infinity」があります。これらは、JSON/テキスト JData 形式で保存されるときに特別な文字列キーワードとしてエンコードされますが、バイナリ JData 形式で保存されるときは変更されません。
構造とハッシュ
メタデータや名前付きメンバーを持つ単純なリストを表す場合、階層構造が必要になることがよくあります。「構造」データ型は JSON および UBJSON の「オブジェクト」構造に直接マップできるため、JData アノテーションを使用するときに変換する必要はありません。
配列形式の2D配列
単純な1次元ベクトルは、JSONとUBJSONの両方で「配列」構造を使用してサポートされています。たとえば、
注釈付き形式の2次元配列
JData 仕様では、軽量なデータ注釈アプローチを導入し、保存されたデータ レコード内のデータ タイプ、データ サイズ、圧縮などの追加情報を指定できるようにしました。これは、JData 指定の人間が読めるサブフィールド キーワードを含む「構造のような」データ コンテナー (構造はほとんどすべてのプログラミング言語でサポートされています) を使用して実現されます。この構造は、既存の JSON/UBJSON ライブラリの多くを使用して簡単にシリアル化することもできます。
例えば、上記の2次元配列は、細分化されたデータ保存を可能にするために注釈付き形式を使用して保存することもできる。
3次元以上の配列
高次元配列の保存には、JSON/UBJSON の両方でネイティブにサポートされている直接形式または注釈形式のいずれかを使用できますが、テキストベースの JData には注釈形式を使用し、バイナリ JData にはパック配列最適化形式を使用する方が、処理速度が速いため、より有利になります。
圧縮された配列データ
JData アノテーションは、スペースを節約するためにデータ圧縮をサポートしています。いくつかの追加キーワードが必要です。これには、「_ArrayZipType」(使用される圧縮方法)、「_ArrayZipSize_」(圧縮前に「_ArrayData_」構造に格納される「前処理済み」データの次元ベクトル)、「_ArrayZipData_」(圧縮されたデータ バイト ストリーム) が含まれます。たとえば、
複素数と複素数値配列
- JData仕様を参照
複素数値データレコードは、「注釈付き配列形式」を使用して保存する必要があります。これは、 _ArrayIsComplex_キーワードの存在と、構造内の複素数値を[[シリアル化された実数部の値]、[シリアル化された虚数部の値]]_ArrayData_の順序でシリアル化することによって実現されます。
スパース配列
- JData仕様を参照
複素数値スパース配列
- JData仕様を参照
テーブル
- JData仕様を参照
木々
- JData仕様を参照
グラフ
- JData仕様を参照
ソフトウェアエコシステム
テキストベースの JData ファイルはプレーンな JSON ファイルであり、ほとんどの既存の JSON パーサーで簡単に解析できます。JData 注釈タグを含む JSON ファイルは、.jdt というサフィックスを付けることが推奨されますが、.json として保存することもできます。.jdt ファイルと .json ファイルには、次のようなわずかな違いがあります。
- JData .jdt ファイルは 、1 つのファイル内で複数の連結された JSONオブジェクトを受け入れます。
- JData .jdt 文字列は文字列内の改行を受け入れますが、JSON 仕様では改行文字を "\n" としてエンコードする必要があります。ほとんどの JSON パーサーは、"relaxed" 解析モードを使用して文字列内の改行を処理できます。
JData 仕様のバイナリ インターフェイスは、バイナリ JData (BJData) 仕様によって定義されます。この形式は、主にUBJSON仕様ドラフト 12 から派生したものです。BJData 形式には、UBJSON に比べて 3 つの拡張機能が含まれています。1) BJData では、UBJSON ではサポートされていなかった 4 つの新しいデータ マーカー ( 、 、 、 ) が導入されています。2 ) [u]BJData"uint16"では、[m]最適化された型付き ND 配列コンテナーが導入されています。3) BJData では、 ( ) へのマッピングが停止され、代わりにそれぞれの IEEE754 表現が使用されます。
"uint32"[M]"uint64"[h]"float16"NaN/Infinitynull[Z]
軽量なPython JDataエンコーダ/デコーダpyjdata [3]は、 PyPI、Debian/Ubuntu、GitHubで入手可能です。これは、dict、array、numpy ndarrayなどのさまざまな複雑なデータ構造をJData表現に変換し、データをJSONまたはUBJSONファイルとしてエクスポートできます。BJData/UBJSONファイルの読み取り/書き込みを可能にするBJData Pythonモジュールpybj [4]も、PyPI、Debian/Ubuntu、GitHubで入手可能です。
MATLAB および GNU Octave の場合、JSONLab v2.0 は最新の JData 仕様のリファレンス実装であり、Debian/Ubuntu、Fedora、GitHub で利用できます。JSONLab ツールボックスは MATLAB File Exchange 経由でも配布されており、最も人気のあるダウンロード パッケージの 1 つであり、Popular File 2018 に選ばれています。
JavaScriptでは、Webページ内のJDataエンコードファイルを処理するためのjsdataというJDataエンコーダ/デコーダが開発されています。jsdataの代表的なアプリケーションは、NIHが資金提供しているクラウドベースのモンテカルロ光子輸送シミュレーションプラットフォーム であるMCX Cloud [5]です。
JData アノテーションを含む JSON ファイルをエンコード/デコードするためのコンパクトな関数も、Monte Carlo eXtreme 光子輸送シミュレーターの一部として C/C++ で実装されています。
参照
参考文献
- ^ abc 「JData仕様 - バージョン1ドラフト2」。GitHub 。 2022年3月14日。
- ^ “NeuroJSON/jdata”. GitHub . 2022年3月14日.
- ^ 「JData for Python - 軽量で移植可能なデータ注釈メソッド」。
- ^ 「Python 用バイナリ JData - 軽量バイナリ JSON 形式」。
- ^ Fang, Qianqian; Yan, Shijie (2021). 「MCX Cloud – クラウドコンピューティングを備えた最新のスケーラブルで高性能なブラウザ内モンテカルロシミュレーションプラットフォーム」(プレプリント) . mcx.space . doi :10.1101/2021.06.28.450034. S2CID 235700017. 2021年12月18日閲覧。
外部リンク
- 公式サイト
- NeuroJSON プロジェクト
- JData 仕様 (最新)
- バイナリ JData (BJData) 仕様 (最新)
