もろもろ作業メモ
以下の項目の設計メモも含んでいる。
- txt:line サポート、サンプル追加
- encodingLibrary のインターフェース変更
およびこれにともなうサンプル改定
- umsCodeGenerator:dataContainer のリソース管理のバグ修正
-- 2005072952 で実装。
- param 要素サポート。例を追加。
-- 2005072953 で実装。
20050801 -KM-
---------------------------------------------------------
設計メモ 2005072851
encodingLibrary の仕様変更
% ただし 2005072952 で再度改定がはいり本改定は
% 途中検討のステップ。結論のみを知りたければ本メモの
# で始まる行を読み飛ばすとよい。
param タグのサポートに向け以下の仕様変更が必要となった。
# 2005072851 作成時の考え
#
# From: dat.spos, epos を受け取り dat.spos を進める
# To: dat.spos, dat.epos を受け取り
# 必要に応じdat.epos を dat.spos の側に戻す。
% 2005072952 作成時の訂正
%
% 従来との差分は以下のみ
% encodeLibrary の decode 処理から処理部分の長さを
% 決定する機構は廃止する。つまり、処理部分は
% 上位のコンテナで決定されていなければならない。
% マッチングは渡されたコンテナ全体に対しておこなう。
==== encodingLibrary の修正 (t/u 共通部分) ====
- datatype/src/W3C_typeConversionLibrary.[ch]
- datatype/src/jp/jaxa/isas/ums/datatype/W3C_TypeConversionLibrary.java
引数から int epos を削除。
# txt_Read のインターフェースは変更しない。
# 最終位置は dat.spos ではなく dat.epos に反映。
% 2005072952 作成時
% この改修が実は不要なことが分かった。害もなく、
% 見かけはシンプルになるセンスなので元には戻さない。
% ... (*1)
%
% 従来どおり最終位置は dat.spos に反映することとする。
- datatype/src/typeConversion_lang2.xsl
- datatype/src/W3C_typeConversion_lang2.xsl
container 変数を廃止。固定値 ums__dat で置き換え。
==== ライブラリの修正 (t/u 個別部分) ====
- src/clng/umsDat.h
- src/java/jp/jaxa/isas/ums/UMSDat.java
それぞれ1行づつ、int epos; を追加。
% (*1) で述べた必要のなかった変更点
==== XSL の修正 (t/u 個別部分) ====
- src/xslt/preTransform.xsl
tableTools と umsCodeGenerator で生き別れてしまっている。
共通化を図り差異を明確化した。
getChildEpos, pushContainer, popContainer の引数を削除。
など。
encoding library I/F 変更にともない、
引数 container は削除。
下記 template は見通しが悪くなるため廃止。
template name="encodeLibraryParameter"
template name="encodeLibraryParameterDat"
あらかじめ展開しておく。
template match="pre:dataOrValue" に
epos = ;
を、追加。
% 以下も追加したが 2005072952 にて廃止。
#
# spos = epos;
#
- src/xslt/list.xsl (同一)
encodingLibrary を呼び出しているところがあり同様。
- src/xslt/tool.xsl あるいは src/xslt/tool_lang.xsl (個別)
template name="getEpos" を復活。
- secondTransform_lang.xsl
... template match="post:THROW_EXCEPTION" に thread version を追加。
... ums__detail => detail (*2)
-----------------------
マージ作業メモ
# setenv LANG ja_JP.euc_JP は、まだ必要。
% 2005072952 では setenv LANG C で動くことを確認
# tableTools-20052701 に手を加えた。
# umsCodeGenerator-20052801 に手を加えた。
# tableTools-2005072801 との相違点 (で未反映の部分)
# changes.xml
# コンパイラの *.java
% 2005072952 では追いついている。
(*2) の作業を手で適用。
# 2005072852
# 2005072801 => 2005072802 の改定は手で追従した。
# datatype/src/*lang2.xsl の改定がバッティング
-----------------------------------------------------------------------------
設計メモ 2005072951
コンテナとサブコンテナの役割分担の明確化
のためのサンプル変更。
% 一部、考慮不足な点があり、最終的にサンプルが置き換わったのは
% tableTools-2005072952 / umsCodeGenerator-2005072952 から。
「サブコンテナ」と呼んでいたもの ( data,value ) は
シーケンシャルどの部分に対応するかを決めてはいけない。
- TxtSample/lang/TxtSample.ums
- DataSample/lang/DataSample.ums
- ValueSample/lang/ValueSample.ums
- PrefixSample/lang/PrefixSample.ums
- PrefixSample/clng/PrefixSample2.ums
- ValidateSample/clng/ValidateSample.ums
list を使って書き換え書き換えた例が動かない。
- src/xslt/list.xsl
の XML-language syntax 対応に漏れがあった。
XML-language syntax を処理する xsl では
lang:value-of など言語空間が入っていてはいけないようだ。
list,csv のサンプルには list 直下に lang:value-of と
なる例がなく、チェックをすり抜けていた。
要調査点その1)
XML-language syntax を処理する xsl において、
lang:* タグを参照する処理が残っていないことを
全 xsl について確認する。
要調査点その2)
サンプルにおいて encode と decode でスキーマが異なるものがほとんど。
例: TxtSample で encode 側のみに delimiter が必要。
同一になるよう期待値、ums、テストプログラムを書き換える。
---------------------------------------------------------
マージ作業メモ
# tableTools 2005072951
# 2005072802 => 2005072903 の改定は手で追従した。
修正されたファイル (下記) をコピー。
# changes.xml
# lang/
# src/clng/
# src/java/jp/jaxa/isas/ums/
# sample/BinSample/
# sample/IntType_signedEncodeSample/
# sample/UnsignedIntType_unsignedEncodeSample/
# sample/Ziguzagu
# sample/TxtSample/clng/TxtSampleMain.c
# sample/TxtSample/java/TxtSampleMain.java
# sample/DataSample/clng/DataSampleMain.c
# sample/DataSample/java/DataSampleMain.java
# sample/ValueSample/clng/ValueSampleMain.c
# sample/ValueSample/java/ValueSampleMain.java
# sample/CsvSample/clng/CsvSampleMain.c
# sample/CsvSample/java/CsvSampleMain.java
# sample/ListSample/clng/ListSampleMain.c
# sample/ListSample/java/ListSampleMain.java
# sample/PrefixSample/clng/PrefixSample2Main.c
# sample/PrefixSample/clng/PrefixSampleMain.c
# sample/PrefixSample/java/PrefixSampleMain.java
# sample/ValidateSample/clng/ValidateSample.ums (手でマージ)
以下を再度実施
- src/clng/umsDat.h
- src/java/jp/jaxa/isas/ums/UMSDat.java
それぞれ1行づつ、int epos; を追加。
# 多分ゴミなので捨てた
# sample/Interleave/
# sample/DataSample/java/DatatSample.dat
# umsCodeGenerator 2005072951
# 2005072802 => 2005072903 の改定は手で追従した。
# ( 2005072904 は作りかけとのこと )
BinSample を除く tableTools の最新版サンプルをコピー
# sample/BinSample/clng/BinSampleMain.c
# sample/BinSample/java/BinSampleMain.java
以下をコピー
sample/ChoiceSample/
sample/FileTagSample/
sample/OneOrMoreSample/
sample/OptionalSample/
sample/ZeroOrMoreSample/
以下をコピー
build.xml
changes.xml
lang/
src/clng/
src/java/jp/jaxa/isas/ums/
以下は不適用
(2005072904 からコピーしてしまって残っているものもある)
src/xslt/file.xsl
src/xslt/getBaseName.xsl
src/xslt/secondTransform_java.xsl
schema/txt_java.rng
src/xslt/txt_java1.xsl
src/xslt/txt_java2.xsl
これにて豊田版とマージ完了
---------------------------------------------------------
設計メモ 2005072951 (つづき)
umsCodeGenerator 側のみのサンプルも
list を使って書き換え
- ChoiceSample/lang/ChoiceSample.ums
- OptionalSample/lang/OptionalSample.ums
- OneOrMoreSample/lang/OneOrMoreSample.ums
- ZeroOrMoreSample/lang/ZeroOrMoreSample.ums
- FileTagSample は未対応。
要調査点その3)
ChoiceSample は複数の同等な ums を用意し、
全てでチェックを行いたい。C 版は対応したが、
java 版の build.xml に組み込めておらず、
手動でチェックをかけている。ant に組み込みたい。
- src/xslt/choice.xsl
foreach して弟妹要素を参照する場合の schemaElementNumber は
opt="2" を使用するように変更。子要素の処理と case ラベルの
衝突が発生する事例があるため (ChoiceSample の 21)。
要調査点その4)
デフォルト以外の schemaElementNumber (case ラベル) を
作成している事例を列挙し、その命名法の指針をまとめる。
要改修点その5)
命名規約違反
C 版において ums__ で始まらない
グローバルな変数・関数名を使用しているところがある。
- catchAndThrow など: 識別子の住み分けが必要 ums__ すべし
- pop など: 同上
=== currentContainerInfo へ auto なリソースを割り当てている。===
致命的なバグへの対応。auto 変数で割り当てられた領域のポインタを
より持続的な寿命の変数に代入してしまっている。
# a->b->c が必要になったら何か間違っていると思ってください。
# そういうのを使わないのが現状の umsCodeGenerator のポリシです。
誤) ums__containerInfo_t *currentContainerInfo;
正) ums__containerInfo_t currentContainerInfo;
影響修正箇所。
- secondTransform_clng.xsl
currentContainerInfo.
ums__dat->currentContainerInfo.epos
- tool_clng.xsl
ums__dat->currentContainerInfo.epos
- defineMapping.xsl
機能追加 したいのだが属性に
改行を埋め込めない。 属性に含まれる改行コードを空白に変換する
のはおそらく、XML の仕様。そこで タグを作る。
txt:list の処理と同一で delimiter="改行" と指定したソースを作る。
(umsCodeGenerator-2005082951 / tableTools-2005082952 で対応)
schema/txt_ccom.xsl
src/xslt/txt_line.xsl (txt_list.xsl を微修正)
src/xslt/txt_clng2.xsl
src/xslt/txt_java2.xsl
サンプルは
umsCodeGenerator-2005082952 / tableTools-2005082952 から追加。
-----------------------------------------------------------------------------
設計メモ 2005072952
sample/ListSample/lang/ListSample.ums
記述ミス訂正 2005072951 で直しておくべきだった。(t/u 共通)
src/xslt/value.xsl (t/u 個別)
は
で置き換え。
src/xslt/preTransform.xsl (t/u 個別)
src/xslt/list.xsl (t/u 共通)
src/xslt/line.xsl (t/u 共通)
=> 削除
エラーメッセージ強化
要改修点その6)
エラーメッセージが全般に貧弱で、デバッグに耐えない。
何をメッセージに出すべきかべき論から考え直すべき。
- spos, epos
- スキーマの処理位置
はデフォルトで必要。スキーマの位置はともかく、
spos、epos などは全体で考え方をまとめたほうが良いかも。
umsCodeGenerator では、inner loop と outer loop の
先頭にデバッグ用のメッセージを出す機能がほしい。
C 版の stack trace が機能していない?
以下のロジックを preTransform.xsl 及び src/xslt/{list,line}.xsl から
encodingLibrary に戻す。
epos = ;
spos = epos;
うーん、stack trace があまい。。なぜ、1 段 (encodingLibrary)
のみの履歴しかのこらないんだ?
datatype/ (t/u 共通)
datatype/src/typeConversion_lang2.xsl
=> 削除
datatype/src/typeConversion_lang2.xsl
=> 削除
datatype/src/W3C_typeConversion_lang2.xsl
=> 削除
datatype/src/W3C_typeConversionLibrary.[hc]
datatype/src/ /W3C_typeConversionLibrary.java
パターンマッチの対象を渡されたコンテナ全体に広げる。
(= 正規表現の最後に /$/ を付加する。)
異常ケースに対する試験ケースの追加が必要
<== 要改修点その(あ)
void ums__'@encode'Encode_'@type'Value => 削除
throwLiteralException() => 削除
epos ではなく従来どおり
spos をすすめるインターフェースに戻す。
C 版のマクロパラメータを java 版とそろえる。
limitLength => lengthCheck
"writeBufferError" を発生させることとしたが、
この名称でよいのだろうか?コンテナを越えた、
write buffer を超えたの二つの話が混ざっている。
byteAlignCheck spos, epos :
JAVA 版にもパラメータ追加。
sample/ValidateSample/clng/ValidateSample.ums (t/u 共通)
2005072951 で対応が不足。追加改修。
要改修点その7)
サンプルのエラーメッセージ出力から stack trace が
まったくなくなってしまった。本当に異常なときの解明が大変なので、
エラーメッセージ出力は stack trace し、
ただし、試験ケースとしてエラーが発生するもののみ
ロケール非依存になるように stack trace をコメントアウトする。
sample/LineSample/ 例を追加。
encode と decode を対称に組む。trim() しちゃだめ!
外付け expand は行わない。
src/xslt/preTransform.xsl (u のみ)
precedingTail 変数の2回宣言がないように対応した。
-----------------------------------------------------------------------------
設計メモ 2005072953
param タグの実装
==== encodingLibrary に追加 (t/u 共通部分) ====
- datatype/src/W3C_typeConversionLibrary.[ch]
void ums__W3C_stringType_patternParameter
(char * str, char *par, ums__state_t *state);
-
datatype/src/jp/jaxa/isas/ums/datatype/W3C_TypeConversionLibrary.java
static public void ums__W3C_stringType_patternParameter
( String str, String par ) throws UMSException;
- datatype/src/W3C_typeConversion_lang.xsl
-- template name="W3C_datatype_restriction"
- datatype/src/typeConversion_lang.xsl
-- template name="datatype_restriction"
==== スタイルシートの追加 ====
- schema/txt_ccom.rng
-- param 要素を追加
- src/xslt/param.xsl (t/u 共通)
-- 作った
- src/xslt/data.xsl (t/u 個別)
= param.xsl の呼び出しを追加
- src/xslt/txt_lang2.xsl (t/u 個別)
-- param.xsl を include
- src/xslt/preTransform.xsl (t/u 個別)
template match="pre:apply-restriction"
- sample/ParamSample/ (t/u 共通)
-- 作った
- src/build.xml (t/u 個別)
-- サンプル追加
-----------------------------------------------------------------------------------------
要調査点その1)
XML-language syntax を処理する xsl
(txt_lang2.xsl から呼び出されているテンプレート) において、
lang:* タグを参照する処理が残っていないことを
全 xsl について確認する。
要調査点その2)
サンプルにおいて encode と decode でスキーマが異なるものがほとんど。
例: TxtSample で encode 側のみに delimiter が必要。
同一になるよう期待値、ums、テストプログラムを書き換える。
sample/LineSample も参照のこと。
trim() しちゃだめ!
要調査点その3)
ChoiceSample は複数の同等な ums を用意し、
全てでチェックを行いたい。C 版は対応したが、
java 版の build.xml に組み込めておらず、
手動でチェックをかけている。ant に組み込みたい。
要調査点その4) ⇒ 完了(2005/08/31)
デフォルト以外の schemaElementNumber (case ラベル) を
作成している事例を列挙し、その命名法の指針をまとめる。
要改修点その5)
命名規約違反
C 版において ums__ で始まらない
グローバルな変数・関数名を使用しているところがある。
- catchAndThrow など: 識別子の住み分けが必要 ums__ すべし
- pop など: 同上
要改修点その6)
エラーメッセージが全般に貧弱で、デバッグに耐えない。
何をメッセージに出すべきかべき論から考え直すべき。
- spos, epos
- スキーマの処理位置
はデフォルトで必要。スキーマの位置はともかく、
spos、epos などは全体で考え方をまとめたほうが良いかも。
umsCodeGenerator では、inner loop と outer loop の
先頭にデバッグ用のメッセージを出す機能がほしい。
C 版の stack trace が機能していない?
要改修点その7)
サンプルのエラーメッセージ出力から stack trace が
まったくなくなってしまった。本当に異常なときの解明が大変なので、
エラーメッセージ出力は stack trace し、
ただし、試験ケースとしてエラーが発生するもののみ
ロケール非依存になるように stack trace をコメントアウトする。
要改修点その8)
外付けで expand する例を1つ作る。その他のサンプルからは
build.xml, Makefile から expand のステップをはずす。
# コンパイラに組み込まれており、define/ref している
ものでも正しく動くはず。
encodingLibrary
要改修点そのA)
最後に空白などが含まれていて全体にマッチしないような場合
のテストケースを追加。( 従来は、正常ケースとして処理していた )
以上