[UMS 20060728 版リリース] Mitsuhiro TOYODA


仕様対応

最新 UMS 仕様対応

UMS 仕様(20060714版)に対応するよう、処理の変更、制約の追加を行いました。

relaxing スキーマの改修

UMS 仕様(20060714版)に基づき、relaxing スキーマを改修しました。 また、Language syntax 用のスキーマを作成しました。

nxml-mode を使用する際には、「schemas.xml」内で、「ant rnc」によって生成した以下の rnc ファイルを参照するようにしてください。


機能拡張

Java 版の package 指定対応

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 {
    :
  }

enocode 属性チェック

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 チェック

bit 要素の子孫に、byte 要素が定義されている場合にエラーとする処理を追加しました。

  <!-- NG ケース(bit 要素の子孫に byte 要素が定義)-->
  <txt:bit encode="txt">
    <txt:byte>
      <txt:data type="token"/>
    </txt:byte>
  </txt:bit>

bit // list チェック

bit 要素の子孫に、list 要素が定義されている場合にエラーとする処理を追加しました。

  <!-- NG ケース(bit 要素の子孫に list 要素が定義)-->
  <txt:bit encode="txt">
    <txt:list>
      <txt:data type="token"/>
    </txt:list>
  </txt:bit>

<bit encode=``txt'' /> チェック

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 / ref の再帰定義チェック

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>

value 要素の type 属性対応

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 属性の参照対応

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 alignment のチェック(生成ソースコードにチェック処理出力)

生成ソースコードにおいて、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> */

以上