[UMS 20060728 版リリース] Mitsuhiro TOYODA
UMS 仕様(20060714版)に対応するよう、処理の変更、制約の追加を行いました。
UMS 仕様(20060714版)に基づき、relaxing スキーマを改修しました。 また、Language syntax 用のスキーマを作成しました。
nxml-mode を使用する際には、「schemas.xml」内で、「ant rnc」によって生成した以下の rnc ファイルを参照するようにしてください。
XML syntax
以下のように、package 要素を start 要素と class 要素の間に指定し、 name 属性に package 名を記述してください。 import 文は codeGenerator によって記述されます。
<!-- Mapping Schema --> <grammar xmlns="http://ums.isas.jaxa.jp/0.4"> <start> <java:package name="ums.choice" xmlns:java="http://ums.isas.jaxa.jp/0.4/java"> <java:class name="Sample"> : </java:class> </java:package> </start> </grammar>
/* 生成ソースコード */ package ums.choice; import jp.jaxa.isas.ums.runtime.*; import jp.jaxa.isas.ums.m3.*; class Sample { : }
Language syntax
以下のように、start 要素の下で package の指定を行ってください。 import 文は codeGenerator によって記述されませんので、Mapping Schema 中に記述してください。
<!-- Mapping Schema --> <grammar xmlns="http://ums.isas.jaxa.jp/0.4"> <start> package ums.choice; import jp.jaxa.isas.ums.runtime.*; import jp.jaxa.isas.ums.m3.*; class Sample { : } </start> </grammar>
/* 生成ソースコード */ package ums.choice; import jp.jaxa.isas.ums.runtime.*; import jp.jaxa.isas.ums.m3.*; class Sample { : }
bit、byte 要素において、親子関係の中で encode 属性が複数指定されている場合と、 1度も指定されていない場合に、エラーとする処理を追加しました。
<!-- NG ケース(encode 属性が複数指定) --> <txt:byte encode="txt"> <txt:byte encode="txt"> : </txt:byte> <txt:byte> : </txt:byte> </txt:byte>
<!-- NG ケース(encode 属性が指定されていない) --> <txt:byte> <txt:byte> : </txt:byte> <txt:byte> : </txt:byte> </txt:byte>
bit 要素の子孫に、byte 要素が定義されている場合にエラーとする処理を追加しました。
<!-- NG ケース(bit 要素の子孫に byte 要素が定義)--> <txt:bit encode="txt"> <txt:byte> <txt:data type="token"/> </txt:byte> </txt:bit>
bit 要素の子孫に、list 要素が定義されている場合にエラーとする処理を追加しました。
<!-- NG ケース(bit 要素の子孫に list 要素が定義)--> <txt:bit encode="txt"> <txt:list> <txt:data type="token"/> </txt:list> </txt:bit>
bit 要素の encode 属性に ``txt'' が指定されている場合にエラーとする処理を追加しました。 (bit 要素の祖先の byte、bit 要素において、encode=``txt'' となっている場合も 同様にエラーとなります。)
<!-- NG ケース(bit 要素の encode 属性に "txt"が指定)--> <txt:bit encode="txt" xmlns:txt="http://ums.isas.jaxa.jp/0.4/dat"> <txt:data type="token"/> </txt:bit>
define 要素中に、自分自身の参照がされている場合に、エラーとする処理を追加しました。 (codeGenerator の制約)
<!-- NG ケース(自分自身の参照)--> <define name="data-pattern"> : <ref name="data-pattern"/> : </define>
optional、zeroOrMore、oneOrMore のネストが 16段を超えている場合にエラーとする処理を追加しました。 (codeGenerator の制約)
<!-- NG ケース(ループのネストが16段を超える)--> <txt:byte encode="txt" xmlns:txt="http://ums.isas.jaxa.jp/0.4/dat"> <optional><optional><optional><optional><optional> <oneOrMore><oneOrMore><oneOrMore><oneOrMore><oneOrMore> <zeroOrMore><zeroOrMore><zeroOrMore><zeroOrMore><zeroOrMore> <optional><optional> <txt:list delimiter="\n"> <txt:data type="int"/> </txt:list> </optional></optional> </zeroOrMore></zeroOrMore></zeroOrMore></zeroOrMore></zeroOrMore> </oneOrMore></oneOrMore></oneOrMore></oneOrMore></oneOrMore> </optional></optional></optional></optional></optional> </txt:byte>
group, interleave, choice, optional, zeroOrMore, oneOrMore, empty について、 「dat」名前空間に対応しました。 以下のような記述が可能になります。
<txt:choice> <txt:value type="string">A</txt:value> <txt:value type="string">B</txt:value> <txt:value type="string">C</txt:value> </txt:choice>
type 属性を持たない value 要素には、値が token である type 属性を付け加え、 datatypeLibrary 属性の値を空文字に置き換えるようにしました。
- [Bugzilla #72 datatypeLibrary 属性の単純化 http://eda.plain.isas.jaxa.jp/bugzilla/show_bug.cgi?id=72 ]
- [Bugzilla #74 value要素のtype属性の省略 http://eda.plain.isas.jaxa.jp/bugzilla/show_bug.cgi?id=74 ]
<!-- type 属性を持たない value 要素 --> <txt:value>A</txt:value> <!-- このように扱う --> <txt:value type="token" datatypeLibrary="">A</txt:value>
datatypeLibrary 属性を持たない data 要素、value 要素の datatypeLibrary 属性の値は、 define / ref を展開する前の、もっとも近い祖先要素の datatypeLibrary 属性の値を 参照するようにしました。
- [Bugzilla #60 datatypeLibrary の参照タイミング http://eda.plain.isas.jaxa.jp/bugzilla/show_bug.cgi?id=60 ]
method2(テーブル処理)についてもデバッグ出力を行うようにしました。 また、decode 時、encode 時共に、バッファの処理位置を表示するようにしました。
: [exec] > ## line:67 <txt:list> buffer:1*8+2 :
生成ソースコードにおいて、byte 要素の初めと終わりで、byte alignment のチェックを行うようにしました。
- [Bugzilla #65 byte alignment のチェック http://eda.plain.isas.jaxa.jp/bugzilla/show_bug.cgi?id=65 ]
<!-- Mapping Schema --> <txt:byte encode="txt"> <txt:data type="token"/> </txt:byte>
/* 生成ソースコード */ /* <txt:byte encode="txt"> */ ums__dat.byteAlignCheck(); : /* <txt:data type="token"> */ : /* </txt:data> */ : ums__dat.byteAlignCheck(); /* </txt:byte> */
以上