SlideShare a Scribd company logo
1 of 52
TinCanAPI.com #TinCanAPI
Anatomy of a Tin Can
Statement
Brian J. Miller
Rustici Software
TinCanAPI.com #TinCanAPI
Brian
● Long time web developer
● Maintainer of TinCanJS, TinCanJava, TinCan_Prototypes
● Primary developer, maintainer and now curator of The Registry
● Contributor to the specification
● Up and comer on the Rustici Software Pong Ladder
TinCanAPI.com #TinCanAPI
JSON
TinCanAPI.com #TinCanAPI
Why JSON?
● JavaScript Object Notation
● Browser support thus library support
● Human Readable
● Minimalist (transfer size)
● Arbitrarily nestable
● “Executable”
● Popular
TinCanAPI.com #TinCanAPI
JSON Entities
● Strings are quoted
● Numbers, booleans (`true`, `false`), and `null` are primitives
○ Primitives are not quoted
● { } indicates an Object
○ Objects have a key/value pair structure
○ The key is known as a “property”
○ Keys must be strings (quoted)
○ : is the separator
○ , is the delimiter
○ Values are strings, primitives, arrays and objects
● [ ] indicates an Array
○ Contains a list of values: strings, literals, objects and arrays
○ , is the delimiter
● Whitespace is ignored
TinCanAPI.com #TinCanAPI
Sample JSON
{
“simpleProperty”: “Some string value”,
“listProperty”: [
“first in list”,
“second in list”
],
“booleanProperty”: true,
“nullProperty”: null,
“nestedObject”: {
“somePropertyOfObject”: “I’m inside an object”
}
}
TinCanAPI.com #TinCanAPI
Sample JSON
[
{
“sample2”: “Array at top level works too”
},
{
“sample3”: “List of objects this time”
}
]
TinCanAPI.com #TinCanAPI
Identifiers
IRI, UUIDs
TinCanAPI.com #TinCanAPI
IRI vs URI vs URL
● Commonly recognizable by the non-technical
● Domain Specific Identifier
● Allows for “Ownership”
● Allows for Resolvability (and Updates)
● Multiple Object Uses
● The Registry
tag:adlnet.gov,2013:expapi:0.9:activities:6VoMrbxMPZD
http://rusticisoftware.github.com/TinCanJS
TinCanAPI.com #TinCanAPI
Gooowhat?
● Two names for basically the same thing
● Specification uses UUID (version 4)
● Good library support
72c099dc-6388-4964-b7e5-3a2a4c34e452
f58f502c-e711-4e77-aed1-7d4ea8c07f44
27c8e14c-9055-4ef3-bdb9-eb5dc60987ee
TinCanAPI.com #TinCanAPI
Language Map
TinCanAPI.com #TinCanAPI
Language Map
● Object of language code to string mappings
● Provides Internationalization (I18N)
● RFC5646 for properties
● “und”
{
“en-US”: “...”,
“en-GB”: “...”,
“es-ES”: “...”,
“es-MX”: “...”,
“de-DE”: “...”
}
TinCanAPI.com #TinCanAPI
Building Statements
{ }
TinCanAPI.com #TinCanAPI
Properties vs. Object Types
id
actor
verb
object
context
result
timestamp
stored
authority
version
attachments
Agent
Group
Verb
Activity
Activity Definition
Context
Result
Score
Statement Reference
Sub-Statement
Language Map
TinCanAPI.com #TinCanAPI
“actor”
Agent/Group
TinCanAPI.com #TinCanAPI
“actor”
● Who the statement is about
● Required property of a statement
● Value is an Agent or Group
TinCanAPI.com #TinCanAPI
Agent
● One Representation of a Person
● Ways to identify an Agent
○ Email Address (or mbox)
○ mbox SHA1
○ OpenID
○ Account
● Named
{
“mbox”: “mailto:brian.miller@tincanapi.com”,
“name”: “Brian J. Miller”
}
{
“account”: {
“homePage”: “http://twitter.com”,
“name”: “k95bm01”
},
“name”: “Brian J. Miller (on Twitter)”
}
TinCanAPI.com #TinCanAPI
Group
● Subtype of Agent
● ‘objectType’ property required
● Two kinds
○ Identified
○ Anonymous
● Has a “members” property
○ Value is an array
○ Members are Agents
{
“objectType”: “Group”,
“account”: {
“homePage”: “http://twitter.com”,
“name”: “rusticisoftware”
},
“name”: “Rustici Software (on Twitter)”,
“members”: [
{
“account”: {
“homePage”: “http://twitter.com”,
“name”: “k95bm01”
},
.
.
.
}
]
}
TinCanAPI.com #TinCanAPI
Build a Statement
{
“actor”: {
“mbox”: “mailto:brian.miller@tincanapi.com”
}
}
TinCanAPI.com #TinCanAPI
“verb”
TinCanAPI.com #TinCanAPI
“verb”
● What occurred, the action
● Required property of a statement
● Value is a Verb
● Past tense
TinCanAPI.com #TinCanAPI
Verb
● Required “id” property with URI value
● Optional but highly recommended “display” property with Language Map
value
{
“id”: “http://adlnet.gov/expapi/verbs/experienced”,
“display”: {
“en-US”: “experienced”
}
}
TinCanAPI.com #TinCanAPI
Build a Statement
{
“actor”: {
“mbox”: “mailto:brian.miller@tincanapi.com”
},
“verb”: {
“id”: “http://adlnet.gov/expapi/verbs/experienced”,
“display”: {
“en-US”: “experienced”
}
}
}
TinCanAPI.com #TinCanAPI
“object”
Activity, Agent/Group
Statement Reference, Sub-Statement
TinCanAPI.com #TinCanAPI
“object” property
● Target of the action
● Required property of a statement
● Multiple possible types of value
○ Activity
○ Agent/Group
○ Statement Reference
○ Sub-Statement
TinCanAPI.com #TinCanAPI
Activity
● “id” property is a URI
● “definition” takes an Activity Definition object
○ “type” is a URI
○ “name” and “description” are language maps
○ “moreInfo” is a URL
○ “extensions” object
○ Other properties for interactions
{
“id”: “http://tincanapi.com/webinar/anatomy-of-a-statement”,
“definition”: {
“type”: “http://adlnet.gov/expapi/activities/media”,
“name”: {
“en-US”: “Anatomy of a Tin Can Statement”
},
“description”: {
“en-US”: “Presentation about the parts of a Tin Can Statement.”
}
}
}
TinCanAPI.com #TinCanAPI
Build a Statement
{
“actor”: {
“mbox”: “mailto:brian.miller@tincanapi.com”
},
“verb”: {
“id”: “http://adlnet.gov/expapi/verbs/experienced”,
“display”: {
“en-US”: “experienced”
}
},
“object”: {
“id”: “http://tincanapi.com/webinar/anatomy-of-a-statement”,
“definition”: {
“type”: “http://adlnet.gov/expapi/activities/media”,
“name”: {
“en-US”: “Anatomy of a Tin Can Statement”
},
“description”: {
“en-US”: “Presentation about the parts of a Tin Can Statement.”
}
}
}
}
TinCanAPI.com #TinCanAPI
Build a Statement
{
“actor”: {
“mbox”: “mailto:mike.rustici@tincanapi.com”,
“name”: “Mike Rustici”
},
“verb”: {
“id”: “http://id.tincanapi.com/verb/hired”,
“display”: {
“en-US”: “hired”
}
},
“object”: {
“mbox”: “mailto:brian.miller@tincanapi.com”,
“name”: “Brian J. Miller”,
“objectType”: “Agent”
}
}
TinCanAPI.com #TinCanAPI
“context”
Context Object
TinCanAPI.com #TinCanAPI
“context” property
● Value is Context object
● All properties optional
○ contextActivities - Object with "parent', "category", "grouping", and "other"
○ registration - UUID
○ instructor - Agent/Group
○ team - Group
○ statement - Statement Reference
○ revision - String
○ platform - String
○ language - RFC5646 String, when known
○ extensions - Object
TinCanAPI.com #TinCanAPI
Build a Statement
{
“actor”: {
“mbox”: “mailto:brian.miller@tincanapi.com”
},
“verb”: {
“id”: “http://adlnet.gov/expapi/verbs/experienced”,
“display”: {
“en-US”: “experienced”
}
},
“object”: {
“id”: “http://tincanapi.com/webinar/anatomy-of-a-statement/slide37”,
“definition”: {
“name”: {“en-US”: “Slide 37”}
}
},
“context”: {
“registration”: “111b5f5d-c54d-4b9c-8eb3-0b646f207496”,
“contextActivities”: {
“parent”: {
“id”: “http://tincanapi.com/webinar/anatomy-of-a-statement”
}
}
}
}
TinCanAPI.com #TinCanAPI
“result”
Result Object
TinCanAPI.com #TinCanAPI
“result” property
● Value is Result object
● All properties optional
○ "completion" - Boolean
○ "success" - Boolean
○ "duration" - ISO8601 Duration
○ "score" - Score, object of numerical properties
■ "scaled"
■ "raw"
■ "min"
■ "max"
○ "extensions" - Object
TinCanAPI.com #TinCanAPI
Build a Statement
{
“actor”: {
“mbox”: “mailto:brian.miller@tincanapi.com”
},
“verb”: {
“id”: “http://adlnet.gov/expapi/verbs/completed”,
“display”: {“en-US”: “completed”}
},
“object”: {
“id”: “http://tincanapi.com/webinar/anatomy-of-a-statement/pop-quiz”,
“definition”: {
“name”: {“en-US”: “Pop Quiz”}
}
},
“context”: {
“contextActivities”: {
“parent”: {“id”: “http://tincanapi.com/webinar/anatomy-of-a-statement”}
}
},
“result”: {
“completion”: true,
“success”: true,
“score”: {
“raw”: 97,
“scaled”: 0.97
},
“duration”: “PT15M32S”
}
}
TinCanAPI.com #TinCanAPI
“id”
TinCanAPI.com #TinCanAPI
“id” Property
● Identifies a specific statement
● Value is a UUID
● Optional when sending statement to an LRS
● Set by LRS if not included
● Used in Statement Reference objects
● Use to query single statements
● Provides primary key for systems
72c099dc-6388-4964-b7e5-3a2a4c34e452
TinCanAPI.com #TinCanAPI
Build a Statement
{
“id”: “69552da6-14c0-4e8d-bac5-2c026488f295”,
“actor”: {
“mbox”: “mailto:brian.miller@tincanapi.com”
},
“verb”: {
“id”: “http://adlnet.gov/expapi/verbs/experienced”,
“display”: {
“en-US”: “experienced”
}
},
“object”: {
“id”: “http://tincanapi.com/webinar/anatomy-of-a-statement/slide37”,
“definition”: {
“name”: {“en-US”: “Slide 37”}
}
},
“context”: {
“registration”: “111b5f5d-c54d-4b9c-8eb3-0b646f207496”,
“contextActivities”: {
“parent”: {
“id”: “http://tincanapi.com/webinar/anatomy-of-a-statement”
}
}
}
}
TinCanAPI.com #TinCanAPI
“timestamp”
TinCanAPI.com #TinCanAPI
“timestamp” Property
● Date and time when statement is created
● Value is an ISO8601 formatted string
● Optional when sending statement to an LRS
● Set by LRS if not included
2013-09-11T14:52:46.907Z
TinCanAPI.com #TinCanAPI
Build a Statement
{
“id”: “69552da6-14c0-4e8d-bac5-2c026488f295”,
“timestamp”: “2013-09-11T22:38:16.329Z”,
“actor”: {
“mbox”: “mailto:brian.miller@tincanapi.com”
},
“verb”: {
“id”: “http://adlnet.gov/expapi/verbs/experienced”,
“display”: {
“en-US”: “experienced”
}
},
“object”: {
“id”: “http://tincanapi.com/webinar/anatomy-of-a-statement/slide37”,
“definition”: {
“name”: {“en-US”: “Slide 37”}
}
},
“context”: {
“registration”: “111b5f5d-c54d-4b9c-8eb3-0b646f207496”,
“contextActivities”: {
“parent”: {
“id”: “http://tincanapi.com/webinar/anatomy-of-a-statement”
}
}
}
}
TinCanAPI.com #TinCanAPI
Properties Set by the
Learning Record Store
“stored”, “authority”, “version”
TinCanAPI.com #TinCanAPI
LRS Set Properties
“authority”
●Indicates who asserts the statement
●Value is an Agent or Group
●Group of two members when using OAuth
“stored”
●Date and time when statement is stored in the LRS
●Value is an ISO8601 formatted string
●Not used when sending statement to an LRS
●Set by LRS even if already exists
“version”
●1.0.0+ Single Stream
TinCanAPI.com #TinCanAPI
Fetch a Statement
{
"id": "69552da6-14c0-4e8d-bac5-2c026488f295",
"actor": {
"mbox": "mailto:brian.miller@tincanapi.com",
"objectType": "Agent"
},
"verb": {
"id": "http://adlnet.gov/expapi/verbs/experienced",
"display": {"en-US": "experienced"}
},
"context": {
"registration": "111b5f5d-c54d-4b9c-8eb3-0b646f207496",
"contextActivities": {
"parent": [
{
"id": "http://tincanapi.com/webinar/anatomy-of-a-statement",
"objectType": "Activity"
}
]
}
},
"timestamp": "2013-09-12T01:37:13.128Z",
"stored": "2013-09-12T01:37:13.128Z",
"authority": {
"name": "Test Activity Provider",
"account": {
"homePage": "http://cloud.scorm.com/",
"name": "FACN92U0w1fM"
},
"objectType": "Agent"
},
"version": "1.0.0",
"object": {
"id": "http://tincanapi.com/webinar/anatomy-of-a-statement/slide37",
"definition": {
"name": {
"en-US": "Slide 37"
}
},
"objectType": "Activity"
}
}
TinCanAPI.com #TinCanAPI
“extensions”
Activity Definition, Context, Result
TinCanAPI.com #TinCanAPI
“extensions” property
● Catch all object
● For use in Activity Definition, Context, and Result
● Properties are URIs
● Values can be anything
● See The Registry
http://id.tincanapi.com/extension/tweet
TinCanAPI.com #TinCanAPI
“attachments”
TinCanAPI.com #TinCanAPI
“attachments”
● Array of objects defining a list of files
● Required properties
○ “usageType” - URI, The Registry
○ “display” - Language map
○ “contentType” - RFC2046 MIME Media Type
○ “length” - Integer (number of octets)
○ “sha2” - String hash used as identifier
● Optional properties
○ “description” - Language map
○ “fileUrl” - URL for source
TinCanAPI.com #TinCanAPI
Public LRS
Statement Viewer
TinCanAPI.com #TinCanAPI
Public LRS
http://tincanapi.com/public-lrs
Statements generated that are sent to the public endpoint provided on SCORM Cloud
Clicking a statement will show the raw JSON
TinCanAPI.com #TinCanAPI
Questions?
TinCanAPI.com #TinCanAPI
Thank You!
TinCanAPI.com #TinCanAPI
Contact Us
Questions?
Comments?
http://tincanapi.com/talk/
#TinCanAPI
@projecttincan, @k95bm01
info@tincanapi.com, support@tincanapi.com,
brian.miller@tincanapi.com
/join #tincanapi @ freenode

More Related Content

What's hot

Context-aware Recommendation: A Quick View
Context-aware Recommendation: A Quick ViewContext-aware Recommendation: A Quick View
Context-aware Recommendation: A Quick ViewYONG ZHENG
 
Recsys2016 Tutorial by Xavier and Deepak
Recsys2016 Tutorial by Xavier and DeepakRecsys2016 Tutorial by Xavier and Deepak
Recsys2016 Tutorial by Xavier and DeepakDeepak Agarwal
 
Homepage Personalization at Spotify
Homepage Personalization at SpotifyHomepage Personalization at Spotify
Homepage Personalization at SpotifyOguz Semerci
 
Recommendation system
Recommendation systemRecommendation system
Recommendation systemDing Li
 
AI applications in higher education - challenges and opportunities in ODE by ...
AI applications in higher education - challenges and opportunities in ODE by ...AI applications in higher education - challenges and opportunities in ODE by ...
AI applications in higher education - challenges and opportunities in ODE by ...EADTU
 
AI and The Future of the Workplace
AI and The Future of the WorkplaceAI and The Future of the Workplace
AI and The Future of the WorkplaceAbraham Samuel
 
AI in Education must be an opportunity for all
AI in Education must be an opportunity for allAI in Education must be an opportunity for all
AI in Education must be an opportunity for allMarco Neves
 
Introduction To Artificial Intelligence PowerPoint Presentation Slides
Introduction To Artificial Intelligence PowerPoint Presentation SlidesIntroduction To Artificial Intelligence PowerPoint Presentation Slides
Introduction To Artificial Intelligence PowerPoint Presentation SlidesSlideTeam
 
Fin bert paper review !
Fin bert paper review !Fin bert paper review !
Fin bert paper review !taeseon ryu
 
Machine Learning vs. Deep Learning
Machine Learning vs. Deep LearningMachine Learning vs. Deep Learning
Machine Learning vs. Deep LearningBelatrix Software
 
Introduction to machine learning
Introduction to machine learningIntroduction to machine learning
Introduction to machine learningGanesh Satpute
 
AI vs Machine Learning vs Deep Learning | Machine Learning Training with Pyth...
AI vs Machine Learning vs Deep Learning | Machine Learning Training with Pyth...AI vs Machine Learning vs Deep Learning | Machine Learning Training with Pyth...
AI vs Machine Learning vs Deep Learning | Machine Learning Training with Pyth...Edureka!
 
Engagement, metrics and "recommenders"
Engagement, metrics and "recommenders"Engagement, metrics and "recommenders"
Engagement, metrics and "recommenders"Mounia Lalmas-Roelleke
 

What's hot (13)

Context-aware Recommendation: A Quick View
Context-aware Recommendation: A Quick ViewContext-aware Recommendation: A Quick View
Context-aware Recommendation: A Quick View
 
Recsys2016 Tutorial by Xavier and Deepak
Recsys2016 Tutorial by Xavier and DeepakRecsys2016 Tutorial by Xavier and Deepak
Recsys2016 Tutorial by Xavier and Deepak
 
Homepage Personalization at Spotify
Homepage Personalization at SpotifyHomepage Personalization at Spotify
Homepage Personalization at Spotify
 
Recommendation system
Recommendation systemRecommendation system
Recommendation system
 
AI applications in higher education - challenges and opportunities in ODE by ...
AI applications in higher education - challenges and opportunities in ODE by ...AI applications in higher education - challenges and opportunities in ODE by ...
AI applications in higher education - challenges and opportunities in ODE by ...
 
AI and The Future of the Workplace
AI and The Future of the WorkplaceAI and The Future of the Workplace
AI and The Future of the Workplace
 
AI in Education must be an opportunity for all
AI in Education must be an opportunity for allAI in Education must be an opportunity for all
AI in Education must be an opportunity for all
 
Introduction To Artificial Intelligence PowerPoint Presentation Slides
Introduction To Artificial Intelligence PowerPoint Presentation SlidesIntroduction To Artificial Intelligence PowerPoint Presentation Slides
Introduction To Artificial Intelligence PowerPoint Presentation Slides
 
Fin bert paper review !
Fin bert paper review !Fin bert paper review !
Fin bert paper review !
 
Machine Learning vs. Deep Learning
Machine Learning vs. Deep LearningMachine Learning vs. Deep Learning
Machine Learning vs. Deep Learning
 
Introduction to machine learning
Introduction to machine learningIntroduction to machine learning
Introduction to machine learning
 
AI vs Machine Learning vs Deep Learning | Machine Learning Training with Pyth...
AI vs Machine Learning vs Deep Learning | Machine Learning Training with Pyth...AI vs Machine Learning vs Deep Learning | Machine Learning Training with Pyth...
AI vs Machine Learning vs Deep Learning | Machine Learning Training with Pyth...
 
Engagement, metrics and "recommenders"
Engagement, metrics and "recommenders"Engagement, metrics and "recommenders"
Engagement, metrics and "recommenders"
 

Viewers also liked

Rustici Tin Can Tech Talk for Google
Rustici Tin Can Tech Talk for GoogleRustici Tin Can Tech Talk for Google
Rustici Tin Can Tech Talk for GoogleRustici Software
 
Rethinking Learning Systems with Tin Can — Learning Leaders Roundtable, 4/3/1...
Rethinking Learning Systems with Tin Can — Learning Leaders Roundtable, 4/3/1...Rethinking Learning Systems with Tin Can — Learning Leaders Roundtable, 4/3/1...
Rethinking Learning Systems with Tin Can — Learning Leaders Roundtable, 4/3/1...Rustici Software
 
Tin Can API 2014 Saba @Work Summit, Orlando, FL
Tin Can API 2014 Saba @Work Summit, Orlando, FLTin Can API 2014 Saba @Work Summit, Orlando, FL
Tin Can API 2014 Saba @Work Summit, Orlando, FLRustici Software
 
Rethinking Learning Systems with the Tin Can API — Training 2014 Conference &...
Rethinking Learning Systems with the Tin Can API — Training 2014 Conference &...Rethinking Learning Systems with the Tin Can API — Training 2014 Conference &...
Rethinking Learning Systems with the Tin Can API — Training 2014 Conference &...Rustici Software
 
Rethinking Learning Systems with Tin Can — ASTD ICE, May 2014
Rethinking Learning Systems with Tin Can — ASTD ICE,  May 2014Rethinking Learning Systems with Tin Can — ASTD ICE,  May 2014
Rethinking Learning Systems with Tin Can — ASTD ICE, May 2014Rustici Software
 
How Tin Can API Can Bring Us Closer to Personalized Learning
How Tin Can API Can Bring Us Closer to Personalized LearningHow Tin Can API Can Bring Us Closer to Personalized Learning
How Tin Can API Can Bring Us Closer to Personalized LearningMegan Bowe
 
Tin Can API: The Language of Action (from D-Conf 2013) - Mike Rustici
Tin Can API: The Language of Action (from D-Conf 2013) - Mike RusticiTin Can API: The Language of Action (from D-Conf 2013) - Mike Rustici
Tin Can API: The Language of Action (from D-Conf 2013) - Mike RusticiRustici Software
 
2012 mLearning DevCon – Mike Rustici
2012 mLearning DevCon – Mike Rustici2012 mLearning DevCon – Mike Rustici
2012 mLearning DevCon – Mike RusticiRustici Software
 
2013 ASTD TechKnowledge Case Studies – Aaron Silvers
2013 ASTD TechKnowledge Case Studies – Aaron Silvers2013 ASTD TechKnowledge Case Studies – Aaron Silvers
2013 ASTD TechKnowledge Case Studies – Aaron SilversRustici Software
 
2013 Learning Technologies UK – Enabling Data Flow in Learning – Tim Martin
2013 Learning Technologies UK – Enabling Data Flow in Learning – Tim Martin2013 Learning Technologies UK – Enabling Data Flow in Learning – Tim Martin
2013 Learning Technologies UK – Enabling Data Flow in Learning – Tim MartinRustici Software
 
2011 LEEF – SCORM for Games and Simulations – Mike Rustici
2011 LEEF – SCORM for Games and Simulations – Mike Rustici2011 LEEF – SCORM for Games and Simulations – Mike Rustici
2011 LEEF – SCORM for Games and Simulations – Mike RusticiRustici Software
 
2013 Tin Can SoLAR Webinar – Megan Bowe
2013 Tin Can SoLAR Webinar – Megan Bowe2013 Tin Can SoLAR Webinar – Megan Bowe
2013 Tin Can SoLAR Webinar – Megan BoweRustici Software
 
2013 Tin Can Webinar – Andy Whitaker
2013 Tin Can Webinar – Andy Whitaker2013 Tin Can Webinar – Andy Whitaker
2013 Tin Can Webinar – Andy WhitakerRustici Software
 
2013 Middle Tennessee ASTD – Tin Can – Andy Whitaker
2013 Middle Tennessee ASTD – Tin Can – Andy Whitaker2013 Middle Tennessee ASTD – Tin Can – Andy Whitaker
2013 Middle Tennessee ASTD – Tin Can – Andy WhitakerRustici Software
 
2011 DevLearn – Beyond SCORM – Aaron Silvers
2011 DevLearn – Beyond SCORM – Aaron Silvers2011 DevLearn – Beyond SCORM – Aaron Silvers
2011 DevLearn – Beyond SCORM – Aaron SilversRustici Software
 
2/26/13 - Training industry Webinar - Mike Rustici
2/26/13 - Training industry Webinar - Mike Rustici2/26/13 - Training industry Webinar - Mike Rustici
2/26/13 - Training industry Webinar - Mike RusticiRustici Software
 
Use Cases for a Brave New World
Use Cases for a Brave New WorldUse Cases for a Brave New World
Use Cases for a Brave New WorldMegan Bowe
 
2011 Learning Age – SCORM for Games and Simulations – Mike Rustici
2011 Learning Age – SCORM for Games and Simulations – Mike Rustici2011 Learning Age – SCORM for Games and Simulations – Mike Rustici
2011 Learning Age – SCORM for Games and Simulations – Mike RusticiRustici Software
 
2012 ASTD TechKnowledge – Tim Martin
2012 ASTD TechKnowledge – Tim Martin2012 ASTD TechKnowledge – Tim Martin
2012 ASTD TechKnowledge – Tim MartinRustici Software
 
2012 iFest – Project Tin Can – Mike Rustici, Ben Clark
2012 iFest – Project Tin Can – Mike Rustici, Ben Clark2012 iFest – Project Tin Can – Mike Rustici, Ben Clark
2012 iFest – Project Tin Can – Mike Rustici, Ben ClarkRustici Software
 

Viewers also liked (20)

Rustici Tin Can Tech Talk for Google
Rustici Tin Can Tech Talk for GoogleRustici Tin Can Tech Talk for Google
Rustici Tin Can Tech Talk for Google
 
Rethinking Learning Systems with Tin Can — Learning Leaders Roundtable, 4/3/1...
Rethinking Learning Systems with Tin Can — Learning Leaders Roundtable, 4/3/1...Rethinking Learning Systems with Tin Can — Learning Leaders Roundtable, 4/3/1...
Rethinking Learning Systems with Tin Can — Learning Leaders Roundtable, 4/3/1...
 
Tin Can API 2014 Saba @Work Summit, Orlando, FL
Tin Can API 2014 Saba @Work Summit, Orlando, FLTin Can API 2014 Saba @Work Summit, Orlando, FL
Tin Can API 2014 Saba @Work Summit, Orlando, FL
 
Rethinking Learning Systems with the Tin Can API — Training 2014 Conference &...
Rethinking Learning Systems with the Tin Can API — Training 2014 Conference &...Rethinking Learning Systems with the Tin Can API — Training 2014 Conference &...
Rethinking Learning Systems with the Tin Can API — Training 2014 Conference &...
 
Rethinking Learning Systems with Tin Can — ASTD ICE, May 2014
Rethinking Learning Systems with Tin Can — ASTD ICE,  May 2014Rethinking Learning Systems with Tin Can — ASTD ICE,  May 2014
Rethinking Learning Systems with Tin Can — ASTD ICE, May 2014
 
How Tin Can API Can Bring Us Closer to Personalized Learning
How Tin Can API Can Bring Us Closer to Personalized LearningHow Tin Can API Can Bring Us Closer to Personalized Learning
How Tin Can API Can Bring Us Closer to Personalized Learning
 
Tin Can API: The Language of Action (from D-Conf 2013) - Mike Rustici
Tin Can API: The Language of Action (from D-Conf 2013) - Mike RusticiTin Can API: The Language of Action (from D-Conf 2013) - Mike Rustici
Tin Can API: The Language of Action (from D-Conf 2013) - Mike Rustici
 
2012 mLearning DevCon – Mike Rustici
2012 mLearning DevCon – Mike Rustici2012 mLearning DevCon – Mike Rustici
2012 mLearning DevCon – Mike Rustici
 
2013 ASTD TechKnowledge Case Studies – Aaron Silvers
2013 ASTD TechKnowledge Case Studies – Aaron Silvers2013 ASTD TechKnowledge Case Studies – Aaron Silvers
2013 ASTD TechKnowledge Case Studies – Aaron Silvers
 
2013 Learning Technologies UK – Enabling Data Flow in Learning – Tim Martin
2013 Learning Technologies UK – Enabling Data Flow in Learning – Tim Martin2013 Learning Technologies UK – Enabling Data Flow in Learning – Tim Martin
2013 Learning Technologies UK – Enabling Data Flow in Learning – Tim Martin
 
2011 LEEF – SCORM for Games and Simulations – Mike Rustici
2011 LEEF – SCORM for Games and Simulations – Mike Rustici2011 LEEF – SCORM for Games and Simulations – Mike Rustici
2011 LEEF – SCORM for Games and Simulations – Mike Rustici
 
2013 Tin Can SoLAR Webinar – Megan Bowe
2013 Tin Can SoLAR Webinar – Megan Bowe2013 Tin Can SoLAR Webinar – Megan Bowe
2013 Tin Can SoLAR Webinar – Megan Bowe
 
2013 Tin Can Webinar – Andy Whitaker
2013 Tin Can Webinar – Andy Whitaker2013 Tin Can Webinar – Andy Whitaker
2013 Tin Can Webinar – Andy Whitaker
 
2013 Middle Tennessee ASTD – Tin Can – Andy Whitaker
2013 Middle Tennessee ASTD – Tin Can – Andy Whitaker2013 Middle Tennessee ASTD – Tin Can – Andy Whitaker
2013 Middle Tennessee ASTD – Tin Can – Andy Whitaker
 
2011 DevLearn – Beyond SCORM – Aaron Silvers
2011 DevLearn – Beyond SCORM – Aaron Silvers2011 DevLearn – Beyond SCORM – Aaron Silvers
2011 DevLearn – Beyond SCORM – Aaron Silvers
 
2/26/13 - Training industry Webinar - Mike Rustici
2/26/13 - Training industry Webinar - Mike Rustici2/26/13 - Training industry Webinar - Mike Rustici
2/26/13 - Training industry Webinar - Mike Rustici
 
Use Cases for a Brave New World
Use Cases for a Brave New WorldUse Cases for a Brave New World
Use Cases for a Brave New World
 
2011 Learning Age – SCORM for Games and Simulations – Mike Rustici
2011 Learning Age – SCORM for Games and Simulations – Mike Rustici2011 Learning Age – SCORM for Games and Simulations – Mike Rustici
2011 Learning Age – SCORM for Games and Simulations – Mike Rustici
 
2012 ASTD TechKnowledge – Tim Martin
2012 ASTD TechKnowledge – Tim Martin2012 ASTD TechKnowledge – Tim Martin
2012 ASTD TechKnowledge – Tim Martin
 
2012 iFest – Project Tin Can – Mike Rustici, Ben Clark
2012 iFest – Project Tin Can – Mike Rustici, Ben Clark2012 iFest – Project Tin Can – Mike Rustici, Ben Clark
2012 iFest – Project Tin Can – Mike Rustici, Ben Clark
 

Similar to Anatomy of a Tin Can Statement

My Journey into the Terrifying World of Hypermedia
My Journey into the Terrifying World of HypermediaMy Journey into the Terrifying World of Hypermedia
My Journey into the Terrifying World of HypermediaNordic APIs
 
BreizhCamp 2013 - Pimp my backend
BreizhCamp 2013 - Pimp my backendBreizhCamp 2013 - Pimp my backend
BreizhCamp 2013 - Pimp my backendHoracio Gonzalez
 
Elasticsearch in hatena bookmark
Elasticsearch in hatena bookmarkElasticsearch in hatena bookmark
Elasticsearch in hatena bookmarkShunsuke Kozawa
 
PyData Berlin Meetup
PyData Berlin MeetupPyData Berlin Meetup
PyData Berlin MeetupSteffen Wenz
 
Working with the Web: 
Decoding JSON
Working with the Web: 
Decoding JSONWorking with the Web: 
Decoding JSON
Working with the Web: 
Decoding JSONSV.CO
 
JSON API: Não reinvente a roda
JSON API: Não reinvente a rodaJSON API: Não reinvente a roda
JSON API: Não reinvente a rodaPedro Cavalheiro
 
Babar: Knowledge Recognition, Extraction and Representation
Babar: Knowledge Recognition, Extraction and RepresentationBabar: Knowledge Recognition, Extraction and Representation
Babar: Knowledge Recognition, Extraction and RepresentationPierre de Lacaze
 
Elasticsearch intro output
Elasticsearch intro outputElasticsearch intro output
Elasticsearch intro outputTom Chen
 
CIRCUIT 2015 - 10 Things Apache Sling Can Do
CIRCUIT 2015 - 10 Things Apache Sling Can DoCIRCUIT 2015 - 10 Things Apache Sling Can Do
CIRCUIT 2015 - 10 Things Apache Sling Can DoICF CIRCUIT
 
TDC2016POA | Trilha Web - JSON API: não reinvente a roda
TDC2016POA | Trilha Web - JSON API: não reinvente a rodaTDC2016POA | Trilha Web - JSON API: não reinvente a roda
TDC2016POA | Trilha Web - JSON API: não reinvente a rodatdc-globalcode
 
Simple fuzzy name matching in elasticsearch paris meetup
Simple fuzzy name matching in elasticsearch   paris meetupSimple fuzzy name matching in elasticsearch   paris meetup
Simple fuzzy name matching in elasticsearch paris meetupBasis Technology
 
A general introduction to Spring Data / Neo4J
A general introduction to Spring Data / Neo4JA general introduction to Spring Data / Neo4J
A general introduction to Spring Data / Neo4JFlorent Biville
 
Constance et qualité du code dans une équipe - Rémi Prévost
Constance et qualité du code dans une équipe - Rémi PrévostConstance et qualité du code dans une équipe - Rémi Prévost
Constance et qualité du code dans une équipe - Rémi PrévostWeb à Québec
 
Testing swagger contracts without contract based testing
Testing swagger contracts without contract based testingTesting swagger contracts without contract based testing
Testing swagger contracts without contract based testingАлексей Стягайло
 
Labeling all the Things with the WDI Skill Labeler
Labeling all the Things with the WDI Skill Labeler Labeling all the Things with the WDI Skill Labeler
Labeling all the Things with the WDI Skill Labeler Kwame Porter Robinson
 
Quipu: Quechua Knowledge Graph [Pilot: Building virtual assistants based on Q...
Quipu: Quechua Knowledge Graph [Pilot: Building virtual assistants based on Q...Quipu: Quechua Knowledge Graph [Pilot: Building virtual assistants based on Q...
Quipu: Quechua Knowledge Graph [Pilot: Building virtual assistants based on Q...Elwin Huaman
 
Big Data Analytics course: Named Entities and Deep Learning for NLP
Big Data Analytics course: Named Entities and Deep Learning for NLPBig Data Analytics course: Named Entities and Deep Learning for NLP
Big Data Analytics course: Named Entities and Deep Learning for NLPChristian Morbidoni
 
Dev sum - Beyond REST with GraphQL in .Net
Dev sum - Beyond REST with GraphQL in .NetDev sum - Beyond REST with GraphQL in .Net
Dev sum - Beyond REST with GraphQL in .NetIrina Scurtu
 
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIsThe liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIsJorge Ferrer
 

Similar to Anatomy of a Tin Can Statement (20)

My Journey into the Terrifying World of Hypermedia
My Journey into the Terrifying World of HypermediaMy Journey into the Terrifying World of Hypermedia
My Journey into the Terrifying World of Hypermedia
 
BreizhCamp 2013 - Pimp my backend
BreizhCamp 2013 - Pimp my backendBreizhCamp 2013 - Pimp my backend
BreizhCamp 2013 - Pimp my backend
 
Elasticsearch in hatena bookmark
Elasticsearch in hatena bookmarkElasticsearch in hatena bookmark
Elasticsearch in hatena bookmark
 
PyData Berlin Meetup
PyData Berlin MeetupPyData Berlin Meetup
PyData Berlin Meetup
 
Working with the Web: 
Decoding JSON
Working with the Web: 
Decoding JSONWorking with the Web: 
Decoding JSON
Working with the Web: 
Decoding JSON
 
JSON API: Não reinvente a roda
JSON API: Não reinvente a rodaJSON API: Não reinvente a roda
JSON API: Não reinvente a roda
 
Babar: Knowledge Recognition, Extraction and Representation
Babar: Knowledge Recognition, Extraction and RepresentationBabar: Knowledge Recognition, Extraction and Representation
Babar: Knowledge Recognition, Extraction and Representation
 
Elasticsearch intro output
Elasticsearch intro outputElasticsearch intro output
Elasticsearch intro output
 
CIRCUIT 2015 - 10 Things Apache Sling Can Do
CIRCUIT 2015 - 10 Things Apache Sling Can DoCIRCUIT 2015 - 10 Things Apache Sling Can Do
CIRCUIT 2015 - 10 Things Apache Sling Can Do
 
TDC2016POA | Trilha Web - JSON API: não reinvente a roda
TDC2016POA | Trilha Web - JSON API: não reinvente a rodaTDC2016POA | Trilha Web - JSON API: não reinvente a roda
TDC2016POA | Trilha Web - JSON API: não reinvente a roda
 
Simple fuzzy name matching in elasticsearch paris meetup
Simple fuzzy name matching in elasticsearch   paris meetupSimple fuzzy name matching in elasticsearch   paris meetup
Simple fuzzy name matching in elasticsearch paris meetup
 
A general introduction to Spring Data / Neo4J
A general introduction to Spring Data / Neo4JA general introduction to Spring Data / Neo4J
A general introduction to Spring Data / Neo4J
 
Constance et qualité du code dans une équipe - Rémi Prévost
Constance et qualité du code dans une équipe - Rémi PrévostConstance et qualité du code dans une équipe - Rémi Prévost
Constance et qualité du code dans une équipe - Rémi Prévost
 
Kubernetes debug like a pro
Kubernetes debug like a proKubernetes debug like a pro
Kubernetes debug like a pro
 
Testing swagger contracts without contract based testing
Testing swagger contracts without contract based testingTesting swagger contracts without contract based testing
Testing swagger contracts without contract based testing
 
Labeling all the Things with the WDI Skill Labeler
Labeling all the Things with the WDI Skill Labeler Labeling all the Things with the WDI Skill Labeler
Labeling all the Things with the WDI Skill Labeler
 
Quipu: Quechua Knowledge Graph [Pilot: Building virtual assistants based on Q...
Quipu: Quechua Knowledge Graph [Pilot: Building virtual assistants based on Q...Quipu: Quechua Knowledge Graph [Pilot: Building virtual assistants based on Q...
Quipu: Quechua Knowledge Graph [Pilot: Building virtual assistants based on Q...
 
Big Data Analytics course: Named Entities and Deep Learning for NLP
Big Data Analytics course: Named Entities and Deep Learning for NLPBig Data Analytics course: Named Entities and Deep Learning for NLP
Big Data Analytics course: Named Entities and Deep Learning for NLP
 
Dev sum - Beyond REST with GraphQL in .Net
Dev sum - Beyond REST with GraphQL in .NetDev sum - Beyond REST with GraphQL in .Net
Dev sum - Beyond REST with GraphQL in .Net
 
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIsThe liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
 

More from Rustici Software

Which standard is best for your content?
Which standard is best for your content?Which standard is best for your content?
Which standard is best for your content?Rustici Software
 
Our IEEE LTSC voting members recap 2023 and what’s next for the standards
Our IEEE LTSC voting members recap 2023 and what’s next for the standardsOur IEEE LTSC voting members recap 2023 and what’s next for the standards
Our IEEE LTSC voting members recap 2023 and what’s next for the standardsRustici Software
 
Always have an exit plan: Questing to limit SCORM lost completions
Always have an exit plan: Questing to limit SCORM lost completionsAlways have an exit plan: Questing to limit SCORM lost completions
Always have an exit plan: Questing to limit SCORM lost completionsRustici Software
 
Egg-cellent Ways Content Controller Helps Your Organization’s Training Needs
Egg-cellent Ways  Content Controller  Helps Your Organization’s Training NeedsEgg-cellent Ways  Content Controller  Helps Your Organization’s Training Needs
Egg-cellent Ways Content Controller Helps Your Organization’s Training NeedsRustici Software
 
RIP to Manual Course Packaging: How SANS Streamlines Content Distribution
RIP to Manual  Course Packaging:  How SANS Streamlines Content DistributionRIP to Manual  Course Packaging:  How SANS Streamlines Content Distribution
RIP to Manual Course Packaging: How SANS Streamlines Content DistributionRustici Software
 
Ready to get pedantic? Picking the best verb for Statements
Ready to get pedantic?  Picking the best verb for StatementsReady to get pedantic?  Picking the best verb for Statements
Ready to get pedantic? Picking the best verb for StatementsRustici Software
 
Ask Me Anything: Using eLearning Standards when creating content
Ask Me Anything: Using eLearning Standards when creating contentAsk Me Anything: Using eLearning Standards when creating content
Ask Me Anything: Using eLearning Standards when creating contentRustici Software
 
Meeting in the Middle: A Blended Approach to Learning Tech
Meeting in the Middle: A Blended Approach to Learning TechMeeting in the Middle: A Blended Approach to Learning Tech
Meeting in the Middle: A Blended Approach to Learning TechRustici Software
 
Smelling what The Rock's cooking: Converting SCORM content to cmi5
Smelling what The Rock's cooking: Converting SCORM content to cmi5Smelling what The Rock's cooking: Converting SCORM content to cmi5
Smelling what The Rock's cooking: Converting SCORM content to cmi5Rustici Software
 
Tales from the trails: Navigating a proven path from content creation to dist...
Tales from the trails: Navigating a proven path from content creation to dist...Tales from the trails: Navigating a proven path from content creation to dist...
Tales from the trails: Navigating a proven path from content creation to dist...Rustici Software
 
Content Controller: The easiest way to share content with your customers
Content Controller: The easiest way to share content with your customersContent Controller: The easiest way to share content with your customers
Content Controller: The easiest way to share content with your customersRustici Software
 
Content Controller: The easiest way to centralize content across your learnin...
Content Controller: The easiest way to centralize content across your learnin...Content Controller: The easiest way to centralize content across your learnin...
Content Controller: The easiest way to centralize content across your learnin...Rustici Software
 
Another Learning Standard? Where cmi5 Fits with SCORM and xAPI
Another Learning Standard? Where cmi5 Fits with SCORM and xAPIAnother Learning Standard? Where cmi5 Fits with SCORM and xAPI
Another Learning Standard? Where cmi5 Fits with SCORM and xAPIRustici Software
 
By the Numbers: A Behind the Scenes Look at xAPI and cmi5 Adoption
By the Numbers: A Behind the Scenes Look at xAPI and cmi5 AdoptionBy the Numbers: A Behind the Scenes Look at xAPI and cmi5 Adoption
By the Numbers: A Behind the Scenes Look at xAPI and cmi5 AdoptionRustici Software
 
Back to the Drawing Board: Painting a Picture with xAPI
Back to the Drawing Board: Painting a Picture with xAPIBack to the Drawing Board: Painting a Picture with xAPI
Back to the Drawing Board: Painting a Picture with xAPIRustici Software
 
Back to the Drawing Board: Sketching out SCORM
Back to the Drawing Board: Sketching out SCORMBack to the Drawing Board: Sketching out SCORM
Back to the Drawing Board: Sketching out SCORMRustici Software
 
Ins and Outs of Connecting Technologies in a Modern Learning Ecosystem
Ins and Outs of Connecting Technologies in a Modern Learning EcosystemIns and Outs of Connecting Technologies in a Modern Learning Ecosystem
Ins and Outs of Connecting Technologies in a Modern Learning EcosystemRustici Software
 
Drinking the xAPI Kool Aid
Drinking the xAPI Kool AidDrinking the xAPI Kool Aid
Drinking the xAPI Kool AidRustici Software
 
Extending Your Reach: Taking Your Training Content Beyond Your LMS
Extending Your Reach: Taking Your Training Content Beyond Your LMSExtending Your Reach: Taking Your Training Content Beyond Your LMS
Extending Your Reach: Taking Your Training Content Beyond Your LMSRustici Software
 
State of xAPI Adoption: Our Numbers
State of xAPI Adoption: Our NumbersState of xAPI Adoption: Our Numbers
State of xAPI Adoption: Our NumbersRustici Software
 

More from Rustici Software (20)

Which standard is best for your content?
Which standard is best for your content?Which standard is best for your content?
Which standard is best for your content?
 
Our IEEE LTSC voting members recap 2023 and what’s next for the standards
Our IEEE LTSC voting members recap 2023 and what’s next for the standardsOur IEEE LTSC voting members recap 2023 and what’s next for the standards
Our IEEE LTSC voting members recap 2023 and what’s next for the standards
 
Always have an exit plan: Questing to limit SCORM lost completions
Always have an exit plan: Questing to limit SCORM lost completionsAlways have an exit plan: Questing to limit SCORM lost completions
Always have an exit plan: Questing to limit SCORM lost completions
 
Egg-cellent Ways Content Controller Helps Your Organization’s Training Needs
Egg-cellent Ways  Content Controller  Helps Your Organization’s Training NeedsEgg-cellent Ways  Content Controller  Helps Your Organization’s Training Needs
Egg-cellent Ways Content Controller Helps Your Organization’s Training Needs
 
RIP to Manual Course Packaging: How SANS Streamlines Content Distribution
RIP to Manual  Course Packaging:  How SANS Streamlines Content DistributionRIP to Manual  Course Packaging:  How SANS Streamlines Content Distribution
RIP to Manual Course Packaging: How SANS Streamlines Content Distribution
 
Ready to get pedantic? Picking the best verb for Statements
Ready to get pedantic?  Picking the best verb for StatementsReady to get pedantic?  Picking the best verb for Statements
Ready to get pedantic? Picking the best verb for Statements
 
Ask Me Anything: Using eLearning Standards when creating content
Ask Me Anything: Using eLearning Standards when creating contentAsk Me Anything: Using eLearning Standards when creating content
Ask Me Anything: Using eLearning Standards when creating content
 
Meeting in the Middle: A Blended Approach to Learning Tech
Meeting in the Middle: A Blended Approach to Learning TechMeeting in the Middle: A Blended Approach to Learning Tech
Meeting in the Middle: A Blended Approach to Learning Tech
 
Smelling what The Rock's cooking: Converting SCORM content to cmi5
Smelling what The Rock's cooking: Converting SCORM content to cmi5Smelling what The Rock's cooking: Converting SCORM content to cmi5
Smelling what The Rock's cooking: Converting SCORM content to cmi5
 
Tales from the trails: Navigating a proven path from content creation to dist...
Tales from the trails: Navigating a proven path from content creation to dist...Tales from the trails: Navigating a proven path from content creation to dist...
Tales from the trails: Navigating a proven path from content creation to dist...
 
Content Controller: The easiest way to share content with your customers
Content Controller: The easiest way to share content with your customersContent Controller: The easiest way to share content with your customers
Content Controller: The easiest way to share content with your customers
 
Content Controller: The easiest way to centralize content across your learnin...
Content Controller: The easiest way to centralize content across your learnin...Content Controller: The easiest way to centralize content across your learnin...
Content Controller: The easiest way to centralize content across your learnin...
 
Another Learning Standard? Where cmi5 Fits with SCORM and xAPI
Another Learning Standard? Where cmi5 Fits with SCORM and xAPIAnother Learning Standard? Where cmi5 Fits with SCORM and xAPI
Another Learning Standard? Where cmi5 Fits with SCORM and xAPI
 
By the Numbers: A Behind the Scenes Look at xAPI and cmi5 Adoption
By the Numbers: A Behind the Scenes Look at xAPI and cmi5 AdoptionBy the Numbers: A Behind the Scenes Look at xAPI and cmi5 Adoption
By the Numbers: A Behind the Scenes Look at xAPI and cmi5 Adoption
 
Back to the Drawing Board: Painting a Picture with xAPI
Back to the Drawing Board: Painting a Picture with xAPIBack to the Drawing Board: Painting a Picture with xAPI
Back to the Drawing Board: Painting a Picture with xAPI
 
Back to the Drawing Board: Sketching out SCORM
Back to the Drawing Board: Sketching out SCORMBack to the Drawing Board: Sketching out SCORM
Back to the Drawing Board: Sketching out SCORM
 
Ins and Outs of Connecting Technologies in a Modern Learning Ecosystem
Ins and Outs of Connecting Technologies in a Modern Learning EcosystemIns and Outs of Connecting Technologies in a Modern Learning Ecosystem
Ins and Outs of Connecting Technologies in a Modern Learning Ecosystem
 
Drinking the xAPI Kool Aid
Drinking the xAPI Kool AidDrinking the xAPI Kool Aid
Drinking the xAPI Kool Aid
 
Extending Your Reach: Taking Your Training Content Beyond Your LMS
Extending Your Reach: Taking Your Training Content Beyond Your LMSExtending Your Reach: Taking Your Training Content Beyond Your LMS
Extending Your Reach: Taking Your Training Content Beyond Your LMS
 
State of xAPI Adoption: Our Numbers
State of xAPI Adoption: Our NumbersState of xAPI Adoption: Our Numbers
State of xAPI Adoption: Our Numbers
 

Recently uploaded

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 

Recently uploaded (20)

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 

Anatomy of a Tin Can Statement

  • 1. TinCanAPI.com #TinCanAPI Anatomy of a Tin Can Statement Brian J. Miller Rustici Software
  • 2. TinCanAPI.com #TinCanAPI Brian ● Long time web developer ● Maintainer of TinCanJS, TinCanJava, TinCan_Prototypes ● Primary developer, maintainer and now curator of The Registry ● Contributor to the specification ● Up and comer on the Rustici Software Pong Ladder
  • 4. TinCanAPI.com #TinCanAPI Why JSON? ● JavaScript Object Notation ● Browser support thus library support ● Human Readable ● Minimalist (transfer size) ● Arbitrarily nestable ● “Executable” ● Popular
  • 5. TinCanAPI.com #TinCanAPI JSON Entities ● Strings are quoted ● Numbers, booleans (`true`, `false`), and `null` are primitives ○ Primitives are not quoted ● { } indicates an Object ○ Objects have a key/value pair structure ○ The key is known as a “property” ○ Keys must be strings (quoted) ○ : is the separator ○ , is the delimiter ○ Values are strings, primitives, arrays and objects ● [ ] indicates an Array ○ Contains a list of values: strings, literals, objects and arrays ○ , is the delimiter ● Whitespace is ignored
  • 6. TinCanAPI.com #TinCanAPI Sample JSON { “simpleProperty”: “Some string value”, “listProperty”: [ “first in list”, “second in list” ], “booleanProperty”: true, “nullProperty”: null, “nestedObject”: { “somePropertyOfObject”: “I’m inside an object” } }
  • 7. TinCanAPI.com #TinCanAPI Sample JSON [ { “sample2”: “Array at top level works too” }, { “sample3”: “List of objects this time” } ]
  • 9. TinCanAPI.com #TinCanAPI IRI vs URI vs URL ● Commonly recognizable by the non-technical ● Domain Specific Identifier ● Allows for “Ownership” ● Allows for Resolvability (and Updates) ● Multiple Object Uses ● The Registry tag:adlnet.gov,2013:expapi:0.9:activities:6VoMrbxMPZD http://rusticisoftware.github.com/TinCanJS
  • 10. TinCanAPI.com #TinCanAPI Gooowhat? ● Two names for basically the same thing ● Specification uses UUID (version 4) ● Good library support 72c099dc-6388-4964-b7e5-3a2a4c34e452 f58f502c-e711-4e77-aed1-7d4ea8c07f44 27c8e14c-9055-4ef3-bdb9-eb5dc60987ee
  • 12. TinCanAPI.com #TinCanAPI Language Map ● Object of language code to string mappings ● Provides Internationalization (I18N) ● RFC5646 for properties ● “und” { “en-US”: “...”, “en-GB”: “...”, “es-ES”: “...”, “es-MX”: “...”, “de-DE”: “...” }
  • 14. TinCanAPI.com #TinCanAPI Properties vs. Object Types id actor verb object context result timestamp stored authority version attachments Agent Group Verb Activity Activity Definition Context Result Score Statement Reference Sub-Statement Language Map
  • 16. TinCanAPI.com #TinCanAPI “actor” ● Who the statement is about ● Required property of a statement ● Value is an Agent or Group
  • 17. TinCanAPI.com #TinCanAPI Agent ● One Representation of a Person ● Ways to identify an Agent ○ Email Address (or mbox) ○ mbox SHA1 ○ OpenID ○ Account ● Named { “mbox”: “mailto:brian.miller@tincanapi.com”, “name”: “Brian J. Miller” } { “account”: { “homePage”: “http://twitter.com”, “name”: “k95bm01” }, “name”: “Brian J. Miller (on Twitter)” }
  • 18. TinCanAPI.com #TinCanAPI Group ● Subtype of Agent ● ‘objectType’ property required ● Two kinds ○ Identified ○ Anonymous ● Has a “members” property ○ Value is an array ○ Members are Agents { “objectType”: “Group”, “account”: { “homePage”: “http://twitter.com”, “name”: “rusticisoftware” }, “name”: “Rustici Software (on Twitter)”, “members”: [ { “account”: { “homePage”: “http://twitter.com”, “name”: “k95bm01” }, . . . } ] }
  • 19. TinCanAPI.com #TinCanAPI Build a Statement { “actor”: { “mbox”: “mailto:brian.miller@tincanapi.com” } }
  • 21. TinCanAPI.com #TinCanAPI “verb” ● What occurred, the action ● Required property of a statement ● Value is a Verb ● Past tense
  • 22. TinCanAPI.com #TinCanAPI Verb ● Required “id” property with URI value ● Optional but highly recommended “display” property with Language Map value { “id”: “http://adlnet.gov/expapi/verbs/experienced”, “display”: { “en-US”: “experienced” } }
  • 23. TinCanAPI.com #TinCanAPI Build a Statement { “actor”: { “mbox”: “mailto:brian.miller@tincanapi.com” }, “verb”: { “id”: “http://adlnet.gov/expapi/verbs/experienced”, “display”: { “en-US”: “experienced” } } }
  • 25. TinCanAPI.com #TinCanAPI “object” property ● Target of the action ● Required property of a statement ● Multiple possible types of value ○ Activity ○ Agent/Group ○ Statement Reference ○ Sub-Statement
  • 26. TinCanAPI.com #TinCanAPI Activity ● “id” property is a URI ● “definition” takes an Activity Definition object ○ “type” is a URI ○ “name” and “description” are language maps ○ “moreInfo” is a URL ○ “extensions” object ○ Other properties for interactions { “id”: “http://tincanapi.com/webinar/anatomy-of-a-statement”, “definition”: { “type”: “http://adlnet.gov/expapi/activities/media”, “name”: { “en-US”: “Anatomy of a Tin Can Statement” }, “description”: { “en-US”: “Presentation about the parts of a Tin Can Statement.” } } }
  • 27. TinCanAPI.com #TinCanAPI Build a Statement { “actor”: { “mbox”: “mailto:brian.miller@tincanapi.com” }, “verb”: { “id”: “http://adlnet.gov/expapi/verbs/experienced”, “display”: { “en-US”: “experienced” } }, “object”: { “id”: “http://tincanapi.com/webinar/anatomy-of-a-statement”, “definition”: { “type”: “http://adlnet.gov/expapi/activities/media”, “name”: { “en-US”: “Anatomy of a Tin Can Statement” }, “description”: { “en-US”: “Presentation about the parts of a Tin Can Statement.” } } } }
  • 28. TinCanAPI.com #TinCanAPI Build a Statement { “actor”: { “mbox”: “mailto:mike.rustici@tincanapi.com”, “name”: “Mike Rustici” }, “verb”: { “id”: “http://id.tincanapi.com/verb/hired”, “display”: { “en-US”: “hired” } }, “object”: { “mbox”: “mailto:brian.miller@tincanapi.com”, “name”: “Brian J. Miller”, “objectType”: “Agent” } }
  • 30. TinCanAPI.com #TinCanAPI “context” property ● Value is Context object ● All properties optional ○ contextActivities - Object with "parent', "category", "grouping", and "other" ○ registration - UUID ○ instructor - Agent/Group ○ team - Group ○ statement - Statement Reference ○ revision - String ○ platform - String ○ language - RFC5646 String, when known ○ extensions - Object
  • 31. TinCanAPI.com #TinCanAPI Build a Statement { “actor”: { “mbox”: “mailto:brian.miller@tincanapi.com” }, “verb”: { “id”: “http://adlnet.gov/expapi/verbs/experienced”, “display”: { “en-US”: “experienced” } }, “object”: { “id”: “http://tincanapi.com/webinar/anatomy-of-a-statement/slide37”, “definition”: { “name”: {“en-US”: “Slide 37”} } }, “context”: { “registration”: “111b5f5d-c54d-4b9c-8eb3-0b646f207496”, “contextActivities”: { “parent”: { “id”: “http://tincanapi.com/webinar/anatomy-of-a-statement” } } } }
  • 33. TinCanAPI.com #TinCanAPI “result” property ● Value is Result object ● All properties optional ○ "completion" - Boolean ○ "success" - Boolean ○ "duration" - ISO8601 Duration ○ "score" - Score, object of numerical properties ■ "scaled" ■ "raw" ■ "min" ■ "max" ○ "extensions" - Object
  • 34. TinCanAPI.com #TinCanAPI Build a Statement { “actor”: { “mbox”: “mailto:brian.miller@tincanapi.com” }, “verb”: { “id”: “http://adlnet.gov/expapi/verbs/completed”, “display”: {“en-US”: “completed”} }, “object”: { “id”: “http://tincanapi.com/webinar/anatomy-of-a-statement/pop-quiz”, “definition”: { “name”: {“en-US”: “Pop Quiz”} } }, “context”: { “contextActivities”: { “parent”: {“id”: “http://tincanapi.com/webinar/anatomy-of-a-statement”} } }, “result”: { “completion”: true, “success”: true, “score”: { “raw”: 97, “scaled”: 0.97 }, “duration”: “PT15M32S” } }
  • 36. TinCanAPI.com #TinCanAPI “id” Property ● Identifies a specific statement ● Value is a UUID ● Optional when sending statement to an LRS ● Set by LRS if not included ● Used in Statement Reference objects ● Use to query single statements ● Provides primary key for systems 72c099dc-6388-4964-b7e5-3a2a4c34e452
  • 37. TinCanAPI.com #TinCanAPI Build a Statement { “id”: “69552da6-14c0-4e8d-bac5-2c026488f295”, “actor”: { “mbox”: “mailto:brian.miller@tincanapi.com” }, “verb”: { “id”: “http://adlnet.gov/expapi/verbs/experienced”, “display”: { “en-US”: “experienced” } }, “object”: { “id”: “http://tincanapi.com/webinar/anatomy-of-a-statement/slide37”, “definition”: { “name”: {“en-US”: “Slide 37”} } }, “context”: { “registration”: “111b5f5d-c54d-4b9c-8eb3-0b646f207496”, “contextActivities”: { “parent”: { “id”: “http://tincanapi.com/webinar/anatomy-of-a-statement” } } } }
  • 39. TinCanAPI.com #TinCanAPI “timestamp” Property ● Date and time when statement is created ● Value is an ISO8601 formatted string ● Optional when sending statement to an LRS ● Set by LRS if not included 2013-09-11T14:52:46.907Z
  • 40. TinCanAPI.com #TinCanAPI Build a Statement { “id”: “69552da6-14c0-4e8d-bac5-2c026488f295”, “timestamp”: “2013-09-11T22:38:16.329Z”, “actor”: { “mbox”: “mailto:brian.miller@tincanapi.com” }, “verb”: { “id”: “http://adlnet.gov/expapi/verbs/experienced”, “display”: { “en-US”: “experienced” } }, “object”: { “id”: “http://tincanapi.com/webinar/anatomy-of-a-statement/slide37”, “definition”: { “name”: {“en-US”: “Slide 37”} } }, “context”: { “registration”: “111b5f5d-c54d-4b9c-8eb3-0b646f207496”, “contextActivities”: { “parent”: { “id”: “http://tincanapi.com/webinar/anatomy-of-a-statement” } } } }
  • 41. TinCanAPI.com #TinCanAPI Properties Set by the Learning Record Store “stored”, “authority”, “version”
  • 42. TinCanAPI.com #TinCanAPI LRS Set Properties “authority” ●Indicates who asserts the statement ●Value is an Agent or Group ●Group of two members when using OAuth “stored” ●Date and time when statement is stored in the LRS ●Value is an ISO8601 formatted string ●Not used when sending statement to an LRS ●Set by LRS even if already exists “version” ●1.0.0+ Single Stream
  • 43. TinCanAPI.com #TinCanAPI Fetch a Statement { "id": "69552da6-14c0-4e8d-bac5-2c026488f295", "actor": { "mbox": "mailto:brian.miller@tincanapi.com", "objectType": "Agent" }, "verb": { "id": "http://adlnet.gov/expapi/verbs/experienced", "display": {"en-US": "experienced"} }, "context": { "registration": "111b5f5d-c54d-4b9c-8eb3-0b646f207496", "contextActivities": { "parent": [ { "id": "http://tincanapi.com/webinar/anatomy-of-a-statement", "objectType": "Activity" } ] } }, "timestamp": "2013-09-12T01:37:13.128Z", "stored": "2013-09-12T01:37:13.128Z", "authority": { "name": "Test Activity Provider", "account": { "homePage": "http://cloud.scorm.com/", "name": "FACN92U0w1fM" }, "objectType": "Agent" }, "version": "1.0.0", "object": { "id": "http://tincanapi.com/webinar/anatomy-of-a-statement/slide37", "definition": { "name": { "en-US": "Slide 37" } }, "objectType": "Activity" } }
  • 45. TinCanAPI.com #TinCanAPI “extensions” property ● Catch all object ● For use in Activity Definition, Context, and Result ● Properties are URIs ● Values can be anything ● See The Registry http://id.tincanapi.com/extension/tweet
  • 47. TinCanAPI.com #TinCanAPI “attachments” ● Array of objects defining a list of files ● Required properties ○ “usageType” - URI, The Registry ○ “display” - Language map ○ “contentType” - RFC2046 MIME Media Type ○ “length” - Integer (number of octets) ○ “sha2” - String hash used as identifier ● Optional properties ○ “description” - Language map ○ “fileUrl” - URL for source
  • 49. TinCanAPI.com #TinCanAPI Public LRS http://tincanapi.com/public-lrs Statements generated that are sent to the public endpoint provided on SCORM Cloud Clicking a statement will show the raw JSON
  • 52. TinCanAPI.com #TinCanAPI Contact Us Questions? Comments? http://tincanapi.com/talk/ #TinCanAPI @projecttincan, @k95bm01 info@tincanapi.com, support@tincanapi.com, brian.miller@tincanapi.com /join #tincanapi @ freenode

Editor's Notes

  1. Overall objective: Enable people to go out and capture all of the facets of an experience that they ’ d like to, beyond the simple Actor-Verb-Object
  2. New to the e-learning industry, landed at the perfect moment to take up Tin Can as .95 was landing “ Maintainer ” and Primary developer as opposed to sole developer, open source software so community contributions appreciated
  3. JavaScript is the language of the browser and hence the web Important for understanding because used for things outside of the scope of statements Other APIs are dropping support for XML and converging to JSON
  4. Going to use URI instead of IRI cause I ’ ve just been doing this too long 1 character changes a URI, for instance a trailing slash Community effort established by Rustici to advance adoption of the specification Mention that other registries can and do exist
  5. GUID is the generic name for a class of unique identifiers, UUID is a specific standard for one implementation
  6. Members must be agents but they need not be identified by the same set of parameters as the identified group or each other
  7. Vast range of available options, check the registry for an ever growing list
  8. Indicate that spec says “ SHOULD ” for “ display ” , so while optional its a best practice to always include it
  9. “ there is so much confusion about this you should touch on there being one definition per activity ID, it can't be changed on a per-statement basis. (gross oversimplification, but that's what's needed here) ” -- Ben Clark
  10. At this point the statement is spec compliant and can be sent to an LRS.
  11. At this point the statement is spec compliant and can be sent to an LRS.
  12. contextActivities can take either a single or an array of one or more
  13. Key to interoperability, must be a UUID so that collisions should be prevented across systems PK enables things such as favoriting, etc. Necessary for voiding from statement reference
  14. Talk about ambiguity of time (start, middle, end of experience)
  15. Statement as received back from the SCORM Cloud LRS
  16. Sending attachment data requires sending a multipart/mixed request