概要

XMLパーサとは、XML文書の構造をトレースして読むプログラムである。 一つのXML文書の内容を段落、表、節などの構造を反映した形で読み込む。 文書構造の例(XHTML文書)を以下に示す。



プログラムの説明

全体像としては現在の状態と入力値を元に 状態遷移図に従って状態を遷移させる一個の関数である。
解析すべきXML文書を一文字ずつこの関数に与えると状態が遷移し、 入力が終了するまでの間、n-ary木の形式で保存し続けている。

全ての文字を与えるまでこの関数を呼び出し、一度もエラーが起きなければ完了する。 途中で状態遷移が停止すればエラーとなる。いつエラーが起きたかで文書のどの部分に 誤りがあるかを知ることができる。

完全な構文木は完了後に参照できる。 部分木は解析の途中であっても参照することができ、 これをもとにしてエラー時にも文書構造を見ることができ、 逐次的な修正も可能である。 ただし、構造的に欠落がないタイミングは 状態が状態遷移図中の{S1,S7}の場合である。 そうでない場合には処理中のノードは未完成である。



状態遷移図


状態一覧

  1. 初期状態
    S0→S1(ε)
  2. テキスト
    S1→S1(/[^<]/) S1→S2("<") // 開始タグ|単体タグ
    S1→S3("</") // 終了タグ
    S1→S4("<?") // 処理命令
    S1→S5("<!") // 宣言
    S1→S6("<![CDATA[") // CDATA
    S1→S7("<!--") // コメント
  3. タグ
    S2→S2(...)
    S2→S1(">")
    S2→S1("/>")
  4. 終了タグ
    S3→S3([^>])
    S3→S1(">")
  5. 処理命令
    S4→S4(...)
    S4→S1("?>")
  6. 宣言
    S5→S5([^>])
    S5→S1('>')
  7. CDATA
    S6→S6(...)
    S6→S1("]]>")
  8. コメント
    S7→S7(...)
    S7→S1("-->")

データ構造

ノードの内容 全体構造
タグ名
タグの名前、ルートタグは空文字列
テキスト
終了タグを持つ場合に挟まれるテキスト
属性
タグの属性、属性名と値の対の一覧
オーナー
タグの親への参照
チャイルド
内側に保持しているタグへの参照の一覧
プログラムのダウンロード