srdファイル解説


目次

1. 概要
2. srdファイルの例
3. 全体の構成
4. Fieldの定義
1. Name
2. Caption
3. FieldType
4. StringEnumFileName
5. XlsEnumFileName
6. XlsEnumID
7. XlsEnumValue
8. DefaultValue
9. TableIndex
10. LookupFieldName
11. KeyFieldName
12. LookupKeyFieldName
13. ArrayName

第1章 概要

srdファイルとは、ALTableで使用するテーブルの定義を記述するファイルです。 ALTableは簡易データベースのような物で、このsrdファイルを使用して使用するフィールドを定義します。 srdファイルはALMakeRecordというツールを使用してコンバートを行います。 記述フォーマットはXMLを使用します。

第2章 srdファイルの例

<?xml version="1.0"?>
<TableDefine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Fields>
    <Field>
      <Name>DataNo</Name>
      <Caption>データ番号</Caption>
      <FieldType>Int</FieldType>
    </Field>
    <Field>
      <Name>Caption</Name>
      <Caption>名称</Caption>
      <FieldType>String</FieldType>
    </Field>
    <Field>
      <Name>PatternID</Name>
      <Caption>パターンID</Caption>
      <FieldType>Int</FieldType>
      <StringEnumFileName>Pattern.idt</StringEnumFileName>
      <DefaultValue>-1</DefaultValue>
    </Field>
    <Field>
      <Name>ClassID</Name>
      <Caption>クラスID</Caption>
      <FieldType>Int</FieldType>
      <XlsEnumFileName>ClassList.xls</XlsEnumFileName>
      <XlsEnumID>名称</XlsEnumID>
      <XlsEnumValue>ClassID</XlsEnumValue>
    </Field>
    <Field>
      <Name>ClassName</Name>
      <Caption>クラス名</Caption>
      <FieldType>LookupField</FieldType>
      <TableIndex>0</TableIndex>
      <LookupFieldName>Caption</LookupFiedName>
      <KeyFieldName>ClassID</KeyFieldName>
      <LookupKeyFieldName>ClassID</LookupKeyFieldName>
    </Field>
  </Fields>
  <LookupTables>
    <Table>ClassData.srd</Table>
  </LookupTables>
  <CustomID>smpl</CustomID>
</TableDefine>

第3章 全体の構成

srdファイルには三つの要素があります。

  • フィールドを定義するFields
  • 参照テーブルを定義するLookupTables
  • カスタムIDを定義するCustomID

Fieldsのみ必須項目です。

Fieldsはフィールドの定義のリストです。 詳細は次の章に記述します。

LookupTablesは参照フィールドを使用する際に使用するテーブル、もしくはテーブル定義を指定します。 参照フィールドとは、このテーブルから別のテーブルを参照して値を取得する物です。 先ほどの例では、ClassNameが参照フィールドです。 LookupTablesに記述してあるClassData.srdに、ClassIDとClassNameを記述してあります。 これで、ClassIDに対応したClassNameをこのテーブルから取得出来るようになります。

CustomIDとは、テーブルを識別するための32ビットの数値です。 この例のように、半角4文字で指定することも可能です。

第4章 Fieldの定義

Fieldには以下の定義があります。

  • Name
  • Caption
  • FieldType
  • StringEnumFileName
  • XlsEnumFileName
  • XlsEnumID
  • XlsEnumValue
  • DefaultValue
  • TableIndex
  • LookupFieldName
  • KeyFieldName
  • LookupKeyFieldName
  • ArrayName

このうち、Name,Caption,FieldTypeは必須項目です。

1. Name

Nameは識別子です。アルファベット・数字で定義します。

2. Caption

Captionは主に人が見るための名前で、主に日本語を使用します。

3. FieldType

FieldTypeはこのフィールドの型です。 使用できるのは以下の16種です。

  • Int
  • Int8
  • Int16
  • Float
  • Bool
  • String
  • Angle
  • Vector
  • Rect
  • Color
  • EulerAngles
  • Time
  • Date
  • DateTime
  • LookupField
  • RecordIndex

このうち、RecordIndexとLookupFieldは特殊型です。

RecordIndexはテーブルのレコードインデックスと対応します。 値は0から始まり数値が飛ぶことはありません。 そのため、もしデータに隙間があった場合は空のレコードが間に挿入されます。

LookupFieldは後述するLookupFieldName等を使用して参照フィールドを定義します。

4. StringEnumFileName

StringEnumFileNameは、コンバート時に文字列から数値に変換するためのIDリストファイルを指定する物です。 IDリストファイルは、

Data1=1
Data2=2
Data3=3

という形式で、識別子=数値という形で記述します。

コンバート時にこの識別子と一致する物を数値としてテーブルに格納します。 なお空欄の場合、DefaultValueの定義があればその値が、無い場合は0が格納されます。 該当する物が無い場合はコンバートエラーになります。

5. XlsEnumFileName

XlsEnumFileNameは、コンバート時に文字列から数値に変換するためのExcelのxlsファイルを指定する物です。 StringEnumFileNameと同じ処理をxlsファイルを対象に行います。

使用するときは、XlsEnumIDとXlsEnumValueをセットで使用します。

6. XlsEnumID

XlsEnumIDは、XlsEnumFileNameとセットで使用し、変換元の文字列がある列の名前を指定します。 XlsEnumIDで指定した名前と同じ項目をxls内で探し、その下の項目が対象となります。

7. XlsEnumValue

XlsEnumValueは、XlsEnumFileNameとセットで使用し、変換先の数値がある列の名前を指定します。 XlsEnumValueで指定した名前と同じ項目をxls内で探し、その下の項目が対象となります。

8. DefaultValue

DefaultValueは空欄の場合のデフォルト値を設定します。 DefaultValueを省略すると、空欄の場合は数値型であれば0を、文字列型では空文字列を指定したと見なされます。

9. TableIndex

TableIndexはフィールド参照を行う場合の参照先テーブルのインデックスを指定します。 例えば、LookupTablesに

  <LookupTables>
    <Table>Table1.atb</Table>
    <Table>Table2.atb</Table>
  </LookupTables>

という定義があった場合、 Table1.atbを使用する場合は0を、Table2.atbを使用する場合は1を指定します。

10. LookupFieldName

LookupFieldNameはフィールド参照を使用する時に、 参照先のテーブルから取得するフィールド名を設定します。

前述の例では、LookupFieldNameにCaptionが指定されているので、 このフィールドの値を取得すると参照先のテーブルのCaptionフィールドの値が取得出来ます。

11. KeyFieldName

KeyFieldNameはフィールド参照を使用する場合、自身のテーブル内のキーに使用するフィールド名を指定します。 キーとは、参照先のテーブルと対応を取るための値で、 自身のテーブルのキーと、参照先のテーブルのキーが一致するレコードが参照されるレコードとなります。

なお、フィールド参照を使用する場合、KeyFieldNameは省略可能でその場合はレコードインデックスがキーとして使用されます。

12. LookupKeyFieldName

LookupKeyFieldNameはフィールド参照を使用する場合、参照先のテーブル内のキーに使用するフィールド名を指定します。 キーとは、参照先のテーブルと対応を取るための値で、 自身のテーブルのキーと、参照先のテーブルのキーが一致するレコードが参照されるレコードとなります。

なお、フィールド参照を使用する場合、LookupKeyFieldNameは省略可能でその場合はレコードインデックスがキーとして使用されます。

13. ArrayName

ArrayNameは複数のフィールドを配列のようにアクセスするための設定です。 これは、ALMakeRecord.exeで-CusomTableHeaderFileNameオプションや、 -DynamoPythonFileオプションを使用した時のカスタムクラス使用時のみ使用できます。

ArrayNameには配列化したいフィールドに対し、同じ名前を設定します。 例えば、Text1,Text2,Text3というフィールドがある場合、それぞれのArrayNameをTextと設定すると事で、 Textという名前とインデックスでアクセスができるようになります。

具体的には、それぞれGet~Count,Get~,Set~,Get~Fieldという関数が追加されます。 ~の部分にはArrayNameで指定した名前が入ります。

インデックスは、srdで現れた順番に0から連番で番号が振られます。

なお、ArrayNameでまとめるフィールドは連続している必要はありません。