@phinlodaの技術ブログ

サイトの再構築中

いろいろあって話はややこしいのだが、昔割と書いていた「裏ページ」というサイトがあって、これが Apache Forrest という終わったプロジェクトを使って構築されていたのである。約10年放置していたので再構築の方法が分からなくなった。いろいろ jar も見当たらない。ということで、何とか forrest を動かすところまで頑張ることにした。最終的には forrest 離れをしないといけないようだか、それはそれで別の話

Apache Forrest って何?

XML でドキュメントをごりごり書いておいて、それを組み合わせてサイトを構築するという代物である。公式サイト自身が Forrest を使って書かれているので、それが参考になる。

https://forrest.apache.org/

見れば分かるように、2011/2/7 の 0.9 リリースで止まっている。今から手を出すような代物ではない。

どうやって使う

今からコレをわざわざ使うという人はいないと思うので細かいことは全部省略する。必要なパスを通して、データを入れたディレクトリの上で、forrest というコマンドを実行するだけだ。Windows の場合、これで forrest をインストールしたところに入っている forrest.bat を実行して、ant が発動してアレコレやってくれるのだ。

しかし早速エラーが出る。

validate-xdocs:  
C:\usr\HP\ura\src\documentation\content\xdocs\books\4022595639.xml:22:314: Element type "iframe" must be declared.  
C:\usr\HP\ura\src\documentation\content\xdocs\books\4022595639.xml:23:5: The content of element type "p" must match "(strong|em|code|sub|sup|br|img|icon|acronym|map|xi:include|a)".  

後の方は、最初のエラーの巻き添えだろう。最初の iframe が宣言されてないぞ的なのがイヤな感じで、ググってもよく分からん。forrest -v で実行してみると SAX のエラーということで、もちろん iframe が宣言されてなければ iframe を使ったドキュメントで parse error になるに決まっている。

結論だけ書くと、forrest をインストールしたディレクトリの、main/webapp/resources/schema/dtd に、いろいろ定義が入っているので、この中の、document-v20.mod というファイルを編集する。この中に、次のような行がある。

<!-- Image Object (typically an inlined image) -->  
<!ELEMENT img EMPTY>  
<!ATTLIST img  
  src CDATA #REQUIRED  
  alt CDATA #REQUIRED  
  title CDATA #IMPLIED  
  height CDATA #IMPLIED  
  width CDATA #IMPLIED  
  usemap CDATA #IMPLIED  
  ismap (ismap) #IMPLIED  
  %common.att;   
>  

これが img の定義。これを真似っ子して、iframe の定義を追加してやる。こんな感じ。

<!-- iframe Object (inline frame) -->  
<!ELEMENT iframe EMPTY>  
<!ATTLIST iframe  
  src CDATA #REQUIRED  
  style CDATA #IMPLIED  
  scrolling CDATA #IMPLIED  
  marginheight CDATA #IMPLIED  
  marginwidth CDATA #IMPLIED  
  frameborder CDATA #IMPLIED  
  %common.att;   
>  

そして、46行目に、img を取り込んでいるこんな行があるので、

<!ENTITY % special-inline "br|img|icon|acronym|map">  

編集して、こうする。

<!ENTITY % special-inline "br|img|iframe|icon|acronym|map">  

これで iframe のエラーは出なくなった。もちろん、XML ドキュメント側で、この定義 (document-v20.dtd) を指定するように、DOCTYPE を修正しておく必要がある。

この記事へのコメント

まだコメントはありません