Oracle Database 10g による高パフォー
マンス・エンタープライズ XML アプリ
ケーションの作成
オラクル・ホワイト・ペーパー
Oracle Database 10g による
高パフォーマンス・エンタープライズ XML
アプリケーションの作成
TU概要
UT... 3
TUはじめに
UT... 3
TUOracle XML Developer's Kit 10g
UT... 4
TU
複数の言語とプラットフォームのサポート
UT... 5
TU配布アーキテクチャの柔軟性
UT... 5
TUアプリケーションとサーバーのサポート
UT... 5
TUXMLパーサー/XSLプロセッサ
UT... 5
TUXMLスキーマ・プロセッサ
UT... 6
TUXML Class Generator
UT... 6
TUXML JavaBeans
UT... 6
TUXML SQL Utility
UT... 7
TUXSQL Pagesパブリッシング・フレームワーク
UT... 7
TUSOAPサービス
UT... 8
TUTransXユーティリティ
UT... 8
TUXMLパイプライン・プロセッサ
UT... 9
TUXMLの処理能力をSQLの処理能力まで高める
UT... 10
TUOCI XML DBアプリケーションの構築
UT... 11
TUOracle XDK 10gによる高速XSLT
UT... 12
TUXSLTコンパイラとC/C++のためのVM
UT... 13
TUJavaにおけるXSLT 2.0 のサポートと最適化
UT... 14
TU大規模なXML文書の効率的作成
UT... 15
TUシングルステップXML処理のストリーミング
UT... 15
TUまとめ
UT... 17
Oracle Database 10g による
高パフォーマンス・エンタープライズ XML
アプリケーションの作成
概要
エンタープライズ・レベルからインターネット・ベンチャーにいたる様々な企業 は、アプリケーションが、閉じたクライアント/サーバー・システムからオープ ンな分散フレームワークに移行したことを認識しています。この移行は、一連の XML 標準と関連テクノロジにより推進されています。拡張可能な文字データとし てメタデータをインスタンス・データに結合することの意義は、異なるプラット フォーム、オペレーティング・システム、インターネットを相互運用する手段と して認識されてきました。 2001 年、一連の XML 標準に XML スキーマが導入されたことで、データ型のサポー ト実現が確約され、それによりビジネス・データとアプリケーションの統合にとっ ての XML の価値がさらに高まりました。一方、XML は抽象概念であるため、そ の相互運用性の実現には処理時間とリソースの増大が伴いました。これは、入力 XML の検証、変換、追加のワークフロー処理を実行するエンタープライズ・レベ ルのトランザクション・ベース・アプリケーションにおいて特に顕著です。 XDK(Oracle XML Developer's Kit)を含む Oracle Database 10g は、エンタープライ ズ XML プラットフォームとしてのデータベース・サーバーに、これまでにない 高レベルのパフォーマンスを提供します。新しい XML 標準がインフラストラク チャの最適化とともに XDK の XMLType サポートが結合され、XML を効率的に 処理し、必要なエンタープライズ・レベルのスケーラビリティとパフォーマンス を実現しています。はじめに
拡張可能な文字データとしてメタデータをインスタンス・データに結合すること の意義は、異なるプラットフォーム、オペレーティング・システム、インターネッ トを相互運用する手段として認識されてきました。2001 年、一連の XML 標準に XML スキーマが導入されたことで、データ型のサポート実現が確約され、それに よりビジネス・データとアプリケーションの統合にとっての XML の価値がさら に高まりました。一方、XML は抽象概念であるため、その相互運用性の実現には 処理時間の拡大とリソースの増加が伴いました。これは、入力 XML の検証およ び変換や他のワークフローの実行に依存するエンタープライズ・レベルのトラン ザクション・ベース・アプリケーションにおいて、特に顕著です。XML のパフォーマンス問題は、そのソリューション適用範囲の拡大に伴ってます ます重要になっています。従来のビジネスの多くは、インターネットを活用した グローバルな拡張を望んでいます。XML が提供する抽象層により、アプリケー ションは、現在開発されている様々な標準およびスキーマをサポートできます。 大手企業は、競合会社を買収して、統合により市場占有率を拡大しています。こ れらの企業は、メインフレーム、SMP ボックス、Windows サーバーに分散された システムを統合する際、高コストの新しい統一システムとアプリケーションを再 設計するかわりに、アプリケーション間のクロス・プラットフォーム通信が可能 な XML に移行しています。 主要小売店だけでなく行政サービスまでが、Web サービスとブラウザを使用した 取引に移行して顧客に直接アプローチし、ビジネスを拡大し、中間の処理工程の 省略により高い効率性を獲得しています。XML は、このようなインフラストラク チャを実現するテクノロジとして、重要な役割を果たします。新しいテクノロジ としての XML は、概念実証およびプロトタイプ・システムとして、非常に高く 評価されています。ただし、これらのシステムをエンタープライズ・レベルで配 布する場合、XML インフラストラクチャのスケーラビリティおよびスループット が問題とされてきました。 XML のパフォーマンスは、コンテンツ管理や出版業界でも求められています。 PDA、携帯電話、ポケットベル、腕時計にいたる、コンテンツ表示機能を持つ携 帯通信機器の急増により、各企業はそのコンテンツを様々な形式で配信する必要 に直面しました。このような傾向と、迅速な情報更新の必要性とが結び付き、XML 変換サーバーとそれを支えるデータベースに対する要求が拡大しました。 このようなパフォーマンスの問題に対処するため、Oracle Database 10g は、中間層 やクライアント層における XML 処理を不要とする、ネイティブな XML サポート を提供しています。また、XDK としてパッケージ化された新しいインフラストラ クチャ(パフォーマンスの向上、洗練された XML 処理に対するこれまでにない 高レベルのテクノロジ)を提供しています。
Oracle XML Developer's Kit 10g
アプリケーション開発者の XML 活用を支援するため、Oracle Database 10g には新 しいバージョンの XDK(Oracle XML Developer's Kit)が含まれています。XDK は、 XML 対応アプリケーションの開発と配置の作業を容易にする業界標準に準拠し たコンポーネント、ツール、ユーティリティのセットです。インターネットから 入手可能な多くのシェアウェアや試用版の XML コンポーネントとは異なり、 Oracle XDK コンポーネントには完全なサポートが提供され、再配布も可能です。
複数の言語とプラットフォームのサポート
Oracle XDK は、開発と配布に対する柔軟性を様々な形で実現します。
アプリケーション・サービス・プロバイダは、XDK の Java および Java Beans のコ ンポーネントとライブラリおよびそのプラットフォーム非依存の機能によって、 移植性の高いアプリケーションの開発と配布が可能です。プラットフォーム依存 の C/C++言語で記述された膨大なアプリケーション資産を抱える企業にとって、 プラットフォームに移植された XDK の C/C++ライブラリの優れたパフォーマン スと機能は非常に有効です。
配布アーキテクチャの柔軟性
Oracle XDK コンポーネントは、柔軟な配布を可能にし、パフォーマンスとスケー ラビリティを最適化するよう設計されています。XDK の Java ライブラリは、Oracle Database 10g の JDK 1.4 に準拠した JVM にロードされ、Oracle Application Server の中間層またはクライアント上で実行できます。XDK の C ライブラリはカーネル にリンクされ、C++版ライブラリを含むスタンドアロン・ライブラリとして使用 できます。このアーキテクチャの柔軟性と、XML が持つプロトコルへの非依存性 は、アプリケーション開発者にとって、強力な機能となります。アプリケーションとサーバーのサポート
どのようなソフトウェア開発者キットも、サポートがなければ価値がありません。 Oracle XDK は、世界中の Oracle 社サポート部隊によってサポートされています。 Oracle サーバーのサポート契約をお持ちのお客様は、現在の契約内容と同レベル の XDK サポートを追加費用なしで受けることができます。OTN(Oracle Technology Network)の XML Forum では無償のサポートを提供しています。ここでは、Oracle の XML 開発グループがすべてのサポートを直接支援します。また、XDK をお客 様のアプリケーションに容易に組み込めるよう、Oracle コンサルティング・スタッ フも XDK の研修を受講しています。最後に、このサポートは、Oracle 製品と XDK の組み合わせに限定されません。XDK には無償の配布および再配布のライセンス が含まれているため、XDK を使用したサード・パーティのアプリケーション開発 が可能です。XML パーサー/XSL プロセッサ
Oracle XDK は、Java、C、C++の XML パーサーのセットを提供しています。これ らの XML パーサーはそれぞれスタンドアロン・コンポーネントであり、SAX (Simple API for XML)、DOM(Document Object Model)、JAXP(Java API for XMLProcessing)インタフェースによる XML 文書の解析(検証モードまたは非検証モー ド)が可能です。Oracle が動作するすべてのプラットフォームでパーサーが使用 できます。
これらのパーサーには、XSL(XML Stylesheet Language)言語を使用して XML 文 書を変換する XSLT(XSL Transformation)プロセッサが含まれています。XSLT プロセッサは XML 文書に XSL スタイルシートを適用して、XML 文書を XML、 HTML などのテキスト・ベースのあらゆる形式に変換します。Oracle XDK 10g で は、C での XSLT コンパイラと仮想マシンの導入、Java での XSLT および XPath 2.0 のサポートにより、スタイルシートの処理パフォーマンスが大幅に向上していま す。
また、Oracle XDK 10g では、最新の DOM 3.0 Load and Save および DOM 3.0 Validation をサポートします。これらの標準は、エラーを迅速に検出して、XML 処理の信頼性を高める機能を提供します。また、アプリケーションの相互運用性 を、これまで各ベンダー固有であった解析機能とシリアライズ機能にまで拡張し ています。
XML スキーマ・プロセッサ
XML スキーマは、単純型と複合型の両方を兼ね備えたデータ型の概念を XML 言 語に導入する W3C 標準です。これにより、XML 構文を使用して、データベース のデータの実体化と交換を業界標準に準拠した方法で行うことができます。Java、 C、C++用のプロセッサが用意されており、XML スキーマ・ベースのドキュメン トやデータを作成したり受け取る場合の検証に使用できます。 C プロセッサの上に組み込まれた XMLType のサポートにより、アプリケーション は、様々な業界でそのビジネス・ドキュメントの定義に提供される広範囲の XML スキーマに準拠したデータ・リポジトリあるいはドキュメント・リポジトリとし てデータベースを使用できます。Oracle XDK 10g では、ベースとなるデータベー ス・スキーマからこれらを抽出する機能が追加されました。これにより、従来の アプリケーションを維持しながら、拡大と変化を続けるビジネス要件に対応でき ます。XML Class Generator
XDK は、XML パーサーと連携して XML アプリケーションの開発と処理を簡略 化する XML Class Generator を提供しています。Java と C++用があり、これらは XML スキーマ(XSD)から Java または C++のソース・ファイルを生成します。生成されたソース・ファイルを使用して、指定 XSD に準拠した XML 文書の作成、
検証、印刷ができます。Oracle XDK 10g では、外部および内部カスタマイズが可 能な新しい JAXB(Java Architecture for XML Binding)1.0 標準がサポートされます。 これは、Oracle プラットフォームの相互運用性を実現します。
XML JavaBeans
拡大する XML への Oracle JDeveloper によるサポートに加え、XDK は開発を迅速 にする Java Beans のセットを提供します。これらの Beans は、XDK の多くのコン ポーネントに標準インタフェースを提供するだけでなく、表 1 に示す機能が拡張 されています。
表 1: Oracle XDK 10g に含まれる Java Beans
Oracle XDK 10g に含まれる Java Beans
説明
DOMBuilder Bean DOM パーサーをカプセル化し、非同期 XML 文書の解析を
行います。
XSLTransformer Bean XML を受け入れ、入力 XML スタイルシートによって指定
された変換を適用して、ファイルを作成、出力します。
DBAccess Bean Oracle データベースの表に XML データを格納し、表から
XML データを取得します。
XMLDBAccess Bean Oracle データベースの XMLType の表に XML データを格
納し、XMLType の表から XML データを取得します。
XMLCompress Bean 内部 DOM ツリーの圧縮、SAX イベントの圧縮、さらにシ
リアライズされた XML データの圧縮解除を行います。 XMLDiff Bean 2 つの XML ファイルの違いを検索し、その違いを XSLT コードとして出力します。 XSDValidator Bean XML 文書を XML スキーマ(XSD)と照合し、その妥当性 をチェックします。
XML SQL Utility
Java および PL/SQL の開発者は、XSU(XML SQL Utility)により、リレーショナ ル表(ビュー)やオブジェクト・リレーショナル表(ビュー)の問合せによるデー タを XML に変換できます。また、XML 文書からデータを抽出し、そのデータを 表またはビューの列にマップ、挿入、更新できます。XML とデータベースとの連 携を補助するため、データベース・スキーマやビューから DTD や XSD を生成で きます。XSU は XMLType を完全にサポートします。その出力を SAX イベントと して提供できるため、パフォーマンスが向上し、リソースを節約できます。Oracle XDK 10g では、SAX を使用して大きな XML 文書を直接生成できます。
XSQL Pages パブリッシング・フレームワーク
Oracle XSQL Pages パブリッシング・フレームワーク(XSQL サーブレット)は、 XML 情報をあらゆる形式で容易に公開できる拡張可能なプラットフォームです。 データベース問合せによって取得される動的な Web コンテンツの公開に使用する SQL、XML、XSLT の機能の統合が大幅に簡略化されます。また、インタラクティ ブな Web サイトや Web サービスを作成し、コンテンツを自動的に要求側デバイ スの形式で公開する拡張可能なプラットフォームです。1 つのデータベース・ス キーマで複数のデバイスやアプリケーションに対応できるため、設計とメンテナ ンスが容易です。Oracle XDK 10g には、条件に応じたアクションの実行やコンテンツ導入を行う新 機能があります。この機能を複数値パラメータおよびそのバインドのサポートと 組み合せると、多くのカスタム JSP コードが宣言型 XSQL 要素に置き換えられま す。新しい XSQLErrorHandler インタフェースにより、開発者はエラーからの復旧 が容易になり、作成するアプリケーションの堅牢性が向上します。また、新しく、 サーブレット・コンテナの JDBC データ・ソースを使用できるようになったこと で、そのデータベース接続のセキュリティが強化されています。
SOAP サービス
Oracle XDK 10g に用意された SOAP(Simple Object Access Protocol)1.0 の Java 実 装は、ASF(Apache Software Foundation)により開発された SOAP と互換性があり ます。この機能により、サーバーとクライアント両方が、ファイアウォール、プ ラットフォームやオペレーティング・システムの違いによりブロックされること なく、アプリケーション間で XML メッセージやリモート・プロシージャ・コー ルを交換できます。
SOAP は Web サービスの基盤の役割を果たします。SOAP を使用することにより、
Oracle Database 10g のストリーム・アドバンスト・キューイングに直接接続して データベースと通信できます。
Oracle XDK 10g では、新しく添付ファイル付き SOAP メッセージがサポートされ、 より広範囲のメッセージング・システムおよびプロトコルと通信できます。これ は、Oracle Application Server がサポートする実装と同一の J2EE に準拠した実装で す。
新しい C および C++ SOAP クライアントが Oracle XDK 10g リリース 2 で使用可能 です。SOAP クライアントは、W3C SOAP 1.2 勧告および W3C SOAP 1.1 ノートを サポートします。これにより、SOAP 形式のメッセージをアセンブルおよび逆ア センブルする、さらに HTTP 1.0 を介してエンドポイント間でこれらのメッセージ を転送できます。
TransX ユーティリティ
Oracle TransX ユーティリティは、XML 形式を介して、変換されたシード・データ とメッセージのデータベースへのロードを容易にします。文字列の準備、変換、 データベースへのロードをコマンドライン・インタフェースまたは Java API で行 うことができます。キャラクタ・エンコード、変数の変更、シーケンスの開始、 複数の挿入やセッションを必要とする SQL コマンドなどの管理を自動的に実行し ます。XML パイプライン・プロセッサ
Oracle XDK 10g には、W3C ノートとして提出された XML Pipeline Definition Language Version 1.0 に基づく新しい Oracle XML パイプライン・プロセッサが搭 載されています。このプロセッサは、入力 XML パイプライン・ドキュメントを 受け取り、派生する依存関係に従ってパイプライン処理を実行します。パイプラ イン・ドキュメントは XML 文書であり、実行する処理を宣言方式で指定します。 XML パイプライン・プロセッサに加え、XDK では、パイプライン・ドキュメン ト内で連結できるいくつかのパイプライン処理が定義されています。Oracle XML パイプライン・プロセッサには、コマンドライン・インタフェースと Java API イ ンタフェースの両方が含まれています。次に、パイプライン・ドキュメントの例 を示します。これは、ドキュメント book.xml を解析後、スタイルシート book.xsl を適用し、結果の Web ページ myresult.html を生成します。 <pipeline xmlns="http://www.w3.org/2002/02/xml-pipeline" xml:base="http://example.org/">
<param name="target" select="myresult.html"/> <processdef name="domparser.p" definition="oracle.xml.pipeline.processes.DOMParserProcess"/ > <processdef name="xslstylesheet.p" definition="oracle.xml.pipeline.processes.XSLStylesheetProce ss"/> <processdef name="xslprocess.p" definition="oracle.xml.pipeline.processes.XSLProcess"/> <process id="p2" type="xslstylesheet.p" ignoreerrors ="
false">
<input name="xsl" label="book.xsl"/>
<outparam name="stylesheet" label="xslstyle"/>
</process>
<process id="p3" type="xslprocess.p" ignoreerrors=" false">
<param name="stylesheet" label="xslstyle"/> <input name="document" label="xmldoc"/> <output name="result" label="myresult.html"/>
</process>
<process id="p1" type="domparser.p" ignoreerrors="tr ue">
<input name="xmlsource" label="book.xml "/> <output name="dom" label="xmldoc"/>
<param name="preserveWhitespace" select="true"></param> <error name="dom"> <html xmlns="http://www/w3/org/1999/xhtml"> <head> <title>DOMParser Failure!</title> </head> <body>
<h1>Error parsing document</h1> </body> </html> </error> </process> </pipeline>
開発者にとって重要なのは、このパイプライン・プロセッサによって、XML 処理 アプリケーションを構築するカスタム Java コードが単純な宣言型の XML に置き 換えられることです。図 1 に示すように、この処理にはあらゆる XML 処理を含 むことができます。 図 1: Oracle XML パイプライン・プロセッサ
XML の処理能力を SQL の処理能力まで高める
エンタープライズ・レベルの XML を実現するには、インフラストラクチャにお ける XML 処理の高パフォーマンスとスケーラビリティが要求されます。このパ フォーマンスを得るには、個々のコンポーネントに注目するだけでなく、アプリ ケーションのアーキテクチャ全体の考慮が必要です。残念なことに、すべてのア プリケーションに適した単一の XML アプリケーションが存在しないように、す べてのアプリケーションに適した単一の XML アーキテクチャも存在しません。 そのため、XML インフラストラクチャには、高いパフォーマンスだけでなく、ア プリケーションがそのインフラストラクチャを柔軟に活用できることが要求され ます。つまり、現在の複数層アプリケーションが、データベースを含むあらゆる 層で XML 処理を呼び出せる必要があります。 Oracle9i では、XMLType という新しいデータ型を使用した新しいレベルの XML 統合が導入されました。このデータ型は XML をネイティブにサポートするだけ でなく、データベースから直接呼び出され実行される XML 処理機能を有効にし ます。これにより、データに密接した動作が求められるとき、開発者はより柔軟 に効率よく対処できます。Oracle Database 10g と Oracle XDK 10g では、パフォーマンスの向上および機能性 と柔軟性の拡張によって、つまり SQL の機能に XML を追加することで、この統 合をさらに強化しています。その過程で、Oracle Database には、新しい XML 標準 のサポートが実装されました。(表 2)
表 2: Oracle XDK 10g がサポートする XML 標準 XML 標準 Version 言語 XML 1.0 Java、C、C++ XML ネームスペース 1.0 Java、C、C++ DOM 1.0/2.0 Java、C、C++ DOM ロード/保存および検証 3.0 Java SAX + 拡張 1.0/2.0 Java、C、C++
XSLT + XPath 1.0/2.0(Java) Java、C、C++
XML スキーマ 1.0 Java、C、C++ SOAP 1.0、1.1/1.2(C/C++) Java、C、C++ JAXP 1.2 Java JAXB 1.0 Java
OCI XML DB アプリケーションの構築
XML 開発の大部分は Java で行われてきましたが、多数の Oracle ユーザーが XML を使用するようになった現状を考慮すると、XML のサポートを OCI に取り込む必 要性が出てきます。そのため、Oracle Database 10g では、XDK に XMLType のサ ポートを追加し、開発者が内部の XOB(XMLType DOM)を直接操作できるよう にしました。これにより、データベースから読み込まれた XML 文書を再度シリ アライズおよび解析する必要がなくなり、その結果パフォーマンスが向上します。 この新しいサポートから、プリフィックス XML に対応した新しい XDK C API が 誕生しました。開発者はデータベース DOM または中間層/クライアント DOM の いずれを操作する場合も、この新しい API のみを使用することで対応できます。 この API の統一により開発時間が短縮されます。同時に、アーキテクチャの細か いチューニングを柔軟に行うことができるため、最適な場所で処理を実行させる ことができます。 次の例は、OCI で新しい XDK API を使用するコードの一部です。このコードが示 すように、データベースと中間層間で処理を区別する初期化コールは 1 つだけで す。 /* XML コンテキストを取得します */ params[0].name_ocixmldbparam = XCTXINIT_OCIDUR; params[0].value_ocixmldbparam = &dur;xctx = OCIXmlDbInitXmlCtx(envhp, svchp, errhp, params, 1);
/* スキーマをベースにしたドキュメントを解析します */ if (!(doc = XmlLoadDom(xctx, &err, "buffer", lpxml_test_sch, "buffer_length",
sizeof(tlpxml_test_sch)-1, "validate", TRUE, NULL))) /* いくつかの要素を作成してドキュメントに追加します*/
top = XmlDomGetDocElem(xctx, doc);
quux = (xmlnode *) XmlDomCreateElem(xctx ,doc, (oratext *) "QUUX");
foo = (xmlnode *) XmlDomCreateElem(xctx, doc, (oratext *) "FOO");
foo_data = (xmlnode *) XmlDomCreateText(xctx, doc, (oratext *) "foo's data");
foo_data = XmlDomAppendChild(xctx, (xmlnode *) foo, (xmlnode *) foo_data);
foo = XmlDomAppendChild(xctx, quux, foo); quux = XmlDomAppendChild(xctx, top, quux);
XmlSaveDom(xctx, &err, top, "stdio", stdout, NULL); XmlSaveDom(xctx, &err, doc, "stdio", stdout, NULL); /* ドキュメントを my_table に挿入します */
ins_stmt = "insert into my_table values (:1)";
status = OCITypeByName(envhp, errhp, svchp, (const text *) "SYS",
(ub4) strlen((char *)"SYS"), (const text *) "XMLTYPE", (ub4) strlen((char *)"XMLTYPE"), (CONST text *) 0, (ub4) 0, dur, OCI_TYPEGET_HEADER,
(OCIType **) &xmltdo)) ; if (status == OCI_SUCCESS) {
exec_bind_xml(svchp, errhp, stmthp, (void *)doc, xmltdo, ins_stmt)); } /* xml ctx を解放します */ OCIXmlDbFreeXmlCtx(xctx); これらのインタフェースを使用して、開発者は様々な処理を組み合わせることが できます。たとえば、ローカル・ファイルまたは特定の URL にある XML スキー マを使用して、データベースに XMLType として格納された XML 文書を検証でき ます。
Oracle XDK 10g による高速 XSLT
XML の能力は、単一のドキュメント内でデータまたはコンテンツを記述できる柔 軟性と拡張性にあります。ただし、XML 自体はプレゼンテーション形式ではあり ません。XML を適切なプレゼンテーション形式に変換するのが XSL スタイルシー トの役割です。HTML、SVG、WML などの生成には、XSLT(XSL Transformation) プロセッサおよび対応するスタイルシートが必要です。Oracle XDK 10g の XSLT プロセッサは、機能が大幅に拡張され、パフォーマンスが大きく向上しています。XSLT コンパイラと C/C++のための VM
Oracle XDK 10g には、新規に C および C++から利用可能な XSLT 仮想マシン (XSLTVM)が含まれています。XSLTVM は、コンパイル済 XSLT コードを実行 する CPU をソフトウェアで実装したものです。コンパイル済 XSLT コードの実行 には、まず XSL スタイルシートをコンパイルして、XSLTVM が認識できるバイ ト・コードにします。そのために、Oracle XDK 10g には XSLT 1.0 標準に準拠した XSL コンパイラも含まれています。このコンパイルは実行時に行うことも、実行 時に取得できるよう格納しておくこともできます。その結果、スタイルシートの 解析が不要になるだけでなく、テンプレートが XML 操作ではなく索引参照に基 づいて適用されるため、変換の速度とスループットが向上します。(図 2) 図 2: XSLT コンパイラと仮想マシン XSLT コンパイラと VM の使用には、多少異なる処理モデルと API が必要です。 次にその処理コードを示します。 /* XML メタ・コンテキスト・オブジェクトの作成と再使用 */ xctx = XmlCreate(&err,...); /* XML コンパイラ・オブジェクトの作成と再利用 */ comp = XmlXvmCreateComp(xctx); /* XSLT スタイルシートをコンパイルし、結果のバイト・コードを格納またはキ ャッシュします */code = XmlXvmCompileFile(comp, xslFile, baseuri, flags, &err); /* XSLTVM オブジェクトの作成と再利用。XSLTVM が"...Stack Overflow" メッセージで終了するとき、または必要なメモリー量が少ないときは、スタック ・サイズの明示的な設定が必要です(XmlXvmCreate を参照) */ vm = XmlXvmCreate(xctx, "StringStack", 32, "NodeStack", 24); /* スタイルシートのバイト・コードを XSLTVM オブジェクトに設定します */ len = XmlXvmGetBytecodeLength(code, &err);
/* インスタンス XML ドキュメントを変換します */
err = XmlXvmTransformFile(vm, xmlFile, baseuri); /* クリーン・アップを行います */ XmlXvmDestroy(vm); XmlXvmDestroyComp(comp); XmlDestroy(xctx); コンパイル済スタイルシートをデータベースに格納しておき、高速変換が必要な ときに取得できます。公式の XML ベンチマークはありませんが、コンパイルを 行わない標準的な処理と比較し、スループットで 200%のパフォーマンス向上が見 られました。
Java における XSLT 2.0 のサポートと最適化
Oracle XDK 10g では、Java XSLT 処理も拡張および改善されました。最新標準に 対応するため、Java XSLT プロセッサには XSLT 2.0 と XPath 2.0 のサポートが追 加されています。XSLT 2.0 と XPath 2.0 は、まだ W3C 勧告ではありませんが、こ のプロセッサは非常に安定した最終仕様案(Last Call)に準拠しています。そのサ ポートには、複雑なスタイルシートを大幅に簡略化して効率を高める機能が含ま れています。次に、Oracle Java XSLT プロセッサに含まれる重要な機能の一覧を示 します。 グループ化: <xsl:for-each-group>、<xsl:sort>およびグループ化属性を使用して、 要素のグループを作成できます。この機能により、データベースのデータとリス トを扱う際の処理が大幅に簡略化されます。 一時ツリー: <xsl:variable>、<xsl:param>、<xsl:with-param>のいずれかの要素を 評価して一時ツリーを作成できます。一時ツリーは、XPath によってアクセスし、 テンプレートに渡せます。この機能により、開発者は簡単にメンテナンスできる モジュール型のスタイルシートを作成できます。 複数の結果ドキュメント: <xsl:result-document>要素を使用して、単一のスタイ ルシートで複数の結果ドキュメントを作成できます。開発者はこの機能を使用し て、単一のスタイルシートでフレーム用の HTML ページ、関連する CSS および SVG ドキュメント、ページ付け出力などを生成できます。 文字マッピング: 文字マッピングは、文字のエスケープを制御するために、 <xsl:character-map>と<xsl:output-character>を使用して明示的に定義される出力 オプションです。開発者は、たとえば JSP のための Unicode ユーザー定義領域文 字などをより確実に作成できます。 XSL 関数やユーザー定義関数: XSL 関数やユーザー定義関数は、拡張関数のコー ルなしで使用できるようになったため、プロセス・コールアウトのオーバーヘッ ドがなくなり、同時にスタイルシートの移植性が向上しています。 このサポートと機能の追加は、パフォーマンスの低下につながると考えられまし たが、さらに最適化することで回避できました。スタイルシートは、テンプレー トの照合と XPath による参照を最適化するために、コンパイル時に静的に分析さ れます。必要な XPath を抽出し、索引を付け、ドキュメントの変換に必要な部分大規模な XML 文書の効率的作成
データベースには膨大な量のデータが格納されています。このようなデータは、 多くの場合、中間層での分析、レポート、動的なプレゼンテーションなどに利用 されます。XDK の XML SQL ユーティリティにより、これらの処理が非常に簡単 になります。これまでは、ドキュメントの出力、シリアライズ、保存などの前に、 ドキュメント全体の DOM を構築する必要があり、それが大きなドキュメントを 配布する場合のボトルネックとなっていました。Oracle XDK 10g では、Java SAX パーサーに組み込まれた拡張機能により、複雑な イベント・ハンドラの作成が必要なく、SAX ストリームから直接出力できます。 この機能と XSU の SAX 出力機能とを組み合せることにより、開発者は限られた
リソースを使用して、実質上サイズ制限のない XML 文書を容易に作成できます。
この使いやすさを示すコードの一部を次に紹介します。
//Open a File and Initialize connection and SAX print
OutputStream out = new FileOutputStream("out.xml"); DriverManager.registerDriver(new
oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection(thinConn,”sh”,”sh ”);
XMLSAXSerializer sample = new XMLSAXSerializer (out); //init the OracleXMLQuery
OracleXMLQuery qry = new OracleXMLQuery(conn,"select * from sales");
//Print the results
qry.getXMLSAX(sample); sample.flush();
シングルステップ XML 処理のストリーミング
XML スキーマを使用して送付された XML メッセージや注文書などのドキュメン トの内容を検証してからデータを処理、変換を行い、アプリケーションまたはデー タベースのスキーマにマップする一連の作業は、非常に高コストでした。 これまでは、XML 標準に基づくアプローチには、複数の処理段階が必要で、その 各段階でメタデータの実体化が必要でした。ほとんどの場合、これがストリーミ ングを使用不可能にし、ストリーミングがサポートされている場合でも処理機能 を制限しています。たとえば、XML の注文書は、まず、SAX(Simple API for XML) ストリームとして実装する関連スキーマと照合し、検証する必要があります。し かし、アプリケーションやデータベースのスキーマと一致するように XSLT スタ イルシートを適用して注文書を変換する必要がある場合は、XSLT プロセッサに 対してリソース集中型 DOM(Document Object Model)が必要となります。これは、リソースを消費するだけでなく、ストリーム・ベースの機能も失います。 この問題に対処するため、Oracle XDK 10g では、その XML スキーマ・プロセッ サの検証 API を公開するという革新的な方法を採用しています。アプリケーショ ンはこれを使用して、単一 XML 解析を活用しながらストリーミング機能を維持 する方法で、検証段階を変換および処理段階と統合できます。 図 3 に、その仕組みを示します。 図 3: XML シングルステップ検証と変換 処理モデルには XML スキーマ・バリデータが入っています。この機能は、SAX ストリームを使用してスキーマを検証すると同時に、このバリデータへのパブ リック・インタフェースを公開します。このインタフェースにより、処理中の XML のタイプ、要素/属性の名前、行われる検証のタイプ、処理の状態、そのタイプ に対応する XML スキーマの注釈をバリデータに問い合せできます。そのため、 たとえば多くの XML スキーマから単一の内部スキーマへの変換は、適切な XML スキーマを、既知のデータ要素と型が SAX 出力ストリームに出現した場合読み出 して実行できるマッピング属性とともに注釈するだけで行えます。 ユーザーは、XSDValidator.getCurrentMode()を使用して、現在の LAX または STRICT 検証属性を取得できます。また、XSDValidator.getElementDeclaration() および XSDValidator.getAttributeDeclarations()を使用して、XML 要素と属性コン テンツ・タイプを参照できます。その後、XSDValidator.getAnnotation()を使用し て、関連付けられた XML スキーマの注釈を取得できます。
AQ でサポートされる組込み SOAP と組み合せることで、Oracle Database 10g はエ ンタープライズ・レベルの統合機能を実現し、既存のデータベース・アプリケー ションをその基盤となるスキーマを変更することなくインターネットに拡張でき ます。
まとめ
XML には様々な利点があり、その応用方法も認識されつつあるため、今後定着す ることは明らかです。xHTML、FinML、WML、MathML、OAGIS など、XML に は様々なバリエーションがありますが、その基礎となるオープンな標準インフラ ストラクチャは同じです。豊富な XML 機能のセットを使用可能にするプラット フォーム上で開発、配置し、同時にエンタープライズ・レベルのパフォーマンス を実現することは、ビジネスのインターネット展開の成功に非常に重要です。約 5 年前、オラクル社は、Architecture Review Board で XML の重要性について次の 声明を発表しています。我々は、XML を活用して信頼性とスケーラビリティを備えたインターネッ ト・アプリケーションを優れた生産性をもって構築し、費用効率よく配布す る最高のプラットフォームを開発者に提供します。
Database、Application Server、XDK(XML Developer's Kit)で構成した Oracle 10g XML プラットフォームは、XML の処理能力を SQL の処理能力にまで高めることによ りそれを実現しています。
Oracle Database 10g による高パフォーマンス・エンタープライズ XML アプリケーションの作成 2005 年 9 月 著書: Jinyu Wang Oracle Corporation World Headquarters 500 Oracle Parkway Redwood Shores, CA 94065 U.S.A. 海外からのお問合せ窓口: 電話: +1.650.506.7000 ファックス: +1.650.506.7200 www.oracle.com
Copyright © 2005, Oracle. All rights reserved. 本ドキュメントは情報提供のみを目的としています。 本書の内容は予告なしに変更されることがあります。 オラクル社は、本ドキュメントの無謬性を保証しません。また、本ドキュメントは、法律で明示的または暗黙的に記載 されているかどうかに関係なく、商品性または特定の目的に対する適合性に関する暗黙の保証や条件を含む一切の保証 または条件に制約されません。 オラクル社は、本書の内容に関していかなる保証もいたしません。また、本書により、契約上の直接的および間接的義 務も発生しません。本書は、事前の書面による承諾を得ることなく、電子的または物理的に、いかなる形式や方法によっ ても再生または伝送することはできません。