Home of: [工房 "藤車"] > [SourceForge.net における PageMixer]

Token の刈り込み

本節では、 PageMixer フレームワークにおける HTML タグ要素の HTML ページからの取り除き方に関して説明します。 説明には、 HTML ページから "<br>" を取り除くフィルタを使用します。


改行前。<br>
改行後。

処理前

改行前。
改行後。

処理後

言い換えるなら、 このフィルタは、 シーケンスから "br" と名付けられた Token を取り除きます。

概要

クラス図

本節におけるクラス図を以下に示します。

クラス図
クラス図 (クリックで拡大表示)

色づけされているのが本節で定義するクラスで、 それ以外は PageMixer において定義済みです。

オブジェクト図

本節におけるオブジェクト図を以下に示します。

オブジェクト図
オブジェクト図 (クリックで拡大表示)

シーケンス図

本節におけるシーケンス図を以下に示します。

シーケンス図
シーケンス図 (クリックで拡大表示)

クラス名

本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。

PageMixer フレームワークのクラス

表記完全名
Consumer jp.ne.dti.lares.foozy.pagemixer.mixer.Consumer
ConsumerContext jp.ne.dti.lares.foozy.pagemixer.mixer.ConsumerContext
HTMLSymbolSet jp.ne.dti.lares.foozy.pagemixer.HTMLSymbolSet
Symbol jp.ne.dti.lares.foozy.pagemixer.Symbol
TokenEditFilter jp.ne.dti.lares.foozy.pagemixer.mixer.TokenEditFilter
TokenWatcher jp.ne.dti.lares.foozy.pagemixer.mixer.TokenWatcher

チュートリアルの固有クラス

表記完全名
Bootstrap.Default pagemixer.filter.Bootstrap.Default
BrTrimFilter pagemixer.filter.BrTrimFilter

TokenWatcher の生成

PageMixer フレームワークにおいては、 「フィルタリング機能」と「フィルタリング対象を見つけ出す機能」 はそれぞれ別々の機能として扱われ、 単独の Token に関するそれらは、 "TokenEditFilter" および "TokenWatcher" がそれぞれの機能実現の基底クラスになります。

そのためまず始めに、 シーケンス中のどの Token を刈り込むべきか (=「フィルタリング対象を見つけ出す機能」)を TokenEditFilter に伝える TokenWatcher オブジェクトを生成します。

本節のような、 "br" の名前をもつ全ての Token を刈り込む場合、 "TokenWatcher.Name" が利用されます。 これは、"名前で監視する Token 監視クラス" のことです。


new TokenWatcher.Name(HTMLSymbolSet.SET.BR)

"br" の名前をもつ Token を刈り込むための TokenWatcher

TokenWatcher.Name クラスのインスタンスの生成には、 コンストラクタに "Symbol" を指定する必要があり、 上記の例では、 Symbol の取得に "HTMLSymbolSet" を利用しています。

Symbol がどのようなものか、 なぜ String ではなく Symbol が利用されているのか、 その他のこれらに関する詳細の説明は、 本チュートリアルの目的ではありません。

本チュートリアルにおいては、 よく知られた HTML タグや属性名に対応する Symbol オブジェクトを取得するために、 HTMLSymbolSet をどのように使用すればよいのかを理解すれば十分です。 詳細は、"シンボルの比較" を参照してください。

TokenEditFilter の具象化

次に、 先に定義された TokenWatcher が見つけ出した Token を刈り込むために、 "TokenEditFilter" の派生クラスを定義します。

"シーケンスからの Token の刈り込み" は、 接続された Consumer に渡すこと無しに、 刈り込まれる Token を捨てることですので、 派生クラスは以下のように定義されます。

public class BrTrimFilter
    extends TokenEditFilter
{
    final static
    private HTMLSymbolSet SET = HTMLSymbolSet.SET;

    ///////////////////////////////////////////

    public BrTrimFilter(){
        super(new TokenWatcher.Name(SET.BR));
    }

    ///////////////////////////////////////////
    // class TokenEditFilter の具象化

    protected void edit(ConsumerContext context,
                        Token token)
    {
        // 何もしない = "BR" Token の破棄
    }
}
TokenEditFilter 派生クラス

繋いで混ぜる

以上で必要なものが全て揃いました。 実行コードは以下のようになります (詳細は pagemixer.filter.BrTrimFilter を参照してください)。

try{
    Bootstrap bootstrap =
    new Bootstrap.Default(filename);

    // フィルタの適用
    bootstrap.execute(new BrTrimFilter());
}
catch(Exception e){
    e.printStackTrace(System.err);
}
繋いで混ぜる

入力用のサンプル HTML ファイルは、 配布物中の "src/demo/servlet/war/WEB-INF/page/demosite" 配下にある "index.ja.html" です。


次節「Token へのデータはめ込み」へ