Массивы данных расширений

Большинство существующих расширений системы используют данные, оформленные как массивы данных расширений. Каждое расширение использует свои структуры данных и правила их интерпретации. Однако все такие массивы, помимо собственно данных, содержат ещё и системную часть, позволяющую идентифицировать принадлежность данных к конкретному расширению, название и аннотацию данных массива, а также права доступа к его данным из статей, созданных другими пользователями. Благодаря наличию этих сведений система может создавать специфические меню данных, включаемых в конкретную статью.

Структура массивов данных расширений

С точки зрения системы все массивы данных расширений представлют собой специальным образом организованные Массивы Ключ/Значение. Элементы такого массива (разделы массива данных) разделяются на системные и несистемные (собственно элементы данных).
Системные данные определяют принадлежность данных к конкретному расширению, дают их общее описание (название и аннотация), права доступа к массиву для их использования в статье или в личных данных конкретных пользователей. Кроме того, отдельные расширения могут использовать системные данные во внутренний целях как описатели особенностей обработки данных массива (метаданные). Имена элементов системных данных должны начинаться с символов "$.", а далее должно следовать односимвольное имя раздела.
Общими системными разделами массива данных расширений являются:
$.x - определяет имя функции расширения, ответственной за обработку массива данных;
$.n - название массива данных, отображаемое при выводе меню разделов данных статьи;
$.a - аннотация публикации, отображаемая при выводе меню разделов данных статьи;
$.d - определение прав доступа к данным со стороны импортирующей их статьи;
$.p - перечень индивидуальных определений прав доступа к данным из статей конкретных пользователей.
Системный раздел $.x является обязательным, если предполагается, что в статье будет использована функция sdf(), выводящая меню разделов данных, интегрированных в данную публикацию. Его значением является имя функции, которая будет вызвана для его обработки.
Правила задания значений других системных полей полностью аналогичны определениям одноимённых системных (предопределённых) секций публикаций [ см. Типы и структура используемых файлов ]. Отличием является порядок интерпретации правил ограничения доступа. В публикациях секции .d и .p определяют права доступа пользователей к самой публикации [см. Регулирование прав доступа к публикации ], а в определениях массива данных расширения разделы $.p и $.d регулируют права доступа владельца файла к указанному массиву. Если владелец (создатель) статьи или файла личных данных пытается использовать данные, принадлежащие другому владельцу в своей статье (личных данных), то система может заблокировать их импорт, если у владельца статьи (личных данных) нет прав на доступ к запрашиваемым данным. С другой стороны пользователь, обратившийся к статье, может не иметь права использовать массив данных, но может иметь право читать статью (личные данные), которая их использует.
Помимо общих системных элементов в массив данных расширения могут быть включены специфические для данного типа расширения элементы, которые конкретное расширение интерпретирует по собственному усмотрению. Имена таких элементов также должны начинаться с символов "$.", а далее может следовать односимвольное имя, не совпадающее с системными именами (n,a,d,p).
Несистемные разделы должны иметь имена, не начинающиеся с символов "$." и состоящие не менее, чем из двух символов. Они могут включать произвольный набор строк, правила построения которых регламентируются конкретным расширением. Количество несистемных разделов не регламентируется. В настоящей версии всех существующих расширений строки всех несистемных разделов при обработке объединяются в один массив. Возможно, в дальнейших версиях расширений различия несистемных секций будут каким-то образом учитываться.
Системные и несистемные разделы могут импортировать данные из других источников по команде ^ [ см. Заполнение секций данными из других источников ]. Поэтому, если одни и те же данные могут использоваться разными расширениями, то содержание несистемных разделов можно выделить в отдельный текстовый файл (txt) и в последующем импортировать его строки в несистемные разделы массивов данных разных расширений.

Функции доступа к массивами данных расширений

Устройство массивов данных обычно специфично для каждого расширения. Однако для манипулирования массивами данных расширений в системе имеется несколько общих функций.
sdf() - выводит меню выбора секций, содержащих массивы данных расширений. Переходы по выбранным из него ссылкам вызывают загрузку и выполнение расширения, связанного с данным массивом.
Например, статья в файле shurem/foto/2007_07.s имеет следующее содержание:
Нет прав на просмотр кода публикации
В каждую секцию данных этой статьи импортируются данные из секций другой публикации. Все импортируемые данные являются массивами расширения "Альбом". Секция Содержание (.s) данной статьи содержит только вызов функции sdf(), которая сканирует текст статьи и выводит меню найденных массивов данных расширений. Как выглядит эта статья при обращении к ней можно посмотреть по ссылке 2007-07. Непал-Тибет
vdr(ud) - выводит содержимое массива данных расширения, заданного указателем данных ud.
Например, секция .2007-07-15 статьи в файле shurem/foto/2007_07.s имеет следующее содержание:
Нет прав на просмотр кода публикации
Это массив данных расширения "Альбом". Определение $.x albom указывает, что при обращении к этому массиву должна использоваться функция albom(). Для непосредственного обращения к данным этой секции можно использовать функцию vdr(), которая опознает какой функции следует отправить эти данные для обработки.
Разметка
@vdr("shurem/foto/2007_07.s~2007-07-15")
Вывод
2007-07-15. Китай. Лхаса. Монастыри
Список  Поток  1  2  3  4  5  6  7 



Оцените публикацию по предложенной шкале
-5  -4  -3  -2  -1  0  +1  +2  +3  +4  +5

Статистика Код