<?xml version="1.0" encoding="gb2312"?>

<!-- RSS generated by oioj.net on 4/16/2004 ; 感谢LeXRus提供 RSS 2.0 文档; 此文件可自由使用，但请保留此行信息 --> 
<!-- Source download URL: http://blogger.org.cn/blog/rss2.asp       -->
<rss version="2.0">

<channel>
<title>echo6459的博客</title>
<link>http://blogger.org.cn/blog/blog.asp?name=echo6459</link>
<description>echo6459的博客</description>
<copyright>blogger.org.cn</copyright>
<generator>W3CHINA Blog</generator>
<webMaster>webmaster@blogger.org.cn</webMaster>
<item>
<title><![CDATA[【梁政良】怎样设计一个符合SCORM的LMS？（一）]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=echo6459&amp;id=11480</link>
<author>echo6459</author>
<pubDate>2006/2/1 15:11:17</pubDate>
<description><![CDATA[首先你已经有个 LMS，还没有的人，那就是立刻先『生』一个 LMS 出来。<BR><BR>　　你可以看完这个主题后再思考如何『生』，或者先依你所获得、搜集的需求，先设计一个。但基本上会有几个子系统：<BR><BR>　1. 帐号管理<BR>　2. 开课、选课管理<BR>　3. 讨论板系统<BR>　4. 作业、问卷、测验系统（其中最重要的是测验系统。如果你功力不够，短时间无法作一个好用的测验系统的话，可以先 focus 在作业与问卷系统上，而测验可以另找合作厂商）<BR>　5. 如果你还想多同步的功能，可以再加个线上讨论室。没时间发展可以使用 Netmeeting 的方案或去找一个聊天室的 source 来改。<BR>　6. 最后一个『必须』要做的，就是有一个『教材步进』机制。看你是要很简单地用一个 frame，里头放个 treeview 来展现教材目录，或是厉害一点，让你的 LMS 可以自动 launch 教材，都行。<BR><BR>　　把这一切兜起来后，你就完成一个简单的 LMS。当然，功能你自己还可以自由添加、删减、修改。别忘了美工也很重要喔！<BR><BR>　　最后要提醒你的，最好把你的 LMS 架构，用 XML 把它描述出来，除了当作你的 sitemap，后续还可以作 sequencing maping、菜单 layout ..喔！好处你慢慢会发现。:)<BR><BR>　　接下来就是做 SCORM 的部份。<BR><BR>　　因为 ADL 有提供一份 Java 写的 adapter 的 sample source，所以如果你会 Java，那就太幸运了，直接拿来用，你就少写一万三千多行程序，而且还有国际组织帮你维护程序代码哩！<BR><BR>　　不过这也轻松不到哪去，因为你要自行设计 Database 的 schema 来存 SCORM 的资料，如果你的 LMS 自己没设计 log，而完全要仰赖 SCORM 所产生的记录，那么这个 database 的设计可要花点时间跟脑筋啰！更何况，你必须先看懂这套程序代码，才能写它与你的 DB 之间的 bridge code。<BR><BR>　　我的系统在符合 SCORM 之前，已有自己的 log 记录方式、资料，所以除了 SCORM 它自己记一套，我的 LMS 自己也会记一套，而且记得比 SCORM 还详细。因此这个部份，我的作法就只需设计如何记录 SCO 产生的 cmi 资料即可，不必担心与原有 LMS 的资料是否冲突。<BR><BR>　　这样一来就简单多了。因为一个 SCO 只有一个 cmi data，我只要逐个记入我的 DB table 里就行了。所以，在 SCORM 兼容上，我只需要多一个 Table 即可。哇！真是轻松愉快！<BR><BR>　　在 table 的设计上，因为 cmi 是一个 XML 格式的资料，如果拆成数个部份存，在『拆开存入』与『取出重组』这个部份会影响效能，但我所用的数据库并不是『原生 XML 数据库』(native XML database)，我采用我自创的『仿真 XML 数据库』方式，把 cmi 整个 XML 直接存入 field 中，既有原生 XML 数据库的不必拆组优点，又保有关系数据库的关联性。<BR><BR>　　归纳起来，你在这个部份就是要去下载 ADL 的 Sample Run-Time Environment http://www.adlnet.org/ADLDOCS/Other/SCORM(TM)Version1_2SampleRTEVersion1_2_1.zip ，并看懂它来设计你的数据库 schema]]></description>
</item><item>
<title><![CDATA[SCORM标准中SCO与LMS的通讯原理与方法]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=echo6459&amp;id=11479</link>
<author>echo6459</author>
<pubDate>2006/2/1 15:08:06</pubDate>
<description><![CDATA[<A>　
<P>在SCORM标准中，SCO与LMS的通讯是由API Adapter来完成的。</P>
<P>在SCORM1.2的标准中，API定义了8个主要的function，分别是LMSInitilize, LMSFinish, LMSSetValue, LMSGetValue, LMSCommit, LMSGetLastError, LMSGetErrorString, LMSGetDiagnostic，其中又以LMSGetValue和LMSSetValue最为复杂，以下的流程图是主要几个function的逻辑流程。 </P>
<P align=center><IMG hspace=0 src="http://www.online-edu.org/images/articles/2005-12-04/image002.gif" align=baseline border=0></P>
<P><STRONG>LMSInitialize：</STRONG> <BR>LMSInitialize负责启动SCO，当学习者进入开始阅读一个SCO时，SCO第一步就是先要呼叫LMSInitialize，LMSInitialize function判断该学员之上课记录，当学员第一次阅读该门课的该SCO时，LMSInitialize就会将设定初值至相关的环境变量；若学习者并不是第一次阅读该SCO，LMSInitialize则必须将该学习者之前的上课记录取出，并存入环境变量中，如此即完成启动SCO之动作。</P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
<P><STRONG>Example:</STRONG> <BR>var result = LMSInitialize("")<BR>if (result == "false")<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Do some error handling<BR>}<BR>else<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp; // continue with the execution of the SCO<BR>}</P></BLOCKQUOTE>
<P dir=ltr><STRONG>LMSFinish： <BR></STRONG>当学习者阅读完并要离开一个SCO时，在结束时SCO便会将呼叫LMSFinish，LMSFinish主要负责将环境变量重设，并判断该SCO是否在结束之前己经有呼叫LMSCommit将所有记录回存至LMS，若尚未储存，则会自动呼叫将所有学习者在该SCO的上课记录回存。</P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
<P dir=ltr><STRONG>Examples:</STRONG><BR>var result = LMSFinish("");</P></BLOCKQUOTE>
<P dir=ltr><STRONG>LMSSetValue：</STRONG> <BR>在LMSSetValue是相当复杂的Function，负责储存所有相关的学习记录，当SCO呼叫欲将某个data model回存时，LMSSetValue第一步先判断所欲回存之data model，判断该data model是否可以set(写入)，其次判断其型别，当型别错误时，记录其Error Code，当型别检查通过时，则依SCORM 1.2 RTE所订定该data model的处理规则，并将数据存入内存中。</P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
<P dir=ltr><STRONG>Examples:</STRONG><BR>var result = LMSSetValue("cmi.core.score.raw","95");</P></BLOCKQUOTE>
<P dir=ltr><STRONG>LMSGetValue：</STRONG> <BR>LMSGetValue主要负责将数据由LMS取出，当SCO呼叫LMSGetValue时，LMSSetValue会先判断data model是否可以读取，若不可读取，则写入其错误代码；若该data model是可以读取，则进取出其值并回传给SCO。但在设计时，如同LMSSetValue并没有直接和receiver相连，所以是将数据由暂存的内存中取出。</P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
<P dir=ltr><STRONG>Examples:</STRONG><BR>var value = LMSGetValue("cmi.core.student_name")<BR>A typical return value might be "Hyde, Jackson".<BR>var value = LMSGetValue("cmi.core.lesson_status")<BR>A typical return value might be "incomplete".<BR>var value = LMSGetValue(“cmi._version”)</P></BLOCKQUOTE>
<P dir=ltr><STRONG>LMSCommit：</STRONG> <BR>相较于LMSSetValue和LMSGetValue，LMSCommit可以说简单多了，其主要负责将所有暂存在内存中的学习记录，回存到LMS，在设计时应用了XMLHTTP之技术，所以当LMSCommit被呼叫时，会将所有之暂存数据组成XML文件，再应用XMLHTTP对象将数据POST到Receiver，当Receiver收到这个Request时，就会解译所传入之XML文件，再将XML文件中的数据直接存入数据库中。&nbsp;</P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
<P dir=ltr><STRONG>Examples:</STRONG><BR>var result = LMSCommit("");</P></BLOCKQUOTE>
<P dir=ltr><STRONG>LMSGetLastError</STRONG><BR>该函数将返回一个错误代码，每次API function呼叫后，该函数的值将被重置。（LMSGetErrorString及LMSGetDiagnostic除外）。</P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
<P dir=ltr>Examples:<BR>var errorCode = LMSGetLastError();<BR></P></BLOCKQUOTE>
<P dir=ltr><STRONG>LMSGetErrorString</STRONG></P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
<P dir=ltr>&nbsp;Examples:<BR>var errorString = LMSGetErrorString("403");</P></BLOCKQUOTE>
<P dir=ltr><STRONG>LMSGetDiagnostic</STRONG></P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
<P dir=ltr>&nbsp; Examples: <BR>var moreInfo = LMSGetDiagnostic("403");</P></BLOCKQUOTE>
<P dir=ltr align=center><IMG hspace=0 src="http://www.online-edu.org/images/articles/2005-12-04/image003.gif" align=baseline border=0></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 189pt; mso-char-indent-count: 21.0"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " Times Roman?; mso-hansi-font-family: ?Times New Roman??>图</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">2</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " Times Roman?; mso-hansi-font-family: ?Times New Roman??>：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">SCO</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " Times Roman?; mso-hansi-font-family: ?Times New Roman??>与</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">LMS</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " Times Roman?; mso-hansi-font-family: ?Times New Roman??>通讯示意图</SPAN><BR></P></A>]]></description>
</item><item>
<title><![CDATA[[收藏]第12天:校验及常见错误 -- 作者：纯色理想]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=echo6459&amp;id=3080</link>
<author>echo6459</author>
<pubDate>2005/2/25 16:50:33</pubDate>
<description><![CDATA[本文转载自<A href="http://bbs.w3china.org/" target=_blank>W3CHINA.ORG讨论区</A>(BBS.W3CHINA.ORG)&nbsp;&nbsp;&nbsp;<A href="http://bbs.w3china.org/dispbbs.asp?boardid=22&amp;ID=10204&amp;replyID=24294&amp;skin=1" target=_blank>原文链接</A><BR>作者：<A href="http://bbs.w3china.org/dispuser.asp?name=纯色理想" target=_blank>纯色理想</A><BR>以下为原文：<BR><BR><B>第12天:校验及常见错误</B><BR><BR>辛苦了好多天，我们努力学习使用XHTML+CSS来重新设计我们的网站。那么我们如何知道自己制作的页面真的符合web标准？W3C和一些志愿者网站提供了在线校验程序，来帮助我们检查页面是否符合标准，并提供了修正错误的帮助信息。这些校验非常有用，是我调试页面第一步要做的事情。
<P></P>
<P>1.XHTML校验<BR>校验网址：<A class=contentlink href="http://validator.w3.org/" target=_blank>http://validator.w3.org/</A> <BR>校验方式:网址校验、文件上传校验 <BR>校验成功，会显示"This Page Is Valid XHTML 1.0 Transitional!",如图：</P>
<P><BR>校验失败，会显示更多校验选项和错误信息，如图：</P>
<P><BR>一般选择"Show Source"和"Verbose Output"可以帮助你找到错误代码所在行和错误原因。</P>
<P>XHTML校验常见错误原因对照表<BR>No DOCTYPE Found! Falling Back to HTML 4.01 Transitional--未定义DOCTYPE。 <BR>No Character Encoding Found! Falling back to UTF-8.--未定义语言编码。 <BR>end tag for "img" omitted, but OMITTAG NO was specified--图片标签没有加"/"关闭。 <BR>an attribute <I>value</I> specification must be an attribute <I>value</I> literal unless SHORTTAG YES is specified--属性值必须加引号。 <BR>element "DIV" undefined---DIV标签不能用大写，要改成小写div。 <BR>required attribute "alt" not specified---图片需要加alt属性。 <BR>required attribute "type" not specified---JS或者CSS调用的标签漏了type属性。 <BR>其中最最常见的错误就是标签的大小写问题了。通常这些错误都是关联的，比如忘记了一个&lt;/li&gt;其他&lt;li&gt;标签都会报错，所以不要看到一堆的错误害怕，通常解决了一个错误，其他的错误也都没有了。如果你的页面通过XHTML1.0校验，可以在页面上放置这么一个图标： 代码如下：</P>
<P>&lt;p&gt; &lt;a href="<A class=contentlink href='http://validator.w3.org/check/referer"><img' target=_blank>http://validator.w3.org/check/referer"&gt;&lt;img</A> src="<A class=contentlink href='http://www.w3.org/Icons/valid-xhtml10"' target=_blank>http://www.w3.org/Icons/valid-xhtml10"</A> alt="Valid XHTML 1.0!" height="31" width="88" /&gt;&lt;/a&gt; &lt;/p&gt; <BR>2.CSS2校验<BR>校验网址：<A class=contentlink href="http://jigsaw.w3.org/css-validator/" target=_blank>http://jigsaw.w3.org/css-validator/</A> <BR>校验方式:网址校验、文件上传校验、直接贴入代码校验 <BR>校验成功，会显示"恭喜恭喜，此文档已经通过样式表校验! ",hoho,校验信息支持中文噢。如图：</P>
<P><BR>校验失败，会显示两类错误：错误和警告。错误表示一定要修正，否则无法通过校验；警告表示有代码不被W3C推荐,建议修改。</P>
<P>CSS2校验常见错误原因对照表<BR>(错误)无效数字 : color909090 不是一个 color 值 : 909090 ---十六进制颜色值必须加"#"号，即#909090 <BR>(错误)无效数字 : margin-topUnknown dimension : 6pixels ---pixels不是一个单位值，正确写法6px <BR>(错误)属性 scrollbar-face-color 不存在 : #eeeeee --- 定义滚动条颜色是非标准的属性 <BR>(错误)值 cursorhand不存在 : hand是非标准属性值，修改为cursor:pointer <BR>(警告)Line : 0 font-family: 建议你指定一个种类族科作为最后的选择 --W3C建议字体定义的时候，最后以一个类别的字体结束，例如"sans-serif"，以保证在不同操作系统下，网页字体都能被显示。 <BR>(警告)Line : 0 can't find the warning message for otherprofile --表示在代码中有非标准属性或值，校验程序无法判断和提供相应的警告信息。 <BR>同样，通过检验后，可以放置一个CSS校验通过图标，代码如下：</P>
<P>&lt;p&gt; &lt;a href="<A class=contentlink href='http://jigsaw.w3.org/css-validator/">' target=_blank>http://jigsaw.w3.org/css-validator/"&gt;</A> &lt;img style="border:0;width:88px;height:31px" src="<A class=contentlink href='http://jigsaw.w3.org/css-validator/images/vcss"' target=_blank>http://jigsaw.w3.org/css-validator/images/vcss"</A> alt="Valid CSS!" /&gt; &lt;/a&gt; &lt;/p&gt;<BR><BR>&lt;完&gt;<BR><A href="http://bbs.w3china.org/dispbbs.asp?boardid=22&amp;ID=10204&amp;replyID=24294&amp;skin=1" target=_blank>参与讨论本主题</A><BR></P>]]></description>
</item><item>
<title><![CDATA[第一篇日记]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=echo6459&amp;id=2840</link>
<author>echo6459</author>
<pubDate>2005/2/13 10:01:43</pubDate>
<description><![CDATA[
<P><STRONG><FONT color=#1111ee><FONT color=#3809f7 size=5>&nbsp;&nbsp; </FONT></FONT><FONT color=#eeeeee><EM>第一次来到这里，第一次在这里写日记，也许相对于记录心情，我更喜欢记录自己每天学到的东西，也许不多，但是，我会让自己每天都过得很充实</EM></FONT></STRONG></P>
<P align=left><STRONG><EM><FONT color=#eeeeee>&nbsp;&nbsp; 我希望每天都看得到自己的收获~~~~</FONT></EM></STRONG></P>
<P align=left><STRONG><EM><FONT color=#eeeeee>&nbsp;&nbsp; 加油！</FONT></EM></STRONG></P>]]></description>
</item>
</channel>
</rss>