uk.gdeo.learn.event
학습 이벤트. xAPI statement를 임베드한다(제약 3번: 의미론은 표준 차용, 봉투만 자체 정의). ADR-0001: 비공개 기본이며 AppView 인덱싱 대상이 아니다.
Details · record, key tid
| Kind | record |
|---|---|
| Record key | tid |
| Authority | learn.gdeo.uk |
| Indexed |
Record
record · key tid#activity
objectxAPI object. **Activity만 지원한다**(위 objectType 설명 참조).
Properties
definition
refmaxLength: 500
objectType
string이 def는 Activity만 표현한다. xAPI가 허용하는 Agent/Group/StatementRef/SubStatement는 필드 구조가 달라(Agent는 id 대신 IFI, SubStatement는 actor/verb/object를 갖고 id를 가질 수 없다) 이 def로 담을 수 없다. **지원하지 않는다**고 명시한다 — 이전 스키마는 enum이 4종을 광고하면서 id를 required로 두어 그 statement를 전부 거부했다(2026-09-09 검토 지적). 필요해지면 union + 별도 def로 분해하고 ADR-0007에 기록한다.
enum: Activity
#activityDefinition
objectProperties
maxLength: 64
maxLength: 1000
description
unknownlanguage map — unknown
extensions
unknownIRI-keyed 열린 맵 — unknown
extensionsJson
string소수를 포함한 extensions 보존용(ADR: atproto 데이터 모델은 float 금지). extensions와 배타적.
maxLength: 20000
interactionType
stringenum: true-false | choice | fill-in | long-fill-in | matching | performance | sequencing | likert | numeric | other
moreInfo
string · uriname
unknownlanguage map — unknown
type
string · uri#agent
objectxAPI Agent/Group. **required를 두지 않는다** — xAPI 1.0.3은 objectType을 optional로 두고 IFI(mbox / mbox_sha1sum / openid / account) **정확히 하나**를 요구한다. Lexicon은 "넷 중 정확히 하나"를 표현할 수 없으므로 그 규칙은 변환기·검증기의 추가 규칙이다(2026-09-09 검토 지적: 이전 스키마는 objectType을 required로 만들어 유효한 xAPI actor를 거부하고, 식별자 없는 actor를 통과시켰다).
Properties
account
refmbox
stringmaxLength: 300
mbox_sha1sum
stringmaxLength: 64
name
stringmaxLength: 300
objectType
stringenum: Agent | Group
openid
string · uri#agentAccount
object#attachment
objectProperties
maxLength: 128
description
unknownlanguage map — unknown
extensions
unknownIRI-keyed 열린 맵 — unknown
extensionsJson
string동일. 2026-09-09 검토에서 이 경로에 필드가 없어 소수 인코딩이 불가능하다는 지적을 받아 추가.
maxLength: 20000
fileUrl
string · uriminimum: 0
maxLength: 128
#context
objectProperties
extensions
unknownextensionsJson
string소수를 포함한 extensions는 atproto 데이터 모델(float 금지)에 담을 수 없다. JSON 문자열로 보존한다 — 무손실이지만 **검증·질의 불가**다. extensions와 배타적으로 쓴다.
maxLength: 20000
instructor
reflanguage
stringmaxLength: 32
platform
stringmaxLength: 300
registration
stringmaxLength: 64
revision
stringmaxLength: 300
statement
ref#contextActivities
object#result
objectxAPI result. score는 소수이므로 **정수 스케일로 인코딩**한다(Lexicon에 float 없음). 원본 복원을 위해 스케일을 함께 기록한다.
Properties
completion
booleanduration
stringISO 8601 duration. 문자열이므로 무손실이다.
maxLength: 64
extensions
unknownextensionsJson
string소수를 포함한 extensions는 atproto 데이터 모델(float 금지)에 담을 수 없다. JSON 문자열로 보존한다 — 무손실이지만 **검증·질의 불가**다. extensions와 배타적으로 쓴다.
maxLength: 20000
response
stringmaxLength: 10000
success
boolean#score
objectxAPI score. **정수 인코딩만으로는 무손실이 아니다**(S7 실측: 1/3 → 0.333, 0.8765 → 0.877). 원본 10진 문자열을 함께 보존해 왕복을 무손실로 만들고, 정수 필드는 질의·정렬용으로 둔다.
Properties
maxScaled
integer범위는 IEEE754 안전 정수(±2^53-1). 초과는 변환기가 실패로 보고한다.
minimum: -9007199254740991maximum: 9007199254740991
maxStr
stringmaxLength: 32
minScaled
integer범위는 IEEE754 안전 정수(±2^53-1). 초과는 변환기가 실패로 보고한다.
minimum: -9007199254740991maximum: 9007199254740991
minStr
stringmaxLength: 32
rawScaleExp
integerraw/min/max에 적용한 10의 지수. 변환기는 고정값 6만 쓴다(`roundtrip.mjs` RAW_EXP). 스키마는 0~9를 허용하나 지수를 레코드마다 바꾸면 정수 필드 간 비교·정렬이 깨진다. 왕복 복원은 문자열 필드가 정본이다.
minimum: 0maximum: 9default: 0
rawScaled
integerxAPI raw × 10^rawScaleExp. 범위는 IEEE754 안전 정수(±2^53-1). 초과는 변환기가 실패로 보고한다.
minimum: -9007199254740991maximum: 9007199254740991
rawStr
stringmaxLength: 32
scaledMilli
integerxAPI scaled × 1000.
minimum: -1000maximum: 1000
scaledStr
string원본 10진 문자열. 왕복 복원의 근거다. 정수 필드보다 우선한다.
maxLength: 32
#statementRef
objectProperties
maxLength: 64
enum: StatementRef
#verb
object#xapiStatement
objectxAPI 1.0.3 statement. 필드 이름·구조를 표준 그대로 유지한다.
Properties
attachments
arraymaxLength: 32
id
stringUUID.
maxLength: 64
stored
string · datetimetimestamp
string · datetimeversion
stringmaxLength: 16