-ナナシナー(1)-プリプロセッサ構造

ナナシナーのプリプロセッサは、複数のブロック化された構造をとってます。既存技術のAPIインターフェイスで各ブロック間は疎結合します。登場するAPIは、Servlet、JAXP、XNIです。Antタスクに積む際は、JAXPをインターフェイスとしてブラックボックス化したプリプロセッサにアクセスすることになるでしょう。つまりプリプロセッサはSAXパーサーもしくはDOMビルダーのように見えます。内部でNekoHTMLとの連携はXNIです。JSFStrutsなどとの連携はServletを通しますが、このServletは薄いラッパー実装となります。
実行時とデザイン時の二面性を実現するためのドライバー化された出力モジュールとのインターフェイスはJAXPです。もっというと、SAXのContentHandlerで実装します。構造は以下のとおりです。

  • ソース
    • [新規] HTMLテンプレート
    • [新規] XHTMLテンプレート
    • [新規] ナナシナーXML
  • ラッパー
    • [新規] ナナシナーServlet
    • [新規] ナナシナーJSF ViewHandler
    • [新規] Antタスク?
  • プリプロセッサベース
    • [既存] JAXP
    • [既存] Xerces
    • [既存] Kariyushi PipelineConfiguration
  • XNIスキャナ
    • [既存] NekoHTMLスキャナ(ソースがHTMLの時)
    • [既存] Xerces標準スキャナ(ソースがXHTMLおよびXMLの時)
  • XNIフィルター
  • ドライバー
    • [既存] Xerces SAXドライバ
    • [既存] Xerces DOMジェネレータ
  • SAX ContentHandler
    • [新規] Javaソースコードジェネレーター(実行時)
    • [既存] Kijimunaモデルジェネレータ(デザイン時)

XNIフィルターはほとんどSAXプログラミングと一緒なので、ナナシナープリプロセッサコアはとても重要な機能ですが、技術的には簡単です。新規開発モノの中でいくらか知識がいるのは、ナナシナーJSF ViewHandlerとJavaソースコードジェネレーターの二つ。それぞれ、JSFおよびJSPタグクライアントの知識がいりますが、前者はすでにS2JSF-EA1で参考にできるものが提示されています。後者はJasperのロジックそのものです。
というか、一番重要なのはナナシナーXMLの定義ですね。このXMLは直接プリプロセッサに入力されてもいいですし、入力HTMLを変換して作ってもよいものです。そして、デザイン時のEclipseプラグインが必要とするモデルそのものです。ですから定義はデザイン時の都合、特にエディタの補完機能やコンポーネントツリー表示ビューの都合にドライブされます。まずはたたき台を作っておいて、周辺のアーキテクチャと併せて磨いていきます。
ちなみに、プリプロセッサの成果物は以下のとおりです。