什么是 CMIString4096 以及如何提取其中的数据?
题
我有从 Adobe Presenter 7 返回的这个字符串。它称为 suspend_data,类型为 CMIString4096 (由文档)
CMISTRING4096一组ASCII字符,最大长度为4096个字符。
这是字符串:
aG1111111000000000BB001EC%2EacC%7E%24GS%2AayjHm110BKCBBB0B0EBAB1B1ED%2EicC%7E%24GS%2AlfkHm110BKDBCB0B0EBBB0B0EBAB1B1EE%2EwcC%7E%24GS%2ACBlHm100BK DB2BCBCDB1BABBDB0BBBADF%2E7cC%7E%24GS%2A4GmHm110BKBB0Ebl%C3%A1rRbl%C3%A1r%3Bgr%C3%A6nn%3Brau% C3%B0urB
它看起来像带有一些 urlencoded 字符的 base64。当我 urldecode() 字符串时,最后几个字符类似于一些数据,但它是 utf8 格式,然后我对其进行 utf8_decode 并看到这一点。
aG1111111000000000BB001EC.acC~$GS*ayjHm110BKCBBB0B0EBAB1B1ED.icC~$GS*
lfkHm110BKDBCB0B0EBBB0B0EBAB1B1EE.wcC~$GS*CBlHm100BKDB2BCBCDB1BABBDB0BBBADF.
7cC~$GS*4GmHm110BKBB0EblárRblár;grænn;rauðurB
好吧,我更接近一些数据(最后),但看起来仍然一团糟。当我使用 base64_decode() 时,我得到了一些二进制混乱,但我不知道它到底是什么。
有谁知道这些数据是什么以及我如何从中获得一些意义?顺便说一句,我使用的是 PHP,因此只有其中的函数适用。
解决方案
cmi.suspend_data 字段中存储的数据只是 SCO(内容)可以用来保存其当前状态的数据桶。数据没有语义或定义的结构。在许多情况下,数据的含义可以被猜测或逆向工程,但 Adobe Presenter 生成的内容似乎并非如此。
suspend_data 字段限制为 4096 个 ASCII 字符。对于某些 SCO,这无法提供足够的存储空间来完全保留当前状态。在许多情况下,面临这种困境的内容开发人员会对状态数据应用压缩算法,以将其压缩到有限的大小。看起来这就是 Adobe Presenter 正在做的事情。我的猜测是,他们将数据压缩为您发现的未编码状态,然后应用 url 编码以确保所有生成的字符都可以安全发送到 LMS。
挂起数据开头的 1 和 0 字符串可能是有意义的。它可能与学习者之前观看过的课程中的幻灯片相对应。为了验证这一点,通过 SCORM TestTrack(可在 scorm.com)并使用生成的调试日志来观察挂起数据如何随着用户学习课程的进展而变化。
SCORM 提供了相当多的其他数据模型元素,这些元素确实具有与课程当前状态相关的特定含义。这里有一个 所有可用数据模型元素的列表. 。SCORM TestTrack 调试日志还将向您显示 Adobe Presented 内容使用了哪些数据模型元素。