2 統合Java API for XML

Extensible Markup Language (XML)の統合Javaアプリケーション・プログラミング・インタフェース(API)を示します。Oracle XML DBおよびOracle XML Developer's Kit (XDK)用に統合されたAPIについて説明します。

トピック:

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クラスをかわりに使用する必要があります。

トピック:

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)クラス

XDBAttribute

XMLAttr

XDBBinaryDocument

なし

XDBCData

XMLCDATA

XDBCharData

CharData

XDBComment

XMLComment

XDBDocFragment

XMLDocumentFragment

XDBDocument

XMLDocument

XDBDocumentType

DTD

XDBDOMException

XMLDomException

XDBDomImplementation

XMLDomImplementation

XDBDOMNotFoundErrException

なし

XDBElement

XMLElement

XDBEntity

XMLEntity

XDBEntityReference

XMLEntityReference

XDBNamedNodeMap

XMLAttrList

XDBNode

XMLNode

XDBNotation

XMLNotation

XDBNotImplementedException

なし

XDBProcInst

XMLPI

XDBText

XMLText

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

getDOM()

getDocument()

public XMLType createXML(...)

public XMLType createXML(..., int kind)ここでkindXMLDocument.THICKまたはXMLDocument.THIN

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

XMLDocument.THICK

thickまたはKPRB接続

thick DOM

XMLDocument.THICK

thinまたは接続なし

例外

XMLDocument.THIN

任意の接続タイプ

thin DOM

未指定

任意の接続タイプ

XMLType API: Thin DOM

XMLType.createXML API: 接続タイプによって決まります(OCIまたは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によって決まります。