[UMS 20060816 版リリース] Mitsuhiro TOYODA
コード生成時に、UMS ファイルのバリデートを行うようにしました。 invalid の時のみエラーメッセージを表示し、valid の場合は何も表示しません。
バリデートには、MSV( http://java.sun.com/xml/ ) と Jing( http://www.thaiopensource.com/relaxng/jing.html ) というフリーのバリデータを使用しています。
(例) <txt:data/> を <txt:dat/> と記述ミスした場合のメッセージ ------------------------------------------------------------- [MSV] # Error - scm_ce.ums line:24 column:32 要素"txt:dat"はここには書けません。書けるのは: <bit>,<byte>,<callFunction>,<choice>,<data>,<empty>,<group>,<interleave>,<list>,<oneOrMore>,<optional>,<ref>,<value-of>,<value>,<zeroOrMore>などです ------------------------------------------------------------- ------------------------------------------------------------- [Jing] # Error - scm_ce.ums line:24 column:32 element "dat" from namespace "http://ums.isas.jaxa.jp/0.4/dat" not allowed in this context -------------------------------------------------------------
define/ref 展開、単純化後の RELAX NG スキーマを用意し、 コード生成時にバリデートするようにしました。 この処理も、MSV と Jing というバリデータを使用しています。
この時出力されるエラーメッセージは、define/ref展開、単純化前の UMS ファイルの行番号、列番号を表示します。
UMS 仕様書 「7.15 start 要素」の制約を満たさない場合に、エラーとする処理を追加しました。
以下の経路はエラーとなります。
start//interleave
しかし以下の経路は、単純化の過程で bit・byte 要素が define 要素の子要素になるため、 許されます。
start//byte//interleave
XSLT 変換処理中にエラーを検出し、処理を中断した際に、標準出力に Java のスタックトレース が出力されていました。 これにより、ログの可読性が落ちていたため、スタックトレースを出力しないようにしました。
(例)encode 属性を親子関係中で2回定義していた場合 file:///foo/bar/build/xslt/m4/common.xsl; 行番号205; 列番号34; # Error - file:///foo/bar/testAll/testcase/0308/test/byte_align/01/clng/scm_ce.ums line:15 column:77 <txt:data> @encode is defined 2 times. XSLT error.
validate 処理を codeGenerator 内に取り込んだため、sample/ 配下の Makefile、 build.xml 中に記述されていた、validate のステップを除去しました。
以上