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

What's hot (20)

Guide to an API-first Strategy
Guide to an API-first StrategyGuide to an API-first Strategy
Guide to an API-first Strategy
 
Acing the amazing Elastic Certified Engineer Exam (APAC Version)
Acing the amazing Elastic Certified Engineer Exam (APAC Version)Acing the amazing Elastic Certified Engineer Exam (APAC Version)
Acing the amazing Elastic Certified Engineer Exam (APAC Version)
 
Clojure testing with Midje
Clojure testing with MidjeClojure testing with Midje
Clojure testing with Midje
 
IT Infrastructure Automation with Ansible
IT Infrastructure Automation with AnsibleIT Infrastructure Automation with Ansible
IT Infrastructure Automation with Ansible
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
How to Achieve Agile API Security
How to Achieve Agile API SecurityHow to Achieve Agile API Security
How to Achieve Agile API Security
 
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
 
apidays Paris 2022 - The next five years of the API Economy, Paolo Malinverno...
apidays Paris 2022 - The next five years of the API Economy, Paolo Malinverno...apidays Paris 2022 - The next five years of the API Economy, Paolo Malinverno...
apidays Paris 2022 - The next five years of the API Economy, Paolo Malinverno...
 
Automated Governance for the DevOps Institutions.pdf
Automated Governance for the DevOps Institutions.pdfAutomated Governance for the DevOps Institutions.pdf
Automated Governance for the DevOps Institutions.pdf
 
Mule Integration with Atlassian JIRA
Mule Integration with Atlassian JIRAMule Integration with Atlassian JIRA
Mule Integration with Atlassian JIRA
 
Apigee Edge: Intro to Microgateway
Apigee Edge: Intro to MicrogatewayApigee Edge: Intro to Microgateway
Apigee Edge: Intro to Microgateway
 
Postman & API Testing by Amber Race
Postman & API Testing by Amber RacePostman & API Testing by Amber Race
Postman & API Testing by Amber Race
 
API-first design - Basis for an consistent API-Management approach
API-first design - Basis for an consistent API-Management approachAPI-first design - Basis for an consistent API-Management approach
API-first design - Basis for an consistent API-Management approach
 
Monitoring at the Speed of DevOps
Monitoring at the Speed of DevOpsMonitoring at the Speed of DevOps
Monitoring at the Speed of DevOps
 
Implementing Exactly-once Delivery and Escaping Kafka Rebalance Storms with Y...
Implementing Exactly-once Delivery and Escaping Kafka Rebalance Storms with Y...Implementing Exactly-once Delivery and Escaping Kafka Rebalance Storms with Y...
Implementing Exactly-once Delivery and Escaping Kafka Rebalance Storms with Y...
 
The Devops Handbook
The Devops HandbookThe Devops Handbook
The Devops Handbook
 
Jenkins days workshop pipelines - Eric Long
Jenkins days workshop  pipelines - Eric LongJenkins days workshop  pipelines - Eric Long
Jenkins days workshop pipelines - Eric Long
 
Introducing OpenAPI Version 3.1
Introducing OpenAPI Version 3.1Introducing OpenAPI Version 3.1
Introducing OpenAPI Version 3.1
 
User Stories Training
User Stories TrainingUser Stories Training
User Stories Training
 
Intro to DevOps
Intro to DevOpsIntro to DevOps
Intro to DevOps
 

Viewers also liked

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
Megan Bowe
 
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
Megan Bowe
 

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

Babar: Knowledge Recognition, Extraction and Representation
Babar: Knowledge Recognition, Extraction and RepresentationBabar: Knowledge Recognition, Extraction and Representation
Babar: Knowledge Recognition, Extraction and Representation
Pierre de Lacaze
 
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
Web à Québec
 
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
Jorge 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

More from Rustici Software (20)

Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
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
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 

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