Описываемый ниже формат описания тестов изначально разрабатывался для проведения тестов по английскому языку на базе системы дистанционного обучения Distance Learning Belarus (далее - DL). При разработке был использован универсальный подход с возможностью расширения, поэтому формат может быть использован для создания практически любых интерактивных заданий. В этом можно убедиться, ознакомившись с приведенными ниже примерами. Все приведенные и некоторые другие образцовые задания установлены в курсе "Английский язык\English Demo" на DL. Там можно попробовать их порешать.
Разработанный формат предоставляет разработчику заданий большую свободу в оформлении и, в то же время, достаточно полный набор разнообразных шаблонов подтестов, которые могут комбинироваться почти в любых сочетаниях. Шаблоны берут на себя заботу о конкретном представлении и позволяют разработчику сконцентрироваться на содержании.
Фактически, условие представляет собой HTML-файл, содержащий вызовы ASP-функций, соответствующих упомянутым шаблонам. Все шаблоны определены в файле engprocs.inc. Например, по месту вызова
<%combo("|a|an|the")%>
<select name="ansX"><option><option>a<option>an<option>the</select>
Тесты хранятся в ASP-файлах, обработанное содержимое которых подставляется в единую форму с кнопкой отправки. Пользователь вводит в поля формы свои ответы и отправляет на проверку.
Кроме введения нового формата был также автоматизирован процесс ввода правильных ответов. Теперь для этого достаточно просто выбрать правильные ответы из пользовательского интерфейса, отметить галочку, которая видна только редакторам курса, и нажать кнопку отправки.
Технически это реализовано следующим образом. Среди всех полей формы ищутся такие, которые начинаются на "ans"+номер. Их значения в порядке возрастания номеров записываются в файл ответов специального формата. Количество таких полей заносится в свойство Cost текущей задачи в базе данных DL.
`Euler [was] the first [prove] the law [of] quadratic reciprocity.
`[Choice] of method [as a rule] depends on the problems [to solved].
<li>Euler <%choose("was")%> the first <%choose("prove")%> the law <%choose("of")%> quadratic reciprocity.
<li><%choose("Choice")%> of method <%choose("as a rule")%> depends on the problems <%choose("to solved")%>.
Стили, активно используемые для отображения заданий, вынесены в отдельный файл
engstyle.css.
Рекомендуется при разработке новых заданий или даже их типов не злоупотреблять
заданием атрибутов явным образом, а добавлять новые универсальные стили в этот файл.
Также может оказаться полезным задать в файле задания некоторого специфического задания локальный стиль для изменения параметров отображения стандартных элементов. Например, так сделано в задаче Zodiac для изменения вида таблицы, создаваемой вызовом classify_table().
Как указано выше, файл задания на самом деле представляет собой фрагмент html-кода, содержащего также вызовы ASP-функций, которые единообразным образом вставляют в код фрагменты, соответствующие полям отправляемой формы ответа, а также, возможно, скрипты, которые заполняют эти поля значениями.
Наличие на странице встроенного звука, видео или flash не требует дополнительных полей формы или скриптов. Поэтому я решил не заводить дополнительных сковывающих функций-оболочек, а предоставить создателю задач полную свободу по вставке мультимедийных элементов на чистом html.
Например, видео на страничку вставит следующий фрагмент:
<embed autoplay=false src="images/Media/RuRock.mpg">
Пример для flash:
<embed height=350 width=650 src="images/media/hestekor.swf">
Исключение было сделано только для звука. Вызов sound("Goodbye.wav") вставит следующее:
<a href="images/media/Goodbye.wav"><img alt="Play sound" border=2 src="images/media.gif"></a>
Конечно, чтобы ссылаемые ресурсы были доступны пользователям, они должны быть выложены в веб-каталог, желательно dl/images или webfiles в папке задачи в загружаемом на DL архиве.
Редакторам курса доступна специальная галочка "Сохранить ответы как правильные" (см. Рисунок). При отмеченной галочке текущие введенные в форму значения сохраняются в файле с правильными ответами. Это самый удобный способ. При необходимости допустимо редактирование этого файла вручную.
Вот пример файла с правильными ответами для задания RuRock:
countby=test [1] ans1=1 score[1]=1 [2] ans2=22 score[2]=1 [3] ans3=a path score[3]=1 [4] ans4=1 score[4]=1 [5] ans5=1 score[5]=1 total=score[1]+score[2]+score[3]+score[4]+score[5]Для элементов edit и combo сохраняется непосредственно введенный текст.
Для облегчения редактирования правильных реализована возможность повторной
загрузки ранее сохраненных ответов в пользовательскую форму. Это позволяет
легко исправлять ошибки или вводить правильные ответы по частям. Рядом с
галочкой "Сохранить ответы как правильные" редактору доступна кнопка "Загрузить сохраненные ответы".
Внимание: описанная возможность не реализована для сложных скриптовых элементов
(ache, choose и classify_table).
Также в курсах, где пользователям разрешено просматривать правильные ответы, им доступна кнопка "Показать правильные ответы", по нажатии на которую правильные ответы загружаются в страницу, но при этом кнопка "Отправить" исчезает.
Здесь приведен очень краткий перечень основных тегов HTML, используемых в файлах заданий. Для более подробных сведений обращайтесь к любой справке по HTML. Например, в gsu/prolib.
В таблице приведены названия тегов и краткие описания их назначения. При клике на названии тега откроется страница с примером задания, его использующим.
<p> |
---|
Задает параграф, который начинается с новой строки и отделен
от остального текста отступами. Завершающий тег необязателен. Необязательный параметр align задает выравнивание. Он может иметь одно из значений: left (слева), center (по центру), right (справа). Этот параметр может быть указан для различных тегов. |
<h3> |
То же, что <p>. Задает заголовок. Вообще, есть семейство тегов <hX>, где X может быть от 1 до 7 и задает размер заголовка. |
<br> |
Перевод строки. Завершающий тег не нужен. |
<ul> |
Задает ненумерованный список. |
<ol> |
Задает нумерованный список. |
<li> |
Задает элемент списка. Завершающий тег не нужен. |
edit(value [, size [, maxlength]]) Picture Example task(id=997) |
---|
Вставляет строку ввода длины size знакомест. Изначально строка содержит значение value. If size=null then size=value.length. |
combo(text) Picture Example task(id=2002) |
Вставляет выпадающий список. Элементы списка должны содержаться в параметре text, разделенные символом '|'. |
next() Picture Example task(id=3656) |
Увеличивает счетчик тестов и сбрасывает счетчик радиокнопок (см. radio). |
radio() Picture Example task(id=3656) |
Вставляет радиокнопку. Несколько radio, заключенных между последовательными вызовами next, образуют группу радиокнопок. В группе может быть единовременно выбрана только одна радиокнопка, которая и соответствует ответу на тест. На этом элементе базируются более сложные составные. Вызывать эту функцию напрямую неудобно. |
hidden(value) Picture Example task(id=none) |
Вставляет скрытое поле со значением равным value. Далее значение может быть изменено с помощью встроенных в страницу задания скриптов. Имя элемента формы формируется по обычному правилу: "ansN", где N - номер теста. |
radio_group(...) Picture Example task(id=3781) |
Вставляет группу радиокнопок. Функция может принимать произвольное число аргументов, каждый из которых может состоять из произвольного числа фрагментов, разделенных символом '|'. В итоге, каждый по порядку фрагмент является подписью одной кнопки. Кнопки выстроены в столбик. |
hradio_group(...) Picture Example task(id=3783) |
То же, что и для radio_group(). Но кнопки выстроены в линию в одной строке. |
check() Picture Example task(id=3655) |
Вставляет флажок. См. также описание функции store_count(). |
store_count() Picture Example task(id=3655) |
Вставляет в форму скрытое поле, которое содержит количество тестов в задании. Функция должна вызываться последней во всех заданиях, использующих check(). Она необходима для корректной обработки на сервере неотмеченных флажков. (Почему-то, в этом случае отсылаемое содержимое формы вообще не содержит соответствующего неотмеченному флажку элемента). |
choose(str) Picture Example task(id=3651) |
Вставляет фрагмент текста str, обладающий дополнительными свойствами. Фрагмент можно кликнуть, при этом текст станет красным и перечеркнутым. Фрагменты, вставленные несколькими вызовами choose между последовательными вызовами next, принадлежат одной группе. В один момент времени может быть выделен только один фрагмент. Каждой группе соответствует один тест задания. Выбранный фрагмент соответствует ответу на тест. Подразумевается, что в каждом тесте нужно выбрать один, неправильно употребленный фрагмент текста. |
choose_start() & choose_finish() Picture Example task(id=3651) |
Эти функции должны быть вызваны по одному разу, если в задании используется функция choose. Соответственно, в начале и в конце файла задания. Они вставляют в текст результирующей html-страницы скрипты, необходимые для обеспечения функциональности, упомянутой в описании функции choose. |
sound(fname) Picture Example task(id=3777) |
Вставляет красивую картинку-кнопочку, ссылающуюся на заданный файл. Параметр fname задает относительный путь к файлу, отталкиваясь от корневого каталога dl. Эта функция не генерирует никаких элементов формы задания. |
classify_table(l, r [,w [,clicktype]]) Picture Example task(id=3863) |
Эта функция генерирует сразу целое задание. Задание состоит в том, чтобы установить соответствие между элементами двух столбцов таблицы. Содержимое левого и правого столбца передается, соответственно, через параметры l и r. Текст, соответствующий соседним ячейкам таблицы, как обычно, разделяется символами '|'. Необязательный параметр w, задает ширину таблицы. Элементы правого столбца таблицы можно удобным образом менять местами с помощью кликов. Последовательность элементов правого столбца автоматически случайным образом переупорядочивается. Необязательный параметр clicktype задает тип реакции на клик пользователя (значения 1 или 2). |
ache(str) Picture Example task(id=31773) |
Вставляет особый тип теста - "головоломка". Параметр str задает последовательность слов, разделенных пробелами. Она случайным образом переупорядочивается и предоставляется пользователю. Суть состоит в том, чтобы пользователь привел последовательность в правильное состояние. Подразумевается, что такое состояние, очевидное автору и предполагаемому пользователю, существует. Вызов ache формирует на странице предложение и две кнопки. Каждое слово предложения можно кликнуть, после чего оно станет активным. Активное слово можно передвигать влево или вправо по предложению с помощью кликов по соответствующим кнопкам. Полученное предложение отсылается на сервер для сверки с правильным, указанным автором. |
ache_start() & ache_finish() Picture Example task(id=2008) |
Эти функции должны быть вызваны по одному разу, если в задании используется функция ache. Соответственно, в начале и в конце файла задания. Они вставляют в текст результирующей html-страницы скрипты, необходимые для обеспечения функциональности, упомянутой в описании функции ache. |
map(imgsrc, ...) Picture Example task(id=3961) |
Вставляет рисунок с привязанной к нему картой. Ссылка "dl/"+imgsrc должна указывать на необходимый рисунок. Далее map может принимать некоторое количество аргументов, описывающих одиночные области карты. Каждый аргумент должен иметь вид "title;shape;coords", где title используется как название области, а shape и coords полностью соответствуют одноименным параметрам html-тега area и задают форму и координаты области. При клике на области в текущее выбранное поле ввода формы, созданное вызовом map_tests, заносится значение title. |
map_tests(...) Picture Example task(id=3961) |
См. также описание map. Функция принимает непостоянное число параметров. Для каждого параметра в страницу вставляется следующая группа элементов: радиокнопка, текстовая подпись (само значение параметра) и поле ввода. Клик на радиокнопке делает соответствующую группу выбранной. После клики на разных областях карты, созданной вызовом map, отражаются на значении поля ввода, которое и служит ответом пользователя на задание. |
map_start() & map_finish() Picture Example task(id=3961) |
Эти функции должны быть вызваны по одному разу, если в задании используется функция map. Соответственно, в начале и в конце файла задания. Они вставляют в текст результирующей html-страницы скрипты, необходимые для обеспечения функциональности, упомянутой в описании функции ache. |
check_text(text) Picture Example task(id=3958) |
Вставляет флажок с присоединенным текстом. Клики по тексту действуют на флажок. |
radio_text(text) Picture Example task(id=none) |
Вставляет радиокнопку с присоединенным текстом. Клики по тексту действуют на кнопку. |
count(i) Picture Example task(id=12550) |
Вставляет число: <текущее количество заданий>+i |
[h]check_group(...) Picture Example task(id=2000) |
Вставляет группу галочек. Функция может принимать произвольное число аргументов, каждый из которых может состоять из произвольного числа фрагментов, разделенных символом '|'. В итоге, каждый по порядку фрагмент является подписью одной галочки. Галочки выстроены в столбик (check_group) или в строку (hcheck_group). Все созданные галочки обрабатываются как один ответ. |
flash(src[, anscnt[, width[, height[, debug[, flashvars]]]]]) Picture Example task(id=21442) |
Вставляет флэшку. Обязательный параметр "src" задает ссылку относительно корневого каталога сайта на вставляемый флэш-модуль.
Все отстальные параметры - необязательные. Anscnt необходим для корректной обработки нескольких ответов пользователя для одной флэшки, он указывает количество в ней формируемых ответов на подтесты (по умолчанию считается 1). Параметры width и height задают, соответственно, ширину и высоту в странице прямоугольника, содержащего флэшку. Параметр debug логического типа включает отображение скрытых полей данных, связанных с данной флэшкой. Параметр flashvars позволяет передавать произвольную строку в качестве параметра содержащих флэшку тегов <OBJECT> и <EMBED>. Для шаблона флэш также доступна форма вызова с именованными параметрами (см. ниже). При таком вызове параметры можно переставлять и опускать произвольным образом. |
check1() and check1_text() Picture Example task(id=2000) |
Данные шаблоны являются полными функциональными аналогами check() и check_text(). Но состояние галочек кодируется 0 или 1. Это обстоятельство позволяет избавиться от необходимости вызывать store_count() в конце каждого задания с галочками. С другой стороны, для этой цели потребовалось добавить в страницу скрытые скрипты, что повысило требовательность к браузеру пользователя. Так же стоит заметить, что для этих шаблонов загрузка правильных ответов полноценно работает только в Microsoft Internet Explorer. |
sound_image(fname, img_name) Picture Example task(id=31795) |
Вставляет пользовательскую картинку, ссылающуюся на заданный файл. При наличии поддержки ActiveX в броузере при клике по картинке звук проигрывается прямо в странице. Эта функция не генерирует никаких элементов формы задания. |
param(name, value) Picture Example task(id=2002) |
Не создает никаких визуальных элементов, но позволяет задавать произвольные параметры отображения и обработки задачи. Возможные значения параметров: name="CanShowAnswers", value=true/false - показывать ли кнопку "Подсмотреть правильные ответы". |
multipages Picture Example task(id=31773) |
Описание в разработке… |
CopyLeft © Vadim Kopichenko, 2003-2004