Concept Tags

Introduction: Concept Class & Concept Tag

Concept tags are a powerful system for capturing data about student performance. Essentially a concept tag is a bucket in which certain structured data and unstructured data can be dumped into. This page only details how to integrate concept tags. Before you proceed, you should read this document that explains how concept tags work.

Each app developer implements various Concept Classes and then implements specific Concept Tags from that Concept Class. This system enables app developers to capture data on any aspect of the student’s learning experience and report it back to the Quill LMS for the student and teacher to view.

Each Concept Class captures a specific type of data with specific properties. There are currently three Concept Types hardcoded into the system: Grammar Concepts, Typing Speed, Punctuation Concepts, and Two Player Student Writing.

The Quill Admins create a Concept Class. While some concept classes can be used by multiple apps, others are specific to a particular app. For example, the "Grammar Concepts" concept class captures specific data about the student’s performance in the Quill Grammar app. The "Typing Speed" Concept Class captures student typing speed data. The Typing Speed Concept Class can be implemented into any app where students are enabled to type.

Concept Tag Terminology

Concept Class

Unique classes of concept results (typing speeds, grammar concepts, punctuation concepts). Each concept class captures a dissimilar type of data from other classes, and the Quill LMS is set up to customized to understand each concept class.

Concept Tag

A string meant to identify the result.

Concept Tag Result

A hash containing information about the concept tag / category / class and any additional metadata regarding the student performance.

Concept Category

Another level of identification for the data. This is meant to be broader than the concept tag but narrower than concept class.

Concept Tag Example #1 (Concept Class: Grammar Concept)

ConceptTagResult.save(activitySessionId, {
  concept_class: 'Grammar Concepts',
  concept_tag: 'Periods',
  concept_category: 'Punctuation',
  attempts: [“I went to the zoo”, “I went to the zoo.”],
  attempt_number: 2,
  correct: 1
}).then(handler);

Concept Tag Example #2 (Concept Class: Typing Speeds)

ConceptTagResult.save(activitySessionId, {
  concept_class: 'Typing Speed',
  concept_tag: 'Typing Speed',
  concept_class: 'Typing Speed',
  wpm: TypingSpeed.wordsPerMinute
}).then(function() {
  TypingSpeed.reset();
  console.log('saved typing speed concept tag');
});

Returning Data to the LMS

App should mark the activity session as finished by calling "ActivitySession.finish()" and including a JSON payload. See the below example:

ConceptTagResult.findAsJsonByActivitySessionId(activitySessionId).then(function formatRequestData(resultsJson) {
    var putData = {
      percentage: 1, //A score for the activity
      concept_tag_results: resultsJson //The tags you’ve queued up throughout play
    };
    return ActivitySession.finish(activitySessionId, putData);
  });
}).then(function() {
  $scope.imDone = true; //something in the UI reacts that state.
});
📘

Note on implementing the above code examples:

Both the ConceptTagResult and ActivitySession service objects are available in the "empirical-angular" npm module.

Concept Class: Grammar Concept

When sending a concept tag result to the LMS, be sure to include the following fields:

Grammar Concept

Definition

concept_tag

A name given to the tag to retrieve this result.
Example 1: At (place)

concept_category

Defines a category for the tag.
Examples: Prepositions.

attempts

The sentence the student types for that question.
Example: The cat jumped over the fox.

attempts_number

The number of attempts the student took. A value of 3 indicates that the student got the question wrong.

correct

A value indicating whether or not the student answered the question correctly. Should be either 1 or 0.