Handcar Learning Service Developer Guide        Revised 7/22/2013

Welcome to MIT’s MC3 Handcar Learning service.

Overview

Caveats -- Beta

Known issues

Other Related Documentation

Model Diagram

Objective Banks

Basic Lookup

Example #1 Get a list of all objective banks

Example #2 Get the details of a particular objective bank

Looking up objects within a bank

Example #1 Finding all objectives within a bank

Example #2 Finding all activities within a bank

Example #3 Finding all assets tied to a bank

Configuration

Example #1 Finding all the allowed objective types

Example #2 Finding the scaling system (Bloom’s Taxonomy) used to categorize the objectives

Example #3 Finding all the activity types

Example #4 Finding all the asset types

Example #5 Finding all the asset content (mime) types

Administration (Creating, Updating and Deleting Objective Banks)

Objectives

Basic Lookups

Example #1 Finding all TOPIC objectives within a bank

Example #2 Finding all OUTCOME objectives within a bank

Example #3 Finding an objective by id within a bank

Example #4 Finding an objective by id without knowing it’s bank

Example #5 Bulk fetching lots of objectives by id

Looking up objectives in a hierarchy

Example #1 Finding the root objectives or just the root ids in the hierarchy

Example #2 Finding an objective’s children or just the ids of it’s children

Example #3 Finding an objective’s parent(s) or just the ids of it’s parent(s)

Looking up requisite and dependent objectives

Example #1 Finding the beginner objectives or just the beginner ids for the bank

Example #2 Finding an objective’s immediately preceding requisite objectives

Example #3 Finding the objectives that are immediately dependent on a particular objective

Administration (Creating, Updating, Deleting) TODO

Activities TODO

Basic Lookup TODO

Looking up related objects TODO

Administration (Creating, Updating, Deleting) TODO

Assets TODO

Basic Lookup TODO

Looking up related objects TODO

Administration (Creating, Updating, Deleting) TODO

Cross Bank Support TODO

Appendices

Appendix I - Summary of All URLs

Overview

This learning service supports a restful JSON interface to the MC3 system's learning objectives.  

Handcar uses Moxy to serialize the objects into JSON.

Caveats -- Beta

Handcar is currently released in BETA mode.

Some features and methods are not implemented or may throw unexpected exceptions.

Please let us know if you have any problems by contacting us at XXXXX[a]

Known issues

  1. Authentication and Authorization has not yet been implemented
  2. Errors have not been translated to the appropriate HTTP error code (403, 404, etc)
  3. Only asset based activities are supported and an activity can only have one asset and an asset can only have one asset content which points to a single URL
  4. Only limited support for querying and searching across multiple banks
  5. Configuration data for the banks cannot be changed via Handcar
  6. Full validation of creates and updates has not yet been implemented so the service may allow through and store data which is bad

Other Related Documentation

Detailed documentation on all of the methods and data elements is contained in “Contract Docs” which fully explain the contract.

See https://oki-dev.mit.edu/handcar/contractdocs/

Model Diagram

Objective Banks

All data is organized into what are called objective banks.  Right now we have two such banks, one for Crosslinks and one for ChemBridge.  These are two projects where MIT professors mapped the concepts of their respective domains.  MC3 is a federated system so we can add in objectives from other sources easily.  Later we will be adding additional banks from within and outside of MIT.

Basic Lookup

Example #1 Get a list of all objective banks

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks 

Example #2 Get the details of a particular objective bank

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT 

Looking up objects within a bank

Banks contain three main types of objects:

  1. Objectives -- Learning Objectives which come in two distinct types:
  1. Topics -- also called concepts which define an area of knowledge , typically expressed as NOUNS
  2. Outcomes -- which are specific learning goals, typically expressed starting with VERBS
  1. Activities which are tied to Objectives - that a student may do in order to master the objective
  2. Assets which are tied to Activities -- that are typically the content that a student consumes as part of the activity
  1. In the model a single asset have multiple “Asset Contents” which may be different resolutions of the same asset, for example the same asset can have a thumbnail representation and full size JPG versions of the same picture.

Additionally there are configuration “types” and “grade scales” used to organize and categorize these three main objects.

For a detailed description of each of these objects and data fields see the Contract Documentation

Example #1 Finding all objectives within a bank

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives

Example #2 Finding all activities within a bank

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/activities

Example #3 Finding all assets tied to a bank

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/assets

Configuration

Each bank is designed to be configured to support different categorization schemes and types.

As mentioned above objectives come in two different varieties or genus types: TOPIC and OUTCOMES and the default categorization scheme uses Bloom’s taxonomy.

Example #1 Finding all the allowed objective types

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/types/genus/objective

Should return two types, one for TOPIC and OUTCOME

Example #2 Finding the scaling system (Bloom’s Taxonomy) used to categorize the objectives

Note: in the literature this is called the “Cognitive Process” scale see this handout  from Iowa State University.

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/gradesystems/cognitiveprocess

Note: BUG #77 this method currently fails

Example #3 Finding all the activity types

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/types/genus/activity

Note: Right now there is only one activity type supported it is an ASSET BASED ACTIVITY that can be tied to just one asset and that asset can have just one asset content holding the URL.

Example #4 Finding all the asset types

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/types/genus/assets

Note: Right now there is only one asset type is supported it is an asset that points to a URL.

Example #5 Finding all the asset content (mime) types

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/types/genus/assetcontent

Note: There is a special type for UNKNOWN  FORMAT TYPE.  that you can use if you don’t know the mime type of the asset.

Note: the list returned right now is NOT complete.  It just contains TEXT based format types, we will very siib be adding in types, like MPG for movings and JPG for sound.

Administration (Creating, Updating and Deleting Objective Banks)

The administration of Objective banks is not supported via Handcar at this time.

Later we plan on supporting operations where you can define a new bank, configure it and start using it.

POST

{objectiveBankBean} to handcar/services/learning/objectivebanks

Creates an objective bank

Not implemented

PUT

{objectiveBankBean} to handcar/services/learning/objectivebanks

Updates an objective bank

Not implemented

DELETE

handcar/services/learning/objectivebanks/{objectiveBankId}

Delete an Objective Bank

Not implemented

Objectives

Objectives come in two types: TOPICs and OUTCOMEs.

Basic Lookups

Example #1 Finding all TOPIC objectives within a bank

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives?genustypeid=mc3-objective%3Amc3.learning.topic%40MIT-OEIT

Example #2 Finding all OUTCOME objectives within a bank

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives?genustypeid=mc3-objective%3Amc3.learning.outcome%40MIT-OEIT

Example #3 Finding an objective by id within a bank

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/objective%3A1%40MIT-OEIT

Example #4 Finding an objective by id without knowing it’s bank

You can also find an objective (given an Id even if you do not know the objective bank where it is stored.  It is slower because it has to search each supported bank for the specified objective but it works

https://oki-dev.mit.edu/handcar/services/learning/objectives/objective%3A1%40MIT-OEIT

Example #5 Bulk fetching lots of objectives by id

If you have a list of ids for objectives in a bank and you want to fetch them all at once you can do this by specifying BULK in the url then listing the ids as query parameters.

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/bulk?id=objective%3A1%40MIT-OEIT&id=objective%3A14%40MIT-OEIT&id=objective%3A27%40MIT-OEIT

Looking up objectives in a hierarchy

Topics are often nested or organized into a hierarchy so that they have parents and children so that topics may have sub-topics and sub-sub-topics finally ending in specific outcomes.  Note: Although this is the typical pattern the model supports outcomes themselves having children.

Example #1 Finding the root objectives or just the root ids in the hierarchy

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/roots

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/rootids

Example #2 Finding an objective’s children or just the ids of it’s children

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/objective%3A1%40MIT-OEIT/children

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/objective%3A1%40MIT-OEIT/childids

Example #3 Finding an objective’s parent(s) or just the ids of it’s parent(s)

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/objective%3A2%40MIT-OEIT/parents

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/objective%3A2%40MIT-OEIT/parentids

Note: most objectives have just ONE parent but the contract allows for a topic to fall under multiple parents, for example ROBOTICS might have both COMPUTER SCIENCE and MECHANICAL ENGINEERING as parents.

Looking up requisite and dependent objectives

Objectives can also be organized into chains of pre-REQUISITES.  These are objectives that typically must be mastered before attempting to master the current objective.

Example #1 Finding the beginner objectives or just the beginner ids for the bank

These are just the objectives in the bank that do not have any REQUISITE objectives defined.

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/beginners

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/beginnerids

Example #2 Finding an objective’s immediately preceding requisite objectives

For example: Anti-derivative has three requisites: Function, Derivative, and Differential

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/objective%3A1%40MIT-OEIT/requisites

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/objective%3A1%40MIT-OEIT/requisiteids

Example #3 Finding the objectives that are immediately dependent on a particular objective

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/objective%3A134%40MIT-OEIT/dependents

https://oki-dev.mit.edu/handcar/services/learning/objectivebanks/objectivebank%3A1%40MIT-OEIT/objectives/objective%3A134%40MIT-OEIT/dependentids

Administration (Creating, Updating, Deleting) TODO

Activities TODO

Basic Lookup TODO

Looking up related objects TODO

Administration (Creating, Updating, Deleting) TODO

Assets TODO

Basic Lookup TODO

Looking up related objects TODO

Administration (Creating, Updating, Deleting) TODO

Cross Bank Support TODO

Handcar only supports a handful of methods that perform searches across multiple objective banks.

Appendices

Appendix I - Summary of All URLs

Method

URL

Description

GET

services/learning

Gets a usage message

GET

handcar/services/learning/objectivebanks

Get a list of all objective banks

GET

handcar/services/learning/objectivebanks/{objectiveBankId}

Get a particular objective bank by id

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/extension

Fetch a particular objective bank's extension record

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/branding

Fetch a particular objective bank's branding information

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives

also can optionally take one or more types as query parameters:

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives?genusTypeId={genusTypeId}

or

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives?genusTypeId={genusTypeId1}&genusTypeId={genusTypeId2}

Gets a list of all the objectives in the specified bank, optionally restricted by genus type

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}

Fetch a particular objective from a bank

GET

handcar/services/learning/objectives/{objectiveId}

Fetch a particular objective without specifying the bank

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/bulk?id={id1}&id={id2}&id={id3} etc..

Bulk fetch a bunch of objectives from a bank given a set of ids

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/extension

Fetch a particular objective's EXTENSION record

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/rootids

Fetch the root objectives ids in the topic hierarchy for this bank

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/roots

Fetch the root objectives in the topic hierarchy for this bank

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/parentids

Fetch a particular objective's hierarchy parent ids

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/parents

Fetch a particular objective's hierarchy parents.

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/childids

Fetch a particular objective's hierarchy child ids

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/children

Fetch a particular objective's hierarchy children.

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/beginnerids

Fetch the beginner objectives ids in this objective bank

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/beginners

Fetch the beginner objectives in this objective bank

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/requisiteids

Fetch a particular objective's immediate requisite ids

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/requisites

Fetch a particular objective's requisites

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/dependentids

Fetch a particular objective's immediate dependent ids

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/dependents

Fetch a particular objective's dependent objectives

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/equivalentids

Fetch a particular objective's equivalent ids

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/equivalents

Fetch a particular objective's equivalent ids

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/otherrelationshipids/{relationshipTypeId}

Fetch the ids of a particular objective's OTHER RELATIONS of a particular relationship type

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/otherrelationships/{relationshipTypeId}

Fetch a particular objective's OTHER RELATIONS of a particular relationship type

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/activityids

Fetch the ids of the activities associated with an objective

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}/activities

Fetches the activities associated with an objective

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/activities

or

handcar/services/learning/objectivebanks/{objectiveBankId}/activities?genustypeid={genusTypeId}

or

handcar/services/learning/objectivebanks/{objectiveBankId}/activities?genusTypeId={genusTypeId1}&genusTypeId={genusTypeId2}

Gets a list of all the objectives in the specified bank, optionally restricted by genus type

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/activities/{activityId}

Fetch a particular activity in a bank

GET

handcar/services/learning/activities/{activityId}

Fetch a particular activity without specifying the bank

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/activities/bulk?id={id1}&id={id2}&id={id3} etc..

Bulk fetch a bunch of activities in a bank

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/activities/{activityId}/extension

Fetch a particular activity's EXTENSION record

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/activities/{activityId}/assetids

Fetch the ids of the assets associated with an activity

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/activities/{activityId}/assets

Fetches the assets associated with an activity

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/assets

or

handcar/services/learning/objectivebanks/{objectiveBankId}/assets?genusTypeId={genusTypeId}

handcar/services/learning/objectivebanks/{objectiveBankId}/assets?genusTypeId={genusTypeId1}&genusTypeId={genusTypeId2}

Fetch all the assets in the repository associated with the bank, optionally restricted by genus type

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/assets/{assetId}

Fetch a particular asset from a bank

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/assets/{assetId}

Fetch a particular asset without specifying a bank

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/assets/bulk?id={id1}&id={id2}&id={id3} etc..

Bulk fetch a bunch of assets from a bank

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/asset/{assetId}/branding

Fetch a particular objective asset's branding information

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/assets/{assetId}/extension

Fetch a particular asset's EXTENSION record

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/assets/{assetId}/assetcontent/{assetContentId}/extension

Fetch a particular asset content's EXTENSION record

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/gradesystems/knowledgecategory

Fetch the Grade System configured for this objective bank's knowledge categories

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/gradesystems/cognitiveprocess

Fetch the Grade System configured for this objective bank's cognitive process ranking

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/grades

Fetch all the grades for either a Knowledge Category or Cognitive Process Grade System in the bank.

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/grades/{gradeId}

Fetch the detailed grade information for a grade in a Knowledge Category or Cognitive Process Grade System for this bank

GET

handcar/services/learning/objectivebanks/types/genus

Gets the list of supported objective bank genus types.

GET

handcar/services/learning/types

Gets the list of all supported types regardless of bank.

GET

handcar/services/learning/types/{typeId}

Get a particular type by id regardless of the bank

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/types/genus/objective

Gets the list of objective genus types.

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/types/genus/relationship

Gets the list of objective relationship genus types.

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/types/genus/activity

Gets the list of genus types for activities for this bank.

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/types/genus/asset

Gets the list of asset types for this bank.

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/types/genus/assetcontent

Gets the list of genus types (mime types) for asset contents for this bank.

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/types/accessibility

Gets the list of accessibility types for asset contents for this bank

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/types/languages

Gets the list of display text language types

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/types/languages/default

Gets the default display text language type

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/types/scripts

Gets the list of Display Text script types.

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/types/scripts/default

Gets the default of Display Text script type.

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/types/formats

Gets the list of display text format types.

GET

handcar/services/learning/objectivebanks/{objectiveBankId}/types/formats/default

Gets the default display text format type

POST

{objectiveBankBean} to handcar/services/learning/objectivebanks

Creates an objective bank

PUT

{objectiveBankBean} to handcar/services/learning/objectivebanks

Updates an objective bank

DELETE

handcar/services/learning/objectivebanks/{objectiveBankId}

Delete an Objective Bank

POST

{objectiveBean} to handcar/services/learning/objectivebanks/{objectiveBankId}/objectives

Creates an objective in an objective in a bank

PUT

{objectiveBean} to handcar/services/learning/objectivebanks/{objectiveBankId}/objectives

Updates an objective

DELETE

handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveId}

Delete an Objective

PUT

{IdsBean} to handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveid}/parentids

Updates an objective's parent by specifying their ids

PUT

{IdsBean} to handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveid}/childids

Updates an objective's children by specifying their ids

PUT

{IdsBean} to handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveid}/requisiteids

Updates an objective's requisites by specifying their ids

PUT

{IdsBean} to handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveid}/childids

Updates an objective's dependents by specifying their ids

PUT

{IdsBean} to handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveid}/equivalentids

Updates an objective's equivalencies by specifying their ids

PUT

{IdsBean} to handcar/services/learning/objectivebanks/{objectiveBankId}/objectives/{objectiveid}/otherrelationships/{relationshipTypeId}

Updates an objective's OTHER RELATIONSHIPS by specifying their ids

POST

{activityBean} to handcar/services/learning/objectivebanks/{objectiveBankId}/activities

Creates an activity associated with an objective in a bank

POST

{assetBasedActivityBean} to handcar/services/learning/objectivebanks/{objectiveBankId}/activities/assetbased

Convenience method to creates both an activity and it's corresponding asset at the same time.

PUT

{activityBean} to handcar/services/learning/objectivebanks/{objectiveBankId}/activities

Updates an activity

DELETE

handcar/services/learning/objectivebanks/{objectiveBankId}/activities/{activityId}

Delete an Activity

POST

{assetBean} to handcar/services/learning/objectivebanks/{objectiveBankId}/assets

Creates an asset associated with a bank

PUT

{assetBean} to handcar/services/learning/objectivebanks/{objectiveBankId}/assets

Updates an asset

DELETE

handcar/services/learning/objectivebanks/{objectiveBankId}/assets/{assetId}

Delete an Asset

MC3 was created and is supported by MIT’s Office of Digital Learning

[a]Norm Wright:

TODO: insert contact info