Velocity

Velocityについて

コミュニティ

ドキュメント

比較

ツール

日本語訳について

Anakiaとは?

基本的に Anakia は JDOMVelocity を用いて、XML 文書をあなたの選択したフォーマットに変換する XML 変換ツールです。 Anakia は、XML ファイルを処理する Ant の <style> タスクと XSL に替わる機能を提供します。

AnakiaTask が使う基本モデルは、かなり簡単です。

  1. JDOM ドキュメント内で XML を解析:
    SAXBuilder builder;
    Document root = null;
    
    try 
    {
        builder = new SAXBuilder( 
            "org.apache.xerces.parsers.SAXParser" );
        root = builder.build( file );
    }
    catch( Exception )
    {
        System.out.println( ...  );
    }
  2. ドキュメント (または root 要素) に内容を入れ:
    context.put("root", root );
  3. Velocity を使ってテンプレートをレンダリングします。 テンプレート内部で、XML 文書に含まれるデータにアクセスすために JDOM のメソッドを利用できます。

Anakia は、XSL よりも簡単に使い方を覚えられるかもしれませんが、 XSL と同等の機能を提供します。 暗号のような <xsl:> タグを学ぶ必要はもうありません; 提供されたコンテキスト・オブジェクト、JDOM と Velocity の単純な指令を使う方法を知る必要があるだけです。 Anakia は、Xalan の XSL プロセッサと比べ、非常に高速にページを生成します。 (23 ページを生成するのに、JDK1.3 とクライアント Hotspot で Pentium III の 500MHz の Win98 上で 7 〜 8 秒で生成します。Ant の <style> タスクを使った同じようなシステムでは 14 〜 15 秒かかり−約 2 倍の速度差があります。)

Anakia は、Stylebook の置き換えを目的としています。 Stylebook は、元々全てのページが同じ見た目を持つような単純で静的な Web サイトを生成するために使われました。Anakia は、ドキュメンテーション/プロジェクトの Web サイト(例えば www.apache.org サイト と jakarta.apache.org サイト )に最適です。 Anakia は、使用目的を絞り込むことで、XSL の「余分な」機能の一部は提供しません。

jakarta-velocity/examples/anakia ディレクトリにあるサンプルは Anakia の良い使い方を示しています。 あなたは、Anakia が非常に使いやすことが分かるはずです。

Anakia は、あなたの project.xml ページの(オプションの)JDOM 文書オブジェクトと同様にコンテキスト(それは .xml ページの JDOM 文書オブジェクトを含みます)を生成します。 .vsl ページは、(Velocity を使って) コンテキストで実行されます。 あなたは、それからあなたの .xml ファイル処理し、 単に JDOM 文書オブジェクトのメソッドを実行して情報を引き出すことができます。

Anakia は、この Web サイトのドキュメントを作成するためだけでなく 、Jakarta プロジェクトで活動している多くのプロジェクトの Web サイトや、 ドキュメント生成に利用されています。 この過程は、サイト上のdocumentedにあります。 あなたは、Velocity のあなた自身のニーズのためにを使うことを歓迎します。


インストール/サンプル

jakarta-velocity/examples/anakia を評価する前に、 Velocity をビルドする必要があります。

Velocity ビルド後、 cd コマンドで、 jakarta-velocity/examples/anakia/build ディレクトリに移動して、 「ant」を実行します。

ant を実行した出力(この場合には HTML ファイル)が、 jakarta-velocity/examples/anakia/docs/ ディレクトリにあります。

jakarta-velocity/examples/anakia/xdocs/ ディレクトリに、全ての .xml ソース・コードがあります。 xdocs/stylesheets ディレクトリには、魔法の大部分である .vsl ファイルがあります。 Velocity テンプレート言語JDOM を理解するには、 .vsl ファイルの動作を理解する必要があります。


どうやって動くの?

Anakia は、Ant ビルドファイルから起動される Ant タスクです。ビルドファイルは 以下のようになります。

<project name="build-site" default="docs" basedir=".">
    <property name="docs.src" value="../xdocs"/>
    <property name="docs.dest" value="../docs"/>

    <target name="prepare">
        <available classname="org.apache.velocity.anakia.AnakiaTask"
        property="AnakiaTask.present"/>
    </target>

    <target depends="prepare" name="prepare-error" unless="AnakiaTask.present">
        <echo>
            AnakiaTask is not present! Please check to make sure that
            velocity.jar is in your classpath.
        </echo>
    </target>

    <target name="docs" depends="prepare-error" if="AnakiaTask.present">
        <taskdef name="anakia" classname="org.apache.velocity.anakia.AnakiaTask"/>
        <anakia basedir="${docs.src}" destdir="${docs.dest}/"
             extension=".html" style="./site.vsl"
             projectFile="./stylesheets/project.xml"
             excludes="**/stylesheets/**"
             includes="**/*.xml"
             lastModifiedCheck="false"
             velocityPropertiesFile="velocity.properties">
        </anakia>

        <copy todir="${docs.dest}/images" filtering="no">
            <fileset dir="${docs.src}/images">
                <include name="**/*.gif"/>
                <include name="**/*.jpeg"/>
                <include name="**/*.jpg"/>
            </fileset>
        </copy>
    </target>
</project>
名前 説明
basedir あなたの .xml ファイルのディレクトリ位置のパスを指定
destdir 出力ファイルの宛先ディレトクリパスを指定
extension .xml ファイルの後ろに追加する拡張子です。例えば、拡張子が ".html" であれば、 index.xml は、index.html に変換されます。デフォルトの拡張子は .html です。
style VelocityStyleTemplete の (Velocityの template.loader.1.tempalte.path の相対)パスです。 このファイルは、Ant の style タスク内で .xsl ファイルと同等です。
projectFile 「project」ファイルへのパスです。 このファイルは、「navigation」ファイルとして使うことができる XML ファイルです。 もしあなたが Web サイトのドキュメントの生成のために StyleBook や Struts システムを使用したことがあれば、このファイルの目的が分かるでしょう。 それは省略可能なタスク引数です。 あなたが jakarta-velocity/examples/anakia ディレクトリにある Anakia のサンプルで、 .vsl ファイルで使用されている project.xml ファイルを見ることができます
excludes これは、Ant 標準の実行属性です。Anakia に処理させたくない、 ファイルやディレクトリを指定します
includes これは、Ant 標準の include 属性です。 Anakia に処理させたいファイルやディレクトリを指定します。
lastModifiedCheck これは、再レンダリングするかしないかを判断するためにファイルの最終更新日 をチェックするかどうかを on/off するものです。 この属性の値は、「true, false, yes, no」です。 デフォルトは、true で、最終修正日付がチェックされます。 そして、オリジナルの .xml ファイル、プロジェクト・ファイルまたは .vsl ファイルに変更が無い場合には、そのページは処理されません。 変更が無いページは再処理されないので、これは処理が早くなります。
templatePath あなたの site.vsl ファイルの場所を指定する templateRoot へのパスです。 これは Velocity.properties または この templatePath 属性で定義することができます。 Velocity.properties ファイルですでに定義されていれば、省略可能です。 templateRoot パスで定義された場合、この値は Velocity.properties ファイルで定義した値を上書きします。
velocityPropertiesFile これは velocity.propertiesファイルへのパスです。 省略可能で、デフォルトでは、JVM を起動したのと同じディレクトリにある プロパティファイルです。


Contextオブジェクト

Anakia Ant タスクは、コンテキストにいくつかのオブジェクトを置きます。 現在、あなたはコンテキスト内に置かれるそのオブジェクトを制御することはありません。 いつかは、我々はあなたにこれらに対する制御する方法が提供したいと思います。 しかし、いまのところ、それは Anakia であなたが使うのは自由です。:-) あなたの .vsl テンプレートで利用できるオブジェクトは以下のとおりです。

Name Value
$root あなたの .xmlドキュメントへの JDOM root 要素を含みます。 これ(または、要素に含まれる他のどんな変数も)単にテンプレート 出力で置換され、それらの XML 形式がレンダリングされます。
$project これは、あなたの project.xml ドキュメントへの JDOM root 要素を含みます。 もし project.xml ドキュメントが指定されていない場合には、 この変数は context になりません。
$escape.getText($string) このコンテキストオブジェクトは、渡された $string を HTML エンティティに 変換して、変換した String を戻します。 これは、CDATA を扱うのに都合がよいです。 変換されるエンティティは、以下の通りです " -> &quot; | < -> &lt; | > -> &gt; | & -> &amp;
$relativePath これは、あなたの Ant タスク属性において指定された baseDir からのあなたの .xml 文書への 相対パスの String を含みます。 この String の使い方については、examples/anakia の .vsl 文書を参照してください。
$xmlout これは、JDOM XMLOutputter() オブジェクトのインスタンスを拡張するクラスを含みます。 これは、あなたの JDOM 要素オブジェクトから簡単に String 出力をつくることが可能です。 $xmlout.outputString(Element). もう一度、このオブジェクトを使用する方法の詳細は例を見てください。 注意: このオブジェクトは、単に要素の指定としては推奨されず、 要素の XML シリアル化形式の出力となります。
$xmlout.outputString(Element, true) これは、JDOM XMLOutputter() オブジェクトのインスタンスを拡張するクラスを含みます。 XMLOutputter でのこの.outputString() との違いは、それが要素においてパスして 要素内部の全てを出力することになるということです。 つまり、<td> 要素内に渡すとすべて <td> </td>内部を得ることになりますが、 正確には<td> </td>ではありません。 注意: このオブジェクトは、単に $element.content を指定するためには推奨されず、 必要とされる出力を生成します。
$treeWalk.allElements($element) これは、$element から始まる JDOM 要素オブジェクトのツリーを歩くことができます。 このコンテキスト・オブジェクトの要点は、構築するためにあなたを許すことです。 あなたが条件的に各要素ノードを見ることができて、 その内容と属性値をセットすることができる XSLT タイプ・システム。 これは多分 Anakia のより「醜い」面のうちの1つであるでしょう、しかし、それは動作します、そして、改良のための提案は認められます。 このコンテキスト・オブジェクトはさらに開発中です、そして、より多くのドキュメンテーションはすぐに追従することになります。 注意: このオブジェクトは推奨されていませんが、後方互換のためのだけに存在しています。 $element.selectNodes("//*") で同じ効果が得られます。
$xpath.applyTo("document/properties/@title", $root) W3C XPath 仕様 http://www.w3.org/TR/xpath/ 繰り返して NodeSets を呼び出します、 しかし、この実装は、単に全てのノードを保持するために java.util.List を使います。 「ノード」は、JDOM オブジェクト・ツリー(例えばorg.jdom.Element、org.jdom.Document または org.jdom.Attribute)でのどんなオブジェクトでもあります。 詳細は .vsl 例ファイルと org.apache.velocity.anakia.XPathTool javadoc を見てください。 注意: このオブジェクトは、推奨されませが、後方互換のためだけに存在しています。 $element.selectNodes("document/properties/@title") を使用することで、より直感的な文法で、 同じ効果が得られます。
$date これは、新しい java.util.Date オブジェクトです。 現在の日付/時刻をページに入れることに役立ちます。


Credits

Anakia のオリジナルのコンセプト化と実装は、 Jon S. Stevens によって行なわれました。

Anakia という名前は、 私が非常にうまくこのプロジェクトに合うと思ういかした名前です。 「Anakia という名前は、独創的方法で、創造的で、芸術的で、音楽的な表現を 想像させます。 あなたが、障害にもかかわらず、何かをやり抜くために必要な忍耐を持つので、 あなたは異なって、あなたの考えを実装するために自身信頼を持とうと努力します。」

多くの支援や協力は、Jason van Zyl と Geir Magnusson Jr. によって提供されました。 XPath のサポートは Bob McWhirter によって追加されました。 selectNodes() と自己レンダリング要素とノードリストの直感的な文法のほとんどは、 Attilia Szegedi によって追加されました。



このドキュメントは、 熊坂祐二 が訳しました。
コメントがある場合は、 jajakarta-report@jajakarta.good-day.net までお願いします。
オリジナル英文 Copyright © 1999-2001, Apache Software Foundation