IMS Final Release

ToolProxy JSON Binding
in the application/vnd.ims.lti.v2.toolproxy+json format

Final Release
Media Type application/vnd.ims.lti.v2.toolproxy+json
RDF Type http://purl.imsglobal.org/vocab/lti/v2/lti#ToolProxy
JSON-LD http://purl.imsglobal.org/ctx/lti/v2/ToolProxy

Date Issued: 10 September 2015
Latest version: http://www.imsglobal.org/lti

Abstract

In the IMS LTI standard, a Tool Proxy represents an integration contract between two systems known respectively as Tool Consumer and Tool Provider. This specification document defines a JSON binding for Tool Proxy objects.

Table of Contents

1. Introduction

This specification defines a JSON binding for ToolProxy objects. This binding is used to register a new Tool within a Tool Consumer system via a REST API, as described in the LTI Implementation Guide [LTI, 14 IG].

The binding defined in this specification conforms to the JSON-LD conventions [JSON-LD-syntax]. Briefly, JSON-LD adds semantics to a JSON document by associating properties that may appear in a document with well-defined data types through the use of a so-called "context". It is not necessary to understand the mechanics of JSON-LD to render a JSON document that complies with the binding defined by this specification. Indeed, this specification is self-contained in the sense that it provides all the information necessary to render a compliant JSON binding of a ToolProxy object. On the other hand, readers who have some familiarity with JSON-LD will likely find this specification document easier to digest.

Figure 1 shows the representation of a ToolProxy resource in the application/vnd.ims.lti.v2.toolproxy+json format.

{
  "@context" : [
      "http://purl.imsglobal.org/ctx/lti/v2/ToolProxy",
      "http://purl.org/blackboard/ctx/v1/iconStyle"
  ],
  "@type" : "ToolProxy",
  "@id" : "http://lms.example.com/ToolProxy/869e5ce5-214c-4e85-86c6-b99e8458a592",
  "lti_version" : "LTI-2p0",
  "tool_proxy_guid" : "869e5ce5-214c-4e85-86c6-b99e8458a592",
  "tool_consumer_profile" : "http://lms.example.com/profile/b6ffa601-ce1d-4549-9ccf-145670a964d4",
  "tool_profile" : {
    "lti_version" : "LTI-2p0",
    "product_instance" : {
      "guid" : "fd75124a-140e-470f-944c-114d2d92bb40",
      "product_info" : {
        "product_name" : {
          "default_value" : "Acme Assessments",
          "key" : "tool.name"
        },
        "description" : {
          "default_value" : "Acme Assessments provide an interactive test format.",
          "key" : "tool.description"
        },
        "product_version" : "10.3",
        "technical_description" : {
          "default_value" : "Support provided for all LTI 1 extensions as well as LTI 2",
          "key" : "tool.technical"
        },
        "product_family" : {
          "@id" : "http://toolprovider.example.com/vendor/acme.com/product/assessment-tool",
          "code" : "assessment-tool",
          "vendor" : {
            "code" : "acme.com",
            "vendor_name" : {
              "default_value" : "Acme",
              "key" : "tool.vendor.name"
            },
            "description" : {
              "default_value" : "Acme is a leading provider of interactive tools for education",
              "key" : "tool.vendor.description"
            },
            "website" : "http://acme.example.com",
            "timestamp" : "2012-04-05T09:08:16-04:00",
            "contact" : {
              "email" : "info@example.com"
            }
          }
        }
      },
      "support" : {
        "email" : "helpdesk@example.com"
      },
      "service_provider" : {
        "guid" : "18e7ea50-3d6d-4f6b-aff2-ed3ab577716c",
        "service_provider_name" : {
          "default_value" : "Acme Hosting",
          "key" : "service_provider.name"
        },
        "description" : {
          "default_value" : "Provider of high performance managed hosting environments",
          "key" : "service_provider.description"
        },
        "support" : {
          "email" : "support@acme-hosting.example.com"
        },
        "timestamp" : "2012-04-05T09:08:16-04:00"
      },
      "service_owner" : {
        "service_owner_name" : {
          "default_value" : "Acme Institution",
          "key" : "service_owner.name"
        },
        "description" : {
          "default_value" : "Provider of high quality education",
          "key" : "service_owner.description"
        },
        "timestamp" : "2012-04-05T09:08:16-04:00"
      }
    },
    "base_url_choice" : [
       { "default_base_url" : "http://acme.example.com/",
         "secure_base_url" : "https://acme.example.com/",
         "selector" : {
           "applies_to" : ["IconEndpoint", "MessageHandler"]
         }
       }
     ],
    "resource_handler" : [
      {
        "resource_type" : { "code" : "asmt"},
        "resource_name" : {
          "default_value" : "Acme Assessment",
          "key" : "assessment.resource.name"
        },
        "description" : {
          "default_value" : "An interactive assessment using the Acme scale.",
          "key" : "assessment.resource.description"
        },
        "message" : [{
          "message_type" : "basic-lti-launch-request",
          "path" : "handler/launchRequest",
          "enabled_capability" : [
            "Result.autocreate"
          ],
          "parameter" : [
            { "name" : "result_url",
              "variable" : "Result.url"
            },
            { "name" : "discipline",
              "fixed" : "chemistry"
            }
          ]
        }],
        "icon_info" : [
           {
             "default_location" : {
               "path" : "images/bb/en/icon.png"
             },
             "key" : "iconStyle.default.path"
           },
           { "icon_style" : ["BbListElementIcon"],
             "default_location" : {
               "path" : "images/bb/en/listElement.png"
             },
             "key" : "iconStyle.bb.listElement.path"
           },
           { "icon_style" : ["BbPushButtonIcon"],
             "default_location" : {
               "path" : "images/bb/en/pushButton.png"
             },
             "key" : "iconStyle.bb.pushButton.path"
           }
         ]
      }
    ]
  },
  "custom" : {
    "customerId" : "394892759526"
  },
  "security_contract" : {
    "shared_secret" : "ThisIsASecret!",
    "tool_service" : [
      { "@type" : "RestServiceProfile",
        "service" : "http://lms.example.com/profile/b6ffa601-ce1d-4549-9ccf-145670a964d4#ToolProxy.collection",
        "action" : ["POST"]
      },
      { "@type" : "RestServiceProfile",
        "service" : "http://lms.example.com/profile/b6ffa601-ce1d-4549-9ccf-145670a964d4#ToolProxy.item",
        "action" : ["GET", "PUT"]
      },
      { "@type" : "RestServiceProfile",
        "service" : "http://lms.example.com/profile/b6ffa601-ce1d-4549-9ccf-145670a964d4#Result.item",
        "action" : ["GET", "PUT"]
      }
    ],
    "end_user_service" : [
      { "@type" : "RestServiceProfile",
        "service" : "http://lms.example.com/profile/b6ffa601-ce1d-4549-9ccf-145670a964d4#Result.item",
        "action" : ["PUT"]
      }
    ]
  }
}

Figure 1.  Example JSON document containing a ToolProxy object

1.1 How To Read this Document

This specification defines the structure of a JSON document using a graphical notation. In this notatation, an object is represented by a box that branches out to other boxes corresponding to the properties of that object, as shown in Figure 2.

Figure 2.  Representation of a JSON object

Figure 2 is not a complete representation of a ToolProxy object because there are embedded objects (tool_profile, security_contract, custom). A complete diagram would show branches emanating from the embedded objects to reveal their properties, and so on, recursively. For a complete representation, see Figure 6 below.

Each box representing a property specifies the name and type of the property , as shown in Figure 3.

Figure 3.  Graphical notation for a property

If a property is optional, its box will be decorated with a circle that contains a question mark, as shown in Figure 4.

Figure 4.  Example of an optional property

If a property can have multiple values, then its box in the graphical notation is decorated with a circle that contains a plus sign (+) as shown in Figure 3. In this example, the applies_to property may reference more than one xs:Class object. Ordinarily, these values are encapsulated within a JSON array, but if it turns out that only one value is present, then the square brackets for the array are optional.

An object within a JSON-LD document may have one of four possible representations:

  1. The object may be identified by a fully-qualified URI reference.
  2. The object may be identified by a Compact URI reference, known as a CURIE [CURIE-syntax], that can be expanded to a fully qualified URI
  3. The object may be identified by a simple name that is mapped to a fully-qualified URI. This mapping is defined by the JSON-LD context.
  4. The object may be embedded within the document.

When an object is to be identified by a fully-qualified URI or a CURIE, the box representing the object will be decorated with the #uri hash tag, as shown in Figure 3.

When an object or enumerable value is to be identified by a simple name, the box representing the corresponding property will be decorated with the #sn hash tag, as shown in Figure 5.

Figure 5.  Property whose value is a simple name reference for an individual object or enumerable value

1.2 Reserved Terms

The JSON-LD standard reserves a handful of property names and tokens that have special meaning. These names and tokens, described below, begin with the '@' symbol.

@context
Used to reference (by URI or by value) a context which declares the simple names that appear throughout a JSON document.
@id
Used to uniquely identify things that are being described in the JSON document. The value of an @id property is either a fully-qualified URI, a CURIE, or a simple name that expands to a fully-qualified URI by virtue of the rules defined in the JSON-LD Context.

The @id property may identify a so-called blank node by using a CURIE with an underscore as the prefix. The binding of a JSON-LD document MAY include identifiers for blank nodes, but these identifiers are not required.

@type
Used to set the data type of an object or property value.

JSON-LD specifies four other reserved terms (@value, @language, @container, @list). Ordinarily, these terms are not used in the JSON binding for ToolProxy objects. However, implementations that extend this specification by including additional properties may utilize these reserved terms in accordance with the rules defined by [JSON-LD-syntax].

1.3 The JSON-LD Context

In JSON-LD, a context is used to map simple names that appear in a JSON document to URI values for properties or data types in a formal vocabulary (typically an RDF ontology). For example, the standard context [LTI, 14 IG] for a ToolProxy contains the following rewrite rules (among others):

  {
    "@context" = {
      "lti" : "http://purl.imsglobal.org/vocab/lti/v2/lti#",
      "tool_profile" : "lti:tool_profile",
      ...
    }
  }

A context may specify that the values of certain object properties must be rendered as URI references. The following snippet presents an example of such a rule.

  {
    "@context" = {
      ...
      "icon_style" : {
        "@id" : "lti:icon_style",
        "@type" : "@id"
      }
      ...
  }

This rule is an example of type coercion. For more details about the syntax of a JSON-LD context, see [JSON-LD-syntax].

2. The ToolProxy Media Type

The following list defines the necessary and sufficient conditions for a document to conform to the application/vnd.ims.lti.v2.toolproxy+json media type.

  1. The document MUST be a valid JSON document, in accordance with [RFC4627].
  2. The document MUST contain either a single top-level JSON object, or an array of top-level JSON objects. The first object encountered (either the single top-level object or the first element of the array) is called the root object.
  3. The root object must have a @type property whose value is "ToolProxy".
  4. Every top-level object MUST have a @context property that references one or more JSON-LD contexts (either by URI or by value).
  5. Collectively, the set of contexts imported by the root object MUST contain all of the terms found in the standard context [LTI, 14 IG]. In particular, the set of imported contexts must contain all the simple names that appear in the standard context, and those simple names must resolve to the same values that appear in the standard context. This requirement may be satisfied by ensuring that the root object imports the standard context explicitly, or by importing a collection of other contexts that contain equivalent terms.
  6. The set of contexts imported by the root object MAY include additional terms that do not appear in the standard context [LTI, 14 IG].
  7. Duplicate mappings for names among the imported contexts MUST be overwritten on a last-defined-overrides basis.
  8. If the JSON-LD context coerces a property to a URI reference, then values of that property MUST be expressed as a fully-qualified URI reference, or a CURIE or a simple name declared by the context.
  9. A collection property is any property whose maximum cardinality is greater than 1. Except for the @context property, a non-empty collection MUST always be represented as a JSON array whose values are enclosed in square brackets. Whereas, in general, the JSON-LD syntax specification allows a collection containing a single value to omit the square brackets, the application/vnd.ims.lti.v2.toolproxy+json media type requires square brackets for all non-empty collections other than the @context property.
  10. An empty collection property may be represented either by an empty array (i.e. square brackets containing no elements), or by omitting the property altogether.
  11. Like all other properties, the @id property of a given object is mandatory if the minimum cardinality of that property, as defined by this specification, is greater than zero. The @id property is optional for all other objects (even if it is not explicitly listed in the set of properties for an object). Conforming implementations SHOULD include the @id property for all addressable objects.
  12. If the @id property is mandatory, then the value MUST NOT treat the object as a blank node. In this case, the @id value MUST NOT be a CURIE with an underscore as the prefix.
  13. Every top-level object MUST contain a @type property and a @context property.
  14. An embedded object MUST contain a @type property if the object value is a subtype of the declared range of the property.
  15. Values for properties named in the standard context [LTI, 14 IG], MUST not utilize the String Internationalization or Typed Value syntax as described in [JSON-LD-syntax].
  16. If the context does not coerce the value of an object property to a URI reference, then the object must be rendered as an embedded object.
  17. The properties of embedded objects must respect the cardinality constraints specified in the section titled JSON Data Bindings.

3. JSON Data Bindings

Figure 6 presents a complete graphical representation of the JSON binding for a ToolProxy object. The subsections following this figure provide details about each object that appears in the JSON binding for a ToolProxy object.

Figure 6.  Complete JSON representation of ToolProxy

3.1 BaseUrlChoice

Defines the base URL that is used for certain kinds of resources referenced in a ToolProfile. The kinds of resources to which the base URL applies is specified by an associated BaseUrlSelector. If the BaseUrlChoice does not have an associated selector, then it applies universally to all resources referenced in the Tool Profile.
{
  "default_base_url" : "http://acme.example.com/",
  "secure_base_url" : "https://acme.example.com/",
  "selector" : { ... }
}
Figure 7.  BaseUrlChoice
Property Mult Description Type
default_base_url 1 This is the base URL that should be used by default for all entities specified by the associated BaseUrlSelector. The secure_base_url attribute may override this default Base URL. xs:anyURI
secure_base_url 0..1 This is the base URL that should be used whenever security is enabled. If this base URL is not defined, then the default_base_url is used in all circumstances. xs:anyURI
selector 0..1 A resource that specifies the objects to which this BaseUrlChoice applies. BaseUrlSelector
Table 1.  BaseUrlChoice properties

3.2 BaseUrlSelector

This resource specifies the type of objects to which a set of base URLs apply.
{
  "applies_to" : [ ... ]
}
Figure 8.  BaseUrlSelector
Property Mult Description Type
applies_to 1..* The class of resources selected by this BaseUrlSelector. Class
(URI reference)
Table 2.  BaseUrlSelector properties

3.3 Capability

Represents a capability that may be declared by a Tool Consumer in its profile and enabled by a Tool when an integration contract is established.
Figure 9.  Capability
Direct Known Subtypes:
MessageType

Capability instances are enumerable, and they must be referenced by a simple name. The default vocabulary of simple names for instances of the Capability class are listed in Table 3.

Simple Name URI / Description
Context.id
http://purl.imsglobal.org/vocab/lti/v2/variable#Context.id
Corresponds to the context_id launch parameter. This is the local identifier for the context within the Tool Consumer system.
ltiv:Context.label
http://purl.imsglobal.org/vocab/lti/v2/variable#Context.label
A short label for the context. Corresponds to the context_label launch parameter.
Context.org
http://purl.imsglobal.org/vocab/lti/v2/variable#Context.org
A URI describing the organisational properties of the context from which a launch request originates (typically a CourseSection); for example, an ldap:// URI such as
ldap://host.com:6666/cid=abc123,ou=dept,dc=plainjoe,dc=org
. If more than one format of organisational URI is specified, each should be separated with a space.
ltiv:Context.title
http://purl.imsglobal.org/vocab/lti/v2/variable#Context.title
The title for the context. Corresponds to the context_title launch parameter.
Context.type
http://purl.imsglobal.org/vocab/lti/v2/variable#Context.type
A comma-separated list of URN values that identify the type of context. Corresponds to the context_type launch parameter.
ltiv:CourseOffering.academicSession
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.academicSession
The text data that is used to describe the academic session for the course offering.

In the LIS Database, this value corresponds to

courseOfferingRecord/courseOffering/defaultCredits/textString

ltiv:CourseOffering.credits
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.credits
The default credits set for this Course Offering

In the LIS Database, this value corresponds to

courseOfferingRecord/courseOffering/defaultCredits/textString

CourseOffering.label
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.label
A human readable label for the Course Offering

In the LIS Database, this value corresponds to

courseOfferingRecord/courseOffering/label

ltiv:CourseOffering.longDescription
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.longDescription
A long description of the Course Offering.

In the LIS Database, this value corresponds to

courseOfferingRecord/courseOffering/catalogDescription/longDescription

ltiv:CourseOffering.shortDescription
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.shortDescription
A short description of the Course Offering.

In the LIS Database, this value corresponds to

courseOfferingRecord/courseOffering/catalogDescription/shortDescription

ltiv:CourseOffering.sourcedId
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.sourcedId
The LIS identifier for the Course Offering.

In the LIS Database, this value corresponds to

courseOfferingRecord/sourcedId

ltiv:CourseOffering.title
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.title
The title of the Course Offering.

In the LIS Database, this value corresponds to

courseOfferingRecord/courseOffering/title

ltiv:CourseSection.courseNumber
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.courseNumber
The course number, such as "Biology 101". In general, this number is not just a numeric value.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/courseNumber/textString

CourseSection.credits
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.credits
The default credits set for the Course Section.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/defaultCredits/textString

ltiv:CourseSection.dataSource
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.dataSource
An identifier for the original source system of the CourseSection object.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/dataSource

CourseSection.dept
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.dept
The department within which the Course Section is offered.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/org[type/textString="Dept"]/orgName/textString

ltiv:CourseSection.enrollControl.allowed
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.enrollControl.allowed
A boolean value that specifies whether the Tool Provider can enroll people in the Course Section. The value false indicates that only the source system can enroll people.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/enrollControl/enrollAllowed

CourseSection.enrollControll.accept
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.enrollControll.accept
A boolean value that specifies whether the Course Section is accepting enrollments.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/enrollControl/enrollAccept

ltiv:CourseSection.label
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.label
A human readable label for the Course Section.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/label

CourseSection.longDescription
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.longDescription
A long description of the Course Section.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/catalogDescription/longDescription

CourseSection.maxNumberofStudents
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.maxNumberofStudents
The maximum number of students that can be enrolled in the Course Section.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/maxNumberofStudents

ltiv:CourseSection.numberofStudents
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.numberofStudents
The number of students who are enrolled in the Course Section.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/numberofStudents

ltiv:CourseSection.shortDescription
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.shortDescription
A short description of the Course Section.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/catalogDescription/shortDescription

CourseSection.sourceSectionId
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.sourceSectionId
The identifier for the source Course Section from which the target Course Section was cloned.

In the LIS Database, this value corresponds to

createCourseSectionFromCourseSectionRequest/sourcedId

CourseSection.sourcedId
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.sourcedId
The LIS identifier for the Course Section

In the LIS Database, this value corresponds to

courseSection/sourcedId

CourseSection.timeFrame.begin
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.timeFrame.begin
The date and time when the Course Section becomes available.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/timeFrame/begin

CourseSection.timeFrame.end
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.timeFrame.end
The date and time after which the Course Section is no longer available.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/timeFrame/end

ltiv:CourseSection.title
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.title
The title of the Course Section.

In the LIS Database, this value corresponds to

courseSectionRecord/courseSection/title

ltiv:CourseTemplate.courseNumber
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.courseNumber
The course number, such as "Biology 101". In general, this number is not just a numeric value.

In the LIS Database, this value corresponds to

courseTemplateRecord/courseTemplate/courseNumber/textString

ltiv:CourseTemplate.credits
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.credits
The default credits set for this Course Template.

In the LIS Database, this value corresponds to

courseTemplateRecord/courseTemplate/defaultCredits/textString

CourseTemplate.label
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.label
A human readable label used to help identify the Course Template.

In the LIS Database, this value corresponds to

courseTemplateRecord/courseTemplate/label/textString

CourseTemplate.longDescription
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.longDescription
A long description of the Course Template.

In the LIS Database, this value corresponds to

courseTemplateRecord/courseTemplate/catalogDescription/longDescription

CourseTemplate.shortDescription
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.shortDescription
A short description of the Course Template.

In the LIS Database, this value corresponds to

courseTemplateRecord/courseTemplate/catalogDescription/shortDescription

CourseTemplate.sourcedId
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.sourcedId
The LIS identifier for the Course Template.

In the LIS Database, this value corresponds to

courseTemplateRecord/sourcedId

ltiv:CourseTemplate.title
http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.title
The title of the Course Template.

In the LIS Database, this value corresponds to

courseTemplateRecord/courseTemplate/title/textString

Group.email
http://purl.imsglobal.org/vocab/lti/v2/variable#Group.email
An email address used for posting messages to members of the group.

In the LIS Database, this value corresponds to

groupRecord/group/email

Group.enrollControl.accept
http://purl.imsglobal.org/vocab/lti/v2/variable#Group.enrollControl.accept
A boolean value that specifies whether the Group is accepting enrollments.

In the LIS Database, this value corresponds to

groupRecord/group/enrollControl/enrollAccept

ltiv:Group.enrollControl.allowed
http://purl.imsglobal.org/vocab/lti/v2/variable#Group.enrollControl.allowed
A boolean value that specifies whether the Tool Provider can enroll people in the Group. The value false indicates that only the source system can enroll people.

In the LIS Database, this value corresponds to

groupRecord/group/enrollControl/enrollAllowed

Group.grouptype
http://purl.imsglobal.org/vocab/lti/v2/variable#Group.grouptype
A URI that uniquely identifies the type of group. This convention differs from the LIS convention of using a structured object to describe the type of a group. Ideally, the URI should resolve to JSON-LD document that describes the group type. However, any URI that uniquely identifies the group type in accordance with the rules of the grouptype scheme is acceptable.
Group.longDescription
http://purl.imsglobal.org/vocab/lti/v2/variable#Group.longDescription
A long description of the Group.

In the LIS Database, this value corresponds to

groupRecord/group/description/longDescription

Group.parentId
http://purl.imsglobal.org/vocab/lti/v2/variable#Group.parentId
An identifier for the parent group within which the target group is nested.

In the LIS Database, this value corresponds to

groupRecord/group/relationship[relation="Parent"]/sourcedId

ltiv:Group.shortDescription
http://purl.imsglobal.org/vocab/lti/v2/variable#Group.shortDescription
A short description of the Group.

In the LIS Database, this value corresponds to

groupRecord/group/description/shortDescription

ltiv:Group.sourcedId
http://purl.imsglobal.org/vocab/lti/v2/variable#Group.sourcedId
The LIS identifier for the Group.

In the LIS Database, this value corresponds to

groupRecord/sourcedId

Group.timeFrame.begin
http://purl.imsglobal.org/vocab/lti/v2/variable#Group.timeFrame.begin
The date and time when access to Group resources begins.

In the LIS Database, this value corresponds to

groupRecord/group/timeframe/begin

Group.timeFrame.end
http://purl.imsglobal.org/vocab/lti/v2/variable#Group.timeFrame.end
The date and time when access to Group resources ends.

In the LIS Database, this value corresponds to

groupRecord/group/timeframe/end

Group.url
http://purl.imsglobal.org/vocab/lti/v2/variable#Group.url
The web address of the Group.

In the LIS Database, this value corresponds to

groupRecord/group/url

LineItemZZZ.dataSource
http://purl.imsglobal.org/vocab/lti/v2/variable#LineItemZZZ.dataSource
An identifier for the original source system of the LineItem record.

In the LIS Database, this value corresponds to

lineItemRecord/lineItem/dataSource

ltiv:LineItemZZZ.resultValue.max
http://purl.imsglobal.org/vocab/lti/v2/variable#LineItemZZZ.resultValue.max
The maximum numeric score that a learner may earn on the assignment associated with this LineItem.

In the LIS Database, this value corresponds to

resultValueRecord/resultValue/valueRange/max

where

resultValueRecord.sourcedId = lineItemRecord/lineItem/resultValueSourcedId

LineItemZZZ.sourcedId
http://purl.imsglobal.org/vocab/lti/v2/variable#LineItemZZZ.sourcedId
The LIS identifier for the LineItem

In the LIS Database, this value corresponds to

lineItemRecord/sourcedId

LineItemZZZ.type
http://purl.imsglobal.org/vocab/lti/v2/variable#LineItemZZZ.type
A URI that uniquely identifies the LineItem type. This convention differs from the LIS convention of using a structured object to describe LineItem types. The URI should resolve to a JSON-LD resource that describes the LineItem type. As a best practice the URI should start with a base URL that identifies the LineItemType vocabulary and end with a relative URL for a type within that vocabulary.

In the LIS Database, the LineItem type is given by

lineItemRecord/lineItem/lineItemType

ltiv:LineItemZZZ.type.displayName
http://purl.imsglobal.org/vocab/lti/v2/variable#LineItemZZZ.type.displayName
The display name for the LineItemType.

In the LIS Database, this value corresponds to

lineItemTypeRecord/lineItemType/displayName

LtiLink.custom.url
http://purl.imsglobal.org/vocab/lti/v2/variable#LtiLink.custom.url
The endpoint URL for accessing link-level tool settings.
Membership.collectionSourcedId
http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.collectionSourcedId
The LIS identifier for the organizational unit (Course Section, Group, etc.) to which the Membership pertains.

In the LIS Database, this value corresponds to

membershipRecord/membership/collectionSourcedId

Membership.createdTimestamp
http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.createdTimestamp
The date and time when the membership role was created. If the Person has more than one role within the organizational unit, then this value is a comma separated list corresponding to the roles listed by the Membership.role variable.

In the LIS Database, this value corresponds to

membershipRecord/membership/member/role/dateTime

ltiv:Membership.dataSource
http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.dataSource
An identifier for the original source system of the Membership record.

In the LIS Database, this value corresponds to

membershipRecord/membership/member/role/dataSource

Membership.personSourcedId
http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.personSourcedId
The LIS identifier for the Person associated with the Membership.

In the LIS Database, this value corresponds to

membershipRecord/membership/member/personSourcedId

Membership.role
http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.role
A comma separated list of roles that the Person has within the organizational unit.

In the LIS Database, this value corresponds to

membershipRecord/membership/member/role/roleType

Membership.sourcedId
http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.sourcedId
The LIS identifier for the Membership.

In the LIS Database, this value corresponds to

membershipRecord/sourcedId

Membership.status
http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.status
Indicates if the membership is active or inactive. In accordance with the LIS specification, the value should be either Active or Inactive. If the Person has more than one role within the organizational unit, then this value is a comma separated list, where the values are ordered in correspondence with the roles named by the Membership.role variable.

In the LIS Database, this value corresponds to

membershipRecord/membership/member/role/status

Person.address.country
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.country
The country within the user's address.

In the LIS Database, this value corresponds to

personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="Country"]/instanceValue/text

Person.address.locality
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.locality
The city, town, or other locality within the user's address.

In the LIS Database, this value corresponds to

personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="Locality"]/instanceValue/text

ltiv:Person.address.postcode
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.postcode
The postal code within the user's address.

In the LIS Database, this value corresponds to

personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="Postcode"]/instanceValue/text

Person.address.statepr
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.statepr
The state or province within the user's address.

In the LIS Database, this value corresponds to

personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair/[instanceName/text="Statepr"]/instanceValue/text

Person.address.street1
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.street1
The first line of the user's street address.

In the LIS Database, this value corresponds to

personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="NonFieldedStreetAddress1"]/instanceValue /text  

Person.address.street2
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.street2
The second line of the user's street address.

In the LIS Database, this value corresponds to

personRecord/person/address/[addressType/instanceValue/text="Preferred"]  addressPart /nameValuePair[instanceName/text="NonFieldedStreetAddress2"] /instanceValue/text 

Person.address.street3
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.street3
The third line of the user's street address.

In the LIS Database, this value corresponds to

personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="NonFieldedStreetAddress3"] /instanceValue/text

Person.address.street4
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.street4
The fourth line of the user's street address.

In the LIS Database, this value corresponds to

personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="NonFieldedStreetAddress4"] /instanceValue/text

Person.address.timezone
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.timezone
The user's time zone.

In the LIS Database, this value corresponds to

personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="Timezone"]/instanceValue/text

ltiv:Person.email.personal
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.email.personal
The user's personal email address

In the LIS Database, this value corresponds to

person/contactinfo[contactinfoType/instanceValue/text="Email_Personal"]/contactinfoValue /text

ltiv:Person.email.primary
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.email.primary
The user's primary email address.

In the LIS Database, this value corresponds to

personRecord/person/contactinfo[contactinfoType/instanceValue/text="Email_Primary"] /contactinfoValue/text

Person.name.family
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.name.family
The family name of the user.

In the LIS Database, this value corresponds to

personRecord/person/name/partName[instanceName/text="Family”]/instanceValue/text 

Person.name.full
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.name.full
The full name of the user.

In the LIS Database, this value corresponds to

personRecord/person/formname/[formnameType/instanceValue/text="Full"] /formattedName/text

Person.name.given
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.name.given
The given name of the user.

In the LIS Database, this value corresponds to

personRecord/person/name/partName[instanceName/text="Given”]/instanceValue/text

Person.name.middle
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.name.middle
The middle name of the user.

In the LIS Database, this value corresponds to

personRecord/person/name/partName[instanceName/text="Middle”]/instanceValue/text 

Person.name.prefix
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.name.prefix
The prefix for the user's name, such as Dr., Mr., Ms. etc.

In the LIS Database, this value corresponds to

personRecord/person/name/partName[instanceName/text="Prefix”]/instanceValue/text 

ltiv:Person.name.suffix
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.name.suffix
The suffix for the user's name, such as Jr., II, etc.

In the LIS Database, this value corresponds to

personRecord/person/name/partName[instanceName/text="Suffix”]/instanceValue/text 

Person.phone.home
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.phone.home
The user's home phone number

In the LIS Database, this value corresponds to

personRecord/person/contactinfo [contactinfoType/instanceValue/text="Telephone_Home"]/contactinfoValue /text

Person.phone.mobile
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.phone.mobile
The user's mobile phone number

In the LIS Database, this value corresponds to

personRecord/person/contactinfo[contactinfoType/instanceValue/text="Mobile"] /contactInfoValue/text

Person.phone.primary
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.phone.primary
The user's primary phone number

In the LIS Database, this value corresponds to

personRecord/person/contactinfo [contactinfoType/instanceValue/text="Telephone_Primary"]/contactinfoValue /text

Person.phone.work
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.phone.work
The user's work phone number.

In the LIS Database, this value corresponds to

personRecord/person/contactinfo [contactinfoType/instanceValue/text="Telephone_Work"]/contactinfoValue /text

ltiv:Person.sms
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.sms
The number at which the user prefers to receive SMS text messages.

In the LIS Database, this value corresponds to

personRecord/person/contactinfo[contactinfoType/instanceValue/text="SMS"]  /contactinfoValue/text

Person.sourcedId
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.sourcedId
The LIS identifier for the user.

In the LIS Database, this value corresponds to personRecord/sourcedId

ltiv:Person.webaddress
http://purl.imsglobal.org/vocab/lti/v2/variable#Person.webaddress
The user's web address. This could be a facebook address, a blog, or any other web address linked to the user. The value should be a URL.

In the LIS Database, this value corresponds to

personRecord/person/contactinfo[contactinfoType/instanceValue/text="Web-Address"] /contactinfoValue/text

ltiv:ResourceLink.description
http://purl.imsglobal.org/vocab/lti/v2/variable#ResourceLink.description
A plain text description of the link’s destination, suitable for display alongside the link.
ResourceLink.id
http://purl.imsglobal.org/vocab/lti/v2/variable#ResourceLink.id
This is the local identifier for the resource link within the Tool Consumer system from which the launch occurred. Corresponds to the resource_link_id launch parameter.
ltiv:ResourceLink.title
http://purl.imsglobal.org/vocab/lti/v2/variable#ResourceLink.title
A plain text title for the resource.
ltic:Result.autocreate
http://purl.imsglobal.org/vocab/lti/v2/capability#Result.autocreate
A lin-item in the tool consumer gradebook can be automatically created for any resource links which use the Basic Outcomes or Result services.
ltiv:Result.comment
http://purl.imsglobal.org/vocab/lti/v2/variable#Result.comment
A comment associated with the outcome which may be made visible to the student.
ltiv:Result.createdTimestamp
http://purl.imsglobal.org/vocab/lti/v2/variable#Result.createdTimestamp
The date and time when the Result was created.

In the LIS Database, this value corresponds to

ltiv:Result.dataSource
http://purl.imsglobal.org/vocab/lti/v2/variable#Result.dataSource
An identifier for the original source system of the Result record.

In the LIS Database, this value corresponds to

resultRecord/result/dataSource

Result.resultScore
http://purl.imsglobal.org/vocab/lti/v2/variable#Result.resultScore
The score that the learner earned on the assignment or activity to which this Result pertains.

In the LIS Database, this value corresponds to

resultRecord/result/resultScore/textString

ltiv:Result.sourcedId
http://purl.imsglobal.org/vocab/lti/v2/variable#Result.sourcedId
The LIS identifier for the Result resource.

In the LIS Database, this value corresponds to

ltiv:Result.status
http://purl.imsglobal.org/vocab/lti/v2/variable#Result.status
A URI for the status of the Result. As a best practice, the URI should resolve to a JSON-LD description of the status value or a term in a VDEX file. The vocabulary for Result status values is extensible. The set of standard values includes:
  • http://www.imsglobal.org/lis/omsv1p0/statusofresultvocabularyv1p0#Unmoderated
  • http://www.imsglobal.org/lis/omsv1p0/statusofresultvocabularyv1p0#Tobemoderated
  • http://www.imsglobal.org/lis/omsv1p0/statusofresultvocabularyv1p0#Pending
  • http://www.imsglobal.org/lis/omsv1p0/statusofresultvocabularyv1p0#Completed
ltiv:Result.url
http://purl.imsglobal.org/vocab/lti/v2/variable#Result.url
The URL of the Result resource. Client applications may issue an HTTP request to read, update or delete the resource at this URL.
ToolProxy.custom.url
http://purl.imsglobal.org/vocab/lti/v2/variable#ToolProxy.custom.url
The endpoint URL for accessing system-wide tool settings.
ToolProxyBinding.custom.url
http://purl.imsglobal.org/vocab/lti/v2/variable#ToolProxyBinding.custom.url
The endpoint URL for accessing context-level tool settings.
ltiv:User.id
http://purl.imsglobal.org/vocab/lti/v2/variable#User.id
Corresponds to the user_id launch parameterfrom the LaunchMixin class. This is the local identifier for the user within the Tool Consumer system.
ltiv:User.image
http://purl.imsglobal.org/vocab/lti/v2/variable#User.image
The URL for an image of the user suitable for use as a profile picture or avatar.
User.org
http://purl.imsglobal.org/vocab/lti/v2/variable#User.org
A URI describing the user's organisational properties; for example, an ldap:// URI such as
ldap://host.com:6666/uid=user,ou=people,dc=example,dc=com
. If more than one format of organisational URI is specified, each should be separated with a space.
User.scope.mentor
http://purl.imsglobal.org/vocab/lti/v2/variable#User.scope.mentor
A comma-separated list of user ID values which the current user can access as a mentor. Corresponds to the role_scope_mentor launch parameter.
ltiv:User.username
http://purl.imsglobal.org/vocab/lti/v2/variable#User.username
The username that identifies the user within the Tool Consumer system.
Table 3.  Known simple names for Capability objects

3.4 Contact

Contact information for the associated object.
{
  "email" : "info@example.com"
}
Figure 10.  Contact
Property Mult Description Type
email 1 The email of the primary contact for the associated object. xs:normalizedString
Table 4.  Contact properties

3.5 HttpMethod

Enumerates the HTTP methods that can be used when sending a message, as defined by IETF RFC 2616 .
Figure 11.  HttpMethod

HttpMethod instances are enumerable, and they must be referenced by a simple name. The default vocabulary of simple names for instances of the HttpMethod class are listed in Table 5.

Simple Name URI / Description
DELETE
http://purl.imsglobal.org/vocab/lti/v2/lti#DELETE
GET
http://purl.imsglobal.org/vocab/lti/v2/lti#GET
POST
http://purl.imsglobal.org/vocab/lti/v2/lti#POST
PUT
http://purl.imsglobal.org/vocab/lti/v2/lti#PUT
Table 5.  Known simple names for HttpMethod objects

3.6 IconEndpoint

Defines the path for an Icon.
{
  "path" : "images/bb/en/icon.png"
}
Figure 12.  IconEndpoint
Property Mult Description Type
path 1 This attribute specifies the path for an endpoint such as a MessageHandler or an Icon. Typically, this path is relative to one of the base URL values defined in a BaseUrlChoice. In the case of a MessageHandler, the path may be an absolute path if the associated message type explicitly declares that an absolute path is allowed. xs:anyURI
Table 6.  IconEndpoint properties

3.7 IconInfo

Contains information about a graphical icon that may be displayed in the Tool Consumer's user interface.
{
  "default_location" : { ... },
  "key" : "iconStyle.default.path"
}
Figure 13.  IconInfo
Property Mult Description Type
default_location 0..1 Specifies the default path to an icon. The absolute URL is formed by appending this path to the appropriate base URL for icons. IconEndpoint
key 0..1 If localization is supported then the 'key' attribute identifies a property in the resource bundle provided in response to the get-bundle-request message. The value of that property is the locale-specific path to the icon. Name.Type
icon_style * The style of the icon referenced by this IconInfo. IconStyle
(Simple Name reference)
Table 7.  IconInfo properties

3.8 IconStyle

A resource that specifies the style for an Icon.

The LTI standard does not define any particular Icon styles. Each vendor is free to publish its own set of icon styles. A typical style might specify dimensions of the icon or its intended usage. Each IconStyle is uniquely identified by a URI. Ideally, the URI should resolve to a resource that provides a definition of the icon style.
Figure 14.  IconStyle

3.9 LocalizedName

This container stores the default display name for some object plus a key that may be used to lookup a translation for the display name from a resource bundle for a particular locale. The string value has a maximum length of 128 characters.
{
  "default_value" : "Acme Assessments",
  "key" : "tool.name"
}
Figure 15.  LocalizedName
Property Mult Description Type
default_value 0..1 The default value for the display name. This value is used if (1) the key attribute is undefined, (2) the localization capability is not enabled, or (3) a value for the specified key is not found in the locale-specific resource bundle. LongName.Type
key 0..1 The key used to lookup the locale-specific value from a resource bundle. Name.Type
Table 8.  LocalizedName properties

3.10 LocalizedText

This container defines a block of text. The container includes a default value for the text, plus a key that can be used to lookup a locale-specific value from a resource bundle.
{
  "default_value" : "Acme Assessments provide an interactive test format.",
  "key" : "tool.description"
}
Figure 16.  LocalizedText
Property Mult Description Type
default_value 0..1 This is the default value for the text. This default value is used if (1) the key is not specified, (2) the localization capability is not enabled, or (3) the specified key is not found in the locale-specific resource bundle. Text.Type
key 0..1 If localization is supported then the key identifies a property in the bundle returned by the get-bundle-request message handler. Name.Type
Table 9.  LocalizedText properties

3.11 MessageHandler

Defines the features of a message handler, including information about the handler's service endpoint and custom parameters that it expects.
{
  "message_type" : "basic-lti-launch-request",
  "path" : "handler/launchRequest",
  "enabled_capability" : [ ... ],
  "parameter" : [ ... ]
}
Figure 17.  MessageHandler
Property Mult Description Type
message_type 1 The type of message that can be submitted to the Message Handler. MessageType
(URI reference)
path 1 This attribute specifies the path for an endpoint such as a MessageHandler or an Icon. Typically, this path is relative to one of the base URL values defined in a BaseUrlChoice. In the case of a MessageHandler, the path may be an absolute path if the associated message type explicitly declares that an absolute path is allowed. xs:anyURI
enabled_capability * A capability that is enabled for messages handled by this MessageHandler. Capability
(Simple Name reference)
parameter * Specifies a custom parameter that is expected by the MessageHandler. Parameter
Table 10.  MessageHandler properties

3.12 MessageType

This container holds metadata about a particular type of message. It provides a friendly name (an alias) for the formal Message class name, and it specifies the allowed HTTP methods for Messages of the given type.
Figure 18.  MessageType

3.13 Parameter

Defines the characteristics of a parameter expected by a MessageHandler.
{
  "name" : "result_url",
  "variable" : "Result.url"
}
Figure 19.  Parameter
Property Mult Description Type
name 1 The name of the parameter. xs:Name
variable 0..1 Denotes that the parameter has a variable value that is automatically substituted at run-time. The value of this attribute is the name for a variable whose value will be added to the message at run-time. VariableName.Type
fixed 0..1 Denotes that the value of the parameter is fixed at the time of definition within the product profile. This value must be passed in each message of the associated message type. DataValue.Type
Table 11.  Parameter properties

3.14 ProductFamily

A ProductFamily represents the collection of all versions of a particular product over time. Two products that have the same product code belong to the same ProductFamily. The LTI product model has four levels:
  1. ProductFamily: The collection of all versions of a given product.
  2. ProductInfo: Encapsulates information about one particular version of a product.
  3. ProductInstance: Represents one deployed instance of a particular version of a product.
  4. ProductProfile: Defines a view of a deployed instance of a product. This view may be customized for different integration partners.
Notice that the ProductFamily sits at the top of the product hierarchy. Each product family is owned by a Vendor.
{
  "@id" : "http://toolprovider.example.com/vendor/acme.com/product/assessment-tool",
  "code" : "assessment-tool",
  "vendor" : { ... }
}
Figure 20.  ProductFamily
Property Mult Description Type
code 1 A unique identifier for the resource. Token.Type
vendor 1 The vendor that owns the ProductFamily. Vendor
Table 12.  ProductFamily properties

3.15 ProductInfo

Encapsulates information about one released version of a product (Tool Consumer or Tool).
{
  "product_name" : { ... },
  "description" : { ... },
  "product_version" : "10.3",
  "technical_description" : { ... },
  "product_family" : { ... }
}
Figure 21.  ProductInfo
Property Mult Description Type
product_name 1 A name for the product, suitable for display to end users. LocalizedName
description 0..1 This is a description of the product suitable for display to end-users. LocalizedText
product_version 1 This is the version of the product. xs:normalizedString
technical_description 0..1 This is a human readable description of the technical aspects of this product that might be of interest to developers who wish to integrate with this product via LTI. LocalizedText
product_family 1 An inverse attribute that references the ProductFamily within which this ProductInfo is defined. ProductFamily
Table 13.  ProductInfo properties

3.16 ProductInstance

The resource encapsulates information about one deployed instance of a web-based product (Tool or Tool Consumer).
{
  "guid" : "fd75124a-140e-470f-944c-114d2d92bb40",
  "product_info" : { ... },
  "support" : { ... },
  "service_provider" : { ... },
  "service_owner" : { ... }
}
Figure 22.  ProductInstance
Property Mult Description Type
guid 1 A globally unique identifier for the service provider. As a best practice, this value should match an Internet domain name assigned by ICANN, but any globally unique identifier is acceptable. GUID.Type
product_info 1 This is metadata about the product described in the profile. ProductInfo
support 0..1 Contact information for support on this deployed instance of the product (Tool or ToolConsumer). Contact
service_provider 0..1 This is the service provider that hosts the deployed product. ServiceProvider
service_owner 0..1 The entity that owns the services provided by this product instance. ServiceOwner
Table 14.  ProductInstance properties

3.17 PropertyMap

An abstract class whose properties are defined by the Tool Provider and stored in the Tool Consumer. When represented in JSON-LD, the PropertyMap object typically appears as a plain-old JSON object (though it may have a custom JSON-LD context that defines the semantics for the custom properties). It is a best practice for the values in a PropertyMap to be strings. This best practice may be revised if the development community expresses a desire to support other data types in a PropertyMap.
{
  "customerId" : "394892759526"
}
Figure 23.  PropertyMap

3.18 ResourceHandler

The set of information for a specific resource handler.
{
  "resource_type" : { ... },
  "resource_name" : { ... },
  "description" : { ... },
  "message" : [ ... ],
  "icon_info" : [ ... ]
}
Figure 24.  ResourceHandler
Property Mult Description Type
resource_type 1 Identifies the type of resource associated with this ResourceHandler. Resource types are identified by a code that is unique within a given ProductFamily. ResourceType
resource_name 1 The name of the resource handler suitable for display in the TC user interface. LocalizedName
description 0..1 A description of the service provider, suitable for display to end-users. LocalizedText
message 1..* Defines the features of a message handler associated with the resource described by this ResourceHandler. MessageHandler
icon_info * Provides information about a graphical icon that represents the resource described by this ResourceHandler. IconInfo
Table 15.  ResourceHandler properties

3.19 ResourceType

This class represents all ResourceHandlers of a given type. Two ResourceHandlers that belong to this set are considered to be different versions of the same ResourceHandler.
{
  "code" : "asmt"
}
Figure 25.  ResourceType
Property Mult Description Type
code 1 A unique identifier for the resource. Token.Type
Table 16.  ResourceType properties

3.20 RestService

A descriptor for a REST service.
Figure 26.  RestService
Property Mult Description Type
@id 0..1 The URI that identifies this RestService instance. xs:anyURI
action 1..* Specifies an HTTP action that is supported at the REST endpoint. A given endpoint may support more than one action. For example, it is common practice for a collection endpoint to accept POST requests, and a different item endpoint to accept GET, PUT, and DELETE requests. HttpMethod
(Simple Name reference)
endpoint 1 A URI template that defines the REST endpoint for resources that may be accessed via the REST service. The URI template should conform to the syntax in the proposed IETF standard [draft-gregorio-uritemplate-08]. xs:anyURI
format 1..* The content type (also known as media type) of resources accessed via the endpoint defined by this RestService descriptor. The endpoint of a REST service may support more than one content type if content negotiation is enabled as described in the HTTP 1.1 specification. xs:normalizedString
Table 17.  RestService properties

3.21 RestServiceProfile

A kind of ServiceProfile specialized for REST services.
{
  "@type" : "RestServiceProfile",
  "service" : "http://lms.example.com/profile/b6ffa601-ce1d-4549-9ccf-145670a964d4#ToolProxy.collection",
  "action" : [ ... ]
}
Figure 27.  RestServiceProfile
Property Mult Description Type
service 1 The descriptor for the service that is being profiled. ServiceDescriptor
(URI reference)
action 1..* Specifies an HTTP method (POST, GET, PUT, etc.) which the integration partner intends to use. A RestServiceProfile may include more than one action. However, the set of actions declared in a RestServiceProfile must be a subset of actions declared in the RestService referenced by the service property. HttpMethod
(Simple Name reference)
Table 18.  RestServiceProfile properties

3.22 SecurityContract

This entity specifies all aspects of the security agreements between Tool Provider and Tool Consumer.

Notice that the security contract distinguishes between tool_services and end_user_services. A tool_service is a service that the Tool invokes when acting on its own. By contrast, a end_user_service is a service that the Tool invokes when acting as an agent for some end user. Consider, for example, the case where a Tool is reporting scores to the Tool Consumer via an outcomes service. When a student submits an assignment, the Tool may calculate a score and post it to the Tool Consumer. In this case the Tool is acting on its own since students generally do not have permission to enter their own scores into a grade book. Now, suppose the Tool exposes a user interface which allows instructors to change a score. In this case, when the Tool posts the modified score to the Tool Consumer grade book, it is acting as an agent for the end user. This example, illustrates that the same service may be referenced as both a tool_service and a end_user_service

{
  "shared_secret" : "ThisIsASecret!",
  "tool_service" : [ ... ],
  "end_user_service" : [ ... ]
}
Figure 28.  SecurityContract
Property Mult Description Type
shared_secret 1 This is the shared secret used for communications between the Tool Consumer and the Tool Provider. It is expected that the Tool Consumer present an interface to the administrative user for them to activate the Tool Proxy before this secret is ever used by the Tool Consumer. The shared secret may be updated when a tool is re-registered (see the reregisterTool operation of the ToolRegistrationService). In addition, the TC and TP should provide interfaces which allow their respective administrators to change the shared secret through an out-of-band agreement. xs:string
tool_service * The profile for a Tool Consumer service that may be invoked by the Tool acting on its own (as opposed to acting as an agent for some end user). RestServiceProfile
end_user_service * The profile for a Tool Consumer service that may be invoked by the Tool when acting as an agent for some end user. RestServiceProfile
Table 19.  SecurityContract properties

3.23 ServiceDescriptor

This entity defines a profile for a service. It is a "profile" in the sense that it specifies a subset of operations that are declared by the full interface for some service. For example, a profile might list the "read" operations of a service but exclude the "write" operations. This is useful because a product (Tool or TC) might want to offer the read-only operations to a partner, but it might not want to expose write operations. (On the other hand, it is perfectly legitimate for a profile to list all of the operations that are declared in the service interface if desired.) ServiceProfiles are used for four different purposes: (1) they allow a product to advertise the operations that it offers to a partner, (2) they allow a product to declare the operations that it intends to use, (3) they allow a product to advertise the security profiles that are available for service operations, and (4) they allow a product to assert the security profiles that will be used for service operations.
Figure 29.  ServiceDescriptor
Direct Known Subtypes:
RestService

3.24 ServiceOwner

The entity that owns the services provided by a product instance.
{
  "service_owner_name" : { ... },
  "description" : { ... },
  "timestamp" : "2012-04-05T09:08:16-04:00"
}
Figure 30.  ServiceOwner
Property Mult Description Type
service_owner_name 1 The name of the service owner, suitable for display to end users. LocalizedName
description 0..1 A description of the service owner, suitable for display to end-users. LocalizedText
timestamp 1 A timestamp for the ServiceOwner record. This value is useful for determining which record is most current. xs:dateTime
Table 20.  ServiceOwner properties

3.25 ServiceProfile

A profile for some service that may be invoked by an integration partner. A profile specifies which methods or operations the integration partner intends to use.
Figure 31.  ServiceProfile
Direct Known Subtypes:
RestServiceProfile
Property Mult Description Type
service 1 The descriptor for the service that is being profiled. ServiceDescriptor
(URI reference)
Table 21.  ServiceProfile properties

3.26 ServiceProvider

This resource represents the service provider that hosts a product (Tool or Tool Consumer).
{
  "guid" : "18e7ea50-3d6d-4f6b-aff2-ed3ab577716c",
  "service_provider_name" : { ... },
  "description" : { ... },
  "support" : { ... },
  "timestamp" : "2012-04-05T09:08:16-04:00"
}
Figure 32.  ServiceProvider
Property Mult Description Type
@id 0..1 The URI that identifies this ServiceProvider instance. xs:anyURI
guid 1 A globally unique identifier for the service provider. As a best practice, this value should match an Internet domain name assigned by ICANN, but any globally unique identifier is acceptable. GUID.Type
service_provider_name 1 The name of the service provider, suitable for display to end users. LocalizedName
description 0..1 A description of the service provider, suitable for display to end-users. LocalizedText
support 0..1 Contact information for support from a service provider. Contact
timestamp 1 A timestamp for the ServiceProvider record. This value is useful for determining which record is most current. xs:dateTime
Table 22.  ServiceProvider properties

3.27 ToolProfile

The profile for a Tool product.
{
  "lti_version" : "LTI-2p0",
  "product_instance" : { ... },
  "base_url_choice" : [ ... ],
  "resource_handler" : [ ... ]
}
Figure 33.  ToolProfile
Property Mult Description Type
@id 0..1 The URI that identifies this ToolProfile instance. xs:anyURI
lti_version 1 The identifier for an LTI version that the version supports. A given product (Tool or Tool Consumer) may support multiple versions, but only one version is selected for use in the integration contract. xs:normalizedString
product_instance 1 An inverse attribute which references the ProductInstance within which this ProductProfile is defined. ProductInstance
base_url_choice 1..* Base URLs to use as a prefix to any incomplete URLs specified in the diocument. BaseUrlChoice
resource_handler * A definition of a resource offered by the tool provider. ResourceHandler
message * A definition of a message supported by the resource handler. MessageHandler
service_offered * The descriptor for a service offered by the product (Tool or Tool Consumer). RestService
Table 23.  ToolProfile properties

3.28 ToolProxy

This entity defines the integration contract between a ToolConsumer and a Tool. It is called a "ToolProxy" because its primary purpose is to provide the ToolConsumer with all of the information needed to embed a given Tool within the ToolConsumer system.
{
  "@context" : [ ... ],
  "@type" : "ToolProxy",
  "@id" : "http://lms.example.com/ToolProxy/869e5ce5-214c-4e85-86c6-b99e8458a592",
  "lti_version" : "LTI-2p0",
  "tool_proxy_guid" : "869e5ce5-214c-4e85-86c6-b99e8458a592",
  "tool_consumer_profile" : "http://lms.example.com/profile/b6ffa601-ce1d-4549-9ccf-145670a964d4",
  "tool_profile" : { ... },
  "custom" : { ... },
  "security_contract" : { ... }
}
Figure 34.  ToolProxy
Property Mult Description Type
@context 1..*

This value specifies one or more JSON-LD contexts, either by reference or by value. When multiple contexts are specified, they must be encapsulated within an array.

For most implementations, the value will be the single URI for the standard context associated with the application/vnd.ims.lti.v2.toolproxy+json media type. In this case, the value will be

"http://purl.imsglobal.org/ctx/lti/v2/ToolProxy"
JSON-LD Context
@type 1 A simple name identifying the object's type. The standard context [LTI, 14 IG] defines the following simple names that are applicable:
  • ToolProxy

Implementations may use a custom JSON-LD context which defines simple names for additional types that are subtypes of ToolProxy.

owl:Class
(Simple Name reference)
@id 0..1 The URI that identifies this ToolProxy instance. xs:anyURI
lti_version 1 The LTI version that governs the integration between the Tool and ToolConsumer. xs:token
tool_proxy_guid 1 The globally unique identifier for the ToolProxy (a.k.a. integration contract). GUID.Type
tool_consumer_profile 1 The profile of the Tool Consumer that is participating in the integration governed by this ToolProxy. ToolConsumerProfile
(URI reference)
tool_profile 1 The profile of the Tool that is participating in the integration governed by this ToolProxy. ToolProfile
custom 0..1 A collection of custom properties defined by the Tool Provider and stored in this ToolSettingsContainer. PropertyMap
security_contract 1 The security aspect of an integration contract between two parties. SecurityContract
enabled_capability * A capability that is enabled for messages handled by this MessageHandler. Capability
(Simple Name reference)
Table 24.  ToolProxy properties

3.29 Vendor

A person or agency that offers products to the market. The key types of products relevant to LTI are Tools (which are described by Tool Profiles) and Tool Consumers (which are described by Tool Consumer Profiles).
{
  "code" : "acme.com",
  "vendor_name" : { ... },
  "description" : { ... },
  "website" : "http://acme.example.com",
  "timestamp" : "2012-04-05T09:08:16-04:00",
  "contact" : { ... }
}
Figure 35.  Vendor
Property Mult Description Type
@id 0..1 The URI that identifies this Vendor instance. xs:anyURI
code 1 A unique identifier for the resource. Token.Type
vendor_name 1 Defines a human readable name for the Vendor. The name should be suitable for display in management screens within the Tool Provider system. LocalizedName
description 0..1 This is a human-readable description of the Vendor. LocalizedText
website 0..1 This is the URL of the vendor. xs:anyURI
timestamp 1 A timestamp for the Vendor record. This value is useful for determining which record is most current. xs:dateTime
contact 0..1 Contact information for this Vendor. Contact
Table 25.  Vendor properties

3.30 DataValue.Type

Restriction Base http://www.w3.org/2001/XMLSchema#string
maxLength 4096
Table 26.  Facets of DataValue.Type

3.31 GUID.Type

Restriction Base http://www.w3.org/2001/XMLSchema#NCName
pattern \S*
maxLength 4096
Table 27.  Facets of GUID.Type

3.32 LongName.Type

Restriction Base http://www.w3.org/2001/XMLSchema#normalizedString
maxLength 128
Table 28.  Facets of LongName.Type

3.33 Name.Type

Restriction Base http://www.w3.org/2001/XMLSchema#NCName
pattern \S*
maxLength 64
Table 29.  Facets of Name.Type

3.34 Text.Type

Restriction Base http://www.w3.org/2001/XMLSchema#string
maxLength 1024
Table 30.  Facets of Text.Type

3.35 Token.Type

Restriction Base http://www.w3.org/2001/XMLSchema#token
pattern \S*
maxLength 64
Table 31.  Facets of Token.Type

3.36 VariableName.Type

Restriction Base http://www.w3.org/2001/XMLSchema#normalizedString
pattern \S*
maxLength 128
Table 32.  Facets of VariableName.Type

4. References

[CURIE-syntax]
Mark Birbeck, Shane McCarron. CURIE Syntax 1.0. W3C Working Group Note. 16 December 2010.
[JSON-LD-syntax]
Manu Sporny, Dave Longley, Gregg Kellogg, Markus Lanthaler, Mark Birbeck. Json-LD Syntax 1.0. 12 July 2012. W3C Working Draft.
[LTI, 14 IG]
Greg McFall, Lance Neumann, Stephen Vickers. IMS GLC Learning Tools Interoperability (LTI) Implementation Guide. Version 2.0 Final Release, December 2013. URL: http://www.imsglobal.org/lti/
[RFC4627]
D. Crockford. The application/json Media Type for JavaScript Object Notation (JSON). Internet RFC 4627. July 2006.

About this Document

Title: ToolProxy JSON Binding in the application/vnd.ims.lti.v2.toolproxy+json format
Editor:Stephen Vickers (IMS Global)
Version: 2.0
Version Date: 10 September 2015
Release: Final Release
Status: IMS Final Release
Purpose: This document is made available for review and comment by the public community at large.

List of Contributors

The following list of individuals contributed to the authoring of this document:

Craig DunkD2LPadraig O'hiceadhaHMH
Viktor HaagD2LCharles SeveranceIMS Global
Brad HumphreyInstructureColin SmytheIMS Global
Greg McFallPearsonMatt StoeltingCengage
Mark McKellIMS GlobalJohn TibbettsVitalsource
Bracken MosbackerLumen LearningClaude VervoortCengage
Lance NeumannBlackboardStephen VickersIMS Global