10 統合Java API for XML
Extensible Markup Language (XML)の統合Javaアプリケーション・プログラミング・インタフェース(API)を示します。Oracle XML DBおよびOracle XML Developer's Kit (XDK)用に統合されたAPIについて説明します。
10.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リファレンスを参照してください
10.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)
10.3 統合Java APIへの移行について
統合Java APIは、古いoracle.xdb.dom
Javaクラスにかわる新しいJavaクラスを提供します。oracle.xdb.dom
パッケージのすべてのクラスは非推奨です。非推奨のクラスを使用している場合、統合Java APIに移行して、oracle.xml.parser.v2
クラスをかわりに使用する必要があります。
10.3.1 XMLTypeクラスのJava DOM API
XMLTypeクラスのJava DOM APIと、非推奨になった同等のAPIを示します。
表10-1に、Oracle Database 11g リリース1 (11.1)で非推奨となったoracle.xdb.dom
パッケージ・クラスおよびそれと同等の統合Java API for XMLを示します。
表10-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では非推奨になりました。
表10-2に、非推奨になったXMLTypeメソッドおよびそれと同等の統合Java APIを示します。
表10-2 非推奨になったXMLTypeメソッドと、それと同等の統合Java API
非推奨のoracle.xdb.XMLType API | 同等のoracle.xdb.XMLType(統合Java) API |
---|---|
|
|
|
|
10.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を使用します。
10.3.3 文書作成Java API
XMLDocument
を作成するJava APIは、thin文書またはthick文書のいずれかを作成する必要があります。thick文書がデータベースとの通信を確立するには、Connection
オブジェクトが必要であるため、各文書作成APIを拡張してConnection
オブジェクトを受け入れます。
XMLType.createXML
APIの場合、オブジェクトの型を決定するConnection
タイプを指定する必要があります。古い文書作成API(下位互換のために提供)では、特に指定しないかぎりthin(Pure Java)オブジェクトが作成されます。
表10-3に、KIND
およびCONNECTION
に基づくXMLDocument
出力を示します。
表10-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
によって決まります。