CommuniGate Pro
Version 5.1
アプリケーション
 
 
 
データ

データフォーマット

CommuniGate Pro サーバーでは、ほとんどのタイプのデータは「内部オブジェクト」として処理され ます。このセクションでは、一般的で基本的なオブジェクトについて説明します。いずれもサーバー の全コンポーネントで使用されます。

オブジェクトにはそれぞれ、そのオブジェクトのデータを表すテキスト表現(文字列、数値といった データ形式/ データ型) があります。

オブジェクトがファイルに格納されるときやオブジェクトがCLI/API コマンド応答を使って送信され るとき、また、何らかの方法でサーバーからオブジェクトが抽出されるときには、そのオブジェクト のテキスト表現を使って処理が行われます。

また、CommuniGate Pro サーバーにより外部(設定ファイルやCLI コマンドなど) からオブジェクト が読み込まれる場合、そのオブジェクトのテキスト表現が内部オブジェクトに変換され、CommuniGate Pro サーバー上で使用されます。

文字列

CommuniGate Pro で使用される文字列は、基本的な非構造化テキストデータです。

このテキスト表現(文字列) としては、アトムと引用符付き文字列の2 種類があります。アトムとは、 ラテン文字と数字で構成されるひとつながりの文字列をいいます。引用符付き文字列とは、二重引用符(") で囲まれた記号(文字) のうち、二重引用符とバックスラッシュを除いた表示可能な記号をい います。
例:
MyName   My2ndName   "My Name with spaces and the . symbol"
文字列の中で引用符を使いたい場合、その引用符の前にバックスラッシュを付加します。また、バッ クスラッシュを使いたい場合、バックスラッシュを2 つ指定します(バックスラッシュはエスケープ 文字です)。下記は、例です。
例:
"a \"string\" within string"   "Single \\ backslash"
文字列に改行( リターン) を挿入する場合、\r を使います。また、ラインフィールドを挿入する場 合、\n を使用します。\e を挿入すると、エンドオブライン(システム非依存) と解釈されます。
例:
"Line1\eLine2"   "TEXT3\rTEXT67\nTEXT78"
\r と\n を組み合わせると、改行+ラインフィールドと解釈されます。ただし、\r と\n の間にライン セパレータ(行区切り文字) を入れることはできません。
文字列にタブを挿入したい場合、\t を使います。
例:
"Line1:\tField1\tField2\eLine2:\tField1\tField2"
文字列に任意の記号を挿入したい場合、\ nnnを使用します。ここで、nnnは、挿入する記号を表す コード(3 桁の10 進数) です。
例:
"Using the \012 (Vertical Tabulation) symbol"

データブロック

データブロックは、基本的な非構造化バイナリデータです。データブロックは、角カッコで囲まれた テキスト文字列で、内容はBase64 エンコードバイナリデータです。
例:
[HcqHfHI=]
- 5 つのバイナリデータ、つまり、0x1D 0xCA 0x87 0x7C 0x72 で構成されるデータブ ロックです。

数値

N タイムスタンプは、基本的な非構造化データです。タイムスタンプオブジェクトはいずれも、単一 のグローバル時刻値で、GMT 時間形式で示されます。文字列で表現され、先頭に#T、その右に日月 年、その右にオプションで時分秒を付加できます。
例:
#-234657

タイムスタンプ

タイムスタンプは、基本的な非構造化データです。タイムスタンプオブジェクトはいずれも、単一の グローバル時刻値で、GMT 時間形式で示されます。文字列で表現され、先頭に#T、その右に日月年、 その右にオプションで時分秒を付加できます。
例:
#T22-10-2007_15:24:45

IP アドレス

IP アドレスは、基本的な非構造化データオブジェクトです。このオブジェクトにはいずれもIPv4 ア ドレスまたはIPv6 アドレスが格納されており、ポート番号が格納されていることもあります。IP アド レスは、#I という記号で始り、そのあとに従来からのIPv4 アドレスやIPv6 アドレス、またオプショ ンでポート番号が続くという形式をとります。
例:
#I[10.0.44.55]:25  #I[2001:470:1f01:2565::a:80f]:25

配列

配列オブジェクトは、複数のオブジェクト(配列要素) が順に並ぶという形式になっています。

配列のテキスト表現は要素のリストで、各要素はコンマ(,) が区切られます。また、前後はカッコ で囲まれます。
例:
(Element1 , "Element2" , "Element 3")
配列の要素(element) としては、任意のデータ要素(文字列、配列、辞書など) を使用できます。
例:
(Element1 , ("Sub Element1", SubElement2) , "Element 3")
カッコと要素、要素とコンマの間には、任意の数のスペース、タブ記号、ラインブレーク(エンドオ ブライン記号) を挿入できます。
例:
(
  Element1  ,
  (    "Sub Element1",
   SubElement2  )
  ,
"Element 3"  )
要素がない配列(空白の配列)も有効です。
例:
()

辞書

辞書オブジェクトは、キーと値の対のセットです。キーは文字列です。辞書のキーはいずれも一意で なければなりません。キーは、特に指定されている場合を除き、大文字と小文字が区別されます。

キーの値としては、任意のオブジェクトを使用できます。

辞書のテキスト表現はキーと値の対のセットで、前後は中カッコ({、}) で囲まれます。
キーと値の対はそれぞれ、キーを示す文字列表現、その右に等号(=) 、その右にキーの値を示すテキ スト表現、その右にセミコロン(;) を置くという形式をとります。
例:
{Key1=Element1; Key2 ="Element2" ; "Third Key"="Element 3"; }

キーの値(要素) としては、文字列、配列、辞書のいずれかを指定できます。

例:
{Key1=(Elem1,Elem2); Key2={Sub1="XXX 1"; Sub2=X245;}; }

中カッコとキーの間、等号の両側、セミコロンの両側には、任意の数のスペース、タブ、記号、ラインブレーク(エンドオブライン記号) を挿入できます。

例:
{
 Key1  =   (Elem1,Elem2)   ;
 Key2 = {  Sub1 = "XXX 1";
    Sub2=X245;  };
}

要素(キーと値の対) がない辞書(空白の辞書) も有効です。

例:
{}

シンタックス

下は、辞書フォーマットと配列フォーマットのシンタックスです(digit =桁、symbol =記号、 atom =アトム、string =文字列、datablock =データブロック、timestamp =タイムスタンプ、 array =配列、dictionary =辞書、object =オブジェクト)。

d-digit ::= 0 .. 9
h-digit ::= d-digit | A | B | C | D | E | F
a-symbol ::= A .. Z | a .. z | d-digit
l-symbol ::= a-symbol | . | _
atom ::= 1* l-symbol
b-symbol ::= a-symbol | + | / | =
s-symbol ::= any printable symbol except " and \ | \\ | \" | \r | \n | \e | \ d-digit d-digit d-digit
string ::= " 0* s-symbol " | atom
datablock ::= [ 1* b-symbol ]
day ::= 0 .. 3 d-digit (2-digit number in the 1..31 range)
month ::= 0 .. 1 d-digit (2-digit number in the 1..12 range)
year ::= 1 .. 2 d-digit d-digit d-digit (4-digit number in the 1970..2038 range)
hour ::= 0 .. 2 d-digit (2-digit number in the 0..23 range)
minute ::= 0 .. 5 d-digit (2-digit number in the 0..59 range)
second ::= 0 .. 5 d-digit (2-digit number in the 0..59 range)
number ::= # [ -] 1* d-digit
timestamp ::= # T day - month - year [ _ hour : minute : second ]
ip4 ::= 1* d-digit . 1* d-digit . 1* d-digit . 1* d-digit
ip6 ::= 0*(1* h-digit :) [: [ 0*(1* h-digit :) ] ]
ip-address ::= # I[ [ip4 | ip6] ] [ : 1*d-digit ]
array ::= ( [object 0*( , object ) ] )
dictionary ::= { 0*( string = object ; ) }
object ::= string | datablock | number | timestamp | ip-address | array | dictionary

CommuniGate® Pro Guide. Copyright © 1998-2007, Stalker Software, Inc.