2 統合Java API for XML
Extensible Markup Language (XML)の統合Javaアプリケーション・プログラミング・インタフェース(API)を示します。Oracle XML DBおよびOracle XML Developer's Kit (XDK)用に統合されたAPIについて説明します。
トピック:
- 統合Java API for XMLの概要
統合Java API for XMLを使用すると、Oracle XML DBとXDKの両方で必要とされる中核的なJava DOM APIを使用できます。また、そのJava DOM APIに基づいて構築されている、新しい機能拡張Javaクラスも使用できます。 - コンポーネントの統合
thick接続またはthin接続のいずれかのみによってサポートされていた一部のコンポーネントは、統合Java API for XMLに統合されました。 - 統合Java APIモデルへの移行について
統合Java APIは、古いoracle.xdb.domJavaクラスにかわる新しいJavaクラスを提供します。oracle.xdb.domパッケージのすべてのクラスは非推奨です。非推奨のクラスを使用している場合、統合Java APIに移行して、oracle.xml.parser.v2クラスをかわりに使用する必要があります。
2.1 統合Java API for XMLの概要
統合Java API for XMLを使用すると、Oracle XML DBとXDKの両方で必要とされる中核的なJava DOM APIを使用できます。また、そのJava DOM APIに基づいて構築されている、新しい機能拡張Javaクラスも使用できます。
統合Java API for XMLでは、Oracle XML DBおよびXDKの両方で必要とされる機能を組み合せます。Oracle XML DBは、Javaパッケージoracle.xdb.domを使用してJava Document Object Model (DOM) APIを実装しており、XDKはoracle.xml.parser.v2パッケージを使用して実装しています。
統合Java APIでは接続管理のセッション・プール・モデルが使用されているため、XMLデータがどこにあるかに関係なく(データベース内でもデータベース外でも)、統合Java APIを使用できます。接続タイプにthick (OCI APIを使用するCベースの接続)またはthin (Java Database Connectivity (JDBC) APIを使用するPure Javaベースの接続)を指定しない場合、データベース外のローカル文書オブジェクトに接続するためにはJava DOM APIが使用されます。
関連項目:
oracle.xml.parser.v2パッケージの詳細は、Oracle Database XML Java APIリファレンスを参照してください
2.2 コンポーネントの統合
thick接続またはthin接続のいずれかのみによってサポートされていた一部のコンポーネントは、統合Java API for XMLに統合されました。
thin接続のみによってサポートされていて、統合されたものには、次のものがあります。
-
DOMパーサー
-
Java API for XML Processing (JAXP) Transformer
-
XML SQL Utility (XSU)
-
Extensible Stylesheet Language Transformation(XSLT)
2.3 統合Java APIへの移行について
統合Java APIは、古いoracle.xdb.dom Javaクラスにかわる新しいJavaクラスを提供します。oracle.xdb.domパッケージのすべてのクラスは非推奨です。非推奨のクラスを使用している場合、統合Java APIに移行して、oracle.xml.parser.v2クラスをかわりに使用する必要があります。
トピック:
- XMLTypeクラスのJava DOM API
非推奨になったXMLTypeクラスと、それと同等のXMLTypeクラスのJava DOM APIを示します。 - 拡張API
W3C勧告に加え、統合Java API for XML実装では、W3C DOM APIを拡張する拡張APIが用意されています。基本的な機能(データベースへの接続など)や性能の強化を実行する場合は、Oracle固有の拡張APIを使用することができます。 - 文書作成Java API
XMLDocumentを作成するJava APIは、thin文書またはthick文書のいずれかを作成する必要があります。thick文書がデータベースとの通信を確立するには、Connectionオブジェクトが必要であるため、各文書作成APIを拡張してConnectionオブジェクトを受け入れます。
2.3.1 XMLTypeクラスのJava DOM API
XMLTypeクラスのJava DOM APIと、非推奨になった同等のAPIを示します。
表2-1に、Oracle Database 11g リリース1 (11.1)で非推奨となったoracle.xdb.domパッケージ・クラスおよびそれと同等の統合Java API for XMLを示します。
表2-1 非推奨になったXDBパッケージ・クラスと、それと同等の統合Java API
| 非推奨のoracle.xdb.dom.*クラス | 同等のoracle.xml.parser.v2(統合Java API)クラス |
|---|---|
|
|
|
|
|
なし |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
なし |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
なし |
|
|
|
|
|
|
Java DOM APIを使用してXMLデータを取得する場合、XMLDocumentインスタンスを取得する(接続がthinの場合)か、getDOM()メソッドを使用してXDBDocumentインスタンスを取得し、getDocument()メソッドを使用してXMLDocumentを取得するかのどちらかです。XMLDocumentおよびXDBDocumentの両方ともWorld Wide Web Consortium (W3C) DOMインタフェースのインスタンスです。getDOM()メソッドとXDBDocumentクラスは、統合Java API for XMLでは非推奨になりました。
表2-2に、非推奨になったXMLTypeメソッドおよびそれと同等の統合Java APIを示します。
表2-2 非推奨になったXMLTypeメソッドと、それと同等の統合Java API
| 非推奨のoracle.xdb.XMLType API | 同等のoracle.xdb.XMLType(統合Java) API |
|---|---|
|
|
|
|
|
|
2.3.2 拡張API
W3C勧告に加え、統合Java API for XML実装では、W3C DOM APIを拡張する拡張APIが用意されています。基本的な機能(データベースへの接続など)や性能の強化を実行する場合は、Oracle固有の拡張APIを使用することができます。
XMLDocumentは、インスタンス化されたXML文書用にDOMを表すクラスです。Document引数を取るXMLTypeコンストラクタを使用して、XML文書からXMLType値を取得します。次に例を示します。
XMLType createXML(Connection conn, Document domdoc)
ノードを手動で参照解除する(文書フラグメントをDOMツリーから明示的に参照解除する)には、oracle.xml.parser.v2パッケージ(XMLNodeクラス)のfreeNode()拡張APIを使用します。
2.3.3 文書作成Java API
XMLDocumentを作成するJava APIは、thin文書またはthick文書のいずれかを作成する必要があります。thick文書がデータベースとの通信を確立するには、Connectionオブジェクトが必要であるため、各文書作成APIを拡張してConnectionオブジェクトを受け入れます。
XMLType.createXML APIの場合、オブジェクトの型を決定するConnectionタイプを指定する必要があります。古い文書作成API(下位互換のために提供)では、特に指定しないかぎりthin(Pure Java)オブジェクトが作成されます。
表2-3に、KINDおよびCONNECTIONに基づくXMLDocument出力を示します。
表2-3 KINDおよびCONNECTIONに基づくXMLDocument出力
| XMLDocument.KIND | XMLDocument.CONNECTION | XMLDocument |
|---|---|---|
|
|
thickまたはKPRB接続 |
thick DOM |
|
|
thinまたは接続なし |
例外 |
|
|
任意の接続タイプ |
thin DOM |
|
未指定 |
任意の接続タイプ |
非
|
統合Java APIでの文書作成に、次のオブジェクト、メソッドおよびクラスが使用できます。
-
DOMParserオブジェクトおよびparse()メソッドDOMParserオブジェクトおよびparse()メソッドを使用してXML文書を解析します。オブジェクトの型(thickまたはthin)を指定する必要があります。thickオブジェクトの場合、DOMParser.setAttribute()APIを使用してConnectionタイプも指定する必要があります。次に例を示します。DOMParser parser = new oracle.xml.parser.v2.DOMParser(); parser.setAttribute(XMLDocument.KIND, XMLDocument.THICK); parser.setAttribute(XMLDocument.CONNECTION, conn);
-
DocumentBuilderオブジェクトおよびDocumentBuilderFactoryクラスJava固有のAPIであるJAXPを使用してXML文書を解析するには
DocumentBuilderオブジェクトを使用します。DocumentBuilderFactoryクラスでDOMパーサー・ファクトリを作成する必要があります。DocumentBuilderは、DocumentBuilderFactoryで設定されたプロパティから接続を取得して、入力SAXイベントからDOMを構築します。次に例を示します。DocumentBuilderFactory.setAttribute(XMLDocument.CONNECTION, conn); DocumentBuilderFactory.setAttribute(XMLDocument.KIND,XMLDocument.THICK);
DocumentBuilderFactoryは、次のAPIから文書を作成するDOMParserオブジェクトへの接続を渡します。DocumentBuilder.newDocument() DocumentBuilder parse(InputStream) DocumentBuilder parse(InputStream, int) DocumentBuilder.parse(InputSource)
-
XSUメソッド
各XSUメソッドは
XMLDocumentをユーザーに戻します。ユーザーが必要なオブジェクトがthickかthinかを指定できます。次に例を示します。OracleXMLUtil util = new OracleXMLUtil(...); util.setAttribute(XMLDocument.KIND, XMLDocument.THICK); util.setAttribute(XMLDocument.CONNECTION, conn); Document doc = util.getXMLDOMFromStruct(struct, enc); OracleXMLQuery query = new OracleXMLQuery(...); query.setAttribute(XMLDocument.KIND, XMLDocument.THICK); query.setAttribute(XMLDocument.CONNECTION, conn); Document doc = query.getXMLDOM (root, meta); OracleXMLDocGenDOM dgd = new OracleXMLDocGenDOM(...); dgd.setAttribute(XMLDocument.KIND, XMLDocument.THICK); dgd.setAttribute(XMLDocument.CONNECTION, conn); Document doc = dgd.getXMLDocumentDOM(struct, enc);
-
XMLTypeメソッドXMLType.createXMLメソッドを使用して、getDocument()で取得する文書のタイプ(thinまたはthick)を指定できます。この例では、接続はOPAQUEから推定されます。XMLType xt = XMLType.createXML(orset.getOPAQUE(1), XMLDocument.THICK); Document doc = xt.getDocument();
注意:
ResultSet.getObject()から戻されるXMLTypeオブジェクトのタイプは指定できません。オブジェクト・タイプは、XMLType列からResultSetをフェッチするJDBCコールで使用されるConnectionによって決まります。