Logic-based Language for xAPI Profile Conformance Requirements #16
andyjohnson
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
The followIng is an unedited version of a discussion taking place in the Subgroup:
April 6th, 2023-
Determining a “logic” language to create conformance requirements (instead of just validation)
JSON schema allows type validation
In the xAPI Profile Specification – rules are defined as such (Profiles | Advanced Distributed Learning Initiative (adlnet.gov)
"rules": [
{
"location": "context.contextActivities.grouping[*].id",
"presence": "included"
}
]
Or
"rules": [
{
"location": "context.contextActivities.grouping[*].definition.type",
"any": ["http://adlnet.gov/expapi/activities/attempt"]
}
]
This type of logic might need ranges and partial matches
“location” refers to a code representation of a location within the Statement, starting at its root.
What is happening is that we can match that some data at a location is present or not present, depending on what we want and we can say that if data is present, it must match a literal value in a set of literals.
What we need is:
• For the use cases below – the “location” has to refer to a matching Statement Template
• (Have to use the context of a pattern) - If value of a location (A) = X, then value of location (B) must also = X (also the negative version of this)
o Real world example – if initializedStatementTemplate.context.registration = “123120” then terminatedStatementTemplate.context.registration = “123120”
• We need complex matching cases with rule execution
o Real world example (for all Statements) – if any.actor.account.homepage=”https://adlnet.gov/” and any.actor.account.name=”aj123109” and any.object.id = https://adlnet.gov/courses/12391023 then any.registration = (contextualized by a pattern)
May need an actual conformance language list of requirements
If the first Statement sets up the pattern (member of a set), the rest have to follow suit
Could it be that you have the differentiator be registration?
Could a pattern set this up generically? (I hold that the video (activity ID) is the same across all members of the pattern), these are then all instances of the given pattern
Key differentiator do other “matching” conditions “break it”?
Pattern “matches” that don’t “complete” their pattern “break it” – maybe…might have that Actor is mid-pattern
Looking for pseudo code that allows a developer to write a method or equivalent that tests a set of xAPI Statements against an xAPI Profile to answer the question “is this data set valid?”.
Look deeper into Statement Template -
May 4th -
Statement templates have requirements, but have to do with presence. Patterns can dictate the order.
There are missing things we cannot validate. Session, attempts, etc. have to tie together data.
Jason isn't seeing a lot of people making profiles. xAPI is now 10 , people are doing it, getting them to go back and adopt profiles are challenging. High % of tools are using authoring tools that don't generate quality data. How do we make it easier for them?
Organizations are usually taking content centric approach or an organizational approach to an xAPI Profile. Full adoption is not easy to do. Microprofiles could be the same.
Creating Statements and Statement Templates that drive reporting analytics and asking the questions. Not so much a project level.
Most people are not technically savvy enough to use xAPI Profiles or the Profile Server.
Make a library that always makes a proper xAPI Statement, but needs to contextualize it.
Flow - create a Statement, then the rest could be a "flight check"
It may not even have to be a "not allowed", could simply sort the data. If different actor/object/registration, then new bucket.
After say, 200 Statements, "how many buckets are there?"
Ivan weighed in with the following:
• I can't agree more with Jason regarding micro / mini profiles driven by the analytics that we want to extract. That is the driving motivation we have when we start a new project. A benefit of using a profile is that you can build a tool ecosystem around that, for example around the serious games profile we built TxMon so you can explore the gathered data and plot some metrics just for free (maybe not the more insightful but it is a good starting point).
• Regarding Martin discussion, I also have similar experience in past projects.
o We built what we called a high level xapi wrapper, that is specifically designed for the serious games profile aiming to reduce the boilerplate required to create statements (reusing agent once we know the actual user that is playing the game and the specific activity Id for the game, etc.), or for complex situations in the game like a dialog between the player and the NPC (even with different subdialogs) this greatly simplifies the developer experience of adopting xAPI. This is not only specific for SG, recently we followed the very same approach to get a group of students up to speed so they could integrate analytics using xAPI for their mixed reality (IoT+Tetris) thesis.
o Because the need of having a xAPI wrapper more closed to the actual vocabulary used in the tool (usually the SG profile, but maybe others) I began to refleact about the idea of creating a code-generating tool that uses the profile jsonld as an input and generates a more developer friendly xapi wrapper. This high level wrapper could include a nice-to-have feature during development that is the kind of validations that we were discussing during our meeting, that is, at session / registration level. However, instead of using a "preflight" check I was reflecting about the idea of using the patterns to build a state machine, so this way during the development the wrapper could raise some kind of error if the game (or any other tool) does not generate the statements in the proper order (an unexpected transition between states).
Beta Was this translation helpful? Give feedback.
All reactions