福嶋です。
Content-Type: Multipart/Mixed;
	boundary="--Next_Part(Wed_Oct_28_18:58:33_1998_542)--"
Content-Transfer-Encoding: 7bit

----Next_Part(Wed_Oct_28_18:58:33_1998_542)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit


Motoyuki Kasahara <m-kasahr / sra.co.jp> wrote:
> どうしたものかと思っていたら、ちょうど福島さんが XML によるアプローチ
> を示して下さっています。既に String クラスのマニュアルを XML で書いた
> ものと、それを HTML に変換したものがあるようです。
> 
> # rubyapi.dtd も公開して頂きたいです。(^_^)

現在使っているものを載せました。(このメールにも添付します)

  http://www.goto.info.waseda.ac.jp/~fukusima/ruby/xml/rubyapi.dtd

XMLParser モジュール (とその下にある expat ライブラリ) は現状では XML 文章が
DTD に従っているか検証する機能は無いので、私は IBM XML for Java を使って検証
しています。

いろいろな XML パーサについては吉田さんのページが詳しいです。

  http://www.bekkoame.ne.jp/~yoshidam/XML_ja.html

> マニュアルをまず XML で書いておいて、そこから
> 
> 	1. HTML への変換
> 	  (「前 - 次 - 目次」のようなリンクを作成する。
> 	2. TeX, LaTeX のような紙面印刷向けの形式への変換
> 
> という処理をそれぞれ行えば、本質的な解決になるような気がするんですが、
> どうでしょう。XML は詳しくないのですが、技術的に 2. は可能でしょうか。

手間がどれくらいになるかどうかは分かりませんが、可能だと思います。
あるいは SGML => LaTeX とかなら既にありそうですね。

> もちろん技術面以外にも、本当に導入するとなったら、ツールの整備や記述ルー
> ルの明確化、書き方を覚えるなど、導入前後は負担になる、というのはもちろ
> んありますが。

そうですね。「記述ルールの明確化」は XML を使うメリットが大きいところだと思
います。「ツールの整備」も XMLParser モジュールを使えばほぼ DOM に近い APIが
既に ruby 上に用意されているので、それほど大変な作業にはならないでしょう。

---
福嶋

----Next_Part(Wed_Oct_28_18:58:33_1998_542)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename=rubyapi.dtd

<!-- <!DOCTYPE rubyapi [ -->

<!ENTITY % text_elm "#PCDATA|r|a|ul|dl|sample|var|code|samp|strong">

<!ELEMENT rubyapi (author*,(class|module)+)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT class (name,super?,include*,desc*,
                 constants?,class_methods?,instance_methods?)>
<!ELEMENT module (name,include*,desc*,
                  constants?,module_functons?,instance_methods?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT super (#PCDATA)>
<!ELEMENT include (#PCDATA)>
<!ELEMENT constants (consts|const)*>
<!ELEMENT consts (const+,desc*)>
<!ELEMENT const (name,desc*)>
<!ELEMENT class_methods (methods|method|alias)*>
<!ELEMENT instance_methods (methods|method|alias)*>
<!ELEMENT module_functions (methods|method|alias)*>
<!ELEMENT methods ((method|alias)+,desc*)>
<!ELEMENT method (usage*,alias*,desc*)>
<!ELEMENT usage (#PCDATA)>
<!ELEMENT alias (#PCDATA)>

<!ELEMENT desc (%text_elm;|p)*>
<!ELEMENT p (%text_elm;)*>
<!ELEMENT r (#PCDATA)>
<!ELEMENT a (#PCDATA)>
<!ELEMENT ul (li)*>
<!ELEMENT li (%text_elm;)*>
<!ELEMENT dl (dt,dd)*>
<!ELEMENT dt (%text_elm;)*>
<!ELEMENT dd (%text_elm;)*>
<!ELEMENT sample (#PCDATA)>
<!ELEMENT var (#PCDATA)>
<!ELEMENT code (#PCDATA)>
<!ELEMENT samp (#PCDATA)>
<!ELEMENT strong (#PCDATA)>

<!ATTLIST rubyapi xml:lang NMTOKEN #IMPLIED>
<!ATTLIST author href     CDATA #IMPLIED
                 xml:lang NMTOKEN #IMPLIED>
<!ATTLIST alias real CDATA #IMPLIED>
<!ATTLIST desc xml:lang NMTOKEN #IMPLIED>
<!ATTLIST r href     CDATA #IMPLIED>
<!ATTLIST a xml:link CDATA #FIXED "simple"
            href     CDATA #REQUIRED>
<!ATTLIST sample xml:space  (default|preserve) #FIXED "preserve"
                 skipindent (no|first)         "no">

<!-- ]> -->

----Next_Part(Wed_Oct_28_18:58:33_1998_542)----