
xmlscan は XML 関連技術を Ruby で実装したものの寄せ集めです。
Ruby だけで XML アプリケーションを構築できるようにするのが目標です。


色々書きかけでゴチャゴチャしてますが。


xmlscan.rb:

  class XMLScanner

    XML 文書を XML の文法要素 (タグとか) に切り分けるクラス。
    ライブラリに一切頼っていないので Ruby だけあれば動きます。

  module XMLScanner::Loose

    エラーを無視して解析を続行させるようにする Mix in。

  module XMLScanner::Recoverable

    エラー報告 (raise ParseError) 後も解析を続行できるようにする Mix in。

  module XMLScanner::ExternalEntity

    外部解析対象実体を解析するための Mix in。

  class LooseXMLScanner
  class RecoverableXMLScanner

    XMLScanner に {Loose|Recoverable} を include したもの。

  class WellFormedXMLScanner

    XMLScanner にいくつかの整形式制約を加えたクラス。

  class XMLScannerWithNamespace

    XML Namespace に対応した WellFormedXMLScanner。


htmlscan.rb:

  module XMLScanner::HTML

    HTML を解析するための Mix in。

  class HTMLScanner
  class LooseHTMLScanner
  class RecoverableHTMLScanner

    XMLScanner に HTML を include したもの。
    手元の proxy に残っていた HTML 文書を使って解析時間を計ってみると
    html-parser/sgml-parser.rb より少し速いみたいです。

                              total   total   bytes   lines     total   msec
     scanner        files      size   lines     /file   /file  seconds   /file

  at once (read):
   SGMLParser        8631  92260346 1937688   10689.4   224.5  3325.64  385.31
   LooseHTMLScanner  8631  92260346 1937688   10689.4   224.5  2247.90  260.44
   SGMLParser (max)              --      --  453969   15215         -- 54380.00
   LooseHTMLScanner (max)        --      --  453969   15215         -- 11860.00

  by line (gets):
   SGMLParser        8631  92260346 1937688   10689.4   224.5  3595.33  416.56
   LooseHTMLScanner  8631  92260346 1937688   10689.4   224.5  2867.39  332.22
   SGMLParser (max)              --      --  453969   15215         -- 20080.00
   LooseHTMLScanner (max)        --      --  453969   15215         -- 15210.00


xmltoken.rb:

  module XMLScanner::Tokenizer

    pull 型な XMLScanner とでもいうか。多分まだ途中。


xmldtd.ry:

  class XMLDTDScanner

    DTD を解析するためのクラス。要 racc。書きかけ。


xpath.ry:

  module XPath

    Ruby な XPath プロセッサ。

  class XPath::Compiler

    XPath 式を Ruby スクリプトにコンパイルするためのクラス。要 racc。

xpath.rb:

  racc -E -o xpath.rb xpath.ry


xpathtree.rb:

  XPath データモデルの実装。あくまでも例、のつもり。

xpath-dom.rb:

  DOM 対応 XPath。処理部とデータ構造の分離に Adapter パターンを
  使ってみたんですが、実際動かしてみるとかなり遅いです (;_;
  ボツやな、こりゃ。



配布条件は Ruby と同じです。


-=====--===-
   うえの かつひろ @ BLUE-SKYNET    <katsu@blue.sky.or.jp>  -==
---=----===-                    http://www.blue.sky.or.jp/  -==
