This may very well be the most complex part of the DotNetSCORM project for several reasons.
What seems to be the biggest hurdle is validating and parsing the imsmanifest.xml file. The standard .NET XML classes will not handle the schema for imsmanifest.xml as several elements of the schema are non-deterministic in nature and the .NET XML classes are deterministic in nature.
It has been suggested to modify the schema locally for import purposes, however this is short sighted and fatalistic. The SCORM spec is flexible and fluid, by creating a special situation for our purposes it is likely that there would be some course ware that would not be able to load onto DotNetSCORM.
The other option is to use an XML class that will properly handle non-deterministic schemas without issues. So far the best solution seems to be the XERCES.NET classes from NETiT. This is a port of XERCES from Java to J# under the Apace license.
So what tasks must a Course Import module within DotNetSCORM?
Allow user to select a PIF from their local machine to upload.
Store it locally in a temporary directory
Validate the package
· Uncorrupted zip file
· Contains an imsmanifest.xml file
· Validate imsmanifest.xml file
· Test that files listed in the manifest are in the package
Create Course in database (receiving CourseID in return)
Create Course Directory based on CourseID
Unzip package to new course directory
Create SCOs in database based on the organization metadata
Update data in course tables from manifest
Generate the imsmanifest.js file used by the RTE
Delete the temporary upload file
Get settings from user uploading package
Some of these tasks are not required in a first version of this module. As an example if we make the assumption that any package uploaded has passed the ADL Validation Suite there will be no need to validate the imsmanifest.xml file or test the files in the package. Obviously we will want this functionality in later releases.
The TinyLMS application has been the source of much of the work to date and has a very good structure to its course builder. The TinyLMS application is a GUI based builder, so obviously there is a lot there we do not need. The application is written in Java and needs the appropriate classes converted to .NET to create a set of classes that can be used with DotNetSCORM.