[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> */
以上