JAXPとJAXBの違いは何ですか?


回答:


69

JAXP(Java API for XML Processing)は、DOM、SAX、StAXなどのJavaSEのさまざまな低レベルXMLAPIをカバーするかなり時代遅れの包括的な用語です。

JAXB(Java Architecture for XML Binding)は、javax.xml.bindアノテーションを使用してXMLドキュメントをJavaオブジェクトモデルにバインドする特定のAPI(以下のもの)です。


1
解析(DOM、SAXなど)に加えて、JAXPには、XPathの評価、XSLT変換の実行、スキーマに対するXMLの検証などのタスク用のAPIも含まれていると思います。javax.xml.validationクライアントが問題を自分でトラブルシューティングできるように、クラスを使用してサービスのXSDに対して着信要求を検証したことを覚えています。
spaaarky21 2017年

49

JAXPはXML処理用のJavaAPIであり、DOMまたはSAXパーサーを使用してXMLファイルを解析するためのプラットフォームを提供します。

JAXBはXMLバインディング用のJavaアーキテクチャですが、Javaプログラミング言語で記述されたアプリケーションからXMLドキュメントに簡単にアクセスできるようになります。

例:Computer.xmlファイル、JAXPを使用してデータにアクセスする場合は、次の手順を実行します

  1. SAXパーサーまたはDOMパーサーを作成してからデータを解析します。DOMを使用する場合、ドキュメントが大きすぎるとメモリを大量に消費する可能性があります。SAXパーサーを使用する場合、ドキュメントの先頭を識別する必要があるとします。XMLタグの開始やタグ内のテキストなど、重要なもの(SAX用語では「イベント」)に遭遇すると、そのデータを呼び出し元のアプリケーションで使用できるようにします。
  2. 次に、イベントが発生したときにパーサーから通知されるメソッドを定義するコンテンツハンドラーを作成します。コールバックメソッドと呼ばれるこれらのメソッドは、受信したデータに対して適切なアクションを実行します。

同じ操作をJAXBで実行する場合、Computer.xmlにアクセスするには次の手順を実行する必要があります

  1. XMLドキュメントのスキーマをバインドします。
  2. ドキュメントをJavaコンテンツオブジェクトにアンマーシャリングします。Javaコンテンツオブジェクトは、XMLドキュメントのコンテンツと構成を表し、プログラムで直接利用できます。マーシャリングを解除した後、プログラムは、Javaコンテンツオブジェクトのデータにアクセスして表示するだけで、XMLドキュメントのデータにアクセスして表示できます。パーサーを作成して使用する必要はなく、コールバックメソッドを使用してコンテンツハンドラーを作成する必要もありません。これは、開発者がXMLまたはXML処理を知らなくてもXMLデータにアクセスして処理できることを意味します。

DOMはXMLファイルをオブジェクトとして扱いますが、SAXは個々のアイテムをイベントとして扱いますが、これはより効率的ですか?
Malwaregeek 2013

5
@Malwaregeek:状況によって異なりますが、XML全体に順番にアクセスする場合は、メモリの消費量が少ないため、SAXをお勧めします。XMLの中間要素にランダムアクセスする場合は、DOMをお勧めしますが、より多くのメモリが必要です。このバランスは、すべてのプログラムのメモリと時間空間のバランスに似ています
Rengasami Ramanujam 2013

1

主な違いは、xmlスキーマが果たす役割です。JAXPはXMLスキーマを認識せずに古くなっていますが、JAXBはスキーマバインディングを最初のステップとして処理します。


JAXP(JSR 206)チュートリアルの「SAX検証の実装」の部分には、「XMLスキーマを使用した検証」専用のセクションがあります。この仕様では、JAXPAPIの一部としてSchemaクラスについても言及しています。(OpenJDK 7に含まれた後、スタンドアロンプ​​ロジェクトとして撤回されました
。JAXP1.6
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.