3

JSON データ構造を指定する必要があります。そのデータ構造はインターフェース記述の一部となり、データは JavaScript によって処理されます。JSONはデータ送信用に設定されています。JSON の代わりに XML を使用した他のプロジェクトでは、これに豊富な XML スキーマを使用しました。残念ながら、今はそれができません。

私はいくつかの調査を行い、JSON Schemaを見つけました。ただし、これはまだ下書きの状態であるため、このコンテキストで使用するのは少し不安です。

また、XML を JSON にマップする方法について議論しているこの質問にも遭遇しました。org.json 名前空間のXML クラスに標準 (?) 変換があるようです。混合コンテンツのない XML 文書の場合、変換はかなり単純なようです。

したがって、XML スキーマを使用してデータ構造を記述し、既存の XML 処理 (編集、変換、検証など) ツールをサーバー側で可能な限り使用し、XML DOM を JSON に変換してから、データを JSON コンシューマーに送信します。

データ送信は一方向のみであり、混合コンテンツの XML はありません。

多分誰かがこれを以前に試したことがありますか?XML スキーマのセマンティクスがクライアント側のプログラマーにとって (概念的に) JSON ドキュメントに適用されたときに十分に明確であるという意味で、それは実用的なアプローチでしょうか? 注意すべき特定の落とし穴はありますか?

4

2 に答える 2

2

私があなたの考えを正しく理解していれば、データ交換の主要なモデルとして XML スキーマを使用することをお勧めします。

このアイデアには 2 つの部分があります。

  • 単一のソースを使用して、すべてのデータ交換をモデル化します。
  • この単一のソースとして XML スキーマを使用します。

単一ソース モデル

最初のアイデアは、2002 年から 2005 年にかけて誇大宣伝された MDD (モデル駆動型開発) または MDA (モデル駆動型アーキテクチャ) につながります。それは UML に重きを置いた、ベンダー主導の誇大広告でしたが、かなりの数の妥当なもの ( AndroMDAなど) が生き残りました。

一般的に、MDA は良い考えです。あなたが「標準的な」ことをしている限り、それは素晴らしい働きをします。しかし、「カスタマイズ」したい場合、それは悪夢になる可能性があります.

あなたの場合、シングルソース モデルが理にかなっていると断言できます。これはデータ交換についてです。コアでは、これは必要なものすべてを表現するのに十分強力な非常に単純なモデルに減らすことができます。

JSON はこの例です。JSON は XML よりもさらに単純ですが、それでも十分に強力です。基本的なプリミティブ型、オブジェクト、配列、およびネストがあれば、ほとんど何でも表現できることが明確に示されています。

この「単一ソース モデル」は、必ずしも UML である必要はありません。基礎となるすべての要件をカバーするのに十分強力なものであれば何でもかまいません。

「単一ソース モデル」の主な問題は、カスタマイズです。ご存知のように、90% は OOTB で非常にうまく機能しますが、10% では必要な結果が得られず、カスタマイズする必要があり、努力が必要になります。ほとんどの生成ツールには、何らかの「プラグイン」があります。したがって、90% に収まる場合はラッキーです。

要約すると、単一ソース モデルは、それがすべてのニーズに対応し、必要なシナリオに適応/適用するための労力がゼロから作成するよりも大きくない限り、良い考えです。

モデルとしての XML スキーマ

次の問題は、XML スキーマが単一ソース モデルとして適切かどうかです。

スキーマ コンパイラ(XJC)を備えたJAXBを聞いたり、使用したりしたことがあると思います。このコンパイラは、XML スキーマを取得して、JAXB アノテーションを使用して Java クラスを生成できます。これらのクラスを使用して、XML を Java オブジェクトにアンマーシャリングしたり、これらのオブジェクトを XML にマーシャリングしたりできます。

そしてJSONに:

JSON への JAXB マッピング

これらのクラスから JSON スキーマを生成することもできるようです (ただし、自分で試したことはありません)。

JAXB アノテーション付きクラスから JSON スキーマを生成するには?

したがって、XML Schema-first アプローチが機能します。これをスキーマ駆動開発と呼ぶことができます(私はここに、この用語の著作権を主張します)。

私は個人的に多くのことを行い、XJC 用の多数のツール/プラグインをスキーマ ファーストで作成しました。例えば:

  • Hyperjaxbは、スキーマ派生クラスを JPA で持続可能にします。
  • Jsonixは基本的に、純粋な JavaScript の JAXB ポートです。

私の経験では、多くのことをスキーマ ファーストで行うことができますが、XML スキーマは優れていますが、最良または最も単純なモデルではないと言わざるを得ません。仕様は複雑です。スキーマから派生したクラスを見てみると、Java Bean とプロパティにうまく当てはまらないいくつかの構造を見つけることができます。たとえば、@XmlElementRefは複雑で奇妙に見えることが多い構造です。これは、XML スキーマで簡単に表現できるかなりの数のケースをカバーするために依然として必要です。私が書いたすべてのツールで、私は常にケースとコーダーケースとそのような構造のコーナーケースのコーナーケースと戦わなければなりませんでした.

XML Schema は、シンプルできちんとしていれば、美しいかもしれません。Bean とプロパティに最適なマップ、理解しやすく操作しやすい、多くのツールのサポート。したがって、XML スキーマは、データ交換をモデル化または指定するための最悪の選択ではありません

しかし、非常に複雑になることもあります。私は過剰に設計されたスキーマをたくさん見てきましたが、それらを扱うのは非常に難しく、利益はほとんどありませんでした。スキーマ設計者は、XML スキーマを十分に理解していないだけでなく、よく知っている場合もあります。前回、「XML スキーマ設計のベスト プラクティス」の作成を手伝ったとき、すべきこととすべきでないことをまとめた 60 ページ以上のドキュメントにたどり着きました。そのため、XML スキーマを間違えやすいのです。

それでも、上で述べたように、シンプルでクリーンに保たれていれば、美しいかもしれません。

代替手段は何ですか?

実際に Java コードをモデル ソースとして使用することもできます。注釈付き POJO は表現力が高く、十分に用途が広いですが、操作は非常に簡単です。あなたはスキーマファーストではなく、Javaコードファーストですが、それでも同じトリックをすべて行うことができます. 注釈付きクラスに基づいてXML スキーマを生成できます。MOXyを使用すると、永続性 (およびその他の多くのこと) を実行できます。JSONも同様に実行できます。

質問を要約して答えるには:

  • はい、実用的であり、かなりうまく機能することが知られています。
  • スキーマ優先のアプローチとともに、Java 優先のアプローチも検討してください。
  • XML-Objects-JSON-Persistence を取得するためのツールがあります。
  • 落とし穴があります (上記参照)。

お役に立てれば。

于 2014-10-25T21:03:57.127 に答える
0

これまでのところ誰もこの質問に答えておらず、私たちはこのアプローチに従い始めたので、私たちにとってこのアプローチは一般的に非常にうまく機能することを簡単に要約します. サーバーと Web クライアント間のコントラクトの一部として機能する非常にリッチな XML スキーマを設計しました。JSON は XML に 1 対 1 で従うので、XML スキーマも JSON ドキュメントを自然に読み取ります。

私たちが気付いた唯一の小さな問題は、私たちが使用する正規の XML から JSON への変換 (スキーマを認識しない) が、ツリーのどこかに子要素が 1 つしかない場合、XML スキーマにその要素の「多数」の上限。これは、JSON 側でオブジェクト値とコレクションの間のポリモーフィズムを処理する必要があることを意味します。

于 2014-01-11T07:14:35.093 に答える