Example 4: Deploy a SCORM
content
In this case, the CID server is an e-learning platform which accepts SCORM packages. The deployment of SCORM
packages needs the intervention of a user in order to fill some platform-specific information and to then deploy the package in a pedagogical activity.
Server manifest⚓
<cid:manifest xmlns:cid="http://www.cid-protocol/schema/v1/core" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cid-protocol/schema/v1/core ../manifest/cid-core.xsd ">
<!--
This manifest declares two transports : the first without cookies, the
second with. Two processes are also defined. They are respectively binded
to the two different webtransports.
-->
<!--
This process is binded to standard Transport. It uses a session property to
enable statefull servers.
-->
<cid:process transports="standardTransport" is="http://schema.org/SendAction">
<cid:label xml:lang="en">SCORM deployment</cid:label>
<!--
A restriction is similar to a meta with the difference that the
restriction is implicit in the process. The value is unique and set only
once in the manifest and never sent by the client.
-->
<cid:restriction name="Zip-file-names-encoding" value="UTF-8">
<cid:label xml:lang="en">Encoding of the files-name</cid:label>
</cid:restriction>
<!-- Definition of custom mimeType -->
<cid:meta name="Content-type" is="http://purl.org/dc/elements/1.1/type">
<cid:value>application/xx-scorm;v1.2</cid:value>
<cid:value>application/xx-scorm;v2004</cid:value>
</cid:meta>
<cid:upload url="http://example.com/upload?response=noCookies" needMetas="Content-type" required="true"/>
<cid:interact url="http://example.com/interact?response=noCookies" required="true"/>
</cid:process>
<!--
This process is binded to the second transport. It needs a client which
supports cookies
-->
<cid:process transports="transportWithCookies" is="http://schema.org/SendAction">
<cid:restriction name="Zip-file-names-encoding" value="UTF-8"/>
<!-- Definition of custom mimeType -->
<cid:meta name="Content-type" is="http://purl.org/dc/elements/1.1/type">
<cid:value>application/xx-scorm;v1.2</cid:value>
<cid:value>application/xx-scorm;v2004</cid:value>
</cid:meta>
<cid:upload url="http://example.com/upload?response=withCookies" needMetas="Content-type" required="true"/>
<cid:interact url="http://example.com/interact?response=withCookies" required="true"/>
</cid:process>
<cid:transports>
<cid:webTransport id="standardTransport">
<cid:authentications>
<cid:basicHttp/>
</cid:authentications>
<cid:webInteract>
<cid:request method="GET" properties="header queryString"/>
<cid:request method="POST;application/x-www-form-urlencoded" properties="queryString header post"/>
<cid:request method="POST;multipart/form-data" properties="header queryString post"/>
</cid:webInteract>
<cid:webUpload>
<cid:request method="GET" properties="header queryString"/>
<cid:request method="POST" properties="queryString header"/>
<cid:request method="POST;multipart/form-data" properties="header queryString post"/>
</cid:webUpload>
</cid:webTransport>
<cid:webTransport id="transportWithCookies" needCookies="true">
<cid:authentications>
<cid:basicHttp/>
</cid:authentications>
<cid:webInteract>
<cid:request method="GET" properties="header queryString"/>
<cid:request method="POST;application/x-www-form-urlencoded" properties="queryString header post"/>
<cid:request method="POST;multipart/form-data" properties="header queryString post"/>
</cid:webInteract>
<cid:webUpload>
<cid:request method="GET" properties="header queryString"/>
<cid:request method="PUT" properties="header queryString"/>
<cid:request method="POST" properties="queryString header"/>
<cid:request method="POST;multipart/form-data" properties="header queryString post"/>
</cid:webUpload>
</cid:webTransport>
</cid:transports>
</cid:manifest>
The process step by step⚓
Procedure
Manifest exposition
The server must expose the XML manifest to an accessible URL. For example, at http://example.com/manifest.xml.
Download the manifest
In order to understand the process, a client must download the server manifest and analyze it.
SCORM
uploadA client must send packages which are conform to the suggested values of the
content-type
metadata and to the imposed value ofZip-file-names-encoding
(which isUTF-8
). In this example, a client could send a form in aPOST
request which contains the metadata and theSCORM
package in a field namedcidContent
.SCORM
deploymentThe second step of the process is required. It allows the user to interact directly with the remote server. The latter furnishes a form to fill more metadata or an interface to deploy the
SCORM
package.This interaction must begin by one of the documented
webInteraction
method. For example, it could begin by anHTTP
POST
with the session property in a form data.