Меню

Site Logo

Описание языка M

Язык M описывает мета-информацию в иерархической форме. В формате присутствуют ключи и их значения. Пара ключ-значение разделяется двоеточием:

<имя ключа> : <значение ключа>

Помимо значения ключ может иметь дочерние ключи. По умолчанию каждый ключ описывается на одной строчке. У любого ключа может быть несколько подключей. Чтобы показать их, используется идентация (сдвиг на два пробела). Например:

<имя ключа 1> : <значение ключа 1>
  <имя подключа 1> : <значение подключа 1>
  <имя подключа 2> : <значение подключа 2>
<имя ключа 2> : <значение ключа 2>

Имена ключей:

В отношении имён ключей действуют следующие правила:

  • Именем ключа d M может быть любой идентификатор, имеющий формат идентификатора языка C++. Такой формат требуется для любых идентификаторов языка M, а также его подмножеств декларативного описания чего бы то ни было. Суть:
    • следующие символы могут быть любым знаком идентификатора, включая первый: _ a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z;
    • следующие символы могут быть любым знаком идентификатора, исключая первый: 0 1 2 3 4 5 6 7 8 9;
    • имена ключей не должны содержать специальных символов.)
  • При именовании ключей следует придерживаться метода CamelCase.
  • Пробелы в именах ключей допускаются.
  • На одном уровне (в подключах одного родительского ключа) запрещено существование двух ключей с одинаковым именем.

Типы:

Интерпретатор автоматически преобразовывает значения ключей в variant (универсальный тип данных), распознавая числа, строки, логические значения. Поддерживаются следующие типы значений ключей:

  • число (обычное десятичное число Int32);
  • логический (True/False — регистрозависимые);
  • строка (однострочная, ограниченная символом перевода каретки или конца файла);
  • текст (массив строк, ограниченный символами кавычек — " (двойные кавычки));
  • массив (ограниченное фигурными скобками множество значений, разделенных запятыми — { 1, 2, 3, test } ), массив может содержать подмассивы;
  • байт;
  • временной тип (timestamp_t).

Если строка однострочная, то её не обязательно обрамлять кавычками:

  Key1 : My string value

Логические значения задаются указанием True или False (все остальные формы записи будут переведены в строки). Если в строке нет символа «:» то считается, что значение ключа пустое (empty). Если нужно представить многострочное значение ключа, следует использовать кавычки.

MyKey1 : “Test string, very very long long
String”

Комментарии:

Поддерживаются однострочные комментарии, начинающиеся с точки с запятой «;» (допускается также знак «|»). Если где-то нужно вставить символ «;», то он должен быть дублирован «;;», что подавит комментирующий эффект. Символ «;» в рамках строки, ограниченной кавычками («"»), комментирующего эффекта не имеет.

Пример:

WriteLogs : False ; Настройка писать ли логи

Деревья в языке M

В каждом файле на языке M можно описать несколько деревьев. Для каждого дерева указывается root-путь от общего корня. Для указания root-пути используется конструкция:

  <root> : <путь>

где:

  • <root> — ключевое слово;
  • «:» — стандартный разделитель;
  • <путь> — значение root-пути в виде пути в реестре (например, <root> : Ucb/Events). Путь задаётся перечислением имен ключей в реестре через обратный слеш («/»).

Текст, идущий за этой инструкцией до первого разрыва, воспринимается как описание дерева в формате M. Разрывом считается строка, состоящая только из пробелов, пустая строка (только перевод каретки) или конец файла.

Значение root-пути не обязано быть уникальным. При этом, если указываются одинаковые root-пути, их содержимое накладывается друг на друга (дополняется в порядке загрузки).

Большой блок строковых данных может быть вставлен в значение ключа с применением конструкции @nonutx.

  <key 1> : @nonutx
    Line 1
    ..
    Line L
  <key 2> : <value 2>

Инструкция @nonutx блокирует в M анализ подключей заданного ключа (в примере <key 1>). Строки текста в подуровнях подключа перемещаются как есть, в значение <key 1>, в виде строки, и не образуют иерархии. Режим @nonutx обрывается первым ключем того же уровня, что и ключ, у которого в значении установлено @nonutx.

Формат файлов с метаданными

Мета-данные, описанные с помощью M, размещаются в текстовых файлах с расширением *.utx.

Файл с конструкциями языка M формируется в следующей последовательности:

  • Каждый файл может содержать описание нескольких источников (root).
  • Каждый источник начинается с ключевого слова <root>: (отступы от начала строки не допускаются).
  • За <root> следует root-путь в общем дереве мета-данных (например /ucb/data).
  • Строки, следующие после инструкции <root>:, считаются строками, содержащими данные — подключи ключа /ucb/data.
  • Строки данных заканчиваются пустой строкой (разрывом).
  • После разрыва ожидается либо конец файла, либо новая инструкция <root>:.
  • Конец файла также считается признаком завершения блока данных.

Пример 1:

; комментарий
<root>: /ucb/data  ; Задаем корневую папку
MyKey1 : 0
  MyKey2 : This is my key 2 value
MyKey3 : False

Пример 2:

; комментарий
<root>: /ucb/data  ; Задаем корневую папку
MyKey1 : 0
  MyKey2 : This is my key 2 value
MyKey3 : False

<root>: /ucb/events  ; Задаем корневую папку /ucb/events
MyKey1 : 0
MyKey2 : This is my key 2 value
MyKey3 : False
  MyKey3SubKey1
  MyKey3SubKey2 : True