Углубленное изучение QTI

Обработка ответов на вопросы и результатов тестов

Спецификация IMS Question and Test Interoperability (QTI) ― широко используемый стандарт разметки вопросов и других учебных материалов. Эта статья посвящена обработке ответов и результатов тестов в соответствии с QTI и рассказывает о том, что происходит, когда пользователь отвечает на вопрос.

Эрик Зигель, специалист по XML, Xatapult

Фото Эрика ЗигеляЭрик Зигель (Erik Siegel) ― самозанятый специалист по XML, проживающий в Нидерландах. Он работал научным сотрудником, программистом, системным аналитиком, менеджером проекта, архитектором систем и консультантом. В течение последних пяти лет занимается XML. Его основными клиентами являются издательства, а его деятельность в области XML охватывает консалтинг, преподавание, разработку схем и программирование на языке XSLT. Дополнительные сведения об Эрике и его компании можно получить на сайте на www.xatapult.com.



10.12.2012

В настоящее время наиболее широко используемым стандартом разметки оценок, тестов и отдельных вопросов в формате XML является IMS Question and Test Interoperability (QTI). IMS ― это организация по разработке стандартов электронного обучения (см. ссылку в разделе Ресурсы), которая работает над различными стандартами, начиная с метаданных для передачи информации об учащихся. QTI стандартизирует разметку вопросов в формате XML, систематизирует ее в тестах и оценках, добавляет метаданные и упаковывает все это в ZIP-файл.

Используемые сокращения

  • URI: Uniform Resource Identifier / Универсальный идентификатор ресурса
  • XHTML: Extensible HyperText Markup Language / Расширяемый гипертекстовый язык разметки

QTI XML описывает не только статические части вопросов, оценок и тестов (текст, макет, порядок следования и т.д.), но и их динамическое поведение — например, что делать, когда пользователь дает неправильный ответ, когда нужно что-то сообщить, и как подсчитать баллы. Этот процесс можно сделать сколь угодно сложным: QTI предоставляет средства программирования для решения этих задач.

К сожалению, работа этого механизма не совсем прозрачна. Документация строится вокруг определения стандарта, не объясняя его. Есть полезный документ с некоторыми примерами (IMS Question and Test Interoperability Implementation Guide— см. раздел Ресурсы), но он опять же мало что объясняет.

Эта статья посвящена обработке ответов и результатов в основном конструктивном блоке QTI: блоке оценки. Как оценить ответ пользователя, и как подсчитать баллы?

Блоки оценки QTI

Для тех, кто не знаком с QTI, этот раздел содержит краткий обзор блоков оценки.

Блоки оценки (или сокращенно блоки) ― это основные составные части QTI. Блок может состоять из сложной комбинации текста (с разметкой), многочисленных вопросов разного типа, боковых информационных панелей, мультимедийных объектов и т.п. Он определяет свой собственный метод обработки результатов и ответов — когда ответ считается правильным, подсчет баллов и комментарии.

На практике блоки оценки QTI обычно не сложны. Большинство тех, что я видел, содержат только один вопрос. Листинг 1 иллюстрирует анатомию блока оценки QTI.

Листинг 1. Анатомия блока QTI
<assessmentItem xmlns="http://www.imsglobal.org/xsd/imsqti_v2p1" ...>

<responseDeclaration ...> 
   <!-- Информация об ответах на вопросы -->
</responseDeclaration>

<outcomeDeclaration ...> 
   <!-- Внутренние переменные для вычисления оценки, управления комментариями и т.д. -->
</outcomeDeclaration> 

<itemBody ...> 
   <!-- Текст и интерактивные части (вопросы) --> 
</itemBody> 

<responseProcessing ...> 
   <!-- Как обрабатывать ответ пользователя --> 
</responseProcessing> 

<modalFeedback ...> 
   <!-- Необязательные комментарии для пользователя --> 
</modalFeedback> 

</assessmentItem>

Вот анализ разметки.

  • <responseDeclaration> содержит информацию об ответе (response) на вопрос: как определить, что он правильный, и как его оценить (необязательно)? <responseDeclaration> требуется для каждого отдельного вопроса из <itemBody>.
  • <outcomeDeclaration> определяет внутреннюю переменную — например, для возврата оценки в среду или управления комментариями для пользователя.
  • Один элемент <itemBody> содержит текст, разметку и вопросы для данного блока. Эта разметка очень похожа на XHTML, но будьте осторожны: хотя вы увидите знакомые элементы, например, <p> и <ul>, все это находится в пространстве имен QTI (http://www.imsglobal.org/xsd/imsqti_v2p1), а не в пространстве имен XHTML. Стандарт не требует поддержки работы в браузере, а это оставляет много места для интерпретации. Поэтому согласованная обработка представляет собой серьезную проблему при обмене информацией между разными механизмами обработки QTI.
  • В разделе <responseProcessing> описываются действия, выполняемые, когда студент заканчивает работу с блоком. Его содержание ― это простой язык программирования, в котором можно выполнять вычисления, установить переменные <outcomeDeclaration> и т.п.
  • Наконец, <modalFeedback> определяет обратную связь блока со студентом (например, сообщение: «Молодец» при правильном ответе).

В этой статье рассматриваются разделы <responseDeclaration>, <outcomeDeclaration> и <responseProcessing>.

Типы взаимодействия

Элемент <itemBody> в блоке может содержать операции взаимодействия с пользователем. Большинство этих взаимодействий – типичные вопросы (множественный выбор, упорядочение элементов, заполнение пробелов и т.п). Можно добавлять и такие взаимодействия, как «загрузить документ», «нарисовать картинку» или «просмотреть фильм».

В листинге 2 приведен пример вопроса типа множественного выбора.

Листинг 2. Пример множественного выбора
<itemBody> 
   <choiceInteraction responseIdentifier="RESPONSE" shuffle="true" maxChoices="1">
      <prompt>What is the top color of the Dutch flag?</prompt> 
      <simpleChoice identifier="A">Red</simpleChoice> 
      <simpleChoice >="B">Orange</simpleChoice> 
      <simpleChoice identifier="C">Black</simpleChoice> 
      <simpleChoice identifier="D">White</simpleChoice> 
   </choiceInteraction> 
</itemBody>

А в листинге 3 ― пример вопроса на упорядочение.

Листинг 3. Пример вопроса на упорядочение
<itemBody>
   <orderInteraction responseIdentifier="RESPONSE" shuffle="false">
      <prompt>Order these cities from north to south:</prompt> 
      <simpleChoice identifier="A">Tripoli</simpleChoice> 
      <simpleChoice identifier="B">Stockholm</simpleChoice> 
      <simpleChoice identifier="C">Paris</simpleChoice> 
   </orderInteraction> 
</itemBody>

В QTI v2.1 определены 20 типов взаимодействия. Полный набор примеров приведен в документе IMS Question and Test Interoperability Implementation Guide. Отметим, что не все механизмы обработки QTI поддерживают все эти типы.

Как видно из примеров, у взаимодействия есть атрибут responseIdentifier, который связывает его с <responseDeclaration> с тем же идентификатором. Это ссылка для обработки результатов и ответов, и я вернусь к этому позже.


Модель данных QTI

Важным условием понимания обработки ответов и результатов QTI является понимание модели данных и причин ее кажущейся сложности.

Когда пользователь заканчивает работу с блоком QTI, нужно проверить ответы. Для этого они представлены в виде данных. Иногда данные очень просты: Вопрос на множественный выбор с одним ответом просто возвращает идентификатор данного ответа, а взаимодействие с числовой шкалой возвращает число. Однако большинство типов взаимодействия сложнее. Например:

  • вопрос на множественный выбор с несколькими ответами возвращает набор идентификаторов ответа (пример: идентификаторы ответов, обозначенных как A, C и D);
  • упорядочение возвращает упорядоченный набор идентификаторов ответа (пример: последовательность идентификаторов C, A и B);
  • вопросы, в которых нужно связать слова друг с другом, возвращают набор пар идентификаторов (пример: "Слова (A, C), (B, D) и (E, F) связаны между собой".);
  • размещение объектов на карте возвращает набор точек (пример: "Объекты размещены в точках (102, 10), (125, 653)".).

Решение о правильности ответа принимается посредством признака <responseDeclaration>, привязанного к взаимодействию. Он должен иметь соответствующий тип данных для данного взаимодействия. Например, в листинге 4 предоставлена декларация <positionObjectInteraction> для таких вопросов, в которых нужно разместить объекты на изображении (например, на карте). Соответствующим типом данных является набор точек.

Листинг 4. Декларация ответа с набором точек
<responseDeclaration identifier="RESPONSE" baseType="point" cardinality="multiple">
   <correctResponse> 
      <value>118 184</value> 
      <value>150 235</value> 
      <value>96 114</value> 
   </correctResponse> 
</responseDeclaration>

Типы данных QTI определяются атрибутами baseType и cardinality элементов <responseDeclaration> и <outcomeDeclaration>:

  • Атрибут baseType определяет основной тип данных:
    • boolean
    • directedPair
    • duration
    • file
    • float
    • identifier
    • integer
    • pair
    • point
    • string
    • uri
  • Атрибут cardinality определяет количество элементов baseType и указывает, упорядочен ли набор. Возможны следующие значения:
    • multiple
    • ordered
    • record (специальный, довольно сложный тип, который в этой статье не обсуждается)
    • single

Обработка ответов и результатов

Когда пользователь закончил работу с блоком, производится обработка ответов и результатов. Процессор QTI должен решить такие задачи, как установление правильности ответа, подсчет оценки и выдача комментариев. в этом процессе участвуют разделы <responseDeclaration>, <outcomeDeclaration> и <responseProcessing>.

Декларации ответов

Идентификатор элемента <responseDeclaration> всегда связывает его с взаимодействием из тела блока. Пример приведен в листинге 5.

Листинг 5. Связывание взаимодействия с его декларацией ответа
<responseDeclaration identifier="QUESTION1" cardinality="single"
                     baseType="identifier"> 
   <correctResponse> 
      <value>B</value> 
   </correctResponse> 
</responseDeclaration> 
<itemBody> 
   <choiceInteraction responseIdentifier="QUESTION1" shuffle="false" maxChoices="1">
      <prompt>Is a goldfish a mammal?</prompt> 
      <simpleChoice identifier="A">Yes</simpleChoice> 
      <simpleChoice identifier="B">No</simpleChoice> 
   </choiceInteraction> 
</itemBody>

<responseDeclaration> ― не простая переменная: скорее, это объект в смысле объектно-ориентированного программирования. Этот объект имеет три «метода», которые можно использовать для вычислений в разделе <responseProcessing> блока:

  • получение ответа учащегося на вопрос;
  • получение правильного (оптимального) ответа на вопрос;
  • присвоение ответам оценок, так что ответы могут иметь больше нюансов, чем просто "правильно" или "неправильно".

В листинге 6 приведен пример <responseDeclaration>, в котором в зависимости от ответов рассчитывается оценка.

Листинг 6. Декларация ответа с вычислением оценки
<responseDeclaration identifier="QUESTION1" cardinality="multiple"
                     baseType="identifier"> 
   <correctResponse> 
      <value>A</value> 
      <value>D</value> 
   </correctResponse> 
   <mapping defaultValue="0" lowerBound="0" upperBound="1"> 
      <mapEntry mapKey="A" mappedValue="0.5"/> 
      <mapEntry mapKey="B" mappedValue="-0.5"/> 
      <mapEntry mapKey="C" mappedValue="-0.5"/> 
      <mapEntry mapKey="D" mappedValue="0.5"/> 
   </mapping> 
</responseDeclaration> 
<itemBody> 
   <choiceInteraction responseIdentifier="QUESTION1" shuffle="false" maxChoices="0">
      <prompt>Which are colors?</prompt> 
      <simpleChoice identifier="A">Red</simpleChoice> 
      <simpleChoice identifier="B">Small</simpleChoice> 
      <simpleChoice identifier="C">Soft</simpleChoice> 
      <simpleChoice identifier="D">Purple</simpleChoice> 
   </choiceInteraction> 
</itemBody>

Так что если учащийся представил ответы А (красный), B (малый) и D (фиолетовый), оценка согласно <mapping> будет рассчитываться как (А) 0,5 + (B) -0,5 + (D) 0,5 = 0,5.

Может показаться странным, что весь этот процесс происходит внутри <responseDeclaration> Определение правильности ответа и расчет оценки может выполняться и в разделе <responseProcessing> Казалось бы, нет прямой причины декларировать правильные ответы и оценки, когда их можно вычислить (или наоборот).

Дело в том, что QTI должна быть применима и к простым ситуациям — например, механизму обработки, который пропускает обработку ответов и учитывает только определенные правильные ответы. Тот же довод относится и к готовым шаблонам обработки ответов.

Декларации результатов

<outcomeDeclaration> - это QTI-эквивалент переменной. Пример приведен в листинге 7.

Листинг 7. Пример декларации результата
<outcomeDeclaration identifier="SCORE" cardinality="single" baseType="float">
   <defaultValue> 
      <value baseType="float">0.5</value> 
   </defaultValue> 
</outcomeDeclaration>

Эта разметка определяет переменную с именем SCORE и одним значением типа float, которое по умолчанию равно 0,5. Значение по умолчанию не обязательно. Если оно не указано, числовым переменным присваиваются начальные значения 0,0, а нечисловым ― NULL

Примечание:SCORE — это зарезервированное имя. Оно используется для цифровой оценки общего результата кандидата по блоку в среде.

<outcomeDeclaration> можно сделать более интеллектуальной, добавив структуру <matchTable> или <interpolationTable>. Я не встречал их на практике, и большинство механизмов обработки, вероятно, не поддерживает их, поэтому я не буду вдаваться в детали.

Обработка ответов

Раздел блока <responseProcessing> содержит инструкции касательно действий, предпринимаемых после того как пользователь предоставил ответ. Инструкции могут иметь два формата:

  • программа или сценарий на простом языке программирования, основанном на XML;
  • ссылка на готовый шаблон, который также является сценарием на языке программирования обработки ответов (потому что шаблоны — это готовые механизмы обработки, которые можно жестко запрограммировать, и тогда вам не понадобится полноценный интерпретатор сценариев.)

Язык сценариев

Сначала рассмотрим сценарий обработки ответа. Пример такого сценария приведен в листинге 8.

Листинг 8. Простой пример обработки ответа
<responseDeclaration identifier="RESPONSE_01" cardinality="single" 
                     baseType="string"> 
   <correctResponse> 
      <value>white</value> 
   </correctResponse> 
</responseDeclaration> 
<responseDeclaration identifier="RESPONSE_02" cardinality="single" 
                     baseType="string"> 
   <correctResponse> 
      <value>green</value> 
   </correctResponse> 
</responseDeclaration> 

<outcomeDeclaration identifier="SCORE" cardinality="single" baseType="float"/>

<itemBody> 
   <p>Fill in the right colors:</p> 
   <p>Snow is 
      <textEntryInteraction responseIdentifier="RESPONSE_01" expectedLength="5"/> 
      and grass is 
      <textEntryInteraction responseIdentifier="RESPONSE_02" expectedLength="5"/>.
   </p> 
</itemBody> 

<responseProcessing> 
   <responseCondition> 
      <responseIf> 
         <and> 
            <match> 
               <variable identifier="RESPONSE_01"/> 
               <correct identifier="RESPONSE_01"/> 
            </match> 
            <match> 
               <variable identifier="RESPONSE_02"/> 
               <correct identifier="RESPONSE_02"/> 
            </match> 
         </and> 
         <setOutcomeValue identifier="SCORE"> 
            <baseValue baseType="integer">1.0</baseValue> 
         </setOutcomeValue> 
      </responseIf> 
      <responseElse> 
         <setOutcomeValue identifier="SCORE"> 
            <baseValue baseType="integer">0.0</baseValue> 
         </setOutcomeValue> 
      </responseElse> 
   </responseCondition> 
</responseProcessing>

Этот сценарий анализирует значения двух ответов учащегося, определяя наличие правильных (оптимальных) ответов. Это делается в элементах <match>. Оба должны быть правильными, что определяется окружающим элементом <and>. В этом случае SCORE <outcomeDeclaration> устанавливается в 1,0; иначе устанавливается значение 0,0. В листинге 9 приведен другой, более сложный пример.

Листинг 9. Более сложный пример обработки ответа
<responseDeclaration identifier="RESPONSE" cardinality="multiple" 
                     baseType="identifier"> 
   <correctResponse> 
      <value>A</value> 
      <value>C</value> 
   </correctResponse> 
   <mapping lowerBound="0.0" upperBound="1.0" defaultValue="0.0"> 
      <mapEntry mapKey="A" mappedValue="0.5"/> 
      <mapEntry mapKey="B" mappedValue="-0.25"/> 
      <mapEntry mapKey="C" mappedValue="0.5"/> 
      <mapEntry mapKey="D" mappedValue="-0.25"/> 
   </mapping> 
</responseDeclaration> 

<outcomeDeclaration identifier="SCORE" cardinality="single" baseType="float"/>
<outcomeDeclaration identifier="FEEDBACK" cardinality="single" baseType="identifier"/>
<outcomeDeclaration identifier="FEEDBACK_TRESHOLD" cardinality="single" 
                    baseType="float"> 
   <defaultValue> 
      <value baseType="float">0.75</value> 
   </defaultValue> 
</outcomeDeclaration> 

<itemBody> 
   <choiceInteraction responseIdentifier="RESPONSE" shuffle="true" maxChoices="0">
      <prompt>Which countries are south of the USA?</prompt> 
      <simpleChoice identifier="A">Mexico</simpleChoice> 
      <simpleChoice identifier="B">Canada</simpleChoice> 
      <simpleChoice identifier="C">Brazil</simpleChoice> 
      <simpleChoice identifier="D">Norway</simpleChoice> 
   </choiceInteraction> 
</itemBody> 

<responseProcessing> 
   <responseCondition> 
      <responseIf> 
         <isNull> 
            <variable identifier="RESPONSE"/> 
         </isNull> 
         <setOutcomeValue identifier="SCORE"> 
            <baseValue baseType="float">0.0</baseValue> 
         </setOutcomeValue> 
         <setOutcomeValue identifier="FEEDBACK"> 
            <baseValue baseType="identifier">FAILURE</baseValue>
         </setOutcomeValue>
      </responseIf>
      <responseElse>
         <setOutcomeValue identifier="SCORE">
            <mapResponse identifier="RESPONSE"/> 
         </setOutcomeValue> 
         <responseCondition> 
            <responseIf>
               <gte> 
                  <variable identifier="SCORE"/> 
                  <variable identifier="FEEDBACK_TRESHOLD"/>
               </gte> 
               <setOutcomeValue identifier="FEEDBACK"> 
                  <baseValue baseType="identifier">ANSWER_CORRECT</baseValue>
               </setOutcomeValue>
            </responseIf>
            <responseElse>
               <setOutcomeValue identifier="FEEDBACK">
                  <baseValue baseType="identifier">FAILURE</baseValue>
               </setOutcomeValue>
            </responseElse> 
         </responseCondition>
      </responseElse> 
   </responseCondition> 
</responseProcessing>

Помимо оценки, в результате этой обработки ответа создается также декларация <outcomeDeclaration> с именем FEEDBACK, которой присваивается значение FAILURE или ANSWER_CORRECT. Эту декларацию можно использовать для выдачи соответствующего комментария пользователю.

Обработка ответов включает следующие этапы.

  1. Определение наличия ответа (возможно, пользователь нажал кнопку Continue, не дав никакого ответа). Затем переменной <responseDeclaration> присваивается значение NULL (проверяется элементом <isNull>), и устанавливаются надлежащие значения SCORE и FEEDBACK.
  2. Переменной SCORE присваивается значение, полученное <mapping> из <responseDeclaration (с использованием элемента <mapResponse>).
  3. SCORE сравнивается с фиксированным набором значений FEEDBACK_TRESHOLD <outcomeDeclaration> (в элементе <gte> [больше или равно]), и в соответствии с результатом выбирается FEEDBACK.

Помимо своих собственных деклараций при обработке ответов можно использовать некоторые предопределенные переменные:

  • duration. Время в секундах, потраченное пользователем на ответы. Эту переменную можно использовать, например, для снижения оценки, когда пользователь отвечал слишком долго;
  • nunAttempts и completionStatus. Эти переменные обрабатываются в разделе, относящемся к адаптивной обработке.

Тем, кто знаком с языками программирования или сценариев, написать сценарий обработки ответов будет несложно. Полное определение языка содержится в документе QTI IMS Question and Test Interoperability Assessment Test, Section, and Item Information Model (см. раздел Ресурсы). Как видите, из-за XML получается довольно многословно, и для получения значимых действий придется написать много кода. К сожалению, таков стандарт.

Готовые шаблоны обработки ответов

Как я уже говорил в разделе о декларациях ответов, в стандарт е QTI есть встроенные средства для простой обработки ответов. Например, используя надлежащий отклик в <responseDeclaration>, правильность ответа можно определить вообще без всякого сценария обработки. Этот подход позволяет создавать простые документы с соответствующими механизмами обработки без нарушения стандарта.

Еще одно средство упрощения ― шаблоны обработки ответов. В QTI есть три готовых шаблона для простой обработки ответов. Эти шаблоны находятся по фиксированным адресам URI — например:

<responseProcessing 
   template="http://www.imsglobal.org/question/qti_v2p0/rptemplates/match_correct"/>

К этим URI привязаны фактические сценарии. Механизм обработки может использовать их надлежащим образом. Чтобы помочь механизму обработки найти нужный шаблон, можно указать, например, такое место:

<responseProcessing template="..." templateLocation="/rptemplates/match_correct.xml/>

Готовые шаблоны можно использовать, если:

  • действие состоит только из одного взаимодействия;
  • <responseDeclaration> для этого действия имеет имя RESPONSE;
  • Действие включает в себя <outcomeDeclaration> с именем SCORE типа float.

Имеются следующие готовые шаблоны:

  • Match_Correct: выставляет оценку 0,0, если ответ отсутствует или неверный, и 1,0 если ответ правильный. Его URI:
    http://www.imsglobal.org/question/qti_v2p0/rptemplates/match_correct
  • Map_Response: выставляет оценку 0,0, если ответ отсутствует; в противном случае использует сопоставление, содержащееся в RESPONSE <responseDeclaration>. Его URI:
    http://www.imsglobal.org/question/qti_v2p1/rptemplates/map_response
  • Map_Response_Point: то же, что и Map_Response, но для типов графического взаимодействия. Использует сопоставление областей, а не идентификаторов. Его URI:
    http://www.imsglobal.org/question/qti_v2p1/rptemplates/map_response_point

Все готовые шаблоны можно указать на языке сценариев обработки ответов. В загрузку с примерами QTI включены шаблоны сценариев. Например, в листинге 10 приведен код для Map_Response.

Листинг 10. Сценарий с использованием готового шаблона Map_Response
<responseProcessing> 
   <responseCondition> 
      <responseIf> 
         <isNull> 
            <variable identifier="RESPONSE"/> 
         </isNull> 
         <setOutcomeValue identifier="SCORE"> 
            <baseValue baseType="integer">0</baseValue> 
         </setOutcomeValue> 
      </responseIf> 
      <responseElse> 
         <setOutcomeValue identifier="SCORE"> 
            <mapResponse identifier="RESPONSE"/> 
         </setOutcomeValue> 
      </responseElse> 
   </responseCondition> 
</responseProcessing>

Не обязательно придерживаться этих готовых сценариев QTI. В ситуации тесного сотрудничества между автором материала и разработчиком сценария его обработки ничто не мешает определить свой собственный сценарий.

Адаптивная и неадаптивная обработка

До этого момента я говорил об обработке ответов в блоке QTI, таком как одноразовая работа учащегося с вопросом: вопрос представлен, ответ дан, определяется оценка. В QTI это называется неадаптивными блоками экзаменационного формата. В другой ситуации вопросы могут использоваться как механизм обучения. В этом случае учащийся обычно может давать более одного ответа. Может выдаваться более подробный комментарий ("Это неправильный ответ", "У меня есть подсказка для вас:" и т.п. ), и оценку можно регулировать в зависимости от количества попыток.

В этой ситуации QTI определяет адаптивные блоки. Адаптивный блок определяется путем присвоения атрибуту adaptive корневого элемента значения true(), как показано в листинге 11.

Листинг 11. Создание адаптивного блока путем установки атрибута adaptive корневого элемента
<assessmentItem adaptive="true" … >
 … 
</assessmentItem>

В адаптивном блоке взаимодействие с учащимся не заканчивается по умолчанию после его ответа. Его можно закончить двумя способами:

  • чем-то определенным в механизме обработки (нажатие кнопки Stop, окончание времени ожидания и т.д.);
  • установкой в процессе обработки ответа встроенной переменной с именем completionStatus.

Переменная completionStatus имеет четыре возможных значения типа identifier: completed, incomplete, not_attempted и unknown. Если присвоить ей значение completed, взаимодействие прекратится.

Другая встроенная переменная, удобная для адаптивных блоков ― numAttempts. Эта переменная просто подсчитывает число попыток ответа. Например, в листинге 12 показан фрагмент обработки ответа, когда взаимодействие заканчивается после четырех попыток.

Листинг 12. Использование numAttempts для указания состояния завершения
<responseIf> 
   <gt> 
      <variable identifier="numAttempts"/> 
      <baseValue baseType="integer">4</baseValue> 
   </gt> 
   <setOutcomeValue identifier="completionStatus"> 
      <baseValue baseType="identifier">completed</baseValue>
   </setOutcomeValue> 
</responseIf>

Заключение

Эта статья посвящена способам выполнения механизмом QTI обработки ответов и результатов — то есть тому, что происходит после того как учащийся ответил на вопрос. В большинстве случаев ему выставляется оценка, но могут быть и другие варианты использования.

Если полная обработка ответов и результатов QTI не нужна, то можно, оставаясь в пределах стандарта, ограничиться сравнением с заданными правильными ответами или использовать встроенные шаблоны.

Ресурсы

Научиться

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=XML
ArticleID=851169
ArticleTitle=Углубленное изучение QTI
publish-date=12102012