Создание/Изменение узлов и документов

Процедуры создания/изменения производятся в унифицированных формах ввода, содержание которых практически идентично для узлов и документов. При создании документов форма, как правило, оказывается пустой (если в конфигурации ветки не установлены данные по умолчанию). При изменении узлов и документов соответствующие поля формы заполняются значениями, присвоенными в результате последней корректировки.
Форма содержит следующие объекты:
 1. Заголовок - поле ввода многострочного текста.
 2. Имя записи - поле ввода однострочного текста.
 3. Настройки узла (для узлов) или Содержание (для документов) - поле ввода многострочного текста.
 4. Вставить пустые строки - checkbox.
 5. Убрать форматирование - checkbox.
 6. Аннотация - поле ввода многострочного текста.
 7. Доступ - раскрывающийся список.
 8. Ввод (только для узлов) - раскрывающийся список.
 9. Просмотр кода - раскрывающийся список.
10. Поле ввода списка пользователей записи.
11. Принять - кнопка.
12. Отменить - кнопка.
В поле "Заголовок" вручную вводится заголовок записи, который будет отображаться в списке элементов узла. Поле может содержать произвольный текст, а также вычисляемые поля данных (см. раздел "Поля переменных данных "), которые автоматически заполняются при отображении заголовков в списке элементов узла. Если в данное поле ничего не введено, то обычно система пытается заполнить его на основании первой строки содержания документа (см. параграф "Разметка текста документа").
Поле "Имя записи" отображается только для пользователей со статусом не ниже "Эксперт". Сюда может быть введено имя записи, которое наряду с номером записи может использоваться для обращения к документу. Однако, следует иметь ввиду, что номер записи всегда уникален, а имя может оказаться неуникальным, поскольку при вводе данных система не проверяет уникальность имени. Использование имен может быть очень полезным только при переносе данных между несколькими сайтами, функционирующими на данной программно-технологической платформе. Выявить возможные конфликты имен можно с помощью специального отчета (см. "Имена документов" раздела "Меню пользователя ").
В поле "Настройки узла"/"Содержание" для узлов могут быть введены данные конфигурирования узла (см. раздел "Конфигурирование узлов "), а для документов - их содержание (см. далее).
Разворачивающийся список "Доступ" позволяет определить права доступа к элементу данных. Он имеет следующие значения:
Элемент списка Код Доступ
Все
0
Все посетители сайта видят и могут открыть документ/войти в узел
Читатели
1
Неавторизованные пользователи запись не увидят
Писатели
2
Неавторизованные пользователи и читатели запись не увидят
Эксперты
3
Неавторизованные пользователи, читатели и писатели запись не увидят
Список
4
Запись увидят все, но просмотреть смогут только определенные владельцем пользователи
Владелец
5
Запись не увидит никто, кроме владельца, редакторов и администраторов
Редактор
6
Запись увидят только редакторы и администраторы
Администратор
7
Запись увидят только администраторы
Важно понимать, что редакторы имеют права на любые манипуляции (просмотр, изменение, удаление, выгрузка, перенос) с любыми записями любых пользователей, кроме тех случаев, когда доступ ограничен уровнем администраторов. Разумеется, администраторам доступно все и всегда.
Разворачивающийся список "Просмотр кода" позволяет определить права пользователей при просмотре кода документа/узла. Порядок установки прав доступа к коду полностью аналогичен списку "Доступ".
Разворачивающийся список "Ввод" имеется только для узлов. Перечень его значений тот же, что и у списка "Доступ". Установленное здесь значение определяет какой категории пользователей разрешено создавать документы и узлы в данном узле. Например, доступ может быть разрешен всем, но создание документов только экспертам. Ограничение касается не только возможности ручного ввода записей, но и попыток их пакетной загрузки и переноса из других узлов.
Поле ввода списка пользователей записи имеет смысл заполнять только в том случае, если устанавливается тип доступа "Список". Сюда вручную вводятся имена пользователей, которым разрешен доступ к записи. При такой организации доступа войти в узел или открыть документ смогут только те пользователи, которые указаны в этом списке, а также сам владелец и редакторы.
Ограничение доступа к узлам не влияет на возможности доступа к содержащимся в нем документам. Доступ к ним устанавливается совершенно независимо от правил доступа к самому узлу. Это означает, что в скрытом для большинства узле вполне могут содержаться документы, из которых может производиться импорт фрагментов в другие документы (см. команды :paste и :import раздела "Команды первой позиции ").
Установка флага "Вставить пустые строки" приводит к тому, что перед записью в базу данных каждый символ конца строки для непустых строк содержания текста документа дублируется с тем, чтобы между парами непустых строк была одна пустая строка. По правилам подготовки документов в системе пустая строка - конец абзаца. Поэтому, если вводимые (загружаемые) данные не содержат пустой строки между абзацами, то рекомендуется включать этот флаг и система автоматически включит промежутки между абзацами. Кроме того, при этом будут удалены лишние (более одной) пустые строки.
Установка флага "Убрать форматирование" может быть использована в тех случаях, когда текст принудительно отформатирован: абзац выделяется отступом в несколько пробелов и содержит внутри символы перевода строк. В таком формате, например, хранится большинство книг на сайте lib.ru. При установке флага система уберет лишние переводы строк, исходя из правила: более 2 пробелов в начале строки - новый абзац. Следует предупредить, что функция не всегда дает приемлемый результат.
При нажатии на кнопку "Принять" введенные данные будут записаны в базу данных. Кнопка "Отменить" запись не производит. В обоих случаях пользователь возвращается к списку записей текущего узла.

Структура и разметка текста документа

Каждый документ представляет собой специальным образом размеченный текст, состоящий из одной или нескольких секций. Признаком начала новой секции является символ "точка" (.) в ПЕРВОЙ позиции строки, который означает, что данная строка является заголовком секции.
Везде далее под понятием "строка текста" понимается произвольный набор символов, ввод которого завершается нажатием клавиши Enter.
Структура строки заголовка секции: .тип имя;параметры условие
Из всего перечисленного необходимым является только тип. Он определяет порядок обработки данных секции. Используются следующие типы секций.
.text - текст, который может включать дополнительную управляющую информацию (см. разделы "Поля переменных данных " и "Команды первой позиции ").
.html - HTML-код. Данные этой секции никак не обрабатываются и вставляются в текст выходного документа как есть.
.htmx - HTML-код с полями переменных данных (см. "Поля переменных данных"). Система вычисляет поля переменных данных (см. раздел "Поля переменных данных "), вставляет их в текст, который далее переносится в выходной документ без изменений.
.code - преформатированный текст. Текст, отображаемый по принципу "как написано".
.cite - цитата. Текст, оформляемый специальным стилем cite группы стилей текст текущей конфигурации (см. раздел "Конфигурирование узлов ").
.album - альбом изображений. Включает перечень файлов с изображениями, включаемых в выходной документ по определенным в заголовке секции правилам (см. параграф "Секция .album").
.test - описание набора тестовых заданий. Включает описание одного или нескольких тестовых заданий, которые в включаются в выходной документ в виде форм ввода данных (см. параграф "Секция .test").
.vote - описание опроса. Включает описание вариантов выбора для одного опроса, который включается в выходной документ в виде формы ввода данных. (см. параграф "Секция .vote").
.voc - словарь. Задает определения набора терминов, которые в дальнейшем могут быть использованы для автоматической генерации тестов разной структуры (см. параграф "Секция .voс").
.data - данные. Присваивает значения отдельным переменным (см. параграф "Секция .data").
.csv - данные табличной структуры. Позволяет определить таблицу данных, аналогичную структуре csv-файлов (см. параграф "Секция .csv").
.tensor - описывает ассоциативный массив данных произвольной структуры и размерности (см. параграф "Секция .tensor").
.list - список. Определяет список элементов некоторого множества (см. параграф "Секция .list").
.module - модуль (функция). Определяет программу с формальными параметрами и локальным пространством переменных, которая может вызываться программами секций .do (см. параграф "Секция .module").
.do - программа. Определяет программу, исполняемую при формировании выходного документа (см. параграф "Секция .do").
Имя секции служит для идентификации связанных с ней данных при последующей обработке. Оно не обязательно для секций .text, .html, .htmx, .code, .cite, .do. Но если предполагается, что данные секции в последующем понадобится импортировать в другой документ, то именование секции обязательно. Рекомендуется именовать секции по правилам присвоения имен переменным в традиционных языках программирования: первый символ - латинская буква, далее - латинские буквы, цифры и знак подчеркивания (_). Пространство имен секций локально для каждого документа. Однако, если предполагается, что в документ будут импортироватся данные других документов рекомендуется заранее предусмотреть, чтобы в составном документе имена секций были уникальны. Впрочем, это требование актуально только для довольно сложных случаев компоновки.
Параметры специфичны для каждого типа секций и в ряде случаев могут отсутствовать. В общем случае они разбиваются на группы, разделяемые символом "точка с запятой" (;), а внутри групп - запятыми (,). Пробелы в списке параметров недопустимы. Для указания пробела в заголовках некоторых секций используется аббревиатура $p.
Условие - необязательный параметр, определяющий выражение (см. раздел "Описание встроенного языка "), в зависимости от истинности которого секция обрабатывается или пропускается. Указание условия в строке заголовка секции позволяет, например, отображать или не отображать какой-либо текст в зависимости от статуса пользователя, результов его тестирования предыдущими документами, значений ранее установленных переменных, доступных в контексте данного документа и т.д.
Следующие за заголовком строки секции интерпретируются в зависимости от ее типа. По умолчанию считается, что документ начинается с секции .text. Поэтому в простейшем случае документ может состоять из одной неименованной секции .text, заголовок которой указывать не нужно.

Секция .text

Секция .text может содержать:
обычный текст;
инструкции шрифтового выделения;
поля переменных данных (см. раздел "Поля переменных данных ");
команды первой позиции (см. раздел "Команды первой позиции ").
При вводе текста необходимо учитывать, что концом абзаца является пустая строка (то есть в конце абзаца необходимо дважды нажать клавишу Enter) или любая команда первой позиции. Если две строки идут подряд, без пустой строки между ними, то вторая (если она не содержит команду) рассматривается как продолжение текущего абзаца.
Если между строками введено несколько пустых строк, то они воспринимаются как одна. То есть сделать дополнительные пропуски между абзацами, вводя несколько пустых строк нельзя и для этой цели нужно использовать одну из команд первой позиции.
Кроме того, следует иметь ввиду, что нельзя сделать промежутки между отдельными словами предложения, вводя между ними много пробелов. Несколько идущих подряд пробелов воспринимаются как один.
Для форматирования текста внутри абзаца могут использовать произвольные конструкции языков HTML и CSS. Они (пока!) не анализируется системой и вставляются в текст без изменения. Однако следует иметь ввиду, что для вставки больших фрагментов "чистого" НTML-кода лучше использовать секции .html и .htmx, поскольку только в этом случае к абзацу не будет применяться форматирование, свойственное обычному тексту.
Вместо тегов HTML для простого оформления текста рекомендуется использовать инструкции шрифтового выделения.
Для выделения фразы жирным шрифтом:
''фраза'/
Для выделения фразы курсивом:
``фраза`/
Разумеется, того же результата можно достичь, используя соответствующие конструкции HTML или CSS, но во-первых, так быстрее набирать, и, во-вторых, в ряде случаев можно предусмотреть особый порядок обработки указанных последовательностей символов. Чего нельзя сделать для HTML тегов, анализ текста на наличие которых не предусмотрен.

Секции .html и .htmx

Секции предназначены для вставки готового HTML-кода в текст документа. Данные секции .html вставляются "как есть", без каких-либо преобразований. Секции .htmх могут включать поля переменных данных (см. раздел "Поля переменных данных "). Поля раскрываются и полученные строки без других преобразований вставляются в выходной документ.
Скорее всего, в дальнейшем обработка этих секций будет производиться только в документах, владельцами которых являются пользователи со статусом не ниже, чем "Эксперт".

Секция .code

Секция предназначена для вывода данных в том виде, как они написаны в коде документа. Команды не выполняются, поля не обрабатываются, HTML-теги отображаются как обычный текст. При выводе данные оформляются стилем code.

Секция .cite

Строки текста секции выводятся без изменений, но с соблюдением переноса строк, и оформляются стилем cite.

Секция .table

Секция .table предназначена для оформления простых таблиц. Данные могут задаваться строками, столбцами или потоком (см. далее). Ячейки могут содержать текст, числа, ссылки, изображения, мультимедиа-объекты, формулы, счетчики.
Формат заголовка: .table name;type;n;delim условие
name - имя таблицы (необязательный);
type - способ размещения данных (необязательный):
rows - строка текста = строка таблицы (значение по умолчанию);
cols - строка текста = столбец таблицы;
list - поток данных (значение каждой ячейки в одной строке): сначала значения всех столбцов первой строки таблицы в порядке следования, потом значения всех столбцов второй строки и т.д.
Для rows и cols значения в строке текста разделяются символом точка с запятой (;).
n - число столбцов для способов размещения rows и list; число строк для cols . Для rows и cols параметр необязателен, для list - обязателен (если не указан - секция игнорируется).
delim - разделитель элементов (используется только для rows и cols, по умолчанию "точка с запятой" (;) ). Символ не должен присутствовать в данных ячеек.
Разделители:
$c - запятая (,);
$s - точка с запятой (;);
$d - точка (.);
$t - табуляция;
$p - пробел;
любой другой символ.
Последующие строки секции содержат значения отображаемые в таблице.
Рассмотрим примеры. Пусть секция .table содержит данные:
11;12;13;14
21;22;23;24
31;32;33;34
Если заголовок задан в виде .table t1, то будет выведена следующая таблица:
11
12
13
14
21
22
23
24
31
32
33
34
Если заголовок задан в виде .table t2;cols, то матрица будет транспонирована:
11
21
31
12
22
32
13
23
33
14
24
34
Конечные значения (столбцов, строк) могут быть опущены. Для указания на максимальное число столбцов используется параметр n. Пусть в теле секции заданы следующие данные:
11;12;13
21;22;23;24
31;32
Если заголовок задан в виде .table t3, то будет выведено следующее:
11
12
13
21
22
23
24
31
32
Обработка производится по факту: сколько есть столбцов в данной строке, столько и будет ячеек. Чтобы отобразить таблицу с конечными пустыми ячейками в строках 1 и 3 заголовок следует задать в виде .table t4;rows;4,
11
12
13
21
22
23
24
31
32
Способ размещения list может быть полезен для оформления таблиц с ячейками, имеющими длинные текстовые значения или значениями, включающими разделитель (;). Однако главное его предназначение состоит в упрощении процедуры оформления в документе таблиц по данным, выгруженным из текстовых процессоров. При сохранении таблиц в виде текста они обычно "размазывают" таблицы в поток построчно: сначала значения всех столбцов первой строки, потом - всех столбцов второй и т.д. То есть именно так, как предполагается в таблице со способом размещения list.
Пусть в теле секции заданы следующие данные:
Показатель
План
Факт
Выручка
100
110
Себестоимость
80
85
Тогда секция с заголовком .table t5;list;3 и указанным выше содержимым выдаст следующий результат:
Показатель План Факт
Выручка
100
110
Себестоимость
80
85
В ячейках можно размещать не только текст, но и специальным образом интерпретируемые значения. Признаком является управляющий символ в первой позиции ячейки:
= - вычисление выражения;
? - поле ввода данных;
! - внутренняя ссылка;
$ - внешняя ссылка;
& - картинка;
+ - счетчик.
Назначение управляющих символов =,?,!,$ идентично их назначению в полях переменных данных (см. раздел "Поля переменных данных "). Символ & позволяет вставить в таблицу изображение, а символ + - организовать автоматическую нумерацию строк.
Рассмотрим примеры вставки специального содержимого в ячейки.
Пусть где-то ранее в секциях .text документа были выданы следующие инструкции, устанавливающие значения переменных:
@vp=100
@vf=110
@sp=80
@sf=85
@rp=vp-sp
@rf=vf-sf
Теперь определена таблица с заголовком .table t6, имеющая следующее содержимое:
=bold('Показатель');=center(bold('План'));=center(bold('Факт'));=center(bold('Отклонение'));=center(bold('%'))
Выручка;=vp;=vf;=vf-vp;=string(round((vf-vp)*100/vp,1),'%')
Себестоимость;=sp;=sf;=sf-sp;=string(round((sf-sp)*100/sp,1),'%')
Валовая прибыль;=rp;=rf;=rf-rp;=string(round((rf-rp)*100/rp,1),'%')
На выходе получится:
Показатель
План
Факт
Отклонение
%
Выручка
100
110
10
10%
Себестоимость
80
85
5
6.3%
Валовая прибыль
20
25
5
25%
Уже даже на этом простом примере видно, что более наглядно было бы представить таблицу потоком, с заголовком .table t7;list;5
=bold('Показатель')
=center(bold('План'))
=center(bold('Факт'))
=center(bold('Отклонение'))
=center(bold('%'))
Выручка
=vp
=vf
=vf-vp
=string(round((vf-vp)*100/vp,1),'%')
Себестоимость
=sp
=sf
=sf-sp
=string(round((sf-sp)*100/sp,1),'%')
Валовая прибыль
=rp
=rf
=rf-rp
=string(round((rf-rp)*100/rp,1),'%')
Показатель
План
Факт
Отклонение
%
Выручка
100
110
10
10%
Себестоимость
80
85
5
6.3%
Валовая прибыль
20
25
5
25%
Рассмотрим примеры использования в таблицах счетчиков, картинок и ссылок. Пусть задано определение таблицы с заголовком .table t8;list;4 и следующим содержимым:
+
&http://shurem.ru/pic/2010-01-01_12-01-51_011.jpg^200^150
Эфиопия. Женщины племени Мурси
!http://shurem.ru/index.php?act=60&id=595 Весь альбом
+
&http://shurem.ru/pic/2007-07-16_17-34-11_083.jpg^200^150
Тибет. Лхаса. Дворец Потала
!http://shurem.ru/index.php?act=60&id=552 Весь альбом
+
&http://shurem.ru/pic/2009-05-15_14-42-46_242.jpg^200^150
Перу. Мачупикчу
!http://www.shurem.ru/index.php?act=60&id=574 Весь альбом
+
&http://shurem.ru/pic/2011-01-04_09-15-19_018.jpg^200^150
Гватемала. Антигуа
!http://www.shurem.ru/index.php?act=60&id=618 Весь альбом
+
&http://shurem.ru/pic/2012-03-16_09-02-15.jpg^200^150
Индия. Каджурахо
!http://www.shurem.ru/index.php?act=60&id=636 Весь альбом
На выходе получим следующее:
1.
Эфиопия. Женщины племени Мурси Весь альбом
2.
Тибет. Лхаса. Дворец Потала Весь альбом
3.
Перу. Мачупикчу Весь альбом
4.
Гватемала. Антигуа Весь альбом
5.
Индия. Каджурахо Весь альбом
Для вставки более сложных таблиц, например, с объединением строк и столбцов, секция .table не предназначена и придется прибегнуть к программированию на встроенном языке. Здесь Ваши возможности ограничены только Вашей фантазией.

Секция .album

Секция .album предназначена для вставки в документ серий графических изображений, представленных в табличной форме. По заданным в заголовке секции правилам изображения пропорционально уменьшаются для приведения к единому формату. Каждое из включаемых в альбом отформатированных изображений оформляется как ссылка на полноразмерное изображение. При переходе по ссылке система выводит альбом в форме для покадрового показа изображений, форматируя их под размер окна браузера с возможностью навигации.
Формат заголовка секции: .album name;cols;w,h;thdir;imdir условие
name - имя секции (альбома);
cols - число столбцов в таблице изображений (по умолчанию 4);
w - ширина форматирования изображения (по умолчанию 200px);
h - высота форматирования изображения (по умолчанию 150px);
thdir - каталог уменьшенных изображений (по умолчанию параметр tmb.path конфигурации);
imdir - каталог полноразмерных изображений (по умолчанию параметр img.path конфигурации).
Все перечисленные параметры являются необязательными. При отсутствии всех или части параметров система будет форматировать альбом исходя из собственных соображений.
В теле секции перечисляются имена файлов с изображениями в той последовательности, в которой они будут отображаться в альбоме. Формат строки тела секции:
xsource thumb условие
x - командный символ (может отсутствовать);
source - источник данных;
thumb - имя файла уменьшенного изображения (не обязателен);
условие - условие включения файла в альбом.
Если x отсутствует, то source - имя файла. Если перед именем файла указан символ ~, то к имени файла добавляется путь, определяемый параметром imdir заголовка. Если imdir в заголовке секции не указан, то считается, что imdir содержится в параметре img.path конфигурации узла. Если img.path не установлен или является пустым, то source должен быть точным указателем на файл изображения (URI).
Если указан командный символ !, далее без пробелов должен следовать номер группы файлов, зарегистрированной как список (сборник) файлов (см. параграф "Списки информационных объектов" раздела "Структура данных, навигация и основные манипуляции с данными ").
Если указан командный символ ?, далее без пробелов должна быть указана маска файлов, включаемых в альбом. Эти файлы должны находиться на том же сайте, где размещен содержащий альбом документ. Обратиться по маске к файлам других сайтов нельзя.
Параметры thumb и условие необязательны. Если нужно указать условие, но thumb не задается, то в качестве thumb нужно задать символ "минус" (*). Если используются командные символы ! или ?, то thumb игнорируется и картинки форматируются в соответствии с параметрами w и h из заголовка секции (см. далее).
Параметр thumb - имя файла уменьшенного изображения, которое будет включено в альбом. Если thumb не задан, то способ построения уменьшенного изображения для альбома определяется в зависимости от параметра thdir заголовка секции. Если thdir задан или определен параметр tmb.path конфигурации, то в качестве уменьшенного изображения принимается файл с тем же именем, что и source, но размещенный в каталоге thdir (tmb.path). Проверка наличия этого файла и соответствие его размеров параметрам w и h из заголовка секции не производится.
Если thumb не указан, а thdir не определен, то система форматирует картинку в соответствии с w и h из заголовка секции. Картинка пропорционально уменьшается до таких размеров, чтобы по ширине быть не больше, чем w, а по высоте - не больше, чем h. Аналогично форматируются все серии картинок, включенных командами ! и ?.
Параметр условие определяет условие, при выполнении которого файл или группа файлов включаются в альбом.
Пусть определена секция .album test;5;200,150;http://shurem.ru/tmb/;http://shurem.ru/pic/
!4 * role()>2
~2010-01-01_12-01-51_011.jpg
~2007-07-16_17-34-11_083.jpg
?users/shurem/mountains/*.jpg - role()>0
http://shurem.ru/pic/2009-05-15_14-42-46_242.jpg * week_day(date())=5
http://shurem.ru/pic/2011-01-04_09-15-19_018.jpg * week(date())>10 & week(date())<30
Список файлов под номером 4 будет включаться в альбом только для пользователей со статусом выше, чем Читатель (1). Следующие два изображения будут взяты в альбом из каталога http://shurem.ru/tmb/. Если пользователь, просматривающий документ авторизован, то в альбом будут включены все файлы, с расширением jpg из каталога users/shurem/mountains/. Картинка http://shurem.ru/pic/2009-05-15_14-42-46_242.jpg будет включаться в альбом только по пятницам, а картинка http://shurem.ru/pic/2011-01-04_09-15-19_018.jpg только с 11 по 29 неделю года. Там, где имена файлов указаны явно, в альбом будут включаться их уменьшенные изображения из каталога http://shurem.ru/tmb/. Они будут оформлены как ссылки на одноименные файлы из каталога http://shurem.ru/pic/. Файлы из списка 4 и из каталога users/shurem/mountains/ будут пропорционально изменены так, чтобы их ширина не превышала 200 пикселей, а высота - 150. При этом они также будут оформлены как ссылки на оригиналы.
     

Секция .test

Секция .test предназначена для встраивания в выходной документ учебных тестов, направленных на оценку знания посетителями той или иной темы. Для авторизованных пользователей описание тестовых заданий в выходном документе замещается табличными формами, предлагающими пометить правильные ответы на поставленный вопрос или ввести значение ответа на вопрос в поле ввода. В нижней части документа выводятся кнопки, позволяющие принять ответ. После ввода ответов на предложенные вопросы система проверяет их правильность, формирует оценку ответа и выводит отчет со статистикой выполнения тестовых заданий по данному документу. При наличии в документе секций .test cистема запоминает факт входа в него любого авторизованного пользователя. Если пользователь открыл документ с тестом, но не стал отвечать на поставленные в нем вопросы (закрыл документ без ответа) эти данные сохраняются и при очередном входе данного пользователя в систему она записывает в базу данных нулевой результат прошлого тестирования по каждому тесту (документу), на который не было дано ответа.
ВАЖНО! В отличие от старой версии программного обеспечения, используемого на сайте fa-kit.ru, в данной версии результат фиксируется не по каждому тестовому заданию, а по документу с несколькими тестовыми заданиями в целом. Если в документе содержится несколько секций .test и в каждой из них приведено несколько тестовых заданий, то все задания проверяются и в базу данных записывается только средний балл по данной попытке тестирования. Детальные сведения по каждому тестовому заданию тоже фиксируются и могут быть просмотрены в специализированных отчетах. Однако общий балл по результатам прохождения тестов конкретного документа формируется только на основе средних баллов по попыткам.
Секция .test может не иметь параметров. Указывать имя секции имеет смысл только в том случае, если в дальнейшем планируется импортировать данную секцию в другой документ.
Тест состоит из основного вопроса и вариантов ответа на него. При составлении теста его автор задает эти данные, а также указывает правильные ответы из представленного перечня вариантов. При выполнении теста тестируемому предлагается указать правильные варианты ответов. На основании их сопоставления с "истинно" правильными ответами, указанными составителем, выставляется оценка по результатам данного теста.
Если все выбранные пользователем варианты ответов являются неверными выводится оценка "Ответ неверен" (0). Если среди выбранных вариантов ответа есть как верные, так и неверные, то выводится оценка "Ответ противоречив" (1). Если пользователь выбрал только часть верных вариантов, то выводится оценка "Ответ неполон" (2). Если выбраны все верные варианты, то выводится оценка "Ответ верен" (3).
Тело секции .test строится по следующим правилам.
Первая строка - формулировка вопроса, допускающего один или несколько ответов. В последующих строках задаются варианты ответов. Если первым символом строки указан символ "-", то ответ считается неверным. Если указан символ "+", то ответ верен.
Допустимо также использование чисел или произвольных наборов символов как вариантов правильного ответа. Для этого первым символом должен быть указан символ "=", далее должно быть размещено число или строка правильного ответа, после которой указывается символ "~" и далее текст варианта ответа или вспомогательного вопроса. Общий формат конструкции таков:
=[строка ответа]~текст
Если формирование ответа сопряжено с приближенными вычислениями, где допустима определенная ошибка округления, то строка ответа может включать две части:
=val:delta~вопрос
val - ответ;
delta - точность.
Ответ (otvet - введенное пользователем значение) считается верным, если abs(otvet-val)
Множество примеров готовых учебных тестовых заданий можно найти на сайте fa-kit.ru в сервисе "Тест".
Наряду с описанным здесь механизмом, система позволяет формировать тесты автоматически на основе словарей данных (см. параграф "Секция .voc" и описание команд :load и :test в разделе "Команды первой позиции ").

Секция .vote

Секция .vote предназначена для встраивания в документ форм для сбора статистики мнений посетителей сайта по произвольной тематике. Принять участие в опросе может любой авторизованный пользователь. Результаты опросов являются анонимными. Пользователь, создавший опрос, не может узнать кто и как голосовал. Однако система отслеживает участников опроса с тем, чтобы максимально затруднить сознательную "накрутку" результатов. Повторный ответ на опрос перезаписывает предыдущий. Если пользователь дал ответ на опрос, то повторно ответить на тот же опрос ему не предлагается. То есть при повторном входе в документ, содержащий опрос или в документ, в который этот опрос импортируется, он будет проигнорирован и пользователю представлен не будет. С помощью специального отчета владелец опроса может получить сводную статистику по результатам созданных им опросов.
Заголовок секции задается в форме .vote name;form условие.
name - уникальное для данного документа имя опроса. Обязательный параметр.
form - необязательный параметр. Если он опущен или равен 0, то в опросе варианты ответов развертываются снизу вверх. Если form=1, то варианты ответов развертываются горизонтально.
Первая строка тела секции .vote должна содержать формулировку вопроса. В последующих строках задаются варианты ответов. В отличие от старой версии программного обеспечения сайтов fa-kit.ru и samopiska.ru в первой позиции строки варианта ответа указывать символ "=" не обязательно.
Для авторизованных пользователей описание опросов в выходном документе замещается табличными формами, предлагающими выбрать единственный ответ на поставленный вопрос. В нижней части документа выводятся кнопки, позволяющие принять ответы. После ввода ответов на предложенные вопросы система выводит отчет со сводными результатами по тем опросам документа, в которых пользователь представил свое мнение.
Помимо непосредственного задания опросов в документе, они могут быть импортированы в него из других документов (см. команды :paste, :import, :load, :vote из раздела "Команды первой позиции "). Кроме того, владелец узла средствами конфигурирования может навязать автоматическую вставку опросов во все документы (в том числе чужие) данного узла и узлов, лежащих ниже (см. раздел "Конфигурирование узлов ").

Секция .voc

Секция .voc предназначена для формирования ведения и ведения словарей. Словари могут использоваться для автоматизации составления учебных тестов (см. команды :load и :test раздела "Команды первой позиции ").
Формат заголовка секции: .voc name, где name - необязательное имя словаря. Тело секции записывается в форме:
термин = определение
По описанию словаря система включает в выходной документ таблицу, где слева отображен термин, а справа определение. Данные можно отсортировать как по терминам, так и по определениям. Под термином и определением можно понимать что угодно. Например, для автоматизации составления тестов можно в качестве термина написать начало фразы, а в качестве определения - ее окончание. На основании таких записей система позволит сформировать тест, где для начала фразы надо будет выбрать правильное продолжение.

Секция .data

Секция .data предназначена для присвоения значений переменным и формирования сложных информационных структур, которые в дальнейшем могут использоваться для вычислений.
Формат заголовка секции: .data name;x условие, где:
name - имя секции (необязательно, если второй параметр отсутствует и не предполагается импортировать секцию в другие документы);
x - ключевое слово list или ничего. Если указано слово list, то система сформирует ассоциативный массив с именем name, элементами которого будут перечисленные в теле секции переменные. Если list не указано, то будут созданы отдельные переменные.
Тело секции состоит из инструкций вида:
var value
var - имя переменной (индекс массива, если в заголовке указан list);
value - значение переменной.
Если сразу после var без пробела указан символ :, то value интерпретируется как список значений, разделенных пробелами. В результате var становится одномерным массивом.
Примеры 1. Заголовок секции задан в виде .data x. Тело секции содержит следующие строки:
x1 100
x2 200
xa: 300 400 500 600
Такая секция создаст 3 переменные: x1=100, x2=200 и массив xa со значениями xa(0)=300 xa(1)=400 xa(2)=500 xa(3)=600
Примеры 2. Заголовок секции задан в виде .data ar;list. Тело секции содержит следующие строки:
x1 100
x2 200
xa: 300 400 500 600
Такая секция создаст массив ar c элементами: ar('x1')=100, ar('x2')=200, ar('xa',0)=300, ar('xa',1)=400, ar('xa',2)=500, ar('xa',3)=600
В теле секции пустые строки и строки, начинающиеся с символа * игнорируются (так можно вставлять комментарии).

Секция .csv

Секция .csv предназначена для создания матриц, строки которых являются отдельными строками текста, а столбцы разделяются указанным в заголовке разделителем.
Формат заголовка секции: .csv name;cols;delim;key условие.
name - имя матрицы, которая будет создана в результате обработки секции;
cols - список имен столбцов матрицы через запятую;
delim - разделитель столбцов (по умолчанию точка с запятой);
key - имя столбца, значения которого будут индексами строк (необязателен).
Разделители:
$c - запятая (,);
$s - точка с запятой (;);
$d - точка (.);
$t - табуляция;
$p - пробел;
любой другой символ.
Тело секции состоит из строк, состоящих из значений, разделенных символом, заданным delim. Если в какой либо строке задано значений меньше, чем число имен столбцов, то оставшиеся элементы строки матрицы останутся неопределенными (будут иметь значение %null). Если задан параметр key, то значения соответствующего столбца будут перенесены в матрицу не в качестве значений, а в качестве индекса соответствующей строки. Если key не задан, то строки будут иметь естественную нумерацию: индексами станут последовательные натуральные числа, начиная с нуля.
Пусть заголовок секции .csv m1;a,b,c,d;$p, а в ее теле заданы следующие значения:
100 110 120 130
230 220 210 200
В результате будет сформирована матрица m1:
a
b
c
d
0
100
110
120
130
1
230
220
210
200
Пусть заголовок секции .csv m2;a,b,c,d;$p;d, а в ее теле заданы те же значения. Результатом станет формирование матрицы m2, значения столбца d которой стали индексами строк:
a
b
c
130
100
110
120
200
230
220
210

Секция .tensor

Секция .tensor предназначена для формирования массивов произвольной размерности.
Структура заголовка секции: .tensor name условие, где name - имя создаваемого массива. Тело массива содержит последовательность строк, определяющих ключ конечного элемента и его значение, разделенные пробелом. Индексы размерностей разделяются точкой. Если сразу после индекса указан символ "двоеточие" (:), то значение интерпретируется как последовательность значений, разделенных пробелами.
Пример. Определена секция с заголовком .tensor ten1 и телом, содержащим следующие данные:
a.a1.11 110
a.a1.12 120
a.a2.21 210
b.b1    1100
b.b2    1200
b.b3.1  3100
b.b3.2  3200
В результате будет сформирован массив со следующими элементами:
a.a1.11
a.a1.12
a.a2.21
b.b1
b.b2
b.b3.1
b.b3.2
110
120
210
1100
1200
3100
3200
Для работы с такими массивами имеется ряд встроенных функций, позволяющих делать выборки из них по маске ключа, позволяющие получать различные срезы данных тензора и получать на их основе регулярные информационные структуры: векторы и матрицы (см. раздел "Встроенные функции").

Секция .list

Секция .list предназначена для формирования множеств элементов. Элементами множества могут быть произвольные комбинации символов, которые могут быть набраны с клавиатуры. При окончании секции элементы множества анализируются. Если среди них оказываются ссылки на переменные, то значение данной переменной также включается в состав множества. Если переменная - массив (пока допускаются только одномерные массивы), то в множество отдельными элементами включаются все элементы массива. Если элемент является ссылкой на группу (список, сборник документов, пользователей или файлов), то в состав элементов множества включаются все элементы данной группы. На выходе секции .list получается одномерный массив, содержащий:
элементы непосредственно перечисленные в теле секции за исключением ссылок на переменные и группы;
значения скалярных переменных, ссылки на которые указаны в секции;
значения всех переменных массивов, ссылки на которые указаны в секции;
значения всех элементов групп (сборников), ссылки на которые указаны в секции.
В данной версии рекурсивная вставка элементов массива не поддерживается. То есть элементы вставляемых массивов и групп не анализируются на предмет наличия ссылок на другие группы или переменные. Поэтому определения множеств, включающих другие множества следует записывать последовательно сверху вниз с тем, чтобы включаемые множества элементов к моменту обработки данной секции уже были полностью "раскрыты".
Формат заголовка секции: .list name;delim условие, где name - имя создаваемого множества, а delim - необязательный параметр, являющийся разделителем элементов множества в строке:
$c - запятая (,);
$s - точка с запятой (;);
$d - точка (.);
$t - табуляция;
$p - пробел.
Тело секции содержит строки, в каждой из которых через разделитель delim перечисляются элементы множества. Если delim задан, то каждая строка может включать несколько элементов, разделенных delim. Если delim не задан, то считается, что одна строка - это один элемент множества. Если элемент начинается с символа @, то последующие его символы рассматриваются как имя переменной и ее значение(я) включаются в состав множества как отдельные элементы. Если элемент начинается с символа $, то он последующие его символы рассматриваются как номер группы (сборника) и все элементы группы включаются в состав множества как отдельные элементы.
Пример: секция определена с заголовком .list l1;$p и содержит следующие строки:
100 200 300 $4
@ten1
777 888 999
В результате ее обработки будет получен следующий массив:
0
100
1
200
2
300
3
110
4
120
5
210
6
1100
7
1200
8
3100
9
3200
10
777
11
888
12
999

Секция .module

Секция .module предназначена для определения программных модулей - функций, которые могут иметь формальные параметры и возвращать значение вызвавшей программе. (см. раздел "Описание встроенного языка "). При обработке секции модуль компилируется в байт-код и в последующем может быть вызван из программы в секции .do, другого модуля или непосредственно из тела секции .text с помощью встроенной функции call().
Структура заголовка .module name;args условие. Тело секции - программа на встроенном языке.

Секция .do

Секция .do предназначена для непосредственного выполнения содержащейся в ней программы на встроенном языке (см. раздел "Описание встроенного языка "). Как только система встречает такую секцию, содержащаяся в ней программа компилируется и тут же выполняется. Если программа в секции .do нуждается в вызове модулей, то они должны быть определены ДО появления этой секции.
Просмотр документов
Меню пользователя
Общая характеристика возможностей виртуального издательства
Функции формирования выходного документа
Конфигурирование узлов