CommuniGate Pro
Версия 5.1
Программы
 
 
 
Данные

Форматы Данных

Сервер CommuniGate Pro обрабатывает большинство типов данных как базовые объекты. В этом разделе описывается исходные, фундаментальные типы объектов, используемые всеми компонентами Сервера.

Для каждого типа объекта указывается текстовое представление объекта.

Когда объект сохраняется в файле, отправляется в ответ по команде CLI/API или извлекается с Сервера любым другим способом, то используется текстовое представление объекта.

Когда Сервер читает объект извне (из файла настроек, из команды CLI и т.д.), он преобразовывает полученное текстовое представление во внутренний объект.

Строки

Строки (string) являются основными неструктурированными текстовыми объектами данных.

Текстовое представление строки является либо атомарным - последовательностью букв латинского алфавита (в кодировке ASCII) и цифр, либо строкой в кавычках - последовательностью любых отображаемых символов (используя кодировку UTF-8), исключая символ кавычки и символ обратной косой черты, заключённую в кавычки (").
Примеры:
MyName   My2ndName   "My Name with spaces and the . symbol"
Если вы хотите включить символ кавычки в строку в кавычках, укажите символ обратной косой черты и кавычки, а если вы хотите включить символ обратной косой черты в строку в кавычках, укажите два символа обратной косой черты подряд.
Примеры:
"a \"string\" within string"   "Single \\ backslash"
Вы можете использовать комбинацию символов \r для того, что бы включить символ возврата каретки в строку; вы можете использовать комбинацию символов \n для того, что бы включить символ перевод строки в строку и вы можете использовать комбинацию символов \e для того, что бы включить независимый от системы символ Конца Строки в строку.
Примеры:
"Line1\eLine2"   "TEXT3\rTEXT67\nTEXT78"
Используйте комбинацию \r или \n для включения знаков возврата каретки и конца строки только если они НЕ используются как разделители строк.
Что бы включить в строку символ табуляции, вы можете использовать комбинацию символов \t.
Пример:
"Line1:\tField1\tField2\eLine2:\tField1\tField2"
Вы можете использовать комбинацию символов \nnn что бы включить в строку любой символ; здесь nnn - трехзначное десятичное число, равное коду ASCII требуемого символа.
Пример:
"Using the \012 (Vertical Tabulation) symbol"

Блоки Данных

Блоки данных (datablock) являются базовыми, неструктурированными блоками двоичных данных. Они создаются как текстовые строки двоичных данных в кодировке Base64, заключённые в квадратные скобки.
Пример:
[HcqHfHI=]
это блок двоичных данных, содержащих следующие 5 двоичных байт данных: 0x1D 0xCA 0x87 0x7C 0x72

Числа

Числа (number) являются основными неструктурированными объектами данных. Каждый объект Число содержит одно 64-битное целое значение, имеющее знак. Число представляется в виде текстовой строки, начинающейся с символа #, за которым следует (необязательный) символ минуса (-), за которым, в свою очередь, следует одно или более десятичное число.
Пример:
#-234657

Отметки о времени

Отметки о Времени (time stamp) являются основными неструктурированными объектами данных. Каждая Отметка о Времени содержит одно значение глобального времени. Значение времени представляется в GMT времени как текстовая строка, начинающаяся с символов #T и содержащая значение дня, месяца, года и, опционально, часа, минуты и секунды.
Пример:
#T22-10-2007_15:24:45

IP Адреса

IP Адреса (IP Address) являются основными неструктурированными объектами данных. Каждый объект IP Адрес содержит в себе IPv4 или IPv6 адрес и, опционально, номер порта. IP Адрес представляется в виде текстовой строки, начинающейся с символов #I и содержащей канонический IPv4 или IPv6 адрес, за которым опционально может следовать номер порта.
Примеры:
#I[10.0.44.55]:25  #I[2001:470:1f01:2565::a:80f]:25

Массивы

Объект Массив (array) - это упорядоченный набор объектов (элементов массива).

Текстовое представление для массива - список представлений его элементов, разделённых символами запятой (,) и заключенный в круглые скобки.
Пример:
(Element1 , "Element2" , "Element 3")
Элементом массива может быть любой объект - строка, массив, словарь и т.д.
Пример:
(Element1 , ("Sub Element1", SubElement2) , "Element 3")
Любое число пробелов, символов табуляции и/или символов новой строки (символов конца строки) может находиться между скобками и элементом, а также между элементом и символом запятой.
Пример:
(
  Element1  ,
  (    "Sub Element1",
   SubElement2  )
  ,
"Element 3"  )
Массив может содержать ноль элементов (пустой массив).
Пример:
()

Словари

Объект Словарь (dictionary) является набором пар ключ-значение. Ключи словаря являются строками. Каждый ключ в словаре должен быть уникальным. Ключи словаря обрабатываются как зависимые от регистра строки, за исключением случая, если явно не указано иное.

Любой объект может использоваться как значение, связанное с ключом.

Текстовым представлением словаря является последовательность его пар ключ/значение, заключённое в фигурные скобки.
Каждая пара представляется как строка с ключом, за которым следует знак равно (=) и текстовое представление значения связанного объекта, оканчивающегося символом точка с запятой (;).
Пример:
{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;  };
}

Словарь может иметь ноль элементов (пустой словарь).

Пример:
{}

Правила Синтаксиса

Ниже приводится формальное определение синтаксиса для текстовых представлений объектов базовых типов.

d-digit ::= 0 .. 9
a-symbol ::= A .. Z | a .. z | d-digit
l-symbol ::= a-symbol | . | _
atom ::= 1* l-symbol
b-symbol ::= a-symbol | + | / | =
s-symbol ::= любой отображаемый символ кроме " и \ | \\ | \" | \r | \n | \e | \ d-digit d-digit d-digit
string ::= " 0* s-symbol " | atom
datablock ::= [ 1* b-symbol ]
day ::= 0 .. 3 d-digit (двухзначное число в диапазоне 1..31)
month ::= 0 .. 1 d-digit (двухзначное число в диапазоне 1..12)
year ::= 1 .. 2 d-digit d-digit d-digit (четырёхзначное число в диапазоне 1970..2038)
hour ::= 0 .. 2 d-digit (двухзначное число в диапазоне 0..23)
minute ::= 0 .. 5 d-digit (двухзначное число в диапазоне 0..59)
second ::= 0 .. 5 d-digit (двухзначное число в диапазоне 0..59)
number ::= # [ -] 1* d-digit
timestamp ::= # T day - month - year [ _ hour : minute : second ]
array ::= ( [object 0*( , object ) ] )
dictionary ::= { 0*( string = object ; ) }
object ::= string | datablock | number | timestamp | array | dictionary

Руководство CommuniGate® Pro. Copyright © 1998-2007, Stalker Software, Inc.