IMS to SCORM Conversion

1.6k Views Asked by At

I have to develop a tool for automatic conversion from one E-learning standard Content Package to another, as of now I've considered IMS and SCORM but I didn't completely understand what could be the best reason for developing an automatic conversion tool from IMS to SCORM or vice-versa. I mean what benefits can one avail from such tool? This is the reason which I've got in one technical paper. Can anyone please explain and clarify this or tell me some good reason behind developing such a tool:

"IMS [6] and SCORM [7] specications share many of their characteristics but also have some key differences in the representation of the structure of the learning content. Other important issue to be considered is the extension of these systems and the huge number of organizations that use them. This situation leads to the fact that the same contents are created, maintained, modied and so on [8]. These are usually not identical copies, but the contents are the same and aim to the same learning objective. So it would be useful to share the work among the organization to avoid repeating the work over and over again. This would save time and resources and would lead to high quality contents. The main obstacle to get this is the, previously presented, existence of different types of models for contents. From all of this, we can infer the utility of automatic conversion between formats. This conversion will allow the interaction between learning platforms at a high level of automa- tion." - E-LEARNING CONTENTS AUTOMATIC CONVERSION By Guiterrez, Jose Maria et al.

JavaScript(SCORM Package)

<script type="text/javascript">
<![CDATA[
var numQuestions = 2;
var rawScore = 0;
var actualScore = 0;
var question0;
var question1;
var key0 = 0;
var key1 = 1;
function getAnswer()
        {
            doLMSSetValue("cmi.interactions.0.id","key0b8");
            doLMSSetValue("cmi.interactions.0.type","choice");
            doLMSSetValue("cmi.interactions.0.correct_responses.0.pattern",
                          "0");

            for (var i=0; i < 2; i++)
            {
               if (document.getElementById("quizForm8").key0b8[i].checked)
               {
                  question0 = document.getElementById("quizForm8").key0b8[i].value;
                  doLMSSetValue("cmi.interactions.0.student_response",question0);
                  break;
               }
            }

            doLMSSetValue("cmi.interactions.1.id","key1b8");
            doLMSSetValue("cmi.interactions.1.type","choice");
            doLMSSetValue("cmi.interactions.1.correct_responses.0.pattern",
                          "1");

            for (var i=0; i < 2; i++)
            {
               if (document.getElementById("quizForm8").key1b8[i].checked)
               {
                  question1 = document.getElementById("quizForm8").key1b8[i].value;
                  doLMSSetValue("cmi.interactions.1.student_response",question1);
                  break;
               }
            }

           }
        function calcRawScore(){

            if (question0 == key0)
            {
               doLMSSetValue("cmi.interactions.0.result","correct");
               rawScore++;
            }
            else
            {
               doLMSSetValue("cmi.interactions.0.result","wrong");
            }
            if (question1 == key1)
            {
               doLMSSetValue("cmi.interactions.1.result","correct");
               rawScore++;
            }
            else
            {
               doLMSSetValue("cmi.interactions.1.result","wrong");
            }
        }
        function calcScore2()
        {
           computeTime();  // the student has stopped here.
           document.getElementById("quizForm8").submitB.disabled = true;
           getAnswer();
           calcRawScore();
           actualScore = Math.round(rawScore / numQuestions * 100);
        alert("Your score is " + actualScore + "%")   
           doLMSSetValue( "cmi.core.score.raw", actualScore+"" );
           var mode = doLMSGetValue( "cmi.core.lesson_mode" );
               if ( mode != "review"  &&  mode != "browse" ){
                 if ( actualScore < 50 )
                 {
                   doLMSSetValue( "cmi.core.lesson_status", "failed" );
                 }
                 else 
                 {
                   doLMSSetValue( "cmi.core.lesson_status", "passed" );
                 }
                 doLMSSetValue( "cmi.core.exit", "" );
                 } 
         exitPageStatus = true;
         doLMSCommit();
         doLMSFinish();
        }
]]>
</script>

HTML

<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
 <!-- Other Code -->
      <body>
        <div id="outer">
          <div class="QuizTestIdevice" id="id8">
            <script src="calculate.js" type="text/javascript"></script>
            <form name="quizForm8" id="quizForm8" action="javascript:calcScore2();">
              <div class="iDevice_inner">
                <div class="passrate" value="50"></div>
                <div class="question">
                  <div id="taquestion0b8">
                    1&gt; TEXT FOR QUESTION 1.
                  </div><br />
                  True<input type="radio" name="key0b8" value="0" id="taoptionAnswer0q0b8" /> 
                  False<input type="radio" name="key0b8" value="1" id="taoptionAnswer1q0b8" />
                </div><br />
                <div class="question">
                  <div id="taquestion1b8">
                    2&gt; TEXT FOR QUESTION 2.
                  </div><br />
                  True<input type="radio" name="key1b8" value="0" id="taoptionAnswer0q1b8" /> 
                  False<input type="radio" name="key1b8" value="1" id="taoptionAnswer1q1b8" />
                </div><br />
                <input type="submit" name="submitB" value="SUBMIT ANSWERS" />
              </div>
            </form>
          </div>
        </div>
      </body>
    </html>

Javascript and HTML for IMS Package

<html>
<body>
<div class="QuizTestIdevice" id="id8">
<script type="text/javascript">
<!-- //<![CDATA[
var numQuestions = 4;
var rawScore = 0;
var actualScore = 0;
var question0;
var question1;
var key0 = 0;
var key1 = 1;
var key2 = 0;
var key3 = 0;
function getAnswer()
        {
            for (var i=0; i < 2; i++)
            {
               if (document.getElementById("quizForm8").key0b8[i].checked)
               {
                  question0 = document.getElementById("quizForm8").key0b8[i].value;
                  break;
               }
            }

            for (var i=0; i < 2; i++)
            {
               if (document.getElementById("quizForm8").key1b8[i].checked)
               {
                  question1 = document.getElementById("quizForm8").key1b8[i].value;
                  break;
               }
            }
            }
        function calcRawScore(){

            if (question0 == key0)
            {
               rawScore++;
            }
            if (question1 == key1)
            {
               rawScore++;
            }
        }

        function calcScore2()
        {
            getAnswer();

            calcRawScore();
            actualScore =  Math.round(rawScore / numQuestions * 100);
            document.getElementById("quizForm8").submitB.disabled = true;
            alert("Your score is " + actualScore + "%")

        }
//]]>    -->
    </script>
<form name="quizForm8" id="quizForm8" action="javascript:calcScore2();">
<div class="iDevice emphasis1">
<img alt="" class="iDevice_icon" src="icon_question.gif" />
<span class="iDeviceTitle">SCORM Quiz</span>
<div class="iDevice_inner">
<div class="passrate" value="50"></div>
<div class="question">
<div id="taquestion0b8" class="block" style="display:block">1&gt; QUESTION 1

</div><br/>
<table><tr><td><input type="radio" name="key0b8" value="0" />
</td><td>
<div id="taoptionAnswer0q0b8" class="block" style="display:block">True

</div></td></tr>
<tr><td><input type="radio" name="key0b8" value="1" />
</td><td>
<div id="taoptionAnswer1q0b8" class="block" style="display:block">False
</div>
<br/><input type="submit" name="submitB" value="SUBMIT ANSWERS"/>
</form>
</body>
</html>

Thanking you!

1

There are 1 best solutions below

15
On

When I create hand-coded courses I try to keep everything as neutral as possible. eLearning standards, such as SCORM, are usually using what we call a "wrapper", it basically handles all basic errors and the connection process.

When you go from one version to another, like SCORM 1.2 to SCORM 2004 4th Edition, the logic doesn't really change, it is improved but all the previous elements are usually here. So you basically make a new wrapper that has the same functions' names and all the basics are already working. And your wrapper is not fundamentally different, it just replaces the "cmi.xxx".

To go from one standard to another, if the fundamentals are the same, you could use another wrapper and it would work. It is usually the case for most simple courses, as soon as you start having interactions, exercises and so on, it can become tricky. To avoid those bad moments, keep all your interactions logic seperate from your course.

Now, your course is probably not hand-coded and generated by a software? In such case you will need to analyze what's "under the hood", trying to figure what is done when and how to replace it with the other standard's way of handling each part.

I think a converter is something very unsafe to do, it would be very course-dependent and cannot be applied to all courses the same, unless you find a way to simply replace it's interactions with a wrapper. But if you can provide a tool that can generate a course compatible with all standards, you'll already make a lot of users happy!

Now to get back to your question, I think you need to understand what are eLearning standards made of :

  • Files to be displayed in the browser.
  • A manifest file to describe the content you're giving to the LMS.
  • A way of communication between the course and its LMS.

The files are usually HTML pages and everything that goes around. The manifest is an file usually written with XML. The communication is in most cases setup with Javascript.

  • IMS is a standard at the manifest level, it describes what should be in your .xml file.
  • SCORM is a standard that takes into account the two last items of the list. (based on AICC, it defines what both the course and the LMS need to comply to.)

Now if you need to create a tool to convert the XML file, I think any technology would be able to do it, as it is technically just plain text.