├── .travis.yml
├── .vscode
└── settings.json
├── Gruntfile.js
├── QUnit-Tests
├── README.md
├── css
│ └── styles.css
├── js
│ ├── README.md
│ ├── scorm.bot.min.js
│ ├── scorm.bot.pack.js
│ ├── scorm
│ │ ├── README.md
│ │ ├── SCOBot.js
│ │ ├── SCOBotBase.js
│ │ ├── SCOBotUtil.js
│ │ └── SCOBot_API_1484_11.js
│ └── test
│ │ ├── README.md
│ │ ├── scobot-prod.js
│ │ ├── scobot.js
│ │ ├── scobot_basic.js
│ │ └── scobotbase.js
├── qunit_SCOBotBase.html
├── qunit_SCOBot_dev_full.html
├── qunit_SCOBot_prod_basic.html
└── qunit_SCOBot_prod_full.html
├── README.md
├── XMLSchema.dtd
├── adlcp_v1p3.xsd
├── adlnav_v1p3.xsd
├── adlseq_v1p3.xsd
├── bdlcp_rootv1p2.xsd
├── cert_imsmanifest.xml
├── common
├── anyElement.xsd
├── dataTypes.xsd
├── elementNames.xsd
├── elementTypes.xsd
├── rootElement.xsd
├── vocabTypes.xsd
└── vocabValues.xsd
├── datatypes.dtd
├── extend
├── custom.xsd
└── strict.xsd
├── flash
└── as3
│ └── com
│ └── cybercussion
│ └── SCOBot.as
├── imscp_v1p1.xsd
├── imsmanifest.xml
├── imsss_v1p0.xsd
├── imsss_v1p0auxresource.xsd
├── imsss_v1p0control.xsd
├── imsss_v1p0delivery.xsd
├── imsss_v1p0limit.xsd
├── imsss_v1p0objective.xsd
├── imsss_v1p0random.xsd
├── imsss_v1p0rollup.xsd
├── imsss_v1p0seqrule.xsd
├── imsss_v1p0util.xsd
├── lock_nav_imsmanifest.xml
├── lom.xsd
├── lomCustom.xsd
├── lomLoose.xsd
├── lomStrict.xsd
├── package.json
├── scorm12_schemas
├── README.md
├── adlcp_rootv1p2.xsd
├── ims_xml.xsd
├── imscp_rootv1p1p2.xsd
└── imsmd_rootv1p2p1.xsd
├── unique
├── loose.xsd
└── strict.xsd
├── vocab
├── adlmd_vocabv1p0.xsd
├── custom.xsd
├── loose.xsd
└── strict.xsd
└── xml.xsd
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "6.9.1"
4 | before_script:
5 | - npm install -g grunt-cli
6 | - npm install grunt-jslint
7 | - npm install grunt-contrib-qunit
8 | - npm install grunt-contrib-concat
9 | - npm install grunt-yui-compressor
10 | - npm install grunt-sizediff --save-dev
11 | script: grunt test --verbose --force
12 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "workbench.colorCustomizations": {
3 | "tab.activeModifiedBorder": "#00c3ff",
4 | "tab.activeBorderBottom": "#f003fc",
5 | "statusBar.noFolderBackground": "#3a28af"
6 | }
7 | }
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | module.exports = function(grunt) {
2 | 'use strict';
3 | // Project configuration.
4 | grunt.initConfig({
5 | pkg: grunt.file.readJSON('package.json'),
6 | dirs: {
7 | src: 'QUnit-Tests/js/scorm/',
8 | dest: 'QUnit-Tests/js/<%= pkg.name %>-<%= pkg.version %>',
9 | },
10 | jslint: {
11 | // define the files to lint
12 | client: {
13 | src: ['<%= dirs.src %>*.js'],
14 | directives: {
15 | browser: true,
16 | nomen: true
17 | },
18 | options: {
19 | junit: 'out/client-junit.xml', // write the output to a JUnit XML
20 | }
21 | }
22 | },
23 | qunit: {
24 | files: ['QUnit-Tests/qunit_SCOBot_dev_full.html']
25 | },
26 | concat: {
27 | dist: {
28 | src: ['<%= dirs.src %>*.js'],
29 | dest: '<%= dirs.dest %>-min.js',
30 | }
31 | },
32 | packjs: {
33 | default_options: {
34 | options: {
35 | base64: true,
36 | shrink: true
37 | },
38 | files: {
39 | // This is kinda confusing. Seems to be new "packed" file, and target file, but it is throwing Warning: Arguments to path.join must be strings
40 | '<%= dirs.dest %>-pack.js' : '<%= dirs.dest %>-min.js'
41 | }
42 | }
43 | },
44 | sizediff: {
45 | dist: {
46 | src: [
47 | '<%= dirs.dest %>-min.js',
48 | '<%= dirs.dest %>-pack.js' // optional
49 | ]
50 | }
51 | }
52 | });
53 |
54 | // Tasks
55 | grunt.loadNpmTasks('grunt-jslint'); // load the task
56 | grunt.loadNpmTasks('grunt-contrib-qunit');
57 | grunt.loadNpmTasks('grunt-contrib-concat');
58 | //grunt.loadNpmTasks('grunt-jsmin-sourcemap');
59 | // grunt.loadNpmTasks('grunt-packer');
60 | //grunt.loadNpmTasks('grunt-yui-compressor');
61 | grunt.loadNpmTasks('grunt-sizediff');
62 |
63 |
64 | // Task to run tests
65 | grunt.registerTask('test', ['jslint', 'qunit', 'concat', 'sizediff']); // packer (not found?)
66 | // Task to Distribute
67 | //grunt.registerTask('dist', ['concat']);
68 |
69 | };
70 |
--------------------------------------------------------------------------------
/QUnit-Tests/README.md:
--------------------------------------------------------------------------------
1 | #Launchable QUnit Files
2 |
3 | Here you can adjust your QUnit file to match your needs.
4 | This uses both developer (un-minified) code as well as the built library.
5 | Please feel free to add your own tests to match your use case(s).
6 |
--------------------------------------------------------------------------------
/QUnit-Tests/css/styles.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0px;
3 | padding: 0px;
4 | -webkit-tap-highlight-color: rgba(0,0,0,0);
5 | -webkit-touch-callout: none;
6 | -webkit-tap-highlight-color: rgba(0,0,0,0);
7 | -webkit-user-select: none;
8 | -webkit-font-smoothing:antialiased;
9 | -webkit-text-size-adjust:none;
10 | }
11 | html,body{
12 | width: 100%;
13 | height: 100%;
14 | border: 0;
15 | }
16 | body {
17 | background: rgb(58,60,69);
18 | background: url('img/noise2.png'), -moz-radial-gradient(center top, ellipse cover, rgba(58,60,69,1) 0%, rgba(0,0,0,1) 100%);
19 | background: url('img/noise2.png'), -webkit-gradient(radial, center top, 0px, center center, 100%, color-stop(0%,rgba(58,60,69,1)), color-stop(100%,rgba(0,0,0,1)));
20 | background: url('img/noise2.png'), -webkit-radial-gradient(center top, ellipse cover, rgba(58,60,69,1) 0%,rgba(0,0,0,1) 100%);
21 | background: url('img/noise2.png'), -o-radial-gradient(center top, ellipse cover, rgba(58,60,69,1) 0%,rgba(0,0,0,1) 100%);
22 | background: url('img/noise2.png'), -ms-radial-gradient(center top, ellipse cover, rgba(58,60,69,1) 0%,rgba(0,0,0,1) 100%);
23 | background: url('img/noise2.png'), radial-gradient(center top, ellipse cover, rgba(58,60,69,1) 0%,rgba(0,0,0,1) 100%);
24 | background-attachment: fixed;
25 | /* Base Font single line format - font: style variant weight size / line-height "Family"; */
26 | font: normal 12px/15px "Lucida Grande", Helvetica, Verdana, San-serif;
27 | color: #f4f4f4;
28 | font-smoothing: subpixel-antialiased; /* you need this when translate3d is used */
29 | /* End Font */
30 | text-shadow: 0px 2px 2px rgba(0,0,0,0.4);
31 | }
32 | .graygrad {background: -webkit-gradient(linear, 0% 0, 0% 100%, from(#9AA7B2), color-stop(0.02, #647482), to(#3E4851)); background: -moz-linear-gradient(top, #9AA7B2, #647482, #3E4851); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#9AA7B2', endColorstr='#3E4851'); background-color: #3E4851;}
33 | a:link { color:white; text-decoration:underline; }
34 | a:visited { color:#f2f2f2; text-decoration:underline; }
35 | a:hover { color:green; text-decoration:underline; }
36 | a:active { color:red; text-decoration:underline; }
37 | header {
38 | padding: 10px;
39 | }
40 | fl{float:left;}
41 | #container {position: relative; min-width: 100%; min-height: 100%; overflow-x: hidden;}
42 | #content{padding: 10px; padding-bottom: 65px;}
43 | a.myButton:link {
44 | -moz-box-shadow:inset 0px 1px 0px 0px #ffffff;
45 | -webkit-box-shadow:inset 0px 1px 0px 0px #ffffff;
46 | box-shadow:inset 0px 1px 0px 0px #ffffff;
47 | background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #ededed), color-stop(1, #dfdfdf) );
48 | background:-moz-linear-gradient( center top, #ededed 5%, #dfdfdf 100% );
49 | filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf');
50 | background-color:#ededed;
51 | -moz-border-radius:6px;
52 | -webkit-border-radius:6px;
53 | border-radius:6px;
54 | border:1px solid #dcdcdc;
55 | display:inline-block;
56 | color:#000;
57 | font-family:arial;
58 | font-size:15px;
59 | font-weight:bold;
60 | padding:6px 24px;
61 | margin-right: 2px;
62 | text-decoration:none;
63 | text-shadow:1px 1px 0px #ffffff;
64 | }
65 | a.myButton:hover {
66 | background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #dfdfdf), color-stop(1, #ededed) );
67 | background:-moz-linear-gradient( center top, #dfdfdf 5%, #ededed 100% );
68 | filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dfdfdf', endColorstr='#ededed');
69 | background-color:#dfdfdf;
70 | }
71 | a.myButton:active {
72 | position:relative;
73 | top:1px;
74 | }
75 | .myButton {
76 | color: #000 !important;
77 | }
78 | #pfooter{position: fixed; bottom: -2px; left: 0; z-index: 99; width: 100%; height: 65px;}
79 | #pfooter .info{padding: 10px;}
80 | #pfooter .nav{position: absolute; right: 10px; top: 15px; width: 400px; text-align: right;}
81 |
82 | .rounded {
83 | border-radius: 4px;
84 | }
85 | .roundedTop{
86 | border-top-left-radius: 4px;
87 | border-top-right-radius: 4px;
88 | }
89 | .roundedBottom {
90 | border-bottom-right-radius: 4px;
91 | border-bottom-left-radius: 4px;
92 | }
93 |
94 | .shadow {
95 | box-shadow: rgba(0,0,0,0.7) 0 5px 8px;
96 | }
97 | .shadowright {
98 | box-shadow: rgba(0,0,0,0.5) 2px 5px 8px 2px;
99 | }
100 |
101 | #flashObj {
102 | width: 935px;
103 | height: 535px;
104 | }
105 |
--------------------------------------------------------------------------------
/QUnit-Tests/js/README.md:
--------------------------------------------------------------------------------
1 | # Almost there..
2 |
3 | See the 'scorm' folder for the main project files.
4 |
5 | Also are the built min and packed version of the current release.
6 |
--------------------------------------------------------------------------------
/QUnit-Tests/js/scorm/README.md:
--------------------------------------------------------------------------------
1 | # You made it.
2 |
3 | This project was broke down originally to encompass an entire functioning SCO with the exception that rather than a quiz, assessment, game or otherwise it was a QUnit series of tests.
4 |
5 | These files are the main formatted source code for the SCOBot Content API. Per the documentation you can mix and match which files you use in your project. You may use them all, or include them in your own build processes.
6 |
7 | ## SCOBotUtil
8 | This now includes an event system and other utilitiy methods used by the library. Since it was too difficult to expand this to more libraries without relying on these features, they are now baked in. No dependancies on jQuery or any other framework/library.
9 |
10 | ## SCOBotBase
11 | This is the bare minimum for establishing a connection to the lms, and providing the backwards compatibilty with both SCORM 1.2 and SCORM 2004. If you only use this file, your choosing to manage interacting with SCORM directly.
12 |
13 | ## SCOBot
14 | This automates the sequence doing typical load, initialize, checking mode, entry, suspend data and more. Creates friendly missing API's from the SCORM communication standard that makes setting objectives and interactions much easier. Baked in is a load, and unload event which will manage common tasks all SCO's must do. Also allows you to simply call happyEnding() to auto score your content. You can even take advantage of letting SCOBot score your objectives for you.
15 |
16 | ## SCOBot_API_1484_11
17 | This is a local (simple) skeleton of the SCORM 2004 Runtime API. This mainly serves the purpose of allowing you to work offline and view console messages related to the communication standard of SCORM. Keep in mind this is only SCORM 2004's base API and does not include things like the Sequence and Navigation portion, or Shared State Persistence. It is NOT the actual Runtime API so it does not strictly enforce all portions of the student attempt.
18 |
--------------------------------------------------------------------------------
/QUnit-Tests/js/test/README.md:
--------------------------------------------------------------------------------
1 | # QUnit tests
2 |
3 | Within this folder are specific tests for the base, dev and production SCOBot Content API library.
4 |
5 | ####Basic (scobot_basic)
6 | This is a very simple test just using the SCOBot Base library. Bare minimum with a happy ending.
7 |
8 | ####Base (scobotbase)
9 | This tests the base SCOBotBase.js library (the bare minimum)
10 |
11 | ####Dev (scobot)
12 | This uses the full source code (SCOBotBase, SCOBotUtil, SCOBot and SCOBot_API_1484_11)
13 |
14 | ####Prod (scobot)
15 | This uses the built or packed version of the librar which includes SCOBotBase, SCOBotUtil, SCOBot and SCOBot_API_1484_11
16 |
--------------------------------------------------------------------------------
/QUnit-Tests/js/test/scobot_basic.js:
--------------------------------------------------------------------------------
1 | /*global QUnit, ok, module, test, strictEqual, equal, SCOBotUtil, SCOBotBase, SCOBot, debug, learner_name, learner_id */
2 | /*
3 | * Hi,
4 | * This is a watered down basic test of commonly used SCORM calls. For the full test see scobot.js.
5 | *
6 | * jQuery requirement lifted in 4.0.0
7 | */
8 | QUnit.config.reorder = false;
9 | var $ = SCOBotUtil,
10 | scorm = new SCOBotBase({
11 | debug: true,
12 | throw_alerts: false,
13 | time_type: 'GMT',
14 | exit_type: 'suspend',
15 | success_status: 'unknown'
16 | }),
17 | SB = new SCOBot({
18 | interaction_mode: 'state',
19 | launch_data_type: 'querystring'
20 | }),
21 | entry = 'ab-initio',
22 | version = '1.0',
23 | local = false,
24 | setvalue_calls = 0,
25 | getvalue_calls = 0,
26 | // These things tend to happen during authoring/creation. We'll use this later to put into suspend data
27 | character_str = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ˜–—―‗‘’‚‛“”„†‡•…‰′″‹›‼‾⁄₣₤₧₪₫€℅ℓ№™Ω℮⅓⅔⅛⅜⅝⅞←↑→↓∂√∞∩∫≠≡■□▲△▼○●♀♂♪";
28 | $.addEvent(SB, "load", function (e) {
29 | "use strict";
30 | SB.debug("------SCOBot Fired Load Event Example: your player can begin. -------");
31 | });
32 | $.addEvent(scorm, "setvalue", function (e) {
33 | "use strict";
34 | setvalue_calls += 1;
35 | });
36 | $.addEvent(scorm, "getvalue", function (e) {
37 | "use strict";
38 | getvalue_calls += 1;
39 | });
40 | $.addEvent(scorm, "StoreData", function (e) {
41 | "use strict";
42 | SB.debug("--- Call to Store Data was made. ---\nExample: You could use localStorage to hold the student attempt.\nSee Object below:", 3);
43 | SB.debug(e.runtimedata);
44 | });
45 | $.addEvent(scorm, "terminated", function (e) {
46 | "use strict";
47 | SB.debug("SetValue Calls: " + setvalue_calls + "\nGetValue Calls: " + getvalue_calls, 4);
48 | });
49 |
50 | // Much of SCOBOT is a bit auto-pilot so several SCORM calls may be made on one API reference.
51 | module("SCOBot");
52 | // Debug
53 | test("SB.debug", function () {
54 | "use strict";
55 | var sub_method = SB.debug;
56 | ok(sub_method("Error Message", 1), "Valid error message");
57 | ok(sub_method("Warning Message", 2), "Valid warning message");
58 | ok(sub_method("General Message", 3), "Valid general message");
59 | ok(sub_method("Log Message", 4), "Valid log message");
60 | ok(!sub_method("Bogus Message", 5), "Invalid log message");
61 | });
62 |
63 | test("ISO 8601 UTC Time", function () {
64 | "use strict";
65 | scorm.set("time_type", "UTC");
66 | strictEqual(SB.isISO8601('2012-02-12T00:37:29.0Z'), true, 'Checking a UTC example 2012-02-12T00:37:29.0Z');
67 | strictEqual(SB.isISO8601('2012-02-12T00:37:29'), false, 'Checking a non-UTC example 2012-02-12T00:37:29');
68 | strictEqual(SB.isISO8601('2012-02-1200:37:29'), false, 'Checking a malformed example 2012-02-1200:37:29');
69 | });
70 | /**
71 | * Verify ISO 8601 Timestamp (this can fail per browser due to time formatting or timezone)
72 | */
73 | test("ISO 8601 Time", function () {
74 | "use strict";
75 | // non UTC (This was all I could get to work con cloud.scorm.com)
76 | scorm.set("time_type", "");
77 | strictEqual(SB.isISO8601('2012-02-27T15:33:08'), true, 'Checking a non-UTC example 2012-02-27T15:33:08');
78 | strictEqual(SB.isISO8601('2012-02-1200:37:29'), false, 'Checking a malformed example 2012-02-1200:37:29');
79 | strictEqual(SB.isISO8601('2012-02-12T00:37:29Z'), false, 'Checking a UTC example 2012-02-12T00:37:29Z');
80 | // GMT
81 | scorm.set("time_type", "GMT");
82 | strictEqual(SB.isISO8601('2009-03-24T16:24:32.5+01:00'), true, 'Checking a GMT example 2009-03-24T16:24:32.5+01:00');
83 | strictEqual(SB.isISO8601('2012-02-27T15:33:08.08:00'), false, 'Checking a GMT example 2012-02-27T15:33:08.08:00');
84 | //strictEqual(scorm.isoStringToDate('2012-03-20T10:47:54.0-07:00'), 'March 20, 2012 - 10:47PM', "Checking ISO String back to date");
85 | var date = scorm.isoStringToDate('2012-03-20T10:47:54.0-07:00');
86 | strictEqual(String(date), 'Tue Mar 20 2012 10:47:54 GMT-0700 (PDT)', 'Checking ISO8601 String to Date equals - Tue Mar 20 2012 10:47:54 GMT-0700 (PDT)');
87 | });
88 | /**
89 | * Verify LMS Connected
90 | */
91 | test("LMS Connected", function () {
92 | "use strict";
93 | if (local) {
94 | strictEqual(scorm.isLMSConnected(), false, 'Local enabled, should not find a LMS.');
95 | } else {
96 | strictEqual(scorm.isLMSConnected(), true, 'Local disabled, should find a LMS.');
97 | }
98 | });
99 |
100 | /**
101 | * Mode (normal, browse, review)
102 | */
103 | test("Mode", function () {
104 | "use strict";
105 | strictEqual(SB.getMode(), 'normal', "Checking that Mode is normal");
106 | });
107 |
108 | /**
109 | * Bookmarking
110 | */
111 | test("Bookmarking", function () {
112 | "use strict";
113 | if (local) {
114 | // There would be no bookmark unless one was manually set
115 | strictEqual(SB.setBookmark(2), 'true', 'Setting Bookmark to 2');
116 | strictEqual(SB.getBookmark(), '2', 'Getting Bookmark, should be 2');
117 | } else {
118 | if (SB.getEntry() === "resume") {
119 | strictEqual(SB.getBookmark(), '2', 'Getting Bookmark, should be 2');
120 | } else {
121 | strictEqual(SB.setBookmark(2), 'true', 'Setting Bookmark to 2');
122 | strictEqual(SB.getBookmark(), '2', 'Getting Bookmark, should be 2');
123 | }
124 | }
125 | });
126 |
127 | /**
128 | * Max Time Allowed
129 | */
130 | test("Max Time Allowed", function () {
131 | "use strict";
132 | var max_time_allowed = SB.getvalue('cmi.max_time_allowed');
133 | strictEqual(max_time_allowed, '', "Checking max time allowed ('')");
134 | // Adding test to make sure ISODurationToCentisecs works properly.
135 | var time = scorm.ISODurationToCentisec("PT10S") * 10;
136 | strictEqual(time, 10000, "Checking ISODurationToCentisecs");
137 | // Note, if you update the CAM to pass imsss:attemptAbsoluteDurationLimit please update this test!
138 | });
139 |
140 | /**
141 | * Comments from LMS
142 | */
143 | test("Comments from LMS", function () {
144 | "use strict";
145 | strictEqual(SB.getvalue('cmi.comments_from_lms._count'), '0', "Getting Comments from LMS count '0'");
146 | // UPDATE YOUR TESTS HERE IF YOU INTEND TO CHECK FOR COMMENTS
147 | });
148 |
149 | /**
150 | * Check Comments from Learner
151 | */
152 | test("Check Comments from Learner", function () {
153 | "use strict";
154 | var learner_comment_count = SB.getvalue('cmi.comments_from_learner._count'),
155 | bookmarkCount;
156 | if (SB.getEntry() !== "resume") {
157 | // Verify previous comments
158 | strictEqual(learner_comment_count, '0', "Getting Comments from Learner count '0'");
159 | } else {
160 | scorm.debug(SB.getSuspendDataByPageID(3));
161 | bookmarkCount = SB.getSuspendDataByPageID(3).fromLearner; // pull last suspended count to compare
162 | strictEqual(learner_comment_count, bookmarkCount, "Getting Comments from Learner count " + bookmarkCount); // this is getting set each visit aka resume attempt.
163 | }
164 | });
165 |
166 | /**
167 | * Set Comment From Learner
168 | */
169 | test("Set Comment from Learner", function () {
170 | "use strict";
171 | var commentTime = new Date();
172 | strictEqual(SB.setCommentFromLearner("This is a comment from learner", "QUnit Test", commentTime), 'true', "Setting comment from learner.");
173 | // Expand later if you like, but please update the expected count above.
174 | // Increment the stored counter so on resume after several comments it can be evaluated for correctness.
175 | SB.setSuspendDataByPageID(3, 'countTracker', {
176 | fromLearner: SB.getvalue('cmi.comments_from_learner._count')
177 | });
178 | });
179 |
180 |
181 | /**
182 | * Set Suspend Data by Page ID
183 | */
184 | test("Set Suspend Data By Page ID", function () {
185 | "use strict";
186 | var result,
187 | answer_arr = ["a", "b", "c", "d"],
188 | images_arr = ["bird.png", "bug.png", "helicopter.png"];
189 | // Save Suspend Data for Page 1
190 | strictEqual(SB.setSuspendDataByPageID(1, 'Sample Data 1', {
191 | answers: answer_arr,
192 | characters: character_str,
193 | question: "This is the question?",
194 | numtries: 2
195 | }), 'true', 'Setting some sample suspend data for page 1');
196 | // Verify saved Suspend Data for Page 1
197 | result = SB.getSuspendDataByPageID(1);
198 | strictEqual(result.answers, answer_arr, "Verify answers: ['a','b','c','d']");
199 | strictEqual(result.characters, character_str, "Verify Character String");
200 | strictEqual(result.question, 'This is the question?', 'Verify question: This is the question?');
201 | strictEqual(result.numtries, 2, 'Verify numtries: 2');
202 | // End Test 1
203 | // Save Suspend Data for Page 2
204 | strictEqual(SB.setSuspendDataByPageID(2, 'Sample Data 2', {
205 | short_answer: "This is a short answer with text they typed in.",
206 | characters: character_str,
207 | question: "How did you feel about the question?",
208 | images: images_arr
209 | }), 'true', 'Setting some sample suspend data for page 2');
210 | // Verify saved Suspend Data for Page 4
211 | result = SB.getSuspendDataByPageID(2);
212 | strictEqual(result.short_answer, 'This is a short answer with text they typed in.', 'Verify short_answer: This is a short answer with text they typed in.');
213 | strictEqual(result.characters, character_str, "Verify Character String");
214 | strictEqual(result.question, 'How did you feel about the question?', 'Verify question: How did you feel about the question?');
215 | strictEqual(result.images, images_arr, "Verify answers: ['bird.png', 'bug.png', 'helicopter.png']");
216 | // End Test 2
217 | });
218 |
219 | /**
220 | * Happy Ending (auto-score/complete)
221 | */
222 | test("Happy Ending", function () {
223 | "use strict";
224 | SB.happyEnding();
225 | // Verify Happy ending values
226 | strictEqual(scorm.getvalue('cmi.score.scaled'), '1', "Checking to make sure score.scaled is 1");
227 | strictEqual(scorm.getvalue('cmi.score.raw'), '100', "Checking to make sure score.raw is 100");
228 | strictEqual(scorm.getvalue('cmi.success_status'), 'passed', "Checking to make sure success_status is passed.");
229 | strictEqual(scorm.getvalue('cmi.completion_status'), 'completed', "Checking to make sure completion_status is completed.");
230 | });
231 |
232 | /**
233 | * Suspend The SCO **Terminating**
234 | */
235 | test("Suspend SCO", function () {
236 | "use strict";
237 | SB.debug(">>>>>>>>> Suspending <<<<<<<<<");
238 | /*strictEqual(scorm.commit(), 'true', "Committing to check navigation possibilities.");
239 | if (!local) {
240 | canContinue = SB.getvalue('adl.nav.request_valid.continue');
241 | strictEqual(canContinue, 'true', 'Checking for adl.nav.request_valid.continue'); // Check your imss sequencing flow control!!!
242 | if (canContinue === 'true' || canContinue === 'unknown') {
243 | //SB.setvalue('adl.nav.request', 'continue'); // Enable if you want it to cruise past this SCO
244 | }
245 | }*/
246 | strictEqual(SB.suspend(), 'true', 'Suspending SCO');
247 | //SB.debug("SetValue Calls: " + setvalue_calls + "\nGetValue Calls: " + getvalue_calls, 4);
248 | });
249 |
--------------------------------------------------------------------------------
/QUnit-Tests/qunit_SCOBotBase.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | QUnit for SCOBotBase
6 |
7 |
10 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/QUnit-Tests/qunit_SCOBot_dev_full.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | QUnit for SCOBot (dev-full)
6 |
7 |
8 |
11 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/QUnit-Tests/qunit_SCOBot_prod_basic.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | QUnit for SCOBot (basic)
6 |
7 |
10 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/QUnit-Tests/qunit_SCOBot_prod_full.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | QUnit for SCOBot (prod-full)
6 |
7 |
8 |
11 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SCORM Content API Support
2 | [](https://travis-ci.org/cybercussion/SCOBot)
3 |
4 | 
5 |
6 | ## Project Status: Maintenace mode
7 | API's and features have been built and tested. More tests can always be written based on scenarios. If you encounter anything please open an issue.
8 |
9 | ## Communication, Packaging, Sequencing (SCORM 2004 only)
10 | Main project (JavaScript) files are located in [QUnit-Tests/js/scorm](https://github.com/cybercussion/SCOBot/tree/master/QUnit-Tests/js/scorm).
11 | Surrounding files are related to the Packaging portion of SCORM 2004, and SCORM 1.2 schemas are also available in the scorm12_schemas folder.
12 | Do you have to create a CAM/PIF package? - no. Most platforms support also support manual transfers or content repositories.
13 | However, most the time the imsmanifest.xml serves as a matter of record, and the surrounding optional XSD's assist in the validation of that XML file.
14 | Normally these files must be in the root of the zip. Some platforms will complain if they are not.
15 | Please also consider the use of CDNs, S3, etc... when applicable; to limit your content bandwidth and forcing the user to re-download shared assets.
16 |
17 | ## Why would I use this?
18 |
19 | * You are looking to add SCORM support to existing content that needs to report scoring, status and or completion.
20 | * You are designing custom e-learning content and wish to add SCORM Support.
21 | * You are testing or troubleshooting a LMS Platforms SCORM compatibility.
22 | * Furthering your familiarization with SCORM and its possibilities.
23 | * Seeking a managed, modern, transparent, test driven approach to JavaScript.
24 |
25 | Wiki has been updated with technical, non-technical information so you can obtain a more well-rounded view of e-learning as a whole. The audience is commonly broad, with varying skill sets and backgrounds.
26 | SCORM is one of the more popular e-learning standards. Since SCORM is predominantly a JavaScript communication standard coupled with packaging and sequencing - it can get complicated in a hurry.
27 | After you understand the underlying components that make up the communication, packaging, and sequencing you'll find its pretty much like building a website, and reporting what the user is doing through an API.
28 |
29 | ## SCORM Support for Content
30 | This project was created to enhance developers capabilities interfacing e-learning standards for SCORM 1.2 and SCORM 2004. Over the last 5+ years of development, there has been no end to the amount of use cases and scenarios. Feedback from platform deployments ( new and legacy ) have been rolled into to the source code.
31 | It's a combination of all the missing API support provided by the Learning Management System Runtime. SCORM itself started off as a packaging and communication standard. Later in 2004 this included sequencing and navigation to manage your table of contents.
32 | 
33 |
34 | Location of the Runtime API occurs quickly. This traverses the Document Object Model seeking out the Runtime API. Once connected, SCORM communication will initialize.
35 | SCOBot will translate API calls to SCORM 1.2 if the portal does not support SCORM 2004. This allows you to speak one language throughout your project, but be aware there are some limitations on the compatibility due to differences between the specifications.
36 |
37 | ## Quick note about Packaging
38 | There are a lot of base files that make up the packaging standard. These schemas and document type definitions are all based on the XML structures used by the packaging format.
39 | These are optional files used to support the IMS Manifest used to describe your content object(s). This enables a Learning Management System to import your content, and have some level of a one to many relationship.
40 |
41 | Often within e-learning curriculum and instructional specialists use modules like chapters, lessons, topics, units and more. This organization allows the construction of multi-tiered hierarchies which the LMS can display in a tree, or some other navigational format.
42 | The LMS also has the ability to control navigation within SCORM 2004 beyond what was available in SCORM 1.2.
43 |
44 | ## Quick note about Communication
45 | SCOBot will search for SCORM 2004, then fail over to SCORM 1.2. If it cannot locate any API, it will fail over to itself. Since SCOBot will manage the student data, you could choose to route that to local storage, or post it to a central server. This is all up to how you or your team wants to handle fail over.
46 | There are many deep or complex parts of SCORM since the communication is mainly string based and you only request one value at a time. SCOBot will allow you to roll-up larger data chunks into one API call. This simplifies you needing to remember what name spaces, and what order to manage your own communication. This also aids in avoiding burying all your SCORM communications deep in your project or in a way that isn't re-usable throughout your training.
47 |
48 | ## Technologies, Frameworks, Libraries
49 | It is very important to understand SCORM should be treated much like loading any other data source. It's recommended you hold up rendering the training until you establish a connection so things like bookmarks, suspended data and other modes that can establish what you should be doing. So whether you load data from XML, JSON, a CSV or just more HTML and JavaScript, understand SCOBot will trigger a 'load' event once its LMS connection is ready. Listen to this event to know when its safe to continue.
50 |
51 | ## QUnit Tests
52 | These have been included to help in the development of the API. Part way thru the design it was determined they could also test a Learning Management Systems compatibility with SCORM. All too often there have been platforms that water down their SCORM support or took shortcuts that aren't apparent until you blast them with a compressed 15 minute session. You can utilize these QUnit tests to find out if your LMS is in good standing or has some issues that need to be addressed. One popular issue is a non-cached API. This means the LMS is attempting to make a round-trip to the server per request. This roughly simulates a Denial Of Service (DOS) attack, and can cripple the user experience.
53 | Those unfamiliar with the concept of Test Driven Development, can visit [QUnitJS.com](https:/qunitjs.com) for more information.
54 | This is a relatively simple way to build out designed tests to ensure logic in your entire project is functioning with good and bad data.
55 |
56 | ## SCOBot JavaScript
57 | >Single file script -
58 | QUnit-Tests/js/scorm.bot.pack.js files merged, minified, packed
59 |
60 | >Developer Source Code -
61 | QUnit-Tests/js/scorm/
62 |
63 | These can be used to aid in the creation of custom shareable content objects, or even adding SCORM support to a page that previously didn't have it. Further documentation on how to implement and configure SCOBot in your project can be found within the Wiki.
64 |
65 | ## Further Reading:
66 | The [SCOBot Documentation](https://github.com/cybercussion/SCOBot/wiki/SCORM-SCOBot-Documentation) will dig into all the technical aspects of not only the integration, but pre-flight things to think about.
67 | Configuration is normally half the battle of a successful deployment, and should be considered before (not after) you start your project.
68 |
69 | ## What else do you need?
70 | 
71 | A Player/Presentation layer was not included with this project. Commonly in the past developers used iframes, or framesets to display a series of HTML page in a sequence. They also used other technologies like Flash. A more modern HTML approach now would be to lead content via AJAX.
72 | Presenting your training may require you to construct your own player. This can mean loading, templatizing, blending views and data. Building out interactions, layouts etc ... You could be doing this by hand or using a CMS.
73 | Packaging and or Zipping - You may find once you have SCOBot, plus your presentation you need to now bundle it. The files in this project were meant to assist you here getting a full scope of what needs to be done to make that successful. See the Wiki for more info on zipping/packaging options.
74 |
75 |
76 | ## The Student Attempt and Concepts
77 | SCORM has a CMI (Computer Managed Instruction) Object which contains data-points for things like completion, success, scoring, location, interactions and objectives. The Runtime API provides access to this data by controlling read, write as well as limits on states, character counts etc. SCOBot rolls in all these rules in order to make your implementation have a higher rate of success.
78 | The base requirement of a Shareable Content Object is that it initialize and terminate. Popular issues that come up even in enterprise training are things like -
79 |
80 | * Content doesn't terminate due to a exit event issue, or authoring oversight.
81 | * Content never ends the attempt, and is stuck in 'suspend' mode forever.
82 | * Redirects (like a language selector) within the content could break LMS functionality.
83 | * LMS launches content in review mode after you report a score and suspend for later.
84 | * The list can go on and on...
85 |
86 | As a content developer, these problems can compromise tens of thousands of your training materials. This also commonly forces you to redeploy your content and even go as far as having to cache-bust your SCOs so the student can see the updates. Just like any website, you can have browser compatibility, security changes and feature support that pop up over the life cycle of your project(s).
87 |
88 | ## Debugging / Transparency
89 | [SCOverseer](http://www.cybercussion.com/bookmarklets/SCORM/) - see the Bookmarklet button on that page (drag it to your bookmarks bar). Directions on page.
90 |
91 | Thanks for taking the time to take a look, and thanks to everyone that's assisted with feedback.
92 |
--------------------------------------------------------------------------------
/adlcp_v1p3.xsd:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 | This file represents the W3C XML Schema Language Binding of the ADL namespaced elements for content packaging extensions.
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | *************************************************************************
20 | * Change History *
21 | *************************************************************************
22 | 2003-18-09 Initial creation.
23 | 2003-19-09 Removed the restriction of the 255 character maximum length
24 | on the dataFromLMS
25 | 2004-01-06 Added completionThreshold to the ADL CP namespace
26 | 2004-23-01 Final edits in preparation for release
27 | 2006-02-06 Removed persistState, change type of the locationType from
28 | xs:string to xs:anyURI
29 | *************************************************************************
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/adlnav_v1p3.xsd:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 | This file represents the W3C XML Schema Language Binding of the ADL namespaced elements for navigation controls.
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | *************************************************************************
20 | * Change History *
21 | *************************************************************************
22 | 2003-18-09 Initial creation.
23 | 2004-23-01 Final edits in preparation for release
24 | 2005-06-06 Added new hideLMSUI vocabulary token suspendAll, exitAll,
25 | and abandonAll
26 | *************************************************************************
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/adlseq_v1p3.xsd:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 | This file represents the W3C XML Schema Language Binding of the ADL namespaced elements for sequencing extensions.
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | *************************************************************************
20 | * Change History *
21 | *************************************************************************
22 | 2003-18-09 Initial creation.
23 | 2004-23-01 Final edits in preparation for release
24 | *************************************************************************
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/bdlcp_rootv1p2.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/cert_imsmanifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 | ADL SCORM
18 | 2004 3rd Edition
19 |
20 |
21 |
22 |
23 | Course
24 | -
25 |
26 | Grade X
27 |
-
28 |
29 | Topic X
30 |
-
31 |
32 | Unit X
33 |
-
34 | Lesson X
35 |
36 |
-
37 |
38 | QUnit SCOBot Production
39 |
40 |
41 | continue
42 | previous
43 | suspendAll
44 |
45 |
46 |
47 |
48 |
49 | 0.75
50 |
51 |
52 |
53 |
54 | 0.6
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/common/anyElement.xsd:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 | This work is licensed under the Creative Commons Attribution-ShareAlike
10 | License. To view a copy of this license, see the file license.txt,
11 | visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
12 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
13 |
14 |
15 |
16 | This component schema provides an element group declaration used for
17 | custom metadata elements.
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/common/dataTypes.xsd:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 | This work is licensed under the Creative Commons Attribution-ShareAlike
12 | License. To view a copy of this license, see the file license.txt,
13 | visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
14 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
15 |
16 |
17 |
18 | This component schema provides global type declarations for LOM datatypes.
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
--------------------------------------------------------------------------------
/common/rootElement.xsd:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 | This work is licensed under the Creative Commons Attribution-ShareAlike
10 | License. To view a copy of this license, see the file license.txt,
11 | visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
12 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
13 |
14 |
15 |
16 | This component schema provides the element name declaration for the
17 | root element for all LOM instances.
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/common/vocabTypes.xsd:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 | This work is licensed under the Creative Commons Attribution-ShareAlike
13 | License. To view a copy of this license, see the file license.txt,
14 | visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
15 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
16 |
17 |
18 |
19 | This component schema provides global type declarations for those metadata
20 | elements whose values are taken from a vocabulary datatype.
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
--------------------------------------------------------------------------------
/common/vocabValues.xsd:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 | This work is licensed under the Creative Commons Attribution-ShareAlike
10 | License. To view a copy of this license, see the file license.txt,
11 | visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
12 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
13 |
14 |
15 |
16 | This component schema provides global type declarations for the standard
17 | enumerated types for those metadata elements whose values are taken from
18 | a vocabulary datatype.
19 |
20 |
21 | ****************************************************************************
22 | ** CHANGE HISTORY **
23 | ****************************************************************************
24 | ** 09/22/2003: - Updated comment describing this file to state that this **
25 | ** file is the LOM V1.0 Base Schema vocabulary source and **
26 | ** value declarations. **
27 | ****************************************************************************
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
--------------------------------------------------------------------------------
/datatypes.dtd:
--------------------------------------------------------------------------------
1 |
9 |
10 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
69 |
70 |
80 |
81 |
82 |
83 |
84 |
85 |
88 |
89 |
92 |
93 |
94 |
96 |
101 |
102 |
106 |
110 |
119 |
120 |
124 |
128 |
129 |
133 |
137 |
138 |
139 |
143 |
144 |
148 |
149 |
150 |
154 |
155 |
159 |
160 |
161 |
165 |
166 |
170 |
171 |
172 |
176 |
177 |
181 |
182 |
186 |
187 |
188 |
189 |
192 |
193 |
194 |
198 |
199 |
200 |
201 |
204 |
--------------------------------------------------------------------------------
/extend/custom.xsd:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 | This work is licensed under the Creative Commons Attribution-ShareAlike
11 | License. To view a copy of this license, see the file license.txt,
12 | visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
13 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
14 |
15 |
16 |
17 | This component schema defines the content model group customElements
18 | to support validation of custom metadata elements.
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/extend/strict.xsd:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 | This work is licensed under the Creative Commons Attribution-ShareAlike
10 | License. To view a copy of this license, see the file license.txt,
11 | visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
12 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
13 |
14 |
15 |
16 | This component schema defines the content model group customElements
17 | to support strict validation of standard metadata elements.
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/flash/as3/com/cybercussion/SCOBot.as:
--------------------------------------------------------------------------------
1 | /**
* SCOBot
* This is meant to be used as a Flash->JavaScript communication class to take advantage
* of the SCOBot API used with SCORM 1.2/2004.
* @author Mark Statkus
* @usage
* import com.cybercussion.SCOBot;
* var SB:SCOBot = new SCOBot();
* @constructor
*/
package com.cybercussion {
import flash.external.ExternalInterface;
public class SCOBot {
public var mode:String = 'normal'; // make static's ?
private var JSCall:Function = ExternalInterface.call; // shortcut
public function SCOBot() {
// Check for ExternalInterface
if (ExternalInterface.available) {
mode = JSCall("scorm.getvalue", "cmi.mode");
//debug(mode)
} else {
// Throw error?
}
}
/**
* Debug
* Setting up a private way to push to the browser console
* @param msg {String}
*/
private function debug(msg:String) {
JSCall("SB.debug", msg);
}
/**
* Set Totals
* This will take in total objectives, interactions, score max and score min to aid
* in the calculation of a score rollup.
* @param data {Object}
* {
* totalInteractions: '0',
* totalObjectives: '0',
* scoreMin: '0',
* scoreMax: '0'
* }
* @returns {String} 'true' or 'false'
*/
public function setTotals(obj:Object):String {
return JSCall("SB.setTotals", obj);
}
/**
* Start Timer
* This will begin the timer based on the time provided by max_time_allowed. This depends on the time_limit_action.
*/
public function startTimer() {
JSCall("SB.startTimer");
}
/**
* Get Value
* Long hand short cut to get 1:1 SCORM values that don't have an API Wrapper.
* This is handy in situations where you just need to make a direct call.
* @param val {String}
* @returns {String} 'true' or 'false'
*/
public function getvalue(val:String):String {
return JSCall("SB.getvalue", val);
}
/**
* Set Value
* Long hand short cut to get 1:1 SCORM values that don't have an API Wrapper.
* This is handy in situations where you just need to make a direct call.
* @param ns {String} Namespace 'cmi.exit' etc ...
* @param val {String} Value 'normal' etc ...
* @returns {String} 'true' or 'false'
*/
public function setvalue(ns:String, val:String):String {
return JSCall("SB.setvalue", ns, val);
}
/**
* Get Mode
* Returns 'browse', 'normal', or 'review' so you may handle how the
* content behaves, based on how the student / teacher entered the SCO.
* returns {String}
*/
public function getMode():String {
return JSCall("SB.getMode");
}
/**
* Get Entry
* This will return the type ('ab-initio', 'resume' or '')
* Based on if the student is here for the first time, or returning.
* @returns {String}
*/
public function getEntry():String {
return JSCall("SB.getEntry");
}
/**
* Get Bookmark
* This will return the local snapshot, but will stay in sync with sets of cmi.location
* @returns {String} Bookmark (100 chars 1.2 and 1000 chars in 2004
*/
public function getBookmark():String {
return JSCall("SB.getBookmark");
}
/**
* Progress
* Hooks to Private method used possibly elsewhere in this API
* cmi.score.scaled,
* cmi.success_status,
* cmi.completion_status,
* cmi.progress_measure
* @returns {Object}
*/
public function progress():Object {
return JSCall("progress");
}
/**
* Set Suspend Data By Page ID
* This will set the suspend data by id (could be a page ID as long as its unique)
* Suspend data is a 64,000 character string. In this case it will be a JSON Object that
* freely converts to a JSON String or Object.
* Now you could require that the end user have a id in their data object, or in this case keep it
* separate for search ability. Either way you'll have to verify they are passing a id.
* I've opted to make them pass the ID. I'm also opting to keep this as a object instead of
* just a page array. You may want to add more things to suspend data than just pages.
* Example structure of this:
* {
* sco_id: '12345',
* name: 'value',
* pages: [
* {
* id: 1,
* title: 'Presentation',
* data: {data object for a page}
* },
* {
* id: 2,
* title: 'Match Game',
* data: {data object for a page}
* }
* ]
* };
* Calling commit will still be needed to truly save it.
* @param id {*}
* @param title {String}
* @param data {Object}
* @returns {String}
*/
public function setSuspendDataByPageID(id, title:String, data:Object):String {
return JSCall("SB.setSuspendDataByPageID", id, title, data);
}
/**
* Get Suspend Data By Page ID
* This will get the suspend data by id
* @param id {*}
* @returns {*} object, but false if empty.
*/
public function getSuspendDataByPageID(id) {
return JSCall("SB.getSuspendDataByPageID", id);
}
/**
* Set Interaction
* This will set an interaction based on Journaling or State.
* Parameter for choosing a version is located in the defaults.
* Note: If you are recording Journaling make sure its something the LMS
* supports or plans to support, or your just blimping out your interactions array
* for no reason.
* You may ask what is "real(10,7)". This is a binary floating point with a precision up to 7 characters to the right of the decimal.
* Example Data Object:
* {
* id: '1', // 4000 chars
* type: 'true-false', // (true-false, choice, fill-in, long-fill-in, matching, performance, sequencing, likert, numeric, other)
* objectives: [
* {
* id: '12'
* }
* ],
* timestamp: 'expects date object when interaction starts', // second(10,0) Pass a date object
* correct_responses: [
* {
* pattern: '' // depends on interaction type
* }
* ],
* weighting: '1',
* learner_response: 'true',
* result: 'correct', // (correct, incorrect, unanticipated, neutral, real (10,7) )
* latency: 'expects date object after interaction is done', // second(10,2)
* description: "The question commonly" // 250 chars
* }
* @param data {Object} Interaction Object from SCORM
* @returns {String} 'true' or 'false'
*/
public function setInteraction(obj:Object):String {
return ExternalInterface.call("SB.setInteraction", obj);
}
/**
* Get Interaction
* Returns the full Interaction object
* @param id {String}
* @returns {*} object or string 'false'
* {
* id: '1', // 4000 chars
* type: 'true-false', // (true-false, choice, fill-in, long-fill-in, matching, performance, sequencing, likert, numeric, other)
* objectives: [
* {
* id: '12'
* }
* ],
* timestamp: 'expects date object when interaction starts', // second(10,0) Pass a date object
* correct_responses: [
* {
* pattern: '' // depends on interaction type
* }
* ],
* weighting: '1',
* learner_response: 'true',
* result: 'correct', // (correct, incorrect, unanticipated, neutral, real (10,7) )
* latency: 'expects date object after interaction is done', // second(10,2)
* description: "The question commonly" // 250 chars
* }
* or
* 'false'
*/
public function getInteraction(id:String) {
return JSCall("SB.getInteraction", id);
}
/**
* Set Objective
* Sets the data for the scorm objective. ID's have to be set first and must be unique.
* Example data object
* {
* id: '1', // 4000 chars
* score: {
* scaled: '0', // real(10,7) *
* raw: '0',
* min: '0',
* max: '0'
* }
* success_status: 'failed', // (passed, failed, unknown)
* completion_status: 'incomplete', // (completed, incomplete, not attempted, unknown)
* progress_measure: '0', // real(10,7)
* description: 'This is the objective' // 250 Chars
* }
* @param data {Object} Objective object from SCORM
* @returns {String} 'true' or 'false'
*/
public function setObjective(obj:Object):String {
return JSCall("SB.setObjective", obj);
}
/**
* Get Objective
* Returns the Objective object by ID
* @param id {String}
* @returns {*} object or string 'false'
* {
* id: '1', // 4000 chars
* score: {
* scaled: '0', // real(10,7) *
* raw: '0',
* min: '0',
* max: '0'
* }
* success_status: 'failed', // (passed, failed, unknown)
* completion_status: 'incomplete', // (completed, incomplete, not attempted, unknown)
* progress_measure: '0', // real(10,7)
* description: 'This is the objective' // 250 Chars
* }
* or
* 'false'
*/
public function getObjective(id:String) {
return JSCall("SB.getObjective", id);
}
/**
* Set Comment From Learner
* This will set the comment, location and time the student made a comment
* @param msg {String} comment
* @param loc {String} location
* @param date {Object} New Date object (for timestamp)
* @return {String}
*/
public function setCommentFromLearner(msg:String, loc:String, date:Object) {
return JSCall("SB.setCommentFromLearner", msg, loc, date);
}
/**
* Grade It
* This method will set cmi.score.scaled, cmi.success_status, and cmi.completion_status. This is for situations
* where you are doing simple scoring, with NO objectives or interactions.
* Prereq for this would be to have passed in scaled_passing_score and completion_threshold in to SCOBot
* If none are provided it will default to 'passed' and 'completed'
* Special Note: If you are using Objectives, Interactions and set the totals, you do not need to use this method.
* For setting the student to 100% Score, and passed, see happyEnding
* @return {String} 'true' or 'false'
*/
public function gradeIt():String {
return JSCall("SB.gradeIt");
}
/**
* Happy Ending
* This will auto-score the student to passed, completed, and scored
* @return {String}
*/
public function happyEnding():String {
return JSCall("SB.happyEnding");
}
/**
* Commit
* This will commit the data stored at the LMS Level to the backend. Please use sparingly.
* @returns {String} 'true' or 'false'
*/
public function commit():String {
return JSCall("SB.commit");
}
/**
* Suspend
* This will suspend the SCO and ends with terminating. No data can be saved after this.
* Student desires to return to this later.
* @returns {String} 'true' or 'false'
*/
public function suspend():String {
return JSCall("SB.suspend");
}
/**
* Finish
* This will set success status, exit and completion. No data can be saved after this.
* This is like turning in your homework.
* @returns {String} 'true' or 'false'
*/
public function finish():String {
return JSCall("SB.finish");
}
/**
* Timeout
* This will set success status, exit and completion. No data can be saved after this.
* Used in a situation where max_time_allowed may end the session.
* @returns {String} 'true' or 'false'
*/
public function timeout():String {
return JSCall("SB.timeout");
}
}
}
--------------------------------------------------------------------------------
/imsmanifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 | ADL SCORM
18 | 2004 3rd Edition
19 |
20 |
21 |
22 | Sample Lesson
23 |
24 |
25 | This is a series of Unit tests for SCORM and SCOBot Content API.
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | Course
34 | -
35 |
36 | Grade X
37 |
-
38 |
39 | Topic X
40 |
-
41 |
42 | Unit X
43 |
-
44 | Lesson X
45 |
46 |
-
47 |
48 | QUnit SCORM_API
49 |
50 |
51 |
52 | 0.75
53 |
54 |
55 |
56 |
57 | 0.6
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | -
66 |
67 | QUnit SCOBot
68 |
69 |
70 |
71 | 0.75
72 |
73 |
74 |
75 |
76 | 0.6
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 | -
85 |
86 | QUnit SCOBot Production
87 |
88 |
89 |
90 | 0.75
91 |
92 |
93 |
94 |
95 | 0.6
96 |
97 |
98 |
99 |
100 |
101 |
102 | -
103 |
104 | QUnit SCOBot Basic
105 |
106 |
113 |
114 |
115 |
116 | 0.75
117 |
118 |
119 |
120 |
121 | 0.6
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
183 |
184 |
--------------------------------------------------------------------------------
/imsss_v1p0.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
18 |
19 | The root element for all sequencing tags. This tag will usually appear as a child element to an IMS CP item tag.
20 |
21 |
22 |
23 |
24 | The type associated with any top-level sequencing tag
25 |
26 |
27 |
29 |
30 | non-exclusive definition of acceptable control-modes
31 |
32 |
33 |
35 |
37 |
39 |
41 |
43 |
49 |
50 |
52 |
54 |
55 |
56 |
57 |
58 |
59 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/imsss_v1p0auxresource.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/imsss_v1p0control.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 | The type associated with a control-mode element (see the element controlMode)
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/imsss_v1p0delivery.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 | The type that describes any element which fullfills a delivery control semantic
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/imsss_v1p0limit.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
12 | Limit Condition Attempt Limit
13 |
14 |
15 |
16 |
17 | Limit Condition Activity Attempt Absolute Duration Limit. Typed as xs:duration: see http://www.w3.org/TR/xmlschema-2/#duration
18 |
19 |
20 |
21 |
22 | Limit Condition Activity Attempt Experienced Duration Limit. Typed as xs:duration: see http://www.w3.org/TR/xmlschema-2/#duration
23 |
24 |
25 |
26 |
27 | Limit Condition Activity Absolute Duration Limit. Typed as xs:duration: see http://www.w3.org/TR/xmlschema-2/#duration
28 |
29 |
30 |
31 |
32 | Limit Condition Activity Experienced Duration Limit. Typed as xs:duration: see http://www.w3.org/TR/xmlschema-2/#duration
33 |
34 |
35 |
36 |
37 | Limit Condition Begin Time Limit
38 |
39 |
40 |
41 |
42 | Limit Condition End Time Limit
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/imsss_v1p0objective.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
13 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | The specification states: "Each activity must have one and only one objective that contributes to rollup". The following type describes an unbounded set of elements all named "objective" that do not contribute to rollup, and one element called "primaryObjective" that contributes to rollup.
27 |
28 |
29 |
31 |
32 | Contributes to rollup of the activity.
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
44 |
45 | Does not contribute to the rollup of the activity.
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | The type that describes an individual objective mapping. Mapping one local objective GUID to one global objective GUID
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/imsss_v1p0random.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/imsss_v1p0rollup.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
13 |
14 |
15 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/imsss_v1p0seqrule.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | postConditionSequencingRuleType is derived by extension from sequencingRuleType. It adds an element ruleAction that is a simpleType constrained to a vocabulary relevant to post-Condition sequencing rules
26 |
27 |
28 |
29 |
30 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
58 |
59 |
60 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
79 |
81 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
--------------------------------------------------------------------------------
/imsss_v1p0util.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | A decimal value with AT LEAST 4 significant decimal digits between -1 and 1
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/lock_nav_imsmanifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 | ADL SCORM
18 | 2004 3rd Edition
19 |
20 |
21 |
22 |
23 | Course
24 | -
25 |
26 | Grade X
27 |
-
28 |
29 | Topic X
30 |
-
31 |
32 | Unit X
33 |
-
34 | Lesson X
35 |
36 |
37 |
38 |
39 |
40 |
-
41 |
42 | QUnit SCORM_API
43 |
50 |
51 |
52 |
53 | 0.75
54 |
55 |
56 |
57 |
58 | 0.6
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | -
67 |
68 | QUnit SCOBot
69 |
76 |
77 |
78 |
79 | 0.75
80 |
81 |
82 |
83 |
84 | 0.6
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 | -
93 |
94 | QUnit SCOBot Production
95 |
96 |
97 | continue
98 | previous
99 | suspendAll
100 |
101 |
102 |
103 |
104 |
105 | 0.75
106 |
107 |
108 |
109 |
110 | 0.6
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
--------------------------------------------------------------------------------
/lom.xsd:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 | This work is licensed under the Creative Commons Attribution-ShareAlike
10 | License. To view a copy of this license, see the file license.txt,
11 | visit http://creativecommons.org/licenses/by-sa/2.0 or send a letter to
12 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
13 |
14 |
15 | This file represents a composite schema for validating
16 | LOM XML Instances. This file is built by default to represent a
17 | composite schema for validation of the following:
18 |
19 | 1) The use of LOMv1.0 base schema (i.e., 1484.12.1-2002) vocabulary
20 | source/value pairs only
21 | 2) Uniqueness constraints defined by LOMv1.0 base schema
22 | 3) No existenace of any defined extensions:
23 | LOMv1.0 base schema XML element extension,
24 | LOMv1.0 base schema XML attribute extension and
25 | LOMv1.0 base schema vocabulary data type extension
26 |
27 | Alternative composite schemas can be assembled by selecting
28 | from the various alternative component schema listed below.
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
53 |
54 |
56 |
57 |
59 |
60 |
61 |
62 |
63 |
64 |
66 |
67 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/lomCustom.xsd:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 | This work is licensed under the Creative Commons Attribution-ShareAlike
10 | License. To view a copy of this license, see the file license.txt,
11 | visit http://creativecommons.org/licenses/by-sa/2.0 or send a letter to
12 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
13 |
14 |
15 | This file represents a composite schema for validation of the following:
16 | 1) The use of custom vocabulary source/value pairs and
17 | LOMv1.0 base schema (i.e., 1484.12.1-2002) vocabulary source/value pairs
18 | 2) Uniqueness constraints defined by LOMv1.0 base schema
19 | 3) The use of XML element/attribute extensions to the LOMv1.0 base schema
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
29 |
30 |
32 |
33 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/lomLoose.xsd:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 | This work is licensed under the Creative Commons Attribution-ShareAlike
10 | License. To view a copy of this license, see the file license.txt,
11 | visit http://creativecommons.org/licenses/by-sa/2.0 or send a letter to
12 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
13 |
14 |
15 | This file represents a composite schema for validation of the following:
16 | 1) No validation of vocabularies values for those LOMv1.0 base
17 | schema (i.e., 1484.12.1-2002) defined LOM data elements with a
18 | Vocabulary data type.
19 | 2) Uniqueness constraints defined by LOMv1.0 base scheam
20 | 3) The use of XML element/attribute extensions to the LOMv1.0 base schema
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/lomStrict.xsd:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 | This work is licensed under the Creative Commons Attribution-ShareAlike
10 | License. To view a copy of this license, see the file license.txt,
11 | visit http://creativecommons.org/licenses/by-sa/2.0 or send a letter to
12 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
13 |
14 |
15 | This file represents a composite schema for validation of the following:
16 | 1) The use of LOMv1.0 base schema (i.e., 1484.12.1-2002) vocabulary source/value
17 | pairs only
18 | 2) Uniqueness constraints defined by LOMv1.0 base schema
19 | 3) No existenace of any defined XML attribute/element extensions
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
29 |
30 |
32 |
33 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "SCOBot",
3 | "main": "QUnit-Tests/js/scorm.bot.pack.js",
4 | "description": "SCOBot support SCORM 1.2 and SCORM 2004 supplying API's to content developers to accommodate data validation, formatting and transparency.",
5 | "version": "4.1.2",
6 | "private": false,
7 | "homepage": "http://www.cybercussion.com",
8 | "keywords": [
9 | "SCORM",
10 | "e-learning",
11 | "standards"
12 | ],
13 | "license": "Creative Commons Sharealike 4.0 International",
14 | "contributors": [
15 | {
16 | "name": "Mark Statkus",
17 | "email": "mark@cybercussion.com"
18 | },
19 | {
20 | "name": "Brandon Bradley",
21 | "email": "brandon.bradley@gmail.com"
22 | }
23 | ],
24 | "repository": {
25 | "type": "git",
26 | "url": "git://github.com/cybercussion/SCOBot.git"
27 | },
28 | "bugs": {
29 | "url": "https://github.com/cybercussion/SCOBot/issues"
30 | },
31 | "dependencies": {
32 | "jsdom": "~1.0.0"
33 | },
34 | "devDependencies": {
35 | "grunt": "~1.0.1",
36 | "browserify": "~14.5.0"
37 | },
38 | "scripts": {
39 | "test": "grunt travis --verbose"
40 | },
41 | "testling": {
42 | "html": "QUnit-Tests/qunit_SCOBot_prod_full.html",
43 | "browsers": [
44 | "ie/8..latest",
45 | "chrome/23..latest",
46 | "firefox/17..latest",
47 | "safari/5.1..latest",
48 | "opera/11.5..latest",
49 | "iphone/6..latest",
50 | "ipad/6..latest"
51 | ]
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/scorm12_schemas/README.md:
--------------------------------------------------------------------------------
1 | # SCORM 1.2 Schemas
2 |
3 | Including the original SCORM schemas optionally included in a CAM (Content Aggregation Model) Package (ZIP or PIF).
4 | The DTD/XSD's in the root of the project are for SCORM 2004, and are also optionally included in packages to assist in validating the imsmanifest.xml.
5 | There are subtle differences in the manifest files between SCORM 1.2 and 2004.
6 |
7 | ## This is not meant to be a definitive list of differences (just a example)
8 | 1. schemaversion: 'SCORM 1.2' vs '2004 3rd Edition' or '2004 4th Edition'
9 | 2. resource: 1.2 - scormtype vs 2004 scormType
10 | 3. Sequence and Navigation i.e. imsss:sequencing, SCORM 2004 Only
11 | 4. Noted XSDs work against SCORM 1.2 or SCORM 2004 for validation
12 |
13 | Please remember most of the SCORM 1.2 specification namespace support on a learning platform is optional.
14 | Mileage will vary depending on support.
15 |
--------------------------------------------------------------------------------
/scorm12_schemas/adlcp_rootv1p2.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
12 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
--------------------------------------------------------------------------------
/scorm12_schemas/ims_xml.xsd:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 | In namespace-aware XML processors, the "xml" prefix is bound to the namespace name http://www.w3.org/XML/1998/namespace.
6 | Do not reference this file in XML instances
7 | Schawn Thropp: Changed the uriReference type to string type
8 |
9 |
10 |
11 | Refers to universal XML 1.0 lang attribute
12 |
13 |
14 |
15 |
16 | Refers to XML Base: http://www.w3.org/TR/xmlbase
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/scorm12_schemas/imscp_rootv1p1p2.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
12 |
13 |
14 |
15 |
16 |
17 | DRAFT XSD for IMS Content Packaging version 1.1 DRAFT
18 | Copyright (c) 2001 IMS GLC, Inc.
19 | 2000-04-21, Adjustments by T.D. Wason from CP 1.0.
20 | 2001-02-22, T.D.Wason: Modify for 2000-10-24 XML-Schema version. Modified to support extension.
21 | 2001-03-12, T.D.Wason: Change filename, target and meta-data namespaces and meta-data fielname. Add meta-data to itemType, fileType and organizationType.
22 | Do not define namespaces for xml in XML instances generated from this xsd.
23 | Imports IMS meta-data xsd, lower case element names.
24 | This XSD provides a reference to the IMS meta-data root element as imsmd:record
25 | If the IMS meta-data is to be used in the XML instance then the instance must define an IMS meta-data prefix with a namespace. The meta-data targetNamespace should be used.
26 | 2001-03-20, Thor Anderson: Remove manifestref, change resourceref back to identifierref, change manifest back to contained by manifest. --Tom Wason: manifest may contain _none_ or more manifests.
27 | 2001-04-13 Tom Wason: corrected attirbute name structure. Was misnamed type.
28 | 2001-05-14 Schawn Thropp: Made all complexType extensible with the group.any
29 | Added the anyAttribute to all complexTypes. Changed the href attribute on the fileType and resourceType to xsd:string
30 | Changed the maxLength of the href, identifierref, parameters, structure attributes to match the Information model.
31 | 2001-07-25 Schawn Thropp: Changed the namespace for the Schema of Schemas to the 5/2/2001 W3C XML Schema
32 | Recommendation. attributeGroup attr.imsmd deleted, was not used anywhere. Any attribute declarations that have
33 | use = "default" changed to use="optional" - attr.structure.req.
34 | Any attribute declarations that have value="somevalue" changed to default="somevalue",
35 | attr.structure.req (hierarchical). Removed references to IMS MD Version 1.1.
36 | Modified attribute group "attr.resourcetype.req" to change use from optional
37 | to required to match the information model. As a result the default value also needed to be removed
38 | Name change for XSD. Changed to match version of CP Spec
39 |
40 |
41 |
42 | Inclusions and Imports
43 |
44 |
45 |
46 |
47 |
48 | Attribute Declarations
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 | element groups
156 |
157 |
158 |
159 |
160 | Any namespaced element from any namespace may be included within an "any" element. The namespace for the imported element must be defined in the instance, and the schema must be imported.
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
--------------------------------------------------------------------------------
/unique/loose.xsd:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 | This work is licensed under the Creative Commons Attribution-ShareAlike
10 | License. To view a copy of this license, see the file license.txt,
11 | visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
12 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
13 |
14 |
15 |
16 | This component schema provides attribute group declarations for metadata
17 | elements to support loose validation of element uniqueness constraints.
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
99 |
100 |
102 |
103 |
105 |
106 |
108 |
109 |
111 |
112 |
114 |
115 |
117 |
118 |
119 |
120 |
121 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
195 |
196 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
222 |
223 |
225 |
226 |
228 |
229 |
231 |
232 |
233 |
234 |
235 |
237 |
238 |
240 |
241 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
264 |
265 |
267 |
268 |
270 |
271 |
272 |
--------------------------------------------------------------------------------
/unique/strict.xsd:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 | This work is licensed under the Creative Commons Attribution-ShareAlike
10 | License. To view a copy of this license, see the file license.txt,
11 | visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
12 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
13 |
14 |
15 |
16 | This component schema provides attribute group declarations for metadata
17 | elements to support strict validation of element uniqueness constraints,
18 | by providing the attribute uniqueElementName for each metadata element
19 | that should appear with multiplicity at most one.
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
80 |
81 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
138 |
139 |
143 |
144 |
148 |
149 |
151 |
152 |
156 |
157 |
159 |
160 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
270 |
271 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
309 |
310 |
314 |
315 |
319 |
320 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
335 |
336 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
369 |
370 |
374 |
375 |
377 |
378 |
379 |
--------------------------------------------------------------------------------
/vocab/adlmd_vocabv1p0.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
--------------------------------------------------------------------------------
/vocab/custom.xsd:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 | This work is licensed under the Creative Commons Attribution-ShareAlike
12 | License. To view a copy of this license, see the file license.txt,
13 | visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
14 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
15 |
16 |
17 |
18 | This component schema provides simple type declarations for metadata
19 | elements whose values are taken from a vocabulary datatype.
20 |
21 | This component schema supports strict validation of both standard and custom
22 | vocabulary values by checking that both the source and value are taken
23 | from either the standard token set or from a custom token set.
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
--------------------------------------------------------------------------------
/vocab/loose.xsd:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 | This work is licensed under the Creative Commons Attribution-ShareAlike
11 | License. To view a copy of this license, see the file license.txt,
12 | visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
13 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
14 |
15 |
16 |
17 | This component schema provides simple type declarations for metadata
18 | elements whose values are taken from a vocabulary datatype.
19 |
20 | This component schema supports loose validation of vocabulary value constraints
21 | by allowing both the source and value to be arbitrary strings.
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/vocab/strict.xsd:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 | This work is licensed under the Creative Commons Attribution-ShareAlike
11 | License. To view a copy of this license, see the file license.txt,
12 | visit http://creativecommons.org/licenses/by-sa/1.0 or send a letter to
13 | Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
14 |
15 |
16 |
17 | This component schema provides simple type declarations for metadata
18 | elements whose values are taken from a vocabulary datatype.
19 |
20 | This component schema supports strict validation of standard vocabulary values by
21 | checking that both the source and value are from the standard token set.
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/xml.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | See http://www.w3.org/XML/1998/namespace.html and
8 | http://www.w3.org/TR/REC-xml for information about this namespace.
9 |
10 |
11 |
12 |
13 | This schema defines attributes and an attribute group
14 | suitable for use by
15 | schemas wishing to allow xml:base, xml:lang or xml:space attributes
16 | on elements they define.
17 |
18 | To enable this, such a schema must import this schema
19 | for the XML namespace, e.g. as follows:
20 | <schema . . .>
21 | . . .
22 | <import namespace="http://www.w3.org/XML/1998/namespace"
23 | schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
24 |
25 | Subsequently, qualified reference to any of the attributes
26 | or the group defined below will have the desired effect, e.g.
27 |
28 | <type . . .>
29 | . . .
30 | <attributeGroup ref="xml:specialAttrs"/>
31 |
32 | will define a type which will schema-validate an instance
33 | element with any of those attributes
34 |
35 |
36 |
37 | In keeping with the XML Schema WG's standard versioning
38 | policy, this schema document will persist at
39 | http://www.w3.org/2001/03/xml.xsd.
40 | At the date of issue it can also be found at
41 | http://www.w3.org/2001/xml.xsd.
42 | The schema document at that URI may however change in the future,
43 | in order to remain compatible with the latest version of XML Schema
44 | itself. In other words, if the XML Schema namespace changes, the version
45 | of this document at
46 | http://www.w3.org/2001/xml.xsd will change
47 | accordingly; the version at
48 | http://www.w3.org/2001/03/xml.xsd will not change.
49 |
50 |
51 |
52 |
53 |
54 | In due course, we should install the relevant ISO 2- and 3-letter
55 | codes as the enumerated possible values . . .
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | See http://www.w3.org/TR/xmlbase/ for
71 | information about this attribute.
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
--------------------------------------------------------------------------------