xfy technologyのコンポーネント・アーキテクチャ

1. xfy technologyの機能拡張の概要

1.1. 理想的なXML文書の作成・編集環境と機能拡張の必要性

XMLを使用すると、作成する文書の用途や目的に合わせて、自由に要素や属性を定義したXML文書を作成できます。また、名前空間の概念が導入されてからは、複数のXMLボキャブラリを1つのXML文書内で使用した、複合XML文書を作成できるようになりました。こうしたさまざまなXML文書は、次のどちらかの方法でしか作成・編集できませんでした。

  • タグを直接入力できるエディタを使用する
    テキストエディタや、タグ入力を支援する機能を備えたXMLエディタを使用し、XML文書を作成・編集します。編集する文書はタグ混じりで表示されます。文書に要素を追加・削除するときは、直接タグを操作します。そのため、XML文書を編集するには、対象のXMLボキャブラリに含まれる要素や属性の定義に関する詳しい知識が必要です。 一方、1つのエディタで複数種類のXML文書や、複合XML文書を編集できます。また、XML文書の構成を容易に変更できます。
  • それぞれのXML文書に特化した編集ツールを使用する
    用意された入力欄に適切な内容を入力・編集し、すべての編集を終えて確定すると、XML文書が出力されます。XML文書を編集するときには、XML文書の要素や属性に関する知識は必要ありません。ただし、編集対象のXML文書で使用されるXMLボキャブラリごとに編集ツールを用意する必要があります。複合XML文書を対象とする場合、編集ツールは文書で使用されているすべてのXMLボキャブラリに対応する必要があります。XML文書の構成を変更するときには、編集ツール自体も変更する必要があります。

しかし、理想的なXML文書の作成・編集環境を考えると、次のすべての条件を備えていることが求められます。

  • あらゆるXML文書を編集できる
  • XML文書で使用されている要素や属性を意識しなくてよい
  • 編集時の操作が自然で、違和感がない

また、作成したXML文書の保存先は、ファイルシステムだけではなく、ネットワークストレージやサーバープログラムの管理下など、目的に応じて選択できることも求められます。これらの要求すべてを1つのアプリケーションで実現しようとすると、膨大な機能で肥大化して、使いにくくなることは、想像に難くありません。

1.2. xfy technologyのコンポーネントによる柔軟な機能拡張

xfy technologyは、このような問題を解消して複合XML文書を含むあらゆるXML文書に適した編集環境を提供する技術です。xfy technologyでは、XML文書の表示や編集、XML部分木に対する加工や計算、ファイルの読み込みと保存といったさまざまな機能を、それぞれ個別のxfyコンポーネントとして実装します。それらのxfyコンポーネントを状況に応じて適切に組み合わせて機能拡張することで、対象のXML文書に最適な編集環境を実現することができます。

xfy technologyのプラットフォーム(xfyプラットフォーム)には、あらかじめ、いくつかの基本的な機能を担うxfyコンポーネントが用意されています。これらのxfyコンポーネントは特定の用途に特化されていないため、XML文書を編集するあらゆる場面で利用できます。また、必要であれば、特定の用途に特化したxfyコンポーネントを作成し、他のxfyコンポーネントと組み合わせて使用することもできます。

2. 機能拡張の例

xfy technologyで実現できる機能拡張の例を示します。

2.1. 新しいXMLボキャブラリに対する表示・編集機能を追加する

新しいXMLボキャブラリをxfyプラットフォーム上で扱うには、そのXMLボキャブラリの表示・編集に対応したコンポーネントを作成します。XMLボキャブラリの表示・編集に対応するコンポーネントは、ボキャブラリコンポーネントと呼ばれます。代表的なボキャブラリコンポーネントの例としては、次のものがあります。

  • XHTMLコンポーネント
  • SVGコンポーネント

ボキャブラリコンポーネントは、xfy technologyでもっとも特徴的な機能拡張コンポーネントです。このコンポーネントは、ほかのコンポーネントのようにJava言語で作成するだけではなく、後述するXVCDというスクリプト言語を使用して作成することもできます。

2.2. XPath関数などの機能ライブラリを拡張する

xfyプラットフォーム上で利用する機能ライブラリは、コンポーネントを作成すると拡張できます。機能ライブラリを拡張するためには、次のコンポーネントを作成します。

これらのコンポーネントを作成すると、複雑な数値演算や文字列操作を行う関数やインストラクションを追加できます。

2.3. 新たなプロトコルやサーバーに対応した入出力機能を追加する

xfyプラットフォームであらかじめ提供されているプロトコル以外の新たなプロトコルやサーバーへのアクセス方法の追加など、xfyプラットフォームのファイル入出力機能を拡張するコンポーネントを作成することができます。このようなコンポーネントは、I/Oコンポーネントと呼ばれます。I/Oコンポーネントが提供する機能には、次のようなものが考えられます。

  • サーバーからネットワーク経由でファイルを取得する
  • XML形式でないファイルをXMLに変換して読み込む
  • XMLファイルの保存方法をカスタマイズする

2.4. アプリケーションウインドウ自体への機能追加・改造

xfy technologyによるXML文書の編集の仕組みを利用したアプリケーションは、xfyプラットフォーム上でxfyコンポーネントを組み合わせることで実現できます。このときに、アプリケーションウインドウ自体を改造したり、機能を追加したりするようなコンポーネントを作成できます。このようなコンポーネントは、アプリケーションコンポーネントと呼ばれます。xfy Clientは、xfy technology を使用したアプリケーションの一例です。

2.5. その他の機能拡張

上記のほかにも、目的に応じてコンポーネントの種類を増やすことができます。また、コンポーネントが利用するxfyプラットフォーム上のインターフェース定義を拡張することもできます。

3. 機能拡張の実装

xfyプラットフォーム上で機能拡張を実装する方法の概要を説明します。

3.1. xfyコンポーネントとxfyプラグインJARファイル

xfyプラットフォーム上で動作する機能の最小単位がxfyコンポーネントです。通常、xfyコンポーネントはJava言語で作成されます。XMLボキャブラリを表示・編集したり、保存時の書式を指定するコンポーネントを作成するときは、後述するXVCDやXFRなどのXMLスクリプト言語を利用することもできます。

XMLスクリプト言語やJavaで作成したxfyコンポーネントは、所定の手順でアーカイブしてxfyプラグインJARファイルを作成します。作成したxfyプラグインJARファイルは、xfyプラットフォームの実行環境に配置すると使用できるようになります。

xfyプラグインJARファイルとxfyコンポーネントとの関係が1対1になるとは限りません。1つのxfyプラグインJARファイルに複数のxfyコンポーネントが含まれることも、1つのxfyコンポーネントが複数のxfyプラグインJARファイルによって構成されることもあります。

3.2. XVCDによるボキャブラリコンポーネントの開発

xfyプラットフォームではボキャブラリコネクション(Vocabulary Connection)という機構が提供されています。ボキャブラリコネクションは、新しいXMLボキャブラリを既存のXMLボキャブラリに結びつけて、既存のボキャブラリコンポーネントで提供される表示・編集機能を利用できるようにします。このボキャブラリコネクションを利用するためのXMLスクリプト言語がXVCDです。XVCDを使用すると、新しいXMLボキャブラリに対応したボキャブラリコンポーネントを簡単に作成できます。

ボキャブラリコネクションの技術的概要については、「Vocabulary Connection技術概要」をご覧ください。また、XVCDによるボキャブラリコンポーネント開発の概要は「XVCDによるボキャブラリコンポーネントの開発手順」を、サンプルを元にした開発チュートリアルは「XVCDによるボキャブラリコンポーネントの作成」を、それぞれご覧ください。開発のためのリファレンスの読み方は、「リファレンスの読み方」をご覧ください。

3.3. XFRによるXML文書保存時書式整形コンポーネントの開発

xfyプラットフォームでは、XML文書で使用する要素ごとに保存するときの規則を設定することで、保存するXML文書の体裁を整える、XML文書保存時書式整形コンポーネントを作成できます。このときに使用するXMLスクリプト言語がXFR(XML Formatting Rule)です。書式整形規則を記述したXFRをコンポーネントとして動作させると、XML文書をソース表示したときに見やすい形式で保存できるようになります。

3.4. XMLスクリプト言語によるコンポーネントの簡易的な使用法

XVCDやXFRなどのXMLスクリプト言語で作成したコンポーネントは、xfyプラグインJARファイル形式にアーカイブして使用する方法のほかに、以下の簡易的な方法で使用できます。

3.4.1. scriptsフォルダへの配置

XMLスクリプト言語によるコンポーネントを簡易的に使用するために、XMLスクリプト言語によるコンポーネントが記述されたファイルをscriptsフォルダに配置する方法が用意されています。

scriptsフォルダは、xfyプラットフォームをインストールしたフォルダ内にあります。このscriptsフォルダに、作成したXVCDファイルやXFRファイルを配置します。XMLスクリプト言語によるコンポーネントのインストールはこれで終了です。

xfyプラットフォームは、起動時にscriptsフォルダにあるXVCDファイルやXFRファイルを参照し、その中に記述されている xvcd:vocabulary要素 xfr:xfr要素の設定に基づいて、各コンポーネントを登録します。この処理はxfyプラットフォームの起動時に行われるので、xfyプラットフォームが起動している状態で次の操作をしたときは、xfyプラットフォームを再起動する必要があります。

  • XVCDファイルやXFRファイルをscriptsフォルダに配置したとき
  • すでにscriptsフォルダに配置されているXVCDファイルやXFRファイルの内容を変更したとき

scriptsフォルダに配置するファイルの拡張子には、以下の制約が適用されます。

  • XVCDファイルの拡張子は、「.xvcd」としなければならない。
  • XFRファイルの拡張子は、「.xfr」としなければならない。
  • XVCDやXFR以外のファイルの拡張子に、「.xvcd」や「.xfr」を使用してはならない。

xfyプラグインJARファイル形式にアーカイブして使用する方法や、処理命令で関連付けして使用する方法には、この制約は適用されません。

3.4.2. 処理命令(processing instruction)による関連付け

XMLスクリプト言語によるコンポーネント開発作業を効率的に進めることができるように、処理命令によって対象XML文書と各ファイルに記述されているコンポーネントを一時的に関連付ける方法が用意されています。この方法は、xfyプラットフォームにxfy Developer's Toolkitがインストールされているときだけ利用できます。

XML文書のプロローグ部にxml-stylesheet処理命令を記述してXSLTスタイルシートを関連付けるのと同様に、XVCDファイルやXFRファイルへの関連付けを行う処理命令を記述して、対象のXML文書とコンポーネントを一時的に関連付けることができます。XML文書に特定のXVCDファイルを関連付けるときは、com.xfy処理命令にvocabulary-connectionパラメータを指定して、次のようにXMLファイルに記述します。

<?com.xfy vocabulary-connection href="XVCDファイルのURL" ?>

com.xfy vocabulary-connection処理命令で関連付けられたXVCDファイル内のボキャブラリコンポーネントは、インストール済みのボキャブラリコンポーネントよりも優先されます。また、com.xfy vocabulary-connection処理命令で複数のXVCDが関連付けられた場合は、先に記述されたXVCDファイル内のボキャブラリコンポーネントが優先されます。

XVCDと同様に、XFRファイルについても処理命令によって関連付けを行うことができます。記述する処理命令は以下の通りです。

<?com.xfy xml-formatting-rule href="XFRファイルのURL" ?>

com.xfy xml-formatting-rule処理命令で複数のXFRを割り当てた場合は、先に記述されたXFRが優先されます。

xfyプラットフォームは、上記の処理命令が記述されたXML文書を読み込むと、処理命令中のURLを元にXVCDファイルやXFRファイルを参照します。そして、その中に記述されている xvcd:vocabulary要素 xfr:xfr要素の設定に基づいて、各コンポーネントを一時的に登録します。この処理はXML文書を読み込むたびに行われます。そのため、処理命令中のURLを変更したときや、参照先のXVCDファイルやXFRファイルの内容を変更したときは、XML文書を再読込すると変更内容の反映が行われます。このときにxfyプラットフォームを再起動するは必要ありません。

この方法では、コンポーネントの処理対象となるXML文書すべてに処理命令を記述する必要があります。そのかわり、XML文書を再読込するだけでXVCDファイルやXFRファイルの変更内容が反映されます。そのため、XVCDによるコンポーネントの開発作業中などで内容が頻繁に変更される場合や、処理対象となるXML文書のファイル数が少ない場合に効果的です。

3.5. Javaによるxfyコンポーネントの開発

Java言語を用いると、ボキャブラリコンポーネントをはじめとするさまざまなxfyコンポーネントを作成できます。

Javaによるxfyコンポーネント開発の概要については、「Java言語によるxfyコンポーネントの開発の概要」をご覧ください。xfyデベロッパーズガイドでは、xfyコンポーネント開発についてのチュートリアルやサンプルも提供しています。

3.6. xfyプラグインJARファイルの作成

XMLスクリプト言語やJavaで作成したxfyコンポーネントは、所定の手順に従ってxfyプラグインJARファイル形式にアーカイブし、xfyプラットフォームの実行環境に配置することで使用できるようになります。

xfyプラグインJARファイルを作成するためには、以下の方法があります。

XVCDプラグイン化ツールを利用して作成
XVCDプラグイン化ツールを利用すると、XVCDやXFRなどのXMLスクリプト言語で作成したコンポーネントをxfyプラグインJARファイル形式にアーカイブすることができます。
XVCDプラグイン化ツールの使用方法は、「XVCDプラグイン化ツール操作マニュアル」をご覧ください。
所定のファイルを持つJARファイルとして作成
Java言語で開発されたxfyコンポーネントの場合、クラスファイルをアーカイブしたJAR(Java ARchive)ファイル内に、xfyプラットフォームが必要とする所定のファイルを配置することで、xfyプラグインJARファイルとして取り扱うことができるようになります。

3.7. xfyプラグインJARファイルの配置

xfyプラグインJARファイルを配置するxfyプラットフォームの実行環境の主なフォルダ構成は、次のとおりです。なお、以下のフォルダ構成の基点は、インストーラーでのインストール先またはzipファイルの展開先のフォルダとなります。

[-] bin                      … xfyプラットフォームの実行ファイル群が配置されるフォルダ
    [+] common               … 複数のxfyコンポーネントから共通で利用されるxfyプラグインJARファイルを配置するフォルダ
    [+] plugins              … 通常のxfyプラグインJARファイルを配置するフォルダ
    [+] temporaryPlugins     … クライアント環境からインポートされたプラグインを配置するフォルダ
        xfyCore.jar          … xfyプラットフォームのコアプラグイン
        xfyClient.jar        … xfyユーザーエージェントの起動や、
                                各xfyプラグインJARファイルの初期化処理を行うJARファイル

xfyプラグインJARファイルの配置先は、配置を行うツールによって決定されます。

commonフォルダおよびpluginsフォルダは、xfyプラットフォームのパッケージ管理機能で管理されるxfyプラグインJARファイルを配置するためのフォルダです。パッケージ管理機能以外がこれらのフォルダ以下にxfyプラグインJARファイルを配置してはいけません。commonフォルダ以下には、複数のxfyコンポーネントから利用される共通のxfyコンポーネントを含むxfyプラグインJARファイルが配置されます。必要なときに利用される通常のxfyコンポーネントのみが含まれるxfyプラグインJARファイルは、pluginsフォルダ以下に配置されます。

commonフォルダに配置されたxfyプラグインJARファイルは、xfyプラットフォームの起動時にロードされます。それに対してpluginsフォルダに配置されたxfyプラグインJARファイルは、xfyプラットフォームの起動時には、JARファイル内に含まれるコンポーネントによる機能拡張の情報だけが読み込まれます。プログラム自体は、コンポーネントが提供する機能が必要とされたときにロードされます。

temporaryPluginsフォルダは、クライアント環境からインポートされたxfyプラグインを配置するためのフォルダです。このフォルダ以下にはxfyユーザーエージェントのプラグインインポート機能などがxfyプラグインJARファイルを配置します。

上記の各フォルダとも、配置先のフォルダ内にはベンダーごとにディレクトリを作成し、その中にxfyプラグインJARファイルを配置します。