Quiz Markup Language (QuizML)
Что такое QuizML?
QuizML (Quiz Markup Language) — это простой формат разметки на основе XML, предназначенный для описания тестов различного назначения. Основными целями разработки была простота представления опросника, легкость изменения и независимость от платформы. Для достижения этих целей в качестве исходного формата был выбран язык XML, с помощью которого и была создана обобщенная структура опросника, подходящая для большинства типовых тестов.
Авторы
Версии
Текущая версия: QuizML 1.0
Статус
Бета
Замечания и комментарии можно отправить на адреса разработчиков, указанные выше.
Права
Все права принадлежат авторам
Разрешается использовать формат для любых целей, изменения и распространения, как это указано в лицензии GNU GPL. Описание формата представляется «как есть». Авторы не несут ответственности за последствия использования и не дают каких-либо гарантий относительно надежности, безопасности и т.п..
1. Введение
Quiz Markup Language (QuizML) — это простой, многоцелевой и расширяемый формат метаданных для описания различных (не любых!) тестов, опросников, анкет, голосований и т.п. QuizML является прикладным форматом на основе XML и наследует все присущие XML преимущества, как, впрочем, и недостатки.
2. Предыстория
Одним из путей, решающих вопрос нехватки времени при увеличении объема изучаемой информации, является применение тестирования в ходе изучения учебной дисциплины. Тесты позволяют получить объективные оценки уровня знаний, умений, навыков и представлений, выявить пробелы в подготовке. Тесты позволяют перейти к адаптивному обучению и контролю знаний.
За время развития компьютерных технологий появилось множество программных продуктов, предназначенных для разработки и проведенияя тестов различной сложности и направленности. Каждый из них имеет какие-то преимущества, но всем (опробованным авторами) присущ один недостаток — несовместимость форматов при переходе с одной программы на другую. Конечно же имеются возможности тем или иным способом переместить тест из одной системы в другую, но это сопровождается по меньшей мере сохранением структуры и наполнения опросника в какой-то стандартизованный формат (.txt, .sql и т.п.), а потом импорт из этого формата. Еще один отмеченный недостаток — это непереносимость таких программ, что существенно ограничивает их применение.
Для устранения приведенных недостатков и был разработан формат QuizML, который был опробован при проведении промежуточных и итоговых тестов по ряду дисциплин учебного плана кафедры АСОИУ Омского технического университета.
3. Цели разработки
Основная цель разработки QuizML — создание унифицированного формата описания тестов, применимого для контроля знаний в изучаемой предметной области.
Дополнительными целями явились:
- простота;
- платформонезависимость;
- переносимость на уровне прикладных программ.
4. Требования
Исходные требования к формату:
- способ хранения — текстовый файл;
- способ отображения — не регламентируется;
- типовая структура;
- возможность использования в сети;
- небольшое количество элементов описания структуры (тегов);
- человекопонятные наименования элементов;
- возможность создавать вопросы с вариантами ответов вида «один из нескольких», «несколько из нескольких» и «свободный ответ»;
- целостность теста, обеспечиваемая хранением вопросов, вариантов ответа и правильных ответов в одном файле;
- возможность указать время ответа на каждый вопрос;
- возможность расширения и модификации;
- возможность хранения информации о первоисточнике (гиперссылка или текст) для каждого из вопросов.
- возможность привязки к предметной области (например, к учебной дисциплине) по идентификатору или по названию категории.
Предъявленные требования оказалось возможным выполнить с помощью XML. Краткие пояснения к реализации некоторых требований приведены ниже.
4.1 Формат хранения и обеспечение переносимости
Текстовый формат позволяет создавать и изменять ранее созданные тесты с помощью обычного текстового редактора (gedit, vim и т.п.). Поскольку текстовый формат (text/*) является стандартным mime-типом, то он поддерживается всеми системами и проблема переносимости легко решается.
4.2 Отображение
Имеются реализации контрольных тестов на основе QuizML с веб-интерфейсом, написанным на php (например, http://4stud.info/controls/ ).
В разработке (на уровне учебных заданий) — оболочки на языках ObjectPascal и C#.
4.3 Типовая структура
Описание теста на QuizML представлено в виде структуры: Тест -> Список_Вопросов
. Список_Вопросов, в свою очередь, представлен в виде Вопрос -> Описание_Вопроса
. Короткий пример, поясняющий сказанное приведен в листинге 1.
Листинг 1. Пример описания теста
<?xml version="1.0" encoding="UTF-8"?> <test cid="1"> <title>Сетевые технологии</title> <question type="radio" qid="1"> <text> Какой из компонентов сетевого приложения отвечает за реализацию бизнес-логики? </text> <time>30</time> <choice aid="2">Компонент представления</choice> <choice aid="3">Компонент доступа к ресурсам</choice> <choice aid="1">Прикладной компонент</choice> <answer>1</answer> </question> <question type="text" qid="2"> <text> Какой метод протокола HTTP используется для пересылки данных в теле запроса? </text> <time>30</time> <answer>post</answer> <explanation link="http://www.w3.org/Protocols/rfc2616/rfc2616.html"> См. RFC2616 </explanation> </question> <question type="checkbox" qid="5"> <text>Какие права доступа к файлу могут быть установлены в UNIX?</text> <time>30</time> <choice aid="1">чтение</choice> <choice aid="2">запись</choice> <choice aid="3">исполнение</choice> <choice aid="4">архивирование</choice> <answer>1,2,3</answer> <explanation> Права доступа в UNIX-системах регламентируют операции чтения, записи и исполнения для различных пользователей и групп. Смысл этих операций различается для файлов и каталогов. </explanation> </question> </test>
4.4 Поддержка сети
Файл, содержащий описание теста в формате QuizML, является источником данных. Он может быть размещен на сетевом ресурсе, при этом доступом к файлу управляют операционная система и сервисное и/или прикладное ПО.
4.5 Именование и количество элементов
В именах элементов используются полные англоязычные слова (test, answer, question и т.п.), которые делают описание более простым и понятным для пользователя. В именах атрибутов поддерживается тот же принцип, за исключением атрибутов-идентификаторов (cid, qid, aid). Эти имена представлены сокращениями от category identifier, question idintifier, answer identifier.
Общее количество используемых элементов (тегов описания) — не превышает десятка.
4.6 Виды ответов и ограничение времени
Значение атрибута type
тега question
задает правила интерпретации списка вариантов ответа:
- один ответ из списка вариантов;
- несколько возможных ответов из списка вариантов;
- ответ в свободной форме (текстовый ввод).
Атрибут time
тега question
задает время, выделенное на ответ в секундах. Программа-парсер может суммировать значения этого атрибута для всех вопросов и управлять общей продолжительностью выполнения теста. Либо отображать текущий вопрос в течении указанного времени, а потом переходить к следующему.
Минимальное и максимальное значения времени не регламентируются. Фактическое значение времени определяется автором опросника в соответствии с применяемой им методикой.
4.7 Целостность теста
Синтаксис и структурная целостность теста обеспечивается общими правилами для XML-документов (well-formed XML) и может быть проверена валидаторами XML, например, здесь.
Тег question
инкапсулирует всю информацию о вопросе, вариантах ответа на него, правильном ответе и источнике информации. Пример описания вопроса приведен листинге 2.
Листинг 2. Пример использования тега question
... <question type="checkbox" qid="5"> <text>Какие права доступа к файлу могут быть установлены в UNIX?</text> <time>30</time> <choice aid="1">чтение</choice> <choice aid="2">запись</choice> <choice aid="3">исполнение</choice> <choice aid="4">архивирование</choice> <answer>1,2,3</answer> <explanation> Права доступа в UNIX-системах регламентируют операции чтения, записи и исполнения для различных пользователей и групп. Смысл этих операций различается для файлов и каталогов. </explanation> </question> ...
4.8 Возможность расширения и модификации
QuizML — открытый формат, разработчики могут изменять его в соответствии с потребностями, при этом помня об обеспечении совместимости. Иначе, программы-парсеры сторонних разработчиков скорее всего будут вести себя непредсказуемо.
5. Синтаксис
Общий синтаксис, необходимость, порядок следования и расположение элементов QuizML приведены в DTD (Document Type Definition). Ниже приведены комментарии к элементам этой структуры.
<test>
Назначение: Корневой элемент как этого требует спецификация XML. Содержит прочие вложенные элементы. Для идентификации теста может содержать атрибут cid
.
Применение: Обязательный. Единственный.
Синтаксис: <test [cid="число"]>прочие_элементы</test>
Атрибуты:
- cid
- Идентификатор теста, задаваемый целым числом. Программа-парсер может использовать это значение, например, в качестве параметра скрипта в гипертекстовом списке тестов.
<title>
Назначение: Название или тема опросника.
Применение: Обязательный.
Синтаксис: <title>текст</title>
<comment>
Назначение: Комментарий или краткое описание теста.
Применение: Необязательный.
Синтаксис: <comment>текст_комментария</comment>
<question>
Назначение: Описание вопроса. Инкапсулирует такую информацию, как текст вопроса, тип вопроса, варианты ответов, правильный ответ, время на ответ и справочную информацию. Должен быть хотя бы один элемент question
, иначе тест как таковой теряет смысл.
Применение: Обязательный.
Синтаксис: <question qid="число" type="checkbox|radio|text">текст_вопроса</question>
Атрибуты:
- qid
- question identifier — идентификатор вопроса, задаваемый целым числом. Значение
qid
должно быть уникальным в пределах опросника. Спецификация не требует, чтобы значенияqid
были последовательными или упорядоченными. - type
- Значение атрибута
type
задает тип вопроса и может быть использовано программой-парсером для генерации соответствующих элементов пользовательского интерфейса. Можно использовать следующие значения:
Далее приведены вложенные элементы, используемые в <question>.
<text>
Назначение: Вопрос как таковой. Вопрос должен быть представлен в виде строки символов или другом, совместимом с тектовым форматом, виде.
Применение: Обязательный.
Синтаксис: <text>текст_вопроса</text>
<time>
Назначение: Целое число, задающее время в секундах, отведенное на ответ. Программа-парсер должна просуммировать значения атрибута time
всех элементов question
, чтобы получить максимальное время выполнения теста.
Применение: Опциональный. Если хотя бы в одном элементе question
использован этот элемент, то имеет смысл задать его и во всех прочих.
Синтаксис: <time>количество_секунд_на_ответ</time>
<choice>
Назначение: Вариант ответа. Значением элемента должна быть текстовая строка или данные в совместимом формате. Каждый вариант имеет свой номер, задаваемый атрибутом aid
(answer identifier).
Применение: Опциональный. Если тип вопроса подразумевает выбор варианта (см. radio и checkbox ), то должны быть использованы по меньшей мере два элемента choice
в описании вопроса. Если выбор варианта ответа не подразумевается (вопрос типа "text"), то элементы choice
не нужны и программа-парсер должна их проигнорировать.
Синтаксис: <choice aid="число">текст_ответа</choice>
Атрибуты:
- aid
- Целое число, идентифицирующее вариант ответа. Значение этого атрибута должно быть уникальным в пределах родительского элемента
<question>
.
<answer>
Назначение: Символьная строка, содержащая правильный ответ.
Применение: Обязательный, зависимый. Содержание строки зависит от типа вопроса (значения атрибута type). Если вопрос подразумевает выбор одного ответа, то в ответе должно быть значение, равное значению aid
правильного варианта. Если возможно несколько правильных ответов, то в ответе должны быть перечислены номера правильных ответов, разделенные символом «,» (запятая). Если ожидается ввод пользовательского варианта, то в ответе должна быть строка-образец, с которой программа-парсер должна сравнить полученный от пользователя ответ.
Синтаксис: <text>aid_правильного_ответа|список_правильных_aid|текст_ответа</text>
<explanation>
Назначение: Информация о первоисточнике, формальное определение или подобная информация, из которой можно узнать правильный ответ. Эта информация может быть использована, например, при разработке обучающих тестов или в качестве преамбулы к вопросу.
Применение: Необязательный. Фактический смысл информации из этого элемента определяется автором опросника и разработчики программ-парсеров должны это учитывать.
! Пока нет решения, как исключить неоднозначность в использовании этого элемента, при этом сохранив общую структуру формата и обеспечив универсальность описания, приемлемую как для обучающих, так и для контрольных тестов. Т.е., если <explanation> отображается при проведении итогового теста, то будет своего рода шпаргалкой, если не отображается в ходе обучающего — то снижает эффективность обучения.
Синтаксис: <explanation [link="адрес"]>текст</explanation>
Атрибуты:
- link
- Адрес первоисточника, как это описано в URL (RFC 1738) и URI (RFC 3986).
6. Примеры
«Один из нескольких»
В листинге 3 приведен пример описания вопроса типа «один из нескольких». В этом примере определено время на ответ в 30 секунд, отсутствует описание источника информации (<explanation>), в качестве правильного ответа указан вариант 1.
! Обратите внимание: Нумерация вариантов не последовательная и это не баг, а возможность. Дело в том, что автор опросника теоретически может ошибиться в нумерации и разработчики парсеров должны учитывать это.
Листинг 3. Вопрос типа «один из нескольких»
<question type="radio" qid="1"> <text> Какой из компонентов сетевого приложения отвечает за реализацию бизнес-логики? </text> <time>30</time> <choice aid="2">Компонент представления</choice> <choice aid="3">Компонент доступа к ресурсам</choice> <choice aid="1">Прикладной компонент</choice> <answer>1</answer> </question>
На рис. 1 — результат обработки этого описания и представления его в виде html-файла.

Рис. 1. Пример отображения вопроса типа «radio»
«Несколько из нескольких»
В листинге 4 — пример описания вопроса типа «несколько из нескольких» (значение checkbox).
Листинг 4. Вопрос типа «несколько из нескольких»
<question type="checkbox" qid="52"> <text> Какие функции представляет промежуточное ПО? </text> <time>40</time> <choice aid="1">обеспечение прозрачного доступа к сетевым сервисам и приложениям</choice> <choice aid="2">возможность передачи данных в гетерогенной сетевой среде</choice> <choice aid="3">независимость от других сетевых сервисов</choice> <choice aid="4">обеспечение надежности, масштабируемости и постоянной готовности систем</choice> <choice aid="5">представление интерактивного доступа пользователя к сетевому сервису</choice> <answer>1,3,4</answer> <explanation link="http:4stud.info/networking/lecture05.html"> См. Конспект лекций. Тема № 5 «Middleware» </explanation> </question>
На рис. 2 — результат обработки этого описания и представления его в виде html-файла. Несмотря на наличие в описании тега explanation, он не использован при обработке, т.е. это по сути фрагмент контрольного теста.

Рис. 2. Пример отображения вопроса типа «checkbox»
7. Примечания
Настоящая спецификация не регламентирует алгоритмы сравнения, используемые для проверки ответов. В реализованной системе тестирования для этого была использована библиотечная функция similar_text языка php. Практика показала, что она не панацея и не позволяет определить точное соответствие в ряде случаев.