本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

XSLTを利用してアプリケーションを構築する

フォーマット変換を超えて、多層ソリューションを実現する

Chen Shu (chenshu@us.ibm.com), Software Engineer, IBM
Chen Shu氏はIBM Internet Technologyグループのソフトウェア・エンジニアで、普及しつつあるインターネット・テクノロジーを使用したeビジネス・アプリケーション・プロトタイピングに積極的に取り組んでいます。彼女はXML、Webサービス、パーベイシブ・コンピューティングに興味を持っています。メール・アドレスはchenshu@us.ibm.com です。
Nianjun Zhou (jzhou@us.ibm.com), Advisory Software Engineer, IBM
Nianjun Zhou氏は、IBM Internet Technologyグループのソフトウェア・エンジニア顧問です。これまでグリッド・コンピューティング、XMLベースのコンテンツ管理、XML、およびリレーショナル・データベース / LDAP変換に関連したいくつかのプロジェクトに参加しました。彼は、コンピューター・テクノロジーを利用して、ナレッジ・シェアリングおよび情報管理一般の効率性を高める新しいアプリケーションを開発したいと思っています。メール・アドレスはjzhou@us.ibm.com です。
Dikran Meliksetian (Dikran_Meliksetian@us.ibm.com), Senior Technical Staff Member, IBM
Dikran S Meliksetian氏は、IBM Internet TechnologyグループのSenior Technical Staff Memberです。彼はかつてコンテンツ・マネージメント・ソリューションの開発に携わり、現在は、さまざまなグリッド・コンピューティング・プロジェクトに参加しています。メール・アドレスはDikran_Meliksetian@us.ibm.com です。

概要: この記事では、XSLTテクノロジーを利用して、XMLに基づくエンドツーエンドの多層ソリューションを構築する方法について説明します。この方法を紹介するためのサンプル・アプリケーションでは、XSLTがプレゼンテーション層の変換だけでなく、異種のデータ・リポジトリーからデータを取り出し、データ指向のXML文書をバックエンドで生成するためにも使用されます。さらに、このアプリケーションは、中間層における統計分析などのデータ処理も提供します。

日付:  2003年 3月 25日
レベル:  上級 この記事の原文:  英語
アクティビティー: 1635 ビュー
お気軽にご意見・ご感想をお寄せください: 


広く普及した標準データ・フォーマットとして、XMLは複数のアプリケーション・コンポーネントをスムーズに統合することができます。W3CはXSLについて次のように述べています。

XSLはスタイルシートを表現するための言語であり、以下の3つの部分からなる。第1に、XML文書を変換するための言語XSL Transformations (XSLT)。第2に、XML文書の各部にアクセスまたは参照するためにXSLTによって使われる表現言語XML Path Language (XPath)。(XPathは、XML Linking仕様によっても使用される。)第3に、フォーマット設定のセマンティクスを指定するためのXMLボキャブラリーであるXSL Formatting Objects (XSL-FO)。XSLスタイルシートは通常、XML文書クラスのプレゼンテーション (表示) を指定し、クラスの1つのインスタンスが、フォーマット設定ボキャブラリーを使用するXML文書にどのように変換されるかを記述する。

しかしXSLTを利用すれば、主要なデータ表記モデルとしてXMLを使用するアプリケーションの中でその他のタスクを実行することもできるのです。(XSLT、XPath、およびXSL-FOについての詳細は、参考文献をご覧ください。)

この記事では、従来のフォーマット変換を超えてXSLTを活用するアプリケーションをどのように構築できるか、ご覧いただけます。サンプル・アプリケーションの中で、XSLTを利用して以下のタスクを実行します。

  • リレーショナル表記のリポジトリー・データをXMLに変換する
  • XML文書として表わされるデータに対して統計分析を実行する
  • 特定のビジネス・ロジックに基づいてXML文書を生成する
  • XMLをHTML、WML、およびVXMLとしてレンダリングする

このアプリケーションは、既存の情報を使って検索アプリケーションを作成したり、適切なXSL変換スクリプトを追加してさまざまな出力フォーマットで結果を提供できることを示します。この方法は、簡単なデータ分析やデータ・フォーマット変換を必要とするさまざまなアプリケーションで採用できます。

この記事の構成は以下のとおりです。次のセクションでは、サンプル・アプリケーションを簡単に紹介し、私たちがそれを構築したときの要件を示します。その後のセクションでは、このソリューションのアーキテクチャーを示し、さらに、アプリケーション内で行われるXML変換の詳細説明を示します。記事の最後では、このソリューションの汎用性を示し、要件の変更や入出力データ・フォーマットについて説明します。

サンプル

このサンプル・アプリケーションは、検索対象オブジェクトを見つけるのに必要な質問と応答のやり取りを最小化する検索フレームワークです。このシステムの名前はGuided Adaptive Search Framework (GASF) です。図1 は、GASFシステムのプロセス・フローを示しています。


図1. GASFのフロー

このプロセスを説明するために、GASFの具体的なインプリメンテーションを考えましょう。たとえば、多数の都市に支店を持つ大企業の従業員ディレクトリー検索システムがあるとします。エンド・ユーザーは、特定の情報、たとえばニューヨーク市で働くJohn Smithという人物のメーリング・アドレス (郵送先) 情報を必要とします。システムは、ユーザーに対して質問リスト (質問集) を提示します。その中には、ファーストネーム、ラストネーム、都市名、電話番号、管理職かどうか、などの項目が含まれます。ユーザーは質問を1つ選択して (たとえば「ファーストネーム」)、その答えを入力します (たとえば「John」)。するとシステムがリポジトリー検索を実行して、多数の結果を検出します。システムは2番目の質問集を作成します。その際、すでにユーザーが答えた質問を除去し、各質問に対する値が統計的にどれほど分散すると予想されるかに基づいて、残りの質問の順序を再編成します。その後、この2番目の質問集がユーザーに提示されます。該当する人物が見つかるか、またはその人物が存在しないことが判明するまで、このやり取りが繰り返されます。このプロセスおよび統計分析の目的の1つは、質問 / 応答サイクルの数を最小限に抑えることです。

要件

GASFの要件をまとめると、次のようになります。

  1. データ・リポジトリーは、任意のスキーマに基づくリレーショナル・データベースまたはLDAPディレクトリーとしてインプリメントされます。RDBMSまたはLDAPリポジトリーから取り出されるデータのフォーマットが大きく異なっていても、GASFはデータ・ソースとは無関係な統一フォーマットによってデータをアプリケーションに提供します。
  2. システムは、実施中の検索において関係のない、つまり不必要な質問をフィルターに掛けて除きます。たとえば、現在の検索段階において、予想されるすべての結果の間で特定の属性値が同じだと判断される場合、その属性は無関係であり、その属性に基づく質問は生成されません。
  3. システムは、質問集の作成およびユーザー回答の処理というサイクルの数を最小化します。
  4. 出力の描画 (レンダリング) 方法は、要求元のデバイスの種類によって決定されます。たとえば、電話を使って検索要求が出された場合、質問集はVoiceXMLを介して提示されます。PDAが使用された場合には、PDAの小画面で表示できるよう、WMLとして質問集がレンダリングされます。
  5. このフレームワーク開発の最終目標は、入出力要件がさまざまに異なる同様のアプリケーション構築のために、このフレームワークが使用されるようになることです。アプリケーション固有の要件を外部化することによって、コーディングにかかる労力を最小限に抑えたいと私たちは考えています。そのために、アプリケーション固有の構成ファイルを使ってフレームワークが自動的に初期化されるようにします。たとえば、データ・リポジトリーの場所、属性のリスト、出力フォーマットなどを、すべて構成ファイルで指定します。

ソリューションのアーキテクチャー

GASFの要件を満たすために、私たちは以下のようなXMLベースのエンドツーエンド・ソリューションを考え出しました (図2 を参照)。

  1. データ・リポジトリーのインターフェースとして、XML Integrator (XIエンジン --参考文献を参照) を使用しました。検索の指定、および取得されたデータのXML変換は、スクリプトが実行します。
  2. 分析エンジンを使用して、取得された属性の値の分散を計算し、どんな質問をどんな順序で提示するかを決定します。たとえば、取得されたすべてのインスタンスの間で特定の属性値が同じである場合、その属性は次回の質問集から除外されます。値が最も幅広く分散するような属性が、次のサイクルの最初の質問として第1候補になります。分析エンジンによって生成されたこの統計情報を反映するXMLに基づいて、質問表が作成されます。
  3. 変換エンジンを使用して質問表を変換し、ユーザーのデバイス・タイプに応じてそれがユーザーに提示されます。

図2. GASFのアーキテクチャー

このソリューションの目的は、基礎となるデータ・リポジトリー・スキーマやプレゼンテーション層から独立したミドルウェア・ソリューションとなることです。このソリューションの利点は、変換固有のコードをアプリケーション論理から分離できることであり、データベース・スキーマやXML構造が変更されても、アプリケーション・コードを変更することなく簡単に対応できることです。


ソリューションの詳細

ここでは、従業員ディレクトリー検索アプリケーションの簡単なサンプルで使われるさまざまなXSLスタイルシートとXMLフォーマットについて説明しましょう。従業員データはリレーショナル・データベースに保管され、そのデータベース・スキーマは、IBM DB2を使用した以下のようなものであるとします。


リスト1. 従業員データベースのスキーマ
                
CONNECT TO EMPLOYEE;
-- DDL Statements for table "EMPLOYEE"."EMPLOYEE"
CREATE TABLE "EMPLOYEE"."EMPLOYEE" (
       "ID" CHAR(6) NOT NULL , "LASTNAME" VARCHAR(100) ,
       "CITY" VARCHAR(100) NOT NULL , "FIRSTNAME" VARCHAR(100) NOT NULL ,
       "PHONE" VARCHAR(100) NOT NULL , "ADDRESS" VARCHAR(100) NOT NULL ,
       "ISMANAGER" CHAR(1) NOT NULL )
       IN "USERSPACE1"
COMMIT WORK;
CONNECT RESET;
TERMINATE;

XIエンジン

XML Integrator (XI) エンジンは、XMLと構造化データ・フォーマット (リレーショナル・データやLDAPデータなど) の間でデータを変換するためのツールです。XIエンジンは、2つの情報構造の関係を表記するスクリプトに基づいています。IBM alphaWorksから入手できるXIについての詳細は、参考文献を参照してください。現在、XIはこの関係を指定するためにDTDSAとXRTの2つの表記法をサポートします。

この記事の例ではXRTを使用します。XRTはXSLの緩やかな拡張で、照会ステートメントとXSL変換を結合したものです。リスト2 は、従業員 (employee) データベースからデータを取り出して、中間的なデータXMLを作成するXRTスクリプトです (このデータXMLがリスト3 に示されています)。

このXRTスクリプトは2つの部分から成ります。最初の部分は、データ・リポジトリーからデータが取り出される方法を定義します (データ・ソースの場所、SQL照会、複数の照会の間の関係など)。2番目の部分は、XML変換テンプレートを定義します。このXRTスクリプトが実行されると、まず、標準的なXRTスキーマに準拠する内部XML表記が作成されます。このXML表記は、XRTスクリプトの2番目の部分によって定義されるテンプレートを使って変換されます。

このアプリケーションでは、テンプレートの2番目の部分はどんな検索のときも同じですが、照会そのものは、ユーザーの答えに基づいて検索制約が追加されることによって動的に変化します。


リスト2. XIデータ取得用のXRTスクリプト
                
<?xml version="1.0" encoding="UTF-8"?>
<xrt:xrt xmlns:xrt="http://www.xrt.org" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xrt:rdbms2xml>
        <xrt:locator xrt:name="d" xrt:url="jdbc:db2:employee"
          xrt:driver="com.ibm.jdbc.app.DB2Driver" xrt:userid="foo"
           xrt:password="bar"/>
        <xrt:sqlsearch xrt:qid="q1">
        <xrt:query>select lastname,firstname,city,address,phone,
            ismanager from employee 
			    where firstname = 'John' and lastname = 'Smith'</xrt:query>
	    </xrt:sqlsearch>
    </xrt:rdbms2xml>
    <xrt:xml2xml>
        <xsl:stylesheet version="1.0" xmlns:xrt="http://www.xrt.org"
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:template match="store2xml">
                <xsl:element name="entries">
                    <xsl:apply-templates select="q1" />
                </xsl:element>
            </xsl:template>
            <xsl:template match="q1">
                <xsl:element name="entry">
                    <xsl:element name="attr">
                        <xsl:attribute name="name">lastname</xsl:attribute>
                        <xsl:attribute name="value">
                            <xsl:value-of select="LASTNAME/@value" />
                        </xsl:attribute>
                    </xsl:element>
                    <xsl:element name="attr">
                        <xsl:attribute name="name">firstname</xsl:attribute>
                        <xsl:attribute name="value">
                            <xsl:value-of select="FIRSTNAME/@value" />
                        </xsl:attribute>
                    </xsl:element>
                    <xsl:element name="attr">
                        <xsl:attribute name="name">city</xsl:attribute>
                        <xsl:attribute name="value">
                            <xsl:value-of select="CITY/@value" />
                        </xsl:attribute>
                    </xsl:element>
                    <xsl:element name="attr">
                        <xsl:attribute name="name">address</xsl:attribute>
                        <xsl:attribute name="value">
                            <xsl:value-of select="ADDRESS/@value" />
                        </xsl:attribute>
                    </xsl:element>
                    <xsl:element name="attr">
                        <xsl:attribute name="name">phone</xsl:attribute>
                        <xsl:attribute name="value">
                            <xsl:value-of select="PHONE/@value" />
                        </xsl:attribute>
                    </xsl:element>
                    <xsl:element name="attr">
                        <xsl:attribute name="name">ismanager</xsl:attribute>
                        <xsl:attribute name="value">
                            <xsl:value-of select="ISMANAGER/@value" />
                        </xsl:attribute>
                    </xsl:element>
                </xsl:element>
            </xsl:template>
        </xsl:stylesheet>
    </xrt:xml2xml>
</xrt:xrt>


リスト3. XIから生成される中間データXML
                
<?xml version="1.0" encoding="UTF-8"?>
<entries>
    <entry>
        <attr name="lastname" value="Smith" />
        <attr name="firstname" value="John" />
        <attr name="city" value="New York" />
        <attr name="address" value="18 Broadway, New York, NY12000" />
        <attr name="phone" value="123-456-9012" />
        <attr name="ismanager" value="N" />
    </entry>
    <entry>
        <attr name="lastname" value="Smith" />
        <attr name="firstname" value="John" />
        <attr name="city" value="Miami" />
        <attr name="address" value="123 Flagler St., Palm Beach, FL23000" />
        <attr name="phone" value="234-567-9012" />
        <attr name="ismanager" value="N" />
    </entry>
    <!--48 more entries down here -->
</entries>

分析エンジン

50個のエントリーを持つXML文書 (リスト3 を参照) としてデータを取得した後、分析エンジンはリスト4 のようなXSLを適用することによって、XMLデータに対して統計分析を実行します。XMLデータがリスト3 のような共通フォーマットに準拠する限り、このスタイルシートをすべての検索アプリケーションで使用できます。


リスト4. 統計分析用のXSL
                
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	version="1.0">
<xsl:output method="xml" />
<xsl:key name="attr-by-name" match="attr" use="@name" />
<xsl:key name="attr-by-name-value" match="attr"
		use="concat(@name, '+', @value)" />
<xsl:template match="entries">
<attributelist instances="{count(entry)}">
    <xsl:for-each select="entry/attr[generate-id() =
        generate-id(key('attr-by-name', @name)[1])]">
	    <attribute name="{@name}">
		    <xsl:for-each select="key('attr-by-name', @name)
                [generate-id() = generate-id(key('attr-by-name-value',
                                 concat(@name, '+', @value))[1])]">
			    <instance value="{@value}"
                occurrence="{count(key('attr-by-name-value',
                   concat(@name, '+', @value)))}" />
		    </xsl:for-each>
	    </attribute>
    </xsl:for-each>
</attributelist>
</xsl:template>
</xsl:stylesheet>

この統計分析の結果は、リスト5 のようなXML文書になります。

  • インスタンスの総数は50個
  • 各インスタンスの電話番号 (phone) が異なる
  • すべてのインスタンスのlastname ("Smith") とfirstname ("John") は同じ
  • いずれも管理職 (manager) ではない
  • 異なる都市 (city) および住所 (address) の数は5つ

リスト5. 統計分析の結果を表すXML文書
                
<?xml version="1.0" encoding="UTF-8"?>
<attributelist instances="50">
    <attribute name="lastname">
        <instance occurrence="50" value="Smith"/>
    </attribute>
    <attribute name="firstname">
        <instance occurrence="50" value="John"/>
    </attribute>
    <attribute name="city">
        <instance occurrence="8" value="WASHINGTON"/>
        <instance occurrence="10" value="DALLAS"/>
        <instance occurrence="15" value="AUSTIN"/>
        <instance occurrence="1" value="New York"/>
        <instance occurrence="16" value="Miami"/>
    </attribute>
    <attribute name="phone">
        <instance occurrence="1" value="1234567"/>
        <instance occurrence="1" value="2345671"/>
        <!--48 more instances -->
    </attribute>
    <attribute name="address">
        <instance occurrence="8" value="20 Burr Road "/>
        <instance occurrence="10" value="1024 24ST"/>
        <instance occurrence="15" value="3901 110Ave"/>
        <instance occurrence="1" value="18 Broadway "/>
        <instance occurrence="16" value="123 Flagler St."/>
    </attribute>
    <attribute name="ismanager">
        <instance occurrence="50" value="N"/>
    </attribute>
</attributelist>

リスト5 に示される属性のインスタンス値の分散から、GASFは、検索対象オブジェクトをさらに掘り下げるために新しい質問集を作成する必要があると判断します。分析エンジンは、初期属性リストXML文書 (リスト6) を再編成することによって、次の質問集を生成します。このXML文書は、属性と、さまざまなメディア・タイプ用の対応する質問との間の初期マッピングを定義します。


リスト6. 初期属性リストXML文書
                
<?xml version="1.0" encoding="UTF-8"?>
<gasf>
    <attribute name="lastname">
        <html><question>Enter the last name<question></html>
    </attribute>
    <attribute name="firstname">
        <html><question>Enter the first name<question></html>
    </attribute>
    <attribute name="city">
        <html><question>Enter the city<question></html>
    </attribute>
    <attribute name="address">
        <html><question>Enter the mailing address<question></html>
    </attribute>
    <attribute name="phone">
        <html><question>Enter the phone number<question></html>
    </attribute>
    <attribute name="ismanager">
        <html><question>Is this person a manager?<question></html>
    </attribute>
</gasf>

この再編成の過程で、ユーザーによってすでに指定された属性 (たとえばlastnamefirstname) は、質問集から除外されます。すべてのインスタンスの間で同じ値の属性 (たとえばismanager) は除去されます。残りの属性の順序が再編成され、最も分散の大きい属性が質問集リストの最初の質問になります。リスト7 は、XMLフォーマットで生成される質問集です。



リスト7. 質問集XML文書
                
<?xml version="1.0" encoding="UTF-8"?>
<gasf>
    <attribute name="phone">
        <html><question>Enter the phone number<question></html>
    </attribute> <attribute name="address">
        <html><question>Enter the mailing address<question></html>
    </attribute>
    <attribute name="city">
        <html><question>Enter the city<question></html>
    </attribute>
</gasf>

変換エンジン

最後に、適切なXSL変換スタイルシートを適用することにより、ユーザーの使用するデバイスに応じて、質問集XML文書がユーザーに対してレンダリングされます。たとえば、パーソナル・コンピューターのWebブラウザーから要求が出された場合は、リスト8 のようなXSLスタイルシートを使ってHTML Webページをレンダリングします。


リスト8. XMLからHTMLに変換するための質問集XSL
                
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml"/>
    <xsl:param name="url"/>
    <xsl:template match="gasf">
        <html>
            <form method="post" action="{$url}search">
                <p>Choose one of the following questions: </p>
                <xsl:apply-templates select="attribute"/>
                <p><input type="submit" name="submit"/></p>
            </form>
        </html>
    </xsl:template>
    <xsl:template match="attribute">
        <p>
            <input type="radio" name="attribute" VALUE="{@name}"/>
            <xsl:value-of select="html/question"/> </p>
    </xsl:template>
</xsl:stylesheet>


拡張性

これ以外のレンダリング・フォーマットをこのシステムに追加するのは簡単です。必要な作業は以下の2つだけです。

  1. メディア・タイプおよび対応する変換を、初期属性リストXMLに追加します。たとえば、PDA用のWMLフォーマットを追加したい場合、リスト6 の各attribute 要素の副要素としてwml を追加し、その中に変換要件を含めます。同様に、電話を使ってシステムと対話するユーザー向けには、vxml 副要素を追加できるでしょう。リスト9 は、attribute 要素をそのように拡張する例を示しています。
  2. リスト7 の質問集XMLを新しいメディア・タイプ用に変換するためには、リスト8 と同様の変換XSLスタイルシートを追加します。リスト10リスト11 はそれぞれ、XMLからWMLへの変換、およびXMLからVXMLへの変換のための変換XSLスタイルシートです。

リスト9. 初期属性の拡張例
                
<attribute name="phone">
  <html><question>Enter the phone number</question></html>
  <wml><question>Tap phone number</question></wml>
  <vxml option="1">
    <question>press or say the phone number</question>
    <type>digits</type>
    <grammar src="builtin:grammar/digits?minlength=1;maxlength=7" mode="dtmf"></grammar>
    <catch event="noinput nomatch">
      <reprompt/>
    </catch>
  </vxml>
</attribute>


リスト10. XMLからWMLへの変換用の質問集XSLの例
                
<?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml"/>
    <xsl:param name="url"/>
    <xsl:template match="gasf">
        <xsl:text disable-output-escaping="yes">
            <![CDATA[<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
                "http://www.wapforum.org/DTD/wml_1.1.xml">]]>
        </xsl:text>
        <wml>
            <card id="questionary" title="Questionary">
                <do type="accept">
                    <go method="post" href="{$url}">
                        <postfield name="attribute" value="$(attribute)" />
                    </go>
                </do>
                <p>Choose one of the following questions: </p>
                <p>
                    <select name="attribute">
                        <xsl:apply-templates select="attribute"/>
                    </select>
                </p>
            </card>
        </wml>
    </xsl:template>
    <xsl:template match="attribute">
        <option value="{@name}">
            <xsl:value-of select="wml/question"/>
        </option>
    </xsl:template>
</xsl:stylesheet>


リスト11. XMLから電話用VoiceXMLに変換するための質問集XSLの例
                
<?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" />
    <xsl:param name="url" />
    <xsl:template match="gasf">
        <vxml version="1.0">
            <meta name="Content-Type" content="text/x-vxml" />
            <property name="caching" value="safe" />
            <form id="main" scope="dialog">
                <block>
                <prompt>Choose one of the following questions:
                    <break msecs="10" />
                </prompt>
                <goto next="#check_searchable_attribute" />
                </block>
            </form>
            <menu id="check_searchable_attribute" scope="document" dtmf="false">
                <prompt>
                    <enumerate>
                        <break msecs="10" />
                            Press<value expr="_dtmf" mode="tts" />or say
                        <value expr="_prompt" mode="tts" />
                    </enumerate>
                </prompt>
                <xsl:apply-templates select="attribute" />
                <choice dtmf="9" next="#check_searchable_attribute">
                    nine for Repeating the menu</choice>
                <choice dtmf="0" next="#quit">
                    zero to Exit the Search System
                    <grammar type="application/x-jsgf">quit | exit | goodbye
                    </grammar>
                </choice>
                <noinput>
                    Please select at least one option
                    <reprompt />
                </noinput>
                <nomatch>
                    Sorry, that is not an option. Try again
                    <reprompt />
                </nomatch>
                <catch event="error.badfetch">
                    <prompt>Some where something went wrong, lets try again
                    </prompt>
                    <goto next="#check_searchable_attribute" />
                </catch>
            </menu>
            <form id="quit" scope="document">
                <block>
                    <prompt>Thank You for using the Voice Search System, Goodbye
                    </prompt>
                </block>
                <block>
                    <exit />
                </block>
            </form>
        </vxml>
    </xsl:template>
    <xsl:template match="attribute">
        <choice dtmf="{vxml/@option}" next="{$url}?attribute={@name}">
            <xsl:value-of select="@option" />for
            <xsl:value-of select="vxml/question" />
        </choice>
    </xsl:template>
</xsl:stylesheet>

さらに、GASFを使用すれば、既存のデータ・ソースを利用する他の検索システムも簡単に構築することができます。ここでもまた、必要なステップは以下の2つです。

  1. リスト2 のようなデータ・ソース定義を含むスクリプトを作成する。
  2. リスト6 のような、検索対象のすべての属性を含む初期属性リストXMLを作成する。

結論

GASFで採用されている方法は、さまざまなデータ・ソースからXMLオブジェクトを生成してオンザフライで処理およびレンダリングする必要のあるさまざまなアプリケーションで利用できます。たとえばWebコンテンツ管理システム、ナレッジ管理システム、企業間トランザクションなどがあります。XSLTテクノロジーが成熟するにつれて、そのような処理がより効率的、かつ拡張的に行われるようになると私たちは考えています。

アプリケーションでXSLTを利用することの主な利点は、柔軟性、および開発コストの低さです。大量のトランザクションをサポートする必要のないアプリケーションにとって、XSL変換は手早く、簡単で、コスト節約的なソリューションを提供してくれるでしょう。


参考文献

  • IBM alphaWorks には、開発の初期段階にあるさまざまな「アルファ・コード」が紹介され、ダウンロードできます。その中の1つ、この記事でも述べられたXML Integrator (XIエンジン) をお試しください。

  • XSLに関する詳細は、W3CのXSL ページをご覧ください。

  • XSLTに関する詳細は、W3CのXSLT ページをご覧ください。

  • XPathに関する詳細は、W3CのXPath ページをご覧ください。

  • XLinkに関する詳細は、W3CのXLink ページをご覧ください。

  • Doug Tidwell氏によるdeveloperWorks のXSL-FOチュートリアルXSL-FOの基礎およびXSL-FO上級技法 をご覧ください。さらに、Doug氏によるHTML-to-FO conversion guide には、HTML要素 からFOへ、さらにPDFへの変換をスピードアップしてくれるさまざまなXSLTテンプレートが紹介されています (2003年2月)。

  • WMLについての詳細は、W3Schools WML ページをご覧ください。

  • VoiceXMLについての詳細は、ZVON Voice XML ページをご覧ください。

  • developerWorks XML zone には、XMLに関するさらに多くの記事があります。

  • IBM WebSphere Studio は、Javaと他の言語の両方でXML開発を自動化するツールのスイートを提供します。WebSphere Application Server と密接に統合されていますが、他のJ2EEサーバーと一緒に使用することもできます。

  • XMLおよび関連テクノロジーに関するIBM認定デベロッパーになる方法をご覧ください。

著者について

Chen Shu氏はIBM Internet Technologyグループのソフトウェア・エンジニアで、普及しつつあるインターネット・テクノロジーを使用したeビジネス・アプリケーション・プロトタイピングに積極的に取り組んでいます。彼女はXML、Webサービス、パーベイシブ・コンピューティングに興味を持っています。メール・アドレスはchenshu@us.ibm.com です。

Nianjun Zhou氏は、IBM Internet Technologyグループのソフトウェア・エンジニア顧問です。これまでグリッド・コンピューティング、XMLベースのコンテンツ管理、XML、およびリレーショナル・データベース / LDAP変換に関連したいくつかのプロジェクトに参加しました。彼は、コンピューター・テクノロジーを利用して、ナレッジ・シェアリングおよび情報管理一般の効率性を高める新しいアプリケーションを開発したいと思っています。メール・アドレスはjzhou@us.ibm.com です。

Dikran S Meliksetian氏は、IBM Internet TechnologyグループのSenior Technical Staff Memberです。彼はかつてコンテンツ・マネージメント・ソリューションの開発に携わり、現在は、さまざまなグリッド・コンピューティング・プロジェクトに参加しています。メール・アドレスはDikran_Meliksetian@us.ibm.com です。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML
ArticleID=239895
ArticleTitle=XSLTを利用してアプリケーションを構築する
publish-date=03252003
author1-email=chenshu@us.ibm.com
author1-email-cc=
author2-email=jzhou@us.ibm.com
author2-email-cc=
author3-email=Dikran_Meliksetian@us.ibm.com
author3-email-cc=

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。