私があなたの考えを正しく理解していれば、データ交換の主要なモデルとして 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 を取得するためのツールがあります。
- 落とし穴があります (上記参照)。
お役に立てれば。