SlideShare a Scribd company logo
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

Python course syllabus
Python course syllabusPython course syllabus
Python course syllabus
Sugantha T
 
ShangriLa Anime APIを利用してアニメ関連のビッグデータ解析を最速で行う
ShangriLa Anime APIを利用してアニメ関連のビッグデータ解析を最速で行うShangriLa Anime APIを利用してアニメ関連のビッグデータ解析を最速で行う
ShangriLa Anime APIを利用してアニメ関連のビッグデータ解析を最速で行う
Junichi Noda
 
Introduction to the basics of Python programming (part 1)
Introduction to the basics of Python programming (part 1)Introduction to the basics of Python programming (part 1)
Introduction to the basics of Python programming (part 1)
Pedro Rodrigues
 
SIGIR2011読み会 3. Learning to Rank
SIGIR2011読み会 3. Learning to RankSIGIR2011読み会 3. Learning to Rank
SIGIR2011読み会 3. Learning to Rank
sleepy_yoshi
 
Python Tutorial | Python Tutorial for Beginners | Python Training | Edureka
Python Tutorial | Python Tutorial for Beginners | Python Training | EdurekaPython Tutorial | Python Tutorial for Beginners | Python Training | Edureka
Python Tutorial | Python Tutorial for Beginners | Python Training | Edureka
Edureka!
 
え!? Power BI の画面からデータ更新なんてできるの!?
え!? Power BI の画面からデータ更新なんてできるの!?え!? Power BI の画面からデータ更新なんてできるの!?
え!? Power BI の画面からデータ更新なんてできるの!?
Yugo Shimizu
 
Python programming
Python  programmingPython  programming
Python programming
Ashwin Kumar Ramasamy
 
Empirical Semantics
Empirical SemanticsEmpirical Semantics
Empirical Semantics
Frank van Harmelen
 
自然言語処理の発展がもたらす未来(電気通信協会調査会での講演)
自然言語処理の発展がもたらす未来(電気通信協会調査会での講演)自然言語処理の発展がもたらす未来(電気通信協会調査会での講演)
自然言語処理の発展がもたらす未来(電気通信協会調査会での講演)
Osaka University
 
汎用人工知能(AGI)と 人工超知能の安全と恩恵
汎用人工知能(AGI)と人工超知能の安全と恩恵汎用人工知能(AGI)と人工超知能の安全と恩恵
汎用人工知能(AGI)と 人工超知能の安全と恩恵
The Whole Brain Architecture Initiative
 
Python Programming Language | Python Classes | Python Tutorial | Python Train...
Python Programming Language | Python Classes | Python Tutorial | Python Train...Python Programming Language | Python Classes | Python Tutorial | Python Train...
Python Programming Language | Python Classes | Python Tutorial | Python Train...
Edureka!
 
Python
Python Python
Python
Edureka!
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트
YongEun Choi
 
Responsible AI in Industry: Practical Challenges and Lessons Learned
Responsible AI in Industry: Practical Challenges and Lessons LearnedResponsible AI in Industry: Practical Challenges and Lessons Learned
Responsible AI in Industry: Practical Challenges and Lessons Learned
Krishnaram Kenthapadi
 
How do we train AI to be Ethical and Unbiased?
How do we train AI to be Ethical and Unbiased?How do we train AI to be Ethical and Unbiased?
How do we train AI to be Ethical and Unbiased?
Mark Borg
 
MLOps 플랫폼을 만드는 과정의 고민과 해결 사례 공유(feat. Kubeflow)
MLOps 플랫폼을 만드는 과정의 고민과 해결 사례 공유(feat. Kubeflow)MLOps 플랫폼을 만드는 과정의 고민과 해결 사례 공유(feat. Kubeflow)
MLOps 플랫폼을 만드는 과정의 고민과 해결 사례 공유(feat. Kubeflow)
Jaeyeon Kim
 
Python Basics | Python Tutorial | Edureka
Python Basics | Python Tutorial | EdurekaPython Basics | Python Tutorial | Edureka
Python Basics | Python Tutorial | Edureka
Edureka!
 
Sql query patterns, optimized
Sql query patterns, optimizedSql query patterns, optimized
Sql query patterns, optimized
Karwin Software Solutions LLC
 
イノベーションに向けたR&dの再定義
イノベーションに向けたR&dの再定義イノベーションに向けたR&dの再定義
イノベーションに向けたR&dの再定義
Osaka University
 
情報の伝え方が変わる!Power BIでレポートを作ってみよう(前半戦)
情報の伝え方が変わる!Power BIでレポートを作ってみよう(前半戦)情報の伝え方が変わる!Power BIでレポートを作ってみよう(前半戦)
情報の伝え方が変わる!Power BIでレポートを作ってみよう(前半戦)
Yugo Shimizu
 

What's hot (20)

Python course syllabus
Python course syllabusPython course syllabus
Python course syllabus
 
ShangriLa Anime APIを利用してアニメ関連のビッグデータ解析を最速で行う
ShangriLa Anime APIを利用してアニメ関連のビッグデータ解析を最速で行うShangriLa Anime APIを利用してアニメ関連のビッグデータ解析を最速で行う
ShangriLa Anime APIを利用してアニメ関連のビッグデータ解析を最速で行う
 
Introduction to the basics of Python programming (part 1)
Introduction to the basics of Python programming (part 1)Introduction to the basics of Python programming (part 1)
Introduction to the basics of Python programming (part 1)
 
SIGIR2011読み会 3. Learning to Rank
SIGIR2011読み会 3. Learning to RankSIGIR2011読み会 3. Learning to Rank
SIGIR2011読み会 3. Learning to Rank
 
Python Tutorial | Python Tutorial for Beginners | Python Training | Edureka
Python Tutorial | Python Tutorial for Beginners | Python Training | EdurekaPython Tutorial | Python Tutorial for Beginners | Python Training | Edureka
Python Tutorial | Python Tutorial for Beginners | Python Training | Edureka
 
え!? Power BI の画面からデータ更新なんてできるの!?
え!? Power BI の画面からデータ更新なんてできるの!?え!? Power BI の画面からデータ更新なんてできるの!?
え!? Power BI の画面からデータ更新なんてできるの!?
 
Python programming
Python  programmingPython  programming
Python programming
 
Empirical Semantics
Empirical SemanticsEmpirical Semantics
Empirical Semantics
 
自然言語処理の発展がもたらす未来(電気通信協会調査会での講演)
自然言語処理の発展がもたらす未来(電気通信協会調査会での講演)自然言語処理の発展がもたらす未来(電気通信協会調査会での講演)
自然言語処理の発展がもたらす未来(電気通信協会調査会での講演)
 
汎用人工知能(AGI)と 人工超知能の安全と恩恵
汎用人工知能(AGI)と人工超知能の安全と恩恵汎用人工知能(AGI)と人工超知能の安全と恩恵
汎用人工知能(AGI)と 人工超知能の安全と恩恵
 
Python Programming Language | Python Classes | Python Tutorial | Python Train...
Python Programming Language | Python Classes | Python Tutorial | Python Train...Python Programming Language | Python Classes | Python Tutorial | Python Train...
Python Programming Language | Python Classes | Python Tutorial | Python Train...
 
Python
Python Python
Python
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트
 
Responsible AI in Industry: Practical Challenges and Lessons Learned
Responsible AI in Industry: Practical Challenges and Lessons LearnedResponsible AI in Industry: Practical Challenges and Lessons Learned
Responsible AI in Industry: Practical Challenges and Lessons Learned
 
How do we train AI to be Ethical and Unbiased?
How do we train AI to be Ethical and Unbiased?How do we train AI to be Ethical and Unbiased?
How do we train AI to be Ethical and Unbiased?
 
MLOps 플랫폼을 만드는 과정의 고민과 해결 사례 공유(feat. Kubeflow)
MLOps 플랫폼을 만드는 과정의 고민과 해결 사례 공유(feat. Kubeflow)MLOps 플랫폼을 만드는 과정의 고민과 해결 사례 공유(feat. Kubeflow)
MLOps 플랫폼을 만드는 과정의 고민과 해결 사례 공유(feat. Kubeflow)
 
Python Basics | Python Tutorial | Edureka
Python Basics | Python Tutorial | EdurekaPython Basics | Python Tutorial | Edureka
Python Basics | Python Tutorial | Edureka
 
Sql query patterns, optimized
Sql query patterns, optimizedSql query patterns, optimized
Sql query patterns, optimized
 
イノベーションに向けたR&dの再定義
イノベーションに向けたR&dの再定義イノベーションに向けたR&dの再定義
イノベーションに向けたR&dの再定義
 
情報の伝え方が変わる!Power BIでレポートを作ってみよう(前半戦)
情報の伝え方が変わる!Power BIでレポートを作ってみよう(前半戦)情報の伝え方が変わる!Power BIでレポートを作ってみよう(前半戦)
情報の伝え方が変わる!Power BIでレポートを作ってみよう(前半戦)
 

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 Google
Rustici 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, FL
Rustici 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 2014
Rustici 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 Learning
Megan 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 Rustici
Rustici Software
 
2012 mLearning DevCon – Mike Rustici
2012 mLearning DevCon – Mike Rustici2012 mLearning DevCon – Mike Rustici
2012 mLearning DevCon – Mike Rustici
Rustici 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 Silvers
Rustici 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 Martin
Rustici 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 Rustici
Rustici 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 Bowe
Rustici Software
 
2013 Tin Can Webinar – Andy Whitaker
2013 Tin Can Webinar – Andy Whitaker2013 Tin Can Webinar – Andy Whitaker
2013 Tin Can Webinar – Andy Whitaker
Rustici 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 Whitaker
Rustici Software
 
2011 DevLearn – Beyond SCORM – Aaron Silvers
2011 DevLearn – Beyond SCORM – Aaron Silvers2011 DevLearn – Beyond SCORM – Aaron Silvers
2011 DevLearn – Beyond SCORM – Aaron Silvers
Rustici 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 Rustici
Rustici 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 World
Megan 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 Rustici
Rustici Software
 
2012 ASTD TechKnowledge – Tim Martin
2012 ASTD TechKnowledge – Tim Martin2012 ASTD TechKnowledge – Tim Martin
2012 ASTD TechKnowledge – Tim Martin
Rustici 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 Clark
Rustici 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 Hypermedia
Nordic APIs
 
BreizhCamp 2013 - Pimp my backend
BreizhCamp 2013 - Pimp my backendBreizhCamp 2013 - Pimp my backend
BreizhCamp 2013 - Pimp my backend
Horacio Gonzalez
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
Elasticsearch in hatena bookmark
Elasticsearch in hatena bookmarkElasticsearch in hatena bookmark
Elasticsearch in hatena bookmark
Shunsuke Kozawa
 
PyData Berlin Meetup
PyData Berlin MeetupPyData Berlin Meetup
PyData Berlin Meetup
Steffen Wenz
 
Working with the Web: 
Decoding JSON
Working with the Web: 
Decoding JSONWorking with the Web: 
Decoding JSON
Working with the Web: 
Decoding JSON
SV.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 roda
Pedro Cavalheiro
 
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
 
Elasticsearch intro output
Elasticsearch intro outputElasticsearch intro output
Elasticsearch intro output
Tom 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 Do
ICF 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 roda
tdc-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 meetup
Basis 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 / Neo4J
Florent 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évost
Web à Québec
 
Kubernetes debug like a pro
Kubernetes debug like a proKubernetes debug like a pro
Kubernetes debug like a pro
Gianluca Arbezzano
 
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 NLP
Christian 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 .Net
Irina Scurtu
 

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
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
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
 

More from Rustici Software

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
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 standards
Rustici 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 completions
Rustici 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 Needs
Rustici 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 Distribution
Rustici 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 Statements
Rustici 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 content
Rustici 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 Tech
Rustici 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 cmi5
Rustici 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 customers
Rustici 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 xAPI
Rustici 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 Adoption
Rustici 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 xAPI
Rustici 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 SCORM
Rustici 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 Ecosystem
Rustici Software
 
Drinking the xAPI Kool Aid
Drinking the xAPI Kool AidDrinking the xAPI Kool Aid
Drinking the xAPI Kool Aid
Rustici 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 LMS
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

Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
Antonios Katsarakis
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
operationspcvita
 
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
Edge AI and Vision Alliance
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
Ivo Velitchkov
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
Jason Yip
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
DanBrown980551
 
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
Edge AI and Vision Alliance
 
FREE A4 Cyber Security Awareness Posters-Social Engineering part 3
FREE A4 Cyber Security Awareness  Posters-Social Engineering part 3FREE A4 Cyber Security Awareness  Posters-Social Engineering part 3
FREE A4 Cyber Security Awareness Posters-Social Engineering part 3
Data Hops
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
ScyllaDB
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
DianaGray10
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
Neo4j
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
Miro Wengner
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Neo4j
 
Public CyberSecurity Awareness Presentation 2024.pptx
Public CyberSecurity Awareness Presentation 2024.pptxPublic CyberSecurity Awareness Presentation 2024.pptx
Public CyberSecurity Awareness Presentation 2024.pptx
marufrahmanstratejm
 

Recently uploaded (20)

Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
 
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
 
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
 
FREE A4 Cyber Security Awareness Posters-Social Engineering part 3
FREE A4 Cyber Security Awareness  Posters-Social Engineering part 3FREE A4 Cyber Security Awareness  Posters-Social Engineering part 3
FREE A4 Cyber Security Awareness Posters-Social Engineering part 3
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
 
Public CyberSecurity Awareness Presentation 2024.pptx
Public CyberSecurity Awareness Presentation 2024.pptxPublic CyberSecurity Awareness Presentation 2024.pptx
Public CyberSecurity Awareness Presentation 2024.pptx
 

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