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

AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)
AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)
AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)Amazon Web Services Korea
 
Microservices Manchester: Authentication in Microservice Systems by David Borsos
Microservices Manchester: Authentication in Microservice Systems by David BorsosMicroservices Manchester: Authentication in Microservice Systems by David Borsos
Microservices Manchester: Authentication in Microservice Systems by David BorsosOpenCredo
 
API Testing Presentations.pptx
API Testing Presentations.pptxAPI Testing Presentations.pptx
API Testing Presentations.pptxManmitSalunke
 
OpenAPI Intro (1).pdf
OpenAPI Intro (1).pdfOpenAPI Intro (1).pdf
OpenAPI Intro (1).pdfPostman
 
Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2Chris Ohk
 
Api Abstraction & Api Chaining
Api Abstraction & Api ChainingApi Abstraction & Api Chaining
Api Abstraction & Api ChainingOwen Rubel
 
How to develop an API with PHP, JSON, and POSTMAN in 9 Steps.pdf
How to develop an API with PHP, JSON, and POSTMAN in 9 Steps.pdfHow to develop an API with PHP, JSON, and POSTMAN in 9 Steps.pdf
How to develop an API with PHP, JSON, and POSTMAN in 9 Steps.pdfBe Problem Solver
 
Hacking Lucene for Custom Search Results
Hacking Lucene for Custom Search ResultsHacking Lucene for Custom Search Results
Hacking Lucene for Custom Search ResultsOpenSource Connections
 
Web API authentication and authorization
Web API authentication and authorization Web API authentication and authorization
Web API authentication and authorization Chalermpon Areepong
 
Container Networking Deep Dive with Amazon ECS - CON401 - re:Invent 2017
Container Networking Deep Dive with Amazon ECS - CON401 - re:Invent 2017Container Networking Deep Dive with Amazon ECS - CON401 - re:Invent 2017
Container Networking Deep Dive with Amazon ECS - CON401 - re:Invent 2017Amazon Web Services
 
Kafka for Microservices – You absolutely need Avro Schemas! | Gerardo Gutierr...
Kafka for Microservices – You absolutely need Avro Schemas! | Gerardo Gutierr...Kafka for Microservices – You absolutely need Avro Schemas! | Gerardo Gutierr...
Kafka for Microservices – You absolutely need Avro Schemas! | Gerardo Gutierr...HostedbyConfluent
 
Architecting for the Cloud using NetflixOSS - Codemash Workshop
Architecting for the Cloud using NetflixOSS - Codemash WorkshopArchitecting for the Cloud using NetflixOSS - Codemash Workshop
Architecting for the Cloud using NetflixOSS - Codemash WorkshopSudhir Tonse
 

What's hot (20)

API for Beginners
API for BeginnersAPI for Beginners
API for Beginners
 
AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)
AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)
AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)
 
Microservices Manchester: Authentication in Microservice Systems by David Borsos
Microservices Manchester: Authentication in Microservice Systems by David BorsosMicroservices Manchester: Authentication in Microservice Systems by David Borsos
Microservices Manchester: Authentication in Microservice Systems by David Borsos
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
 
API Testing Presentations.pptx
API Testing Presentations.pptxAPI Testing Presentations.pptx
API Testing Presentations.pptx
 
OpenAPI Intro (1).pdf
OpenAPI Intro (1).pdfOpenAPI Intro (1).pdf
OpenAPI Intro (1).pdf
 
Fastapi
FastapiFastapi
Fastapi
 
On the Usage of Pythonic Idioms
On the Usage of Pythonic IdiomsOn the Usage of Pythonic Idioms
On the Usage of Pythonic Idioms
 
Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2
 
API Testing
API TestingAPI Testing
API Testing
 
Api Abstraction & Api Chaining
Api Abstraction & Api ChainingApi Abstraction & Api Chaining
Api Abstraction & Api Chaining
 
How to develop an API with PHP, JSON, and POSTMAN in 9 Steps.pdf
How to develop an API with PHP, JSON, and POSTMAN in 9 Steps.pdfHow to develop an API with PHP, JSON, and POSTMAN in 9 Steps.pdf
How to develop an API with PHP, JSON, and POSTMAN in 9 Steps.pdf
 
Api testing
Api testingApi testing
Api testing
 
Hacking Lucene for Custom Search Results
Hacking Lucene for Custom Search ResultsHacking Lucene for Custom Search Results
Hacking Lucene for Custom Search Results
 
Web API authentication and authorization
Web API authentication and authorization Web API authentication and authorization
Web API authentication and authorization
 
Container Networking Deep Dive with Amazon ECS - CON401 - re:Invent 2017
Container Networking Deep Dive with Amazon ECS - CON401 - re:Invent 2017Container Networking Deep Dive with Amazon ECS - CON401 - re:Invent 2017
Container Networking Deep Dive with Amazon ECS - CON401 - re:Invent 2017
 
Kafka for Microservices – You absolutely need Avro Schemas! | Gerardo Gutierr...
Kafka for Microservices – You absolutely need Avro Schemas! | Gerardo Gutierr...Kafka for Microservices – You absolutely need Avro Schemas! | Gerardo Gutierr...
Kafka for Microservices – You absolutely need Avro Schemas! | Gerardo Gutierr...
 
Api testing
Api testingApi testing
Api testing
 
History of Apache Pinot
History of Apache Pinot History of Apache Pinot
History of Apache Pinot
 
Architecting for the Cloud using NetflixOSS - Codemash Workshop
Architecting for the Cloud using NetflixOSS - Codemash WorkshopArchitecting for the Cloud using NetflixOSS - Codemash Workshop
Architecting for the Cloud using NetflixOSS - Codemash Workshop
 

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

Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
"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
 
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
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 

Recently uploaded (20)

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
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
"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...
 
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
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 

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