Основная таблица «items» содержит
описание структуры «объектов»:
item_id – числовое значение, индексируется
item_ot – строковое значение, индексируется
item_name – строковое значение, индексируется
parent_item_id – число, индексируется
type_id – число
type_parameters – текствое поле
default_value – текствое поле
child_object_id – строка
method – текст
method_language – строка
sections – массив чисел
Внимание: type_id равного 0, зарезервировано и означает вложенный объект со своей структурой.
Вспомогательная таблица «types» содержит типы данных:
type_id – числовое значение, индексируется
type_name – строковое значение, индексируется
type_of_type – число, базовый или расширенный тип данных
is_it_array – булевская
is_variable_dynamically_sized – булевская
is_array_dynamically_sized – булевская
size_of_array – число, задаётся для типов: массив,
если такой массив динамически не меменяет количество элементов
size – число, для строковых и бинарных типов данных,
если они динамически не меняют свой размер
interval_minimum – для числовых типов или типов с плавающей точкой
interval_maximum – для числовых типов или типов с плавающей точкой
precision – для типов с плавающей точкой
exponent – для типов с плавающей точкой
endianness – для любых соответствующих типов
encoding – для строковых или текстовых типов
Количество полей в данной таблице справочников будет увеличиваться, тем самым
будет обеспечиваться обратная совместимость. Более старый протокол
IRC-IoT
будет поддерживать меньшее число типов, а на неподдерживаемые типы будет
выдаваться ошибка, а запросы будут игнорироваться. Описанная система позволит
конструировать типы данных разной конфигурации, в разной комбинации: обычные
переменные, массивы обычных переменных, динамические массивы, вложенные
объекты, массивы объектов, ссылки на другие объекты и переменные, и любые
другие возможные конфигурации.
Описание структуры объекта, хранящееся в справочнике (Global Dictionary)
может иметь признаки принадлежности к неким секциям, выбираемым в
зависимости от значений, которые принимают определенные поля
описываемого объекта. Например: если поле «A» принимает значение "1",
то объект содержит ещё и поле «B», в противном случае, поле
«B» в объекте отсутствует, но появляется поле «C».
Присутствие полей в объекте может определяться двумя способами:
1. При помощи специальной хранимой процедуры, в описании поля;
2. Принадлежностью поля одной из активных секций.
Принадлежность поля секции определяется специальной переменной
«sections» в описании, представляющей из себя массив числовых
идентификаторов секций. Постоянно присутствующая в объекте переменная в
своём описании имеет пустое значение поля «sections».
Активные секции объекта определяются специальной
таблицей «sections» справочника (Global Dictionary),
в которой заложены критерии проверки.
Таблица активации секций объекта выглядит следующим образом:
section_id – число, индексируется
item_ids – массив чисел
checking_values – массив строк
method – текстовое поле
method_language – текстовое поле
В конкретных реализациях (Global Dictionary)
поле «item_ids» в таблице «sections» и
поле «sections» в таблице «items» могут
быть заменены на таблицу «нормализации»,
соединяющую данные таблицы по ключам «section_id» и
«item_id» из соответствующих таблиц.
– выбор языка программирования производится при помощи
поля «method_language»
примеры используемых
языков: Python, Java, JavaScript, BASIC, Golang, PHP, CSP, Ruby, bash
– входящие переменные и ссылки на объекты внутри интерпретатора
– исходящие переменные и ссылки на объекты внутри интерпретатора
примеры содержимого
поля «method»: '$out=tolower($in." volts");'
© 2018–2020 Алексей Воронов, Все права защищены.