Forum .LRN Q&A: SCORM dev update

Collapse
Posted by Ernie Ghiglione on

Hello there,

Hope you all are doing fine.

For the past few weeks, we've been working on the SCORM implementation for OpenACS and there has been some interesting progress and Carl has encouraged me 😊 to present to you some of the steps we have taken.

SCORM can be a bit tricky, but just to make sure you fully understand what we do and why it is like that and not like this, have a look at this small document I put together: "SCORM 1.3 for Random Strikers". This document simplifies the specs and puts it in a really colloquial language (you've been warned). If you read this small doc, the rest it should make a bit more sense. if you still have questions, please don't hesitate to ask me.

As I mentioned in my last posting, we have divided the project in to three parts:

* Import/export functionality:  importing IMS and SCORM compliant courses and content aggregations.

Progress: we have finished the import functionality. We can import IMS and SCORM Content Aggregation compliant courses as well as all their million of fields of metadata. So SCORM and IMS packages can be extracted and their manifest files (XML) parsed and imported. We have used tDOM since some of these XML documents can be quite large... and tDOM parses like a beauty. However, we couldn't use XPath which would have been really cool (and easy) due to a problem with namespaces and different interpretations from various content authoring tools on how to create these XML files. Although, the way we have done it, it is the safest way. It took some time but it works really well. Export, supposedly should be the inverse case... (so I hope 😊 We've been talking with Caroline Meeks about exporting dotLRN content to IMS Content Packages so they can be imported later into OCW. However it seems that specifications haven't been yet finalized yet. We hope we can help Caroline here since we are going to have an export functionality for SCORM and IMS in any case.

* Managing courses within OpenACS

Progress: the first part is a sound design of how and where we are going to store the learning objects and their massive amount of metadata. We currently are considering the content repository (CR) to store: content aggregations (courses), SCO/As (learning objects), assets (cluster of files or one file), and files. Each one of them would be a content type and would work in the following way:

A SCORM root folder (SCORM Repository) where all the content aggregations would live. A content aggregation would be a content type that serves as a container for SCO/As. By the same token, SCO/As are containers for assets, and assets contains files. So I think this would look like this

SCORM Repository (SCORM root folder)
   |
   |--- [Content Aggregation]
             |
             |----- [SCO/As]
                         |
                         |---> [Assets]
                                    |
                                    |---> [files]

So in this way we have content types defined as:

Content aggregation
SCO/As that have an associated parent (content aggregation)
Assets that have an associated parent (SCO/As)
Files that have an associated parent (files)

All these content types share the same sc_metadata_table (SCORM metadata tables) that contain all their metadata attributes. Files are the only physical entity (the others are containers) and we will store them on the file system somewhere under the Content Aggregation ID folder (/mounting point/SCORM-repository/@cont_aggre_id/folder/etc..) Then we will have to work on the index.vuh to see how we are going to source these files, but that is going to be a different issue that is being discussed here.

We still are trying to figure out a couple of things that have to do with the reusability of learning objects in different courses. You see, a learning object (SCO/A)  might have to be shared with another courses (content aggregations)... so an SCO/A might belong or (be linked?) to two or more different content aggregations. Example:

SCORM Repository (SCORM root folder)
    |
    |--- [Content Aggregation: DB design]
            |
            |----- [SCO/As]
                        |-> [Chapter 1: Using the "Select" statement]
                                |
                                |---> [Assets]
                                            |
                                            |---> [select.html, select.jpg]
                                            |---> [from.html, from.jpg, where.jpg]

SCORM Repository (SCORM root folder)  
    |
    |--- [Content Aggregation: OpenACS for random strikers]
            |
            |----- [SCO/As]
                        |-> [Chapter 1: Intro to OpenACS]
                        |-> [Chapter 2: What is SQL]
                        |-> [Chapter 2: Using the "Select" statement] (LINK or ?)
                                    |---> [Assets]
                                                |
                                                |---> [select.html, select.jpg] (link?)
                                                |---> [from.html, from.jpg, where.jpg] (link?)

So now we are studying how we are going to link the SCO/As to several content aggregations without causing many problems or minimizing scalability issues.

If you want to have a look how the courses or content aggregations are packaged here are some good examples.

Future steps
  • Finalize export functionality
  • Integration tool of SCORM course into dotLRN classes and communities
  • Managing courses tool
  • Runtime environment (including delivering content based on the learner -user- preferable locale, of course if the course support his/her locale -Tils idea)
  • IMS Simple Sequencing Engine (hopefully from Polyxena)

I have to thank my Indian-Austrian fellow Tils , and my Mexican/German friend Denis for their help on this. Please feedback and comments are more than welcome.

Thank you,

Ernie

Collapse
2: Re: SCORM dev update (response to 1)
Posted by Don Baccus on
Using the CR sounds right.  Remember that the CR allows you to map cr_items arbitrarily to files in the filesystem, you're not limited to allowing it to store files in directories of its choice.

This is how the static pages package works, for instance, it "wraps" your static HTML files with cr_item/cr_revision pairs in order to give the general comments package an object that comments can be related to.

But your right that serving up these files sounds much like what Carl needs as is being discussed in the other thread.

Collapse
3: Re: SCORM dev update (response to 1)
Posted by Staffan Hansson on
"The Dude abides. I don't know about you, but I take comfort in that. It's good knowin' he's out there, the Dude, takin' her easy for all us sinners. Shoosh."

It's good to see that you're going public with your plans for and knowledge about SCORM, Ernie. These are important (and complex) matters that we'll want to get right - with a little help from our friends; the TAB, the UAB, and the community at large. And they're exciting matters, too. Standardized handling and sharing of content is really cool. Looking forward to helping you out in any way we can, dude.

What specifically is it we all want to see here? A new SCORM package? Or a complete rewrite of File Storage so that it becomes a full-fledged front end to CR, handling the "SCORM Repository" (storing, importing, and exporting) plus other content? This issue now appears to be part of the (not quite so radical) revamp of File Storage that Carl has called for. Don has suggested that File Storage may have to be rewritten from scratch. What gives?

The upcoming OpenACS4.x/dotLRN Curriculum package will eventually fit into this picture by providing sequencing - the engine plus the setting up of the tree of activities with their particular metadata (what could be called "course management" if that term wasn't already used for the file storage of SCORM content). The UI for this latter sequence (or curriculum or course) design part will benefit from the valuable input of über course designer Michael Feldstein, we hope.

"Welp, that about does her, wraps her all up."

Collapse
4: Re: SCORM dev update (response to 1)
Posted by Don Baccus on
Well, I think that keeping a nice, simple file storage package around for folks who just want a package that provides a nice, simple folder/file UI is important.  When I talk about rewriting file storage my reasons are more due to the state of the datamodel (sucks) and code (much of which sucks) than a desire to get rid of this simple package in favor of something more complex.

No need to burden people with a complex UI if they don't need it.

It might be possible to graft on handling of sets of files like Carl's talking about to the file storage UI, so that's a possibilty, but it would probably be good to see a design in hand for people to comment on before deciding to do this (vs. have Heidelberg develop a new package to manage this type content)

The SCORM stuff seems much more complex, containing elements of a CMS beyond anything one would expect to see in a simple file storage package.

The SCORM folk have thus far been very good about sharing their design ideas and status of work.  This is excellent.  Ernie et al - feel free to ask questions about whether or not existing CR or CMS code can handle tasks you might need to complete when implementing your SCORM package.  There's a lot of hidden functionality there.

By coincidence those of us on the TAB probably have as much knowledge as anyone about what's there (when we pool our knowledge, that is.)  Dan Wickstorm did the original port, Jeff Davis is using some of the fancy features (registering templates to content types and items, etc), and Lars and I have each spent time digging through the code in efforts to understand exactly what's there in terms of functionality.

Of course, Tils, who is working with you, has already implemented a significant set of CR-based packages for Greenpeace DE so also has a lot of knowledge ...

Collapse
5: Re: SCORM dev update (response to 1)
Posted by Alfred Essa on
Ernie,

This is fabulous. We are following your work with keen interest. After the dotLRN v1 release, I hope we will be able to focus more on your work, curriculum and polyxena's simple sequencing engine.

Al

Collapse
6: Re: SCORM dev update (response to 1)
Posted by Carl Robert Blesius on
Thanks for (finally) sharing Ernie.
I want to make sure we move forward together and
I want to get closer to answers to the following questions:

Where are we (Heidelberg and other dotLRN users) going to put all our stuff?
How can we easily share our stuff with other people?
How can we easily use other people's stuff?
How can we use what OpenACS offers to do so?

You posting about your work helps.

Carl

Collapse
7: Re: SCORM dev update (response to 1)
Posted by Ola Hansson on
I have initiated a new thread: https://openacs.org/forums/message-view?message_id=102631

It may be of interest to those who have followed this thread ...

Collapse
8: Re: SCORM dev update (response to 1)
Posted by Dave Bauer on
Is there any more current information regarding the SCORM work with dotLRN?
Collapse
9: Re: SCORM dev update (response to 1)
Posted by Alfred Essa on
Ernie, as a follow-up to your work I am very interested in an automated mechansm whereby we can import MIT OpenCourseWare content into .LRN.  Caroline Meeks and others are working on updating the .LRN web site so that it's running a .LRN instance. It would be a great demonstration of OpenACS/.LRN if our web site had course materials from 500 MIT courses!
Collapse
10: Re: SCORM dev update (response to 8)
Posted by Ernie Ghiglione on
Dave,

The SCORM update and docs are coming... I apologize for taking so long. But I shall send you the docs and all the finalized tech specs by the end of this week.

Ernie

Collapse
11: Re: SCORM dev update (response to 9)
Posted by Ernie Ghiglione on
Al,

That's a really good idea. Originally I was thinking it the other way around... hehee 😊

Anyway, if you can point me to (or send me) a Content Packaging PIF file from one of these MIT course, I can start mapping it out. As part of the SCORM implmentation, I have gotten IMS content packaging and metadata to work quite acceptable now, so that should be cool.

Ernie

Collapse
12: Re: SCORM dev update (response to 1)
Posted by Dave Bauer on
Ernie,

No rush. Thanks for the update. I was asking because I saw someone asking about the SCORM capabilities of dotLRN.

Collapse
13: Re: SCORM dev update (response to 12)
Posted by Joel Aufrecht on
Is any information or code available for SCORM implementation in OpenACS?
Collapse
14: Re: SCORM dev update (response to 13)
Posted by Ernie Ghiglione on
Joel,

Information about the implementation of SCORM 1.2 on OpenACS/.LRN can be found here.

Unfortunately (due to lack of funding), the SCORM project has slowed down considerably.

However, there are a couple of interesting things that have come out of the work on this project: OpenACS is now IMS Content Packaging and Metadata compliant and Adam Ullman -a student at Sydney Uni- did a java applet to be use as SCORM Run-Time Environment -client side though.

Quite a bit of further work needs to be done to be fully compliant with SCORM. Hopefully in the near future, we might be able to get some resources to do this.

Collapse
15: Re: SCORM dev update (response to 14)
Posted by Dario Roig on
Hello Ernie!

could you send me the package to import IMS CP?, I would like to install it in OpenACS 5.2 to make some tests.

Thank you

Dario (University Of Valencia)

Collapse
16: Re: SCORM dev update (response to 15)
Posted by Ernie Ghiglione on
You can find an early version of the package here:

http://mlweg.pc.ee.usyd.edu.au:8080/files/view/lors_v01.tgz

I'm still perfecting it a bit thanks to the comments of Don and Rocael. It is expected to have a new version shortly.

Take care,

Ernie

Collapse
17: Re: SCORM dev update (response to 1)
Posted by Nima Mazloumi on
Hi Ernie,

great to hear that...looking forward to test it. Will you be able to come to Heidelberg?

Greetings,
Nima

Collapse
18: Re: SCORM dev update (response to 1)
Posted by Dario Roig on
Hi Ernie!

In "http://mlweg.pc.ee.usyd.edu.au:8080 / I can upload a course IMS with "/ random/course-add"
where I can get the package "random?"
Thank you

Dario (U.V. Spain)

Collapse
19: Re: SCORM dev update (response to 17)
Posted by Ernie Ghiglione on
Nima,

<blockquote> Will you be able to come to Heidelberg?
</blockquote>

I'll give it a shot, but I can't promise it. I'm working in a way to finance it... more later.

Ernie

Collapse
20: Re: SCORM dev update (response to 18)
Posted by Ernie Ghiglione on
Hi Dario,

<blockquote> where I can get the package "random?"
</blockquote>

Random package is just a random package I temporarily made to have a UI to the LORS (Learning Object Repository Service) libraries. It is not a formal package at all, but only used as an example on how to use the LORS libraries. The course-add pages do the following:

1.- Gives you a form where you upload a file.
2.- Once the course file (which needs to be a IMS CP or SCORM compliant package), it unzips it
3.- Checks for IMS CP validation (imsmanifest.xml file not corrupted or duplicated)
4.- Opens the imsmanifest file and displays basic info.
5.- If the user accepts, then it adds all folders and files to the CR (as learning objects).
6.- Once the files have their respective cr_item_ids then it adds the course the course structure and metadata (given by the imsmanifest.xml) to the database.
7.- Redirects you to file-storage so you can browse thru the files you just uploaded.

As I mentioned before, take into account that this is by now means finalized or in a usable stage. However, LORS libraries (IMS CP & MD) are good to go, so you can use them to open IMS CP packages, deal with course structure and learning object metadata and add it to the CR as learning objects -as it is the case in this random package- or as file-storage objects.... your choice.

In addition, and thanks to Matthias Melcher's encoragement there's an incipient metadata browser (and future online MD editor) -so you can see the metadata for the objects you added. Example: http://mlweg.pc.ee.usyd.edu.au:8080/random/md/generalmd?ims%5fmd%5fid=2552

As a matter of fact, I'm using the LORS libraries to import Blackboard/WebCT courses exported into IMS CP and import them into .LRN.

You can download the random package here if you want. http://mlweg.pc.ee.usyd.edu.au:8080/files/view/20040309_random.tgz

Ernie

Collapse
21: Re: SCORM dev update (response to 20)
Posted by Jose Agustin Lopez Bueno on
Hello, Ernie!

First of all, thanks for your time!

Testing your Random package, it works well
but when I try to view the files (extracted of
your example of course) I get the next error.

Any pointer?

Best regards,
Agustin

************************************************
Database operation "0or1row" failed (exception NSDB, "Query was not a statement returning rows.")

ERROR:  -20000: Invalid item ID: <NULL>
CONTEXT:  PL/pgSQL function "content_template__get_path" line 7 at return

SQL:

        select
          content_item__get_live_revision(content_item__get_template('3282525', 'public')) as template_id,
          content_template__get_path(content_item__get_template('3282525', 'public'),'-200') as template_url
        from
          dual



    while executing
"ns_pg_bind 0or1row nsdb0 {

        select
          content_item__get_live_revision(content_item__get_template(:item_id, :context)) as template_id,
.......
************************************************

Collapse
22: Re: SCORM dev update (response to 21)
Posted by Ernie Ghiglione on
Agustin,

The reason that's happening is because the uploaded files aren't file-storage objects but learning objects (acs_object subtypes). I was using file-storage UI  to browsing the content repository items I just added.

In a more design note, learning objects are stored in the file-system instead of the database. Since learning objects could easily be a 80MB video file, if it is stored on the database and many students on a class want to access it simultaneously, pulling such file out of the DB would be rather intense and hit performance pretty hard. Therefore, LORS doesn't provide the option to store them in the DB.

What you can do is to change the code so instead of adding the files as learning object type, to be file-storage types. Have a look at lors::cr::add_folder and lors::cr::add_files (modify/change lors__new_lo / lors__new_lo_version for the file-storage equivalent).

Maybe it would be a good idea to have the option to create folders and files within the file-storage or any other object subtypes... Hmmm...

Ernie

Collapse
23: Re: SCORM dev update (response to 1)
Posted by Nima Mazloumi on
Hi Ernie,

I found a tool called zms which is a scorm compliant environment for zope. It is open source and might be useful.

Greetings,
Nima

Collapse
24: Re: SCORM dev update (response to 1)
Posted by Orzenil Silva Junior on
Ernie,

I read your paper about ADL SCORM implementation for OpenACS at WEG and threads you are maintaining here in this forums. That's all great and thank you and others with you about it.

I meet people here in Brazil that aims to change from webCT and elearning standards are very required for them and I agree they're right. They'are evaluating moodle (moodle.org) and Atutor(atutor.ca) at now so I propose dotLRN too :) because I think dotLRN is a great solution to overcome some shortcuts about other elearnig implementations providing the best infrastructure I have seen to developing applications and services. Unhappyly dotLRN is not so popular here in Brazil as php/mysql is . I hope this situation changes and we are working for it :)

I am preparing some wimpy point presentations for them in a dotLRN2.0rc1 instalattion we maintain for studying and research purposes. I'm setting up a new instalation from CVS HEAD to work with oacs-dav (webDAV) and I think your packages RAMDOM and LORS could sound good for some discussions about standards in OpenACS, isnt it?

I'm not reaching url you cited in this thread and packages still not in CVS. How could I obtain them?

Yours
Orzenil

Collapse
25: Re: SCORM dev update (response to 24)
Posted by Ernie Ghiglione on
Bon dia Orzenil,

Let me see if I can address all your comments here.

Importing webCT packages to .LRN

I have done some testing importing webCT 4.1.x IMS packages into .LRN.  However, there's a lot of tweaking required as their export fuction has proven, at best, fairly poor. For start webCT 4.1.x doesn't allow you to export full courses (unlike their previous version 3.x!). Let that aside, you can only export two types of content: quizzes and content modules.  Moreover, in several ocassions I have had packages missing files (although they were described on the organization of the package -imsmanifest.xml file- as existing!

Unfortunately, it does not export users information, neither course settings, which is quite a limitation.

At any rate, if most of your courses in webCT have a lot of content modules, you'll be able to export those and then -hopefully- import them seamlessly into .LRN using the LORS libraries.

Atutor

I haven't had much exposure to Atutor, although I have read it has a strong support for IMS specifications and good authoring tools as well. It export content in according to SCORM 1.2 specs (and it seems that they adhiere scrictly to them -which is good), so you can import those easily with the LORs libraries. Although, take into account that only exports content. It won't export forums,

Moodle

I'm not so sure about its compliance to standards. Here (http://en.wikipedia.org/wiki/Moodle) it says that it complies with IMS QTI.

I have tested Moodle before and I have to say I was impressed in many ways with it. First, it is a debian package, so you can install it on a fly. Second, it is a system that revolves around the student and his/her experience: therefore it is quite intuitive. For example, their discussion forums have a picture of all people posting messages there. I'm not a learning or community guru here, but that gave me the impression of a nice community feeling.

Actually, I would encorage people in the community to have a look at it, as it is always good to see other perspectives and approaches.

Random and LORS package

Random, as I mentioned before, it's just an example on how to use LORS libraries. I would strongly suggest you not to use if for any production purposes without previously tayloring. They can both be found here:

Random:
http://mlweg.pc.ee.usyd.edu.au:8080/files/view/20040309_random.tgz

LORS:
http://mlweg.pc.ee.usyd.edu.au:8080/files/view/lors_v01.tgz

I hope that helps,

Ernie

Collapse
26: Re: SCORM dev update (response to 25)
Posted by Rocael Hernández Rizzardini on
Hello guys,
two things FYI, at Galileo University and as part of E-LANE project:
* we'll start to provide a debian package of .LRN & openacs, I'll make an official announcement when we have it ready.
* our actual ACES UI includes integration of *user photo* into several packages, including the forum threads, so our plan is to have the same functionality for .LRN since we'll migrate quite soon.

And of course, keep looking about what others are doing, is always a must in order to keep in the market.

Collapse
27: Re: SCORM dev update (response to 25)
Posted by Orzenil Silva Junior on
Bom dia Ernie,

Thank you for your comments. I got yours lors/random package and I'm going to install them. I'm reading about Adam Ullman RTE implementation now.

I'm going to install atutor to see how lors works on importing content exported from it.

Moodle is still a little confuse to me about SCORM implementation. At moodle.org I saw that version 1.2.1 offers support to import quizzes in webCT format but they say nothing about SCORM (see: http://moodle.org/doc/?frame=features.html). There's a company at moodle.com that offers enhances moodle with  support for SCORM packaged learning object at charged (about US$15000).

Anyway I will continue reading about SCORM and dotlrn implementations. Maybe me and people in the company I work could help you and community in the brief future (at leat at user case level).

Orzenil

Collapse
28: Re: SCORM dev update (response to 27)
Posted by anahita ariannia on
hello

wwould you let me know if you use moodle as a faq whitout login?