XMLとXSLを使った高度なUIデザイン:パート7はじめにこの連載では、XMLとXSLを使った高度なUIデザインに挑戦します。XMLとXSL(XML用のスタイルシート言語)を使用して、高度なユーザーインタフェース(UI)コンポーネントを毎回1つずつ作成していきます。 本稿では、連載の第1回で紹介したフォルダツリーを発展させ、親エンティティから子エンティティへの関係線を追加します。 フォルダツリーの変更内容概要関係線を追加することで、親子関係が明確に示され、ツリー構造がわかりやすくなります。ページ上の画像やオブジェクトが多くなるという潜在的な難点はありますが、メディアの読み込みについてはそれほど心配しなくていいでしょう。図1に示すのは、関係線付きのフォルダツリーです。 関係線を追加するための変更箇所はすべて、XSLTスタイルシートおよびクライアント側JavaScriptの内部にあります。既にフォルダツリーをご利用の皆さんは、連載第1回の「tree.js」および「tree.xslt」の両ファイルを更新するだけで済みます。主な変更内容について、次の2つの節で紹介していきます。 XSLTの変更内容実際の関係線は、XSLスタイルシート内で描かれます。関係線を実現するために、2つの変更を加えました。1つ目の変更は、エンティティアイコン(エンティティの状態に応じて表示されるプラス/マイナス記号)の前に、関係線を表示するためのテーブルセルを追加したことです。図2に、ルートテーブル内に追加したこの新しいテーブルセルを示します。 2つ目の変更は、階層を表現するための「hierarchy」テンプレートを追加したことです。このテンプレートの内容は次のとおりです。 <xsl:template name="hierarchy"> <xsl:for-each select="ancestor::*[name() != contents]"> <xsl:choose> <xsl:when test="following-sibling::node()"> <img src="images/I.png"/> </xsl:when> <xsl:otherwise> <img src="images/blank.png"/> </xsl:otherwise> </xsl:choose> </xsl:for-each> <xsl:choose> <xsl:when test="count(contents/*) > 0"> <xsl:choose> <xsl:when test="following-sibling::node()"> <img src="images/Tplus.png" _open="images/Tminus.png" _closed="images/Tplus.png"> <xsl:attribute name="ID">stateImagef <xsl:value-of select="@id"/></xsl:attribute> </img> </xsl:when> <xsl:otherwise> <img src="images/Lplus.png" _open="images/Lminus.png" _closed="images/Lplus.png"> <xsl:attribute name="ID">stateImagef <xsl:value-of select="@id"/></xsl:attribute> </img> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="following-sibling::node()"> <img src="images/T.png"/> </xsl:when> <xsl:otherwise> <img src="images/L.png"/> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:template> このテンプレートは次のような画像を参照しています。これらの画像については、後で詳しく説明します。 ![]() このテンプレートは、まず、現在のエンティティのすべての上位エンティティ(ここでは「先祖」と呼びます)に対して順に処理を行います。ここでは、 次に、このテンプレートは別の さらに、このスタイルシートの最後にある クライアントの変更内容 クライアントコードで変更を加えたのは、 図3 「tree.js」ファイルの追加行 ![]() それぞれのメソッドでは、エンティティのプラスまたはマイナス記号画像を表す デモまとめ今回の記事では、わずかな工夫でフォルダツリーに関係線を表示できることを紹介しました。アプリケーションのクライアント層の内部でXSLTおよびXMLを活用することの利点がわかっていただけたと思います。中でも、柔軟性、スケーラビリティ、保守性といったメリットは見逃せません。 終わりに本稿の内容が、Webアプリケーションインターフェイスの質的向上に役立てば幸いです。質問・コメント・提案があれば、著者紹介にあるアドレスまで遠慮なくメールをお送りください。 また、オリジナルの「hierarchy」XSLTテンプレートの作成にあたってすばらしい仕事をしてくれたPhil Carrillo氏に感謝します。ロジックが明確だったため、わずか半時間のちょっとした変更で、フォルダツリーと統合させることができました。ありがとうございました。 本連載のその他の記事著者紹介Joe Slovinski(Joe Slovinski)
1993年以来、Webアプリケーションの開発に継続的に携わる。本稿で紹介したコードについてのお問い合わせはJoe Slovinskiまで。
|