myGroup > myProject
 

Specification of Mapping

English

Syntax

At this moment, there are two syntaxes for mapping defition.

  • XML-XML syntax
  • XML-language syntax

Both of syntaxes can coexist in a mapping defition. Therefore, we call these syntaxes XML syntax. A mapping defition in XML syntax consists of nested XML elements.

A mapping defition consists of following three portions.

  • data structure
  • interface with language
  • correspondence between data structure and interface with language (mapping)

We call each portion space. In mappingSchema of version 0.4, we allocate following URI to each space.

  • http://ums.isas.jaxa.jp/0.4/dat
  • http://ums.isas.jaxa.jp/0.4/clng (C language), http://ums.isas.jaxa.jp/0.4/java (JAVA), http://ums.isas.jaxa.jp/0.4/perl (PERL)
  • http://ums.isas.jaxa.jp/0.4

In XML syntax, we make correspondence between XML element and URI of its space with notation of XML namespace. In the nominal convention, we refer these URI with following prefixes.

  • dat:
  • clng: (C language), java: (JAVA), perl: (PERL)
  • (without prefix)

In patterns of shown in this site, we omit definitions of prefix of XML namespace following the convetion.

Description of data structure

Following pattern shows data structure consists of signed integer of 1 byte. 'dat:byte' element has 'dat:data' element as child. All of XML elements in this pattern belong to space of data structure.

<dat:byte enocde="signed" length="1">
  <dat:data type="byte"/>
</dat:byte>
    

In description of data structure, there are no distinction between XML-XML syntax and XML-language syntax.

Description of a static relation

XML-XML syntax describes static relations.

Following pattern shows variable var with value of data of 1 byte. 'lang:value-of' element has 'lang:data' element as child. All of XML elements in this pattern belong to space of language.

<lang:value-of select="var">
  <lang:data type="byte"/>
</lang:value-of>
    

When we combine this with the description of data structure , we can describe correspondence between the variable and the sequential data. 'dat:byte' element and 'lang:value-of' element in following pattern also has 'data' element as descendant. However, this 'data' element belongs to space of mapping.

<dat:byte enocde="signed" length="1">
  <lang:value-of select="a">
    <data type="byte"/>
  </lang:value-of>
</dat:byte>
    

This pattern only shows correspondence. Direction of data transfer

  • from variable to sequential data (encode)
  • from sequential data to variable (decode)

is not described here and shoud be specified in the other place.

Mapping definition file of XML-XML syntax can be more easily processed with XSL when we compare with that of XML-language syntax. Mapping definition of XML-XML syntax can be translated into description in XML-language syntax.

Description of action

XML-language syntax describes actions.

Following pattern shows an action to write data of 1 byte to a variable var and an action to read data of 1 byte from variable var. Including portion written out side of XML element, all of the description belong to space of language.

var = <lang:data type="byte"/>;

<lang:data type="byte"/> = var;
    

When we combine this with the description of data structure, we can describe decode and encode of the sequential data. 'dat:byte' element belongs to the space of data structure. 'data' element belongs to the space of mapping. The other portion belongs to the space of language.

<dat:byte enocde="signed" length="1">
  a = <data type="byte"/>;
</dat:byte>
    
<dat:byte enocde="signed" length="1">
  <data type="byte"/> = a;
</dat:byte>
    

When we compare with XML-XML syntax, XML-language syntax is compact and a little bit friendly for programmar. In XML-language syntax, we can direclty use some capability of programing language. Not all of mapping defition of XML-language syntax can be translated into description in XML-XML syntax.

Basic of encode

<dat:byte enocde="signed" length="1">
  <dat:data type="byte"/>
</dat:byte>
<dat:byte enocde="signed" length="1">
  <data type="byte"/> = a;
</dat:byte>
<lang:data type="byte"/> = a;
<dat:byte enocde="signed" length="1">
  <dat:value type="byte">1</dat:value>
</dat:byte>
<dat:byte enocde="signed" length="1">
  <value type="byte">1</value> = a;
</dat:byte>
<lang:value type="byte">1</lang:value> = a;

Basic of decode

<dat:byte enocde="signed" length="1">
  <dat:data type="byte"/>
</dat:byte>
<dat:byte enocde="signed" length="1">
  a = <data type="byte"/>;
</dat:byte>
a = <lang:data type="byte"/>;
<dat:byte enocde="signed" length="1">
  <dat:value type="byte">1</dat:value>
</dat:byte>
<dat:byte enocde="signed" length="1">
  a = <value type="byte">1</value>;
</dat:byte>
<lang:value type="byte">1</lang:value> = a;

2. RELAX NG との違い? - written 2005/06/28

RELAX NG は XML 文書に "限定" して使用するものです。 mappingSchema は、より広い文書で使用するためのものです。 第1に、このことにより差が生じます。

2つ目の違いは、"実装" をどう意識するかで生じます。 複数の実装が存在する場合、その相互運用のために、 適用範囲を絞りこむ必要が出てきます。 - 今のところ - mappingSchema には、そういう制約は設けておらず、 適用範囲を明示するのはツールの義務であり、 使用範囲を選択するのはユーザに任されています。

これらの違いの多くは "制約" の違いとなって現れます。 - 今のところ - mappingSchema の文法自身は "制約" を極力設けないないようにしています。 以下には、mappingSchema では許容されるが RELAX NG では 許容されないパターンの例を列挙します。

    

2.1 注釈 (外来の属性及び要素の取り扱い) - written 2005/07/21

RELAX NG では外来の属性及び要素は取り除かれます (see RELAX NG 4.1)。 mappingSchema では外来の属性及び要素は「無視されます」。以下の例は

<element name="A">
  <other:comment>
    <element name="B">
      <text/>
    </element>
  </other:comment>
</element>

RELAX NG では

<element name="A"/>

と、等価ですが mappingSchema では

<element name="A">
  <element name="B">
    <text/>
  </element>
</element>

と、等価になります。

2.2 難解な書式 - updated 2005/08/01

mappingSchema では下記の記述が「可能」です。

<byte encode="txt">
  <data type="int"/>
</byte>
<byte encode="txt">
  <data type="int"/>
</byte>

たとえば、これは '123456' という文字列にマッチします。 2 つのデータ項目がそれぞれどの部分文字列にマッチするかは 一意に決まりません。以下の 5 通りの可能性があります。

  • '12345' and '6'
  • '1234' and '56'
  • '123' and '456'
  • '12' and '3456'
  • '1' and '23456'

このようなdecode of dataには労力がかります。 そして、なにより、取り扱える処理系が限られてきてしまうため、 使うべきではありません。

なお、下記のパターンは RELAX NG (see 7.2) でも mappingSchema でも許容されません (list の子として現れる場合を除く)。

<data type="int"/>
<data type="int"/>

文法のあやしいところ

(2005/06/30) 変数宣言で初期値を指定できない。 (e.g. JAVA のクラスは null のポインタで初期化したいのか?)