IMS到SCORM转换

时间:2012-08-12 04:05:47

标签: scorm scorm2004 scorm1.2

我必须开发一种从一个E-learning标准内容包到另一个E-learning标准内容包的自动转换工具,到目前为止我已经考虑了IMS和SCORM,但我还没有完全理解开发自动化的最佳原因是什么从IMS到SCORM的转换工具,反之亦然。我的意思是这种工具可以带来哪些好处?这就是我在一篇技术论文中得到的原因。任何人都可以解释和澄清这个或告诉我开发这样一个工具背后的一些好理由:

  

“IMS [6]和SCORM [7]规范分享了许多   特征也有一些关键的差异   表示学习内容的结构。其他   需要考虑的重要问题是这些系统的扩展和   大量使用它们的组织。这种情况导致   以及创建,维护,修改相同内容的事实   等等[8]。这些通常不是相同的副本,但是   内容相同,旨在达到相同的学习目标。所以   在组织之间分享工作以避免,这将是有用的   一遍又一遍地重复工作。这样可以节省时间   资源,将导致高质量的内容。主要障碍   得到这个是以前提出的,存在不同类型   内容模型。从这一切,我们可以推断出它的实用性   格式之间的自动转换。这种转换将允许   高水平自动化学习平台之间的互动   “ - 电子学习内容自动转换Guiterrez,Jose Maria等人

JavaScript(SCORM包)

<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>

适用于IMS软件包的Javascript和HTML

<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>

感谢你!

1 个答案:

答案 0 :(得分:1)

当我创建手工编码课程时,我尽量保持一切尽可能中立。电子教学标准,例如SCORM,通常使用我们称之为“包装器”的标准,它基本上处理所有基本错误和连接过程。

当你从一个版本转到另一个版本时,例如SCORM 1.2到SCORM 2004第4版,逻辑并没有真正改变,它得到了改进,但所有以前的元素通常都在这里。 所以你基本上创建一个具有相同功能名称的新包装器,所有基础知识都已经有效。而你的包装器并没有根本不同,它只是取代了“cmi.xxx”。

要从一个标准转到另一个标准,如果基本原理相同,你可以使用另一个包装器,它会起作用。大多数简单课程通常都是这种情况,一旦你开始进行互动,练习等,就会变得棘手。 为了避免这些不良时刻,请将所有交互逻辑与您的课程分开。

现在,您的课程可能不是手工编码并由软件生成的? 在这种情况下,你需要分析什么是“幕后”,试图用什么时候做什么以及如何用其他标准处理每个部分的方式来替换它。

我认为转换器是非常不安全的,它会非常依赖于课程,并且不能应用于所有相同的课程,除非您找到一种方法来简单地替换它与包装器的交互。但是如果你能提供一个可以生成与所有标准兼容的课程的工具,你就会让很多用户满意!

现在回到你的问题,我认为你需要了解 的电子学习标准

  • 文件将在浏览器中显示。
  • 清单文件,用于描述您向LMS提供的内容。
  • 课程与LMS之间沟通的一种方式。

这些文件通常是HTML页面和所有内容。清单是通常用XML编写的文件。在大多数情况下,通信使用Javascript设置。

  • IMS是清单级别的标准,它描述了.xml文件中应包含的内容。
  • SCORM是一个考虑到列表中最后两项的标准。(基于AICC,它定义了课程和LMS需要遵守的内容。)

现在,如果你需要创建一个工具来转换XML文件,我认为任何技术都可以做到,因为它在技术上只是纯文本。