relaxNG就像是yacc中的文法(grammar),我應該寫個小程式,將讀入的relaxNG產生一個.c檔,這個.c檔將像是一個state-machine,順著relaxNG所定義的文法來parse新讀入的檔案,確定該檔案有無follow relaxNG所定義的文法。至於若符合時應該做什麼動作,屬於meta層級的事,再透過在relaxNG文法中的特別格式,可能可以參考relaxNGCC的作法,用
希望這種模式會成功。
有趣的是,將文法轉成.c檔,及.c檔中處理讀入的xml檔,都將使用libxml,meta-language及language層次都預設了libxml,寫來應該會好玩。
這個讀relaxNG產生.c檔的程式,寫完應該可以opensource出去,讓更多對xml grammar(如relaxNG)的無力可以被改變。否則每次都是先對讀入的XML檔,先走過一次tree後check整株tree是否合於文法,再開始重頭走一次tree,在對的地方做一些對的事,這種重覆walk-tree的作法真令人生厭。希望前述的作法可以讓整個xml parsing有效率...