この2回シリーズの第1回では、XMLインスタンス・ドキュメントを出発点として標準準拠のフォームを生成するXML Forms Generatorの機能を詳しく説明しました。フォーム生成の自動化によってフォームの開発が迅速になり、モデル・ドリブン開発テクニックが自動化に役立つことを示しました。
XMLインスタンス・データのほかに、収集しなければならないデータについての、もうひとつの共通記述メカニズムがWSDLです。WSDLとXML SchemaのEMFモデルを利用することによって、WSDLから直接フォームを生成することができ、わかりやすいフォーム送信応答ページも生成することができます。
それを行うのが、XML Forms Generatorです。すなわち、ソースWSDLドキュメントからXHTML/XFormsドキュメントを自動的に生成します。XML Forms Generatorのディストリビューションには、JavaServer Pages(JSP)Webサービス・レスポンス・テンプレートの生成およびテストのためのツールも含まれています。
生成されるフォームは、XHTMLおよびXForms 1.0標準に準拠しているので、通常のXHTML/XFormsレンダラーで表示することができます。
この記事で解説するツールは、オープン・ソースのEclipseツール・プラットフォームにシームレスに統合されていて、IBM alphaWorksからXML Forms Generatorとして無償で入手できます。
XMLインスタンス・ドキュメントの場合(第1回を参照)と同様、WSDLドキュメントからフォームを生成するときにも、XML Forms Generatorはモデル・ドリブン・アプローチを使用します。GeneratorはWSDLドキュメントのプロパティー(操作、メッセージ部分、型定義など)を、WSDLおよびXML SchemaのEMFモデルによって定められたランタイムJava(TM)構造に読み込みます。結果として、この構造がWSDLドキュメントの分析を容易にして、典型的なXMLインスタンス・ドキュメントの作成を可能にし、それが(水面下で)、すぐに展開できる実用的なフォームの生成を可能にします。
結果として生成されたフォームは、Webサービスのエンドポイントに直接送信することができます。ただし、XForms 1.0勧告では、このような呼び出しの成功が特に要求されているわけではないので、中間にミドルウェアを含める必要があるかもしれません。XML Forms Generatorのディストリビューションには、Java 2 Platform, Enterprise Edition(J2EE)Webアプリケーションが付属していて、これには、このような中間層ソリューションの簡単なデモを示す1組のサーブレットが含まれています(参考文献を参照)。
また、WSDLドキュメントはサービス呼び出しに応答して送信されるデータの構造をエンコードするので、WSDLによって定義されたWebサービス操作の呼び出しに対する応答を表示するテンプレートを生成することが可能です。応答テンプレートを生成するには、XSLTやXFormsそのものをswitch/caseメカニズムで使用するなど、いくつかのアプローチがあります。J2EE環境での対話例を示すために、XML Forms Generatorの現在のリリースは、応答テンプレートをJSPファイルとして生成します。
複数送信フォームの複雑さを避けるために、XML Forms Generatorでは、ユーザーはフォームを生成する単一の操作を選択する必要があります。そのためには、WSDLを読み込んで、使用可能な操作を判断し、これらの操作のリストを含んだウィザード・ページを表示し、そこから1つを選択しなければなりません(図1参照)。
図1. WSDLドキュメントで定義された操作の選択
XML Forms Generatorは、さらに分析を行い、その結果として、フォームのデフォルトの送信ターゲット(実際のサービス・エンドポイントURL)が選択されます。
図2. サービス・アドレスに応じてオーバーライドされるフォームのデフォルトの送信ターゲット
リスト1では、エンドポイントはWSDLドキュメントで宣言されたservice要素を調べることによって発見されます。
リスト1. service要素を含んだWSDLコード
<service name="GoogleSearchService">
<port name="GoogleSearchPort" binding="typens:GoogleSearchBinding">
<soap:address location="http://api.google.com/search/beta2"/>
</port>
</service>
|
選択された操作の入力メッセージ部分と、WSDLのtypesセクション内のXML Schemaで定義された型が調べられて、リクエスト・メッセージで送信されるすべてのデータを含んだプロトタイプXMLインスタンス・ドキュメントが生成されます。リスト2は、単一の操作とその入力メッセージ定義を含んだ単純なWSDLportType宣言です。
リスト2. WSDL portType宣言
<portType name="GoogleSearchPort">
<operation name="doSpellingSuggestion">
<input message="typens:doSpellingSuggestion"/>
<output message="typens:doSpellingSuggestionResponse"/>
</operation>
</portType>
<message name="doSpellingSuggestion">
<part name="key" type="xsd:string"/>
<part name="phrase" type="xsd:string"/>
</message>
|
この入力メッセージ宣言から、XML Forms GeneratorはXMLインスタンス・ドキュメント(リスト3)を生成し、それから実用的なXHTML/XFormsドキュメントが作成されます。インスタンス・ドキュメントそのものがSOAPエンベロープなので、フォームの送信前にインスタンスの特別な操作をしなくても、Webサービスを直接呼び出すことができます。
リスト3. XMLインスタンス・ドキュメント
<portType name="GoogleSearchPort">
<operation name="doSpellingSuggestion">
<input message="typens:doSpellingSuggestion"/>
<output message="typens:doSpellingSuggestionResponse"/>
</operation>
</portType>
<message name="doSpellingSuggestion">
<part name="key" type="xsd:string"/>
<part name="phrase" type="xsd:string"/>
</message>
|
XML Forms Generatorは、より複雑な型定義も理解でき、RPC自由形式とドキュメント自由形式の両方のサービス定義からフォームを生成することができます。
図3は、リスト3に示されている例から生成されたフォームであり、Internet ExplorerのformsPlayerプラグインで表示されています(参考文献を参照)。
図3. WSDL操作のために生成されたフォーム
フォームがブラウザーからWebサービスに直接送信される場合、ブラウザーが受け取る応答そのものがSOAPエンベロープです。エンベロープは生のXMLマークアップ以外のものとして表示されないと予想するのが妥当です。
図4. フォーム送信に対するSOAP応答の生のXML
表示可能な応答を作成するための最も単純なアプローチは、実際に呼び出しを行い、SOAPエンベロープを表示可能なXHTMLマークアップに変換する中間物を注入することです。
図5. サービス呼び出しを仲介するサーブレット
XML Forms Generatorのディストリビューションに付属のWebアプリケーションには、このアプローチの長所と短所を示すために、まさにこれを行うサーブレットが含まれています。このサーブレットは、Webサービス応答エンベロープを調べて、データを抽出し、そのデータを表示可能なXHTMLマークアップで包みます。
図6. サーブレットによって生成された応答表示
これで、エンド・ユーザーが応答データを使えるようになりましたが(図6を参照)、プレゼンテーション・メカニズムと呼び出しメカニズムがもつれ合っています。J2EEの「モデル2」アーキテクチャー・パターンが推奨しているようなモデル・ビュー・コントローラー方式の分離を実現する、より柔軟なアーキテクチャーを可能にするには、応答のビューを提供する別のテンプレートが必要です。
すでに述べたように、XML Forms Generatorでは、WSDLドキュメントを使用して、応答テンプレートとして使えるJSPを作成することができます。Java Standard Tag Library(JSTL)要素は、応答エンベロープのXMLを照会します。リスト4は、生成されたJSPマークアップの代表的な抜粋です。
リスト4. 生成されたJSPマークアップ
<?xml version="1.0" encoding="ASCII"?>
<jsp:root xmlns:jsp=http://java.sun.com/JSP/Page
xmlns:x="http://java.sun.com/jsp/jstl/xml" version="2.0">
...
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
WSDL Response Template: doSpellingSuggestion Response
</title>
<link href="gen_default.css" rel="stylesheet"/>
</head>
<body>
<h1>doSpellingSuggestion Response</h1>
<p><b>Return</b></p>
<p><x:out select="$myDOM//return"/></p>
</body>
</html>
</jsp:root>
|
最初のビジュアル・プレゼンテーションは、以前のサーブレットのみのアプローチで生成されるものと大きく違うわけではありませんが、開発者やデザイナーがすぐに手を加えられる応答ページになります。基本的なフォーム要素を構築して、それらをXPath式でデータに対応させる作業は、XML Forms Generatorによってすでに行われています。
図7. JSP応答テンプレートによって可能になった、よりモデル2アーキテクチャーなフロー
Eclipseプラグインとして、XML Forms GeneratorはEclipseおよびEclipse対応製品との緊密な統合を提供し、コンテキスト・メニュー、ウィザード、環境設定ページなど、便利なユーザー・インターフェース要素も備えています。
豊富なオプションによって、生成されたフォームのタイトルと見出しテキスト、スタイルシート、送信ターゲット、反復回数、テキスト領域生成などを制御することができます。
また、XML Forms Generatorでは、このシリーズの第1回で示したのと同じメカニズムによって、生成されたフォームをCompound XML Document Editor上でさまざまなレンダラーですばやく表示することができます。
多くの場合、マウスを数回クリックするだけで、実用的なフォームを生成できます。実際、XML Forms GeneratorにはWSDLドキュメント用の"Generate All"オプションがあり、XMLインスタンス・ドキュメント、フォーム、および応答JSPテンプレートのすべてを1回のアクションで生成することができます。
図8. WSDLドキュメント用の生成オプション
XML Forms Generatorでは、EMFのモデル・ドリブン開発の概念を利用して、WebサービスのWSDL記述からフォームを生成することができます。XForms 1.0ではWebサービス呼び出しサポートは不要ですが(このサポートはXForms 1.1に含まれる予定です)、これまで見てきたように、Webサービスに対してXFormsを使用するためのオプションはきわめて限られています。この記事の例から生成されたフォームは、現在、サービス・エンドポイントに対して正常に呼び出すことができます。
標準準拠のモデル・ドリブン・ツールであるXML Forms Generatorを使用すると、Webサービス用の実用的なフォームをすぐに生成でき、あらゆるサービス指向アーキテクチャー(SOA)でフォーム開発を有利にスタートすることができます。
謝辞:IBMのKelvin LawrenceとHenry Tranに感謝します。
学ぶために
- モデル・ドリブンXMLフォーム生成に関する、この2回シリーズの第1回の記事を読んでください(developerWorks, 2005年8月)。
-
eclipse.orgで、EclipseとEclipse Modeling Frameworkについて学んでください。
- Kevin KellyとJan Kratky、Keith Wellsの共著による「モデル・ドリブン複合ドキュメント開発」(developerWorks, 2005年7月)を読んで、Eclipseで複合XMLドキュメントを構築する方法を学んでください。
-
W3Cをアクセスして、XForms 1.0勧告やXHTML 1.0勧告、XML Events勧告、それにXForms 1.1ワーキング・ドラフトWeb Services Description Language (WSDL) 1.1注釈などについて、さらに深く学んでください。
- この文書の中で例として使われているHR-XMLスキーマを含めて、HR-XML consortiumに関する情報を入手してください。
- この記事の中で取り上げた例の幾つかは、U.S. Centers for Disease Control and Prevention(米国疾病管理・予防センター)のスキーマから生成されたものです。
- developerWorksのNew to Rationalのページで、IBMのRationalソリューションについて知ってください。
- Nicholas ChaseがdeveloperWorksで、XForms関連の技術ヒントのシリーズ記事を書いています。その中には、「XFormsを使ってWebサービス・メッセージを送受信する」(2004年6月)もあります。
製品や技術を入手するために
-
IBM alphaWorksにアクセスして、この記事の中で触れた下記の技術に関して、さらに深く学んでください。
- Java言語ベースのXMLブラウザーである、X-Smilesについて調べてください。
- Microsoft Internet Explorer 6.0以上に対するプラグインである、Novell XForms Explorer betaをダウンロードしてください。
-
formsPlayerをダウンロードしてください。このライブラリーを利用すると、XFormsプロセッサーやエディター、デバッガーなどを構築することができます。
-
Google Web APIs.を使って、皆さん独自のWebアプリケーションを開発してください。
Kevin E. Kellyは、IBMのシニア・ソフトウェア・エンジニアとして、ソフトウェア標準化に従事しています。W3CのXForms Working Groupと、W3CのCompound Document Format Working Groupのメンバーとして、XMLベースでモデル駆動の手法に基づいた高速で効率的な標準の採用を図るべく、クライアント技術と新興のオープン・スタンダード・ベース技術に集中した活動を行っています。IBMに入社する前には、8年間 Rational Softwareを扱っており、UMLモデリングとJava技術に関した業務を行ってきました。Mercer Universityにて学位を、またUniversity of Montanaで修士を取得しています。