この章では、統合Javaアプリケーション・プログラミング・インタフェース(API) for Extensible Markup Language (XML)の概要を示し、Oracle XML DBおよびOracle XML Developer's Kit (XDK)用に統合されたAPIについて説明します。
内容は次のとおりです。
統合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を使用すると、Oracle XML DBとXDKの両方で必要とされる中核的なJava DOM APIを使用できます。また、そのJava DOM APIに基づいて構築されている、新しい機能拡張Javaクラスも使用できます。
統合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リファレンスを参照してください
thick接続またはthin接続のいずれかのみによってサポートされていた一部のコンポーネントは、統合Java API for XMLに統合されました。thin接続のみによってサポートされていて、統合されたコンポーネントには、次のものがあります。
DOMパーサー
Java API for XML Processing (JAXP) Transformer
XML SQL Utility (XSU)
Extensible Stylesheet Language Transformation(XSLT)
統合Java APIは、古いoracle.xdb.dom Javaクラスにかわる新しいJavaクラスを提供します。oracle.xdb.domパッケージのすべてのクラスは非推奨です。非推奨のクラスを使用している場合、統合Java APIに移行して、oracle.xml.parser.v2クラスをかわりに使用する必要があります。
内容は次のとおりです。
表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 |
|---|---|
|
|
|
|
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を使用します。
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によって決まります。