Язык M описывает мета-информацию в иерархической форме. В формате присутствуют ключи и их значения. Пара ключ-значение разделяется двоеточием:
<имя ключа> : <значение ключа>
Помимо значения ключ может иметь дочерние ключи. По умолчанию каждый ключ описывается на одной строчке. У любого ключа может быть несколько подключей. Чтобы показать их, используется идентация (сдвиг на два пробела). Например:
<имя ключа 1> : <значение ключа 1> <имя подключа 1> : <значение подключа 1> <имя подключа 2> : <значение подключа 2> <имя ключа 2> : <значение ключа 2>
В отношении имён ключей действуют следующие правила:
Интерпретатор автоматически преобразовывает значения ключей в variant (универсальный тип данных), распознавая числа, строки, логические значения. Поддерживаются следующие типы значений ключей:
Если строка однострочная, то её не обязательно обрамлять кавычками:
Key1 : My string value
Логические значения задаются указанием True или False (все остальные формы записи будут переведены в строки). Если в строке нет символа «:» то считается, что значение ключа пустое (empty). Если нужно представить многострочное значение ключа, следует использовать кавычки.
MyKey1 : “Test string, very very long long
String”
Поддерживаются однострочные комментарии, начинающиеся с точки с запятой «;» (допускается также знак «|»). Если где-то нужно вставить символ «;», то он должен быть дублирован «;;», что подавит комментирующий эффект. Символ «;» в рамках строки, ограниченной кавычками («"»), комментирующего эффекта не имеет.
Пример:
WriteLogs : False ; Настройка писать ли логи
В каждом файле на языке M можно описать несколько деревьев. Для каждого дерева указывается root-путь от общего корня. Для указания root-пути используется конструкция:
<root> : <путь>
где:
Текст, идущий за этой инструкцией до первого разрыва, воспринимается как описание дерева в формате 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 формируется в следующей последовательности:
Пример 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