id.sifa.profile.education
Schema Diff
+52 -15
Compatibility Analysis
Backward Compatible
Backward compatible. 18 non-breaking changes.
Non-Breaking Changes (18)
- AddedVertex AddedVertex { vertex_id: "id.sifa.defs#agentRef" }
- AddedVertex AddedVertex { vertex_id: "id.sifa.profile.education:body.agentRef" }
- AddedVertex AddedVertex { vertex_id: "id.sifa.profile.education:body.entityRef" }
- AddedVertex AddedVertex { vertex_id: "id.sifa.profile.education:body.eqfLevel" }
- AddedVertex AddedVertex { vertex_id: "id.sifa.profile.education:body.isPrimary" }
- AddedEdge AddedEdge { src: "id.sifa.profile.education:body", tgt: "id.sifa.profile.education:body.agentRef", kind: "prop", name: Some("agentRef") }
- AddedEdge AddedEdge { src: "id.sifa.profile.education:body", tgt: "id.sifa.profile.education:body.entityRef", kind: "prop", name: Some("entityRef") }
- AddedEdge AddedEdge { src: "id.sifa.profile.education:body", tgt: "id.sifa.profile.education:body.eqfLevel", kind: "prop", name: Some("eqfLevel") }
- AddedEdge AddedEdge { src: "id.sifa.profile.education:body", tgt: "id.sifa.profile.education:body.isPrimary", kind: "prop", name: Some("isPrimary") }
- AddedEdge AddedEdge { src: "id.sifa.profile.education:body.agentRef", tgt: "id.sifa.defs#agentRef", kind: "ref", name: None }
- ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.education:body.endedAt", sort: "format" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.education:body.degree", sort: "maxGraphemes", old_value: "100", new_value: "256" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.education:body.degree", sort: "maxLength", old_value: "1000", new_value: "2560" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.education:body.fieldOfStudy", sort: "maxGraphemes", old_value: "100", new_value: "256" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.education:body.fieldOfStudy", sort: "maxLength", old_value: "1000", new_value: "2560" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.education:body.institution", sort: "maxGraphemes", old_value: "100", new_value: "256" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.education:body.institution", sort: "maxLength", old_value: "1000", new_value: "2560" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.education:body.startedAt", sort: "format" }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "id.sifa.defs#agentRef" }AddedVertex { vertex_id: "id.sifa.profile.education:body.agentRef" }AddedVertex { vertex_id: "id.sifa.profile.education:body.entityRef" }AddedVertex { vertex_id: "id.sifa.profile.education:body.eqfLevel" }AddedVertex { vertex_id: "id.sifa.profile.education:body.isPrimary" }
Constraint Changes
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.education:body.fieldOfStudy", sort: "maxGraphemes", old_value: "100", new_value: "256" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.education:body.fieldOfStudy", sort: "maxLength", old_value: "1000", new_value: "2560" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.education:body.degree", sort: "maxLength", old_value: "1000", new_value: "2560" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.education:body.degree", sort: "maxGraphemes", old_value: "100", new_value: "256" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.education:body.endedAt", sort: "format" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.education:body.startedAt", sort: "format" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.education:body.institution", sort: "maxLength", old_value: "1000", new_value: "2560" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.education:body.institution", sort: "maxGraphemes", old_value: "100", new_value: "256" }
Additional Notes
- Non-breaking: AddedEdge { src: "id.sifa.profile.education:body", tgt: "id.sifa.profile.education:body.agentRef", kind: "prop", name: Some("agentRef") }
- Non-breaking: AddedEdge { src: "id.sifa.profile.education:body", tgt: "id.sifa.profile.education:body.entityRef", kind: "prop", name: Some("entityRef") }
- Non-breaking: AddedEdge { src: "id.sifa.profile.education:body", tgt: "id.sifa.profile.education:body.eqfLevel", kind: "prop", name: Some("eqfLevel") }
- Non-breaking: AddedEdge { src: "id.sifa.profile.education:body", tgt: "id.sifa.profile.education:body.isPrimary", kind: "prop", name: Some("isPrimary") }
- Non-breaking: AddedEdge { src: "id.sifa.profile.education:body.agentRef", tgt: "id.sifa.defs#agentRef", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "Record representing a single education credential.",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
9
"activities": {
10
10
"description": "Activities, societies, and extracurriculars.",
11
11
"maxGraphemes": 1000,
12
12
"maxLength": 10000,
13
13
"type": "string"
14
14
},
15
+
"agentRef": {
16
+
"description": "The educational institution, as a single nested reference mirroring the flat institution / institutionDid / entityRef fields. Additive dual-write: the flat fields remain the source of truth for existing consumers.",
17
+
"ref": "id.sifa.defs#agentRef",
18
+
"type": "ref"
19
+
},
15
20
"createdAt": {
16
21
"description": "Client-declared timestamp when this record was originally created.",
17
22
"format": "datetime",
18
23
"type": "string"
19
24
},
20
25
"degree": {
21
26
"description": "Degree name (e.g., 'Bachelor of Science', 'Master of Arts').",
22
-
"maxGraphemes": 100,
23
-
"maxLength": 1000,
24
-
"type": "string"
27
+
"maxGraphemes": 256,
28
+
"maxLength": 2560,
29
+
"type": "string",
30
+
"x-skos:closeMatch": [
31
+
"schema:hasCredential",
32
+
"bibo:degree"
33
+
]
25
34
},
26
35
"description": {
27
36
"description": "Additional description or notes about the education.",
28
37
"maxGraphemes": 5000,
29
38
"maxLength": 50000,
30
39
"type": "string"
31
40
},
32
41
"endedAt": {
33
-
"description": "End date (graduation or expected graduation). Omit if currently enrolled.",
34
-
"format": "datetime",
42
+
"description": "End date (graduation or expected graduation) in YYYY-MM or YYYY-MM-DD format. Omit if currently enrolled.",
43
+
"type": "string"
44
+
},
45
+
"entityRef": {
46
+
"description": "Portable, app-neutral identifier for the educational institution the user selected from a resolver dropdown: a Wikidata Q-ID URI (http://www.wikidata.org/entity/Q...), a ROR URI, or an LEI URI. Enables deterministic resolution to a canonical entity even before the institution claims an ATproto account. Absent for free-text entries.",
47
+
"format": "uri",
35
48
"type": "string"
36
49
},
50
+
"eqfLevel": {
51
+
"description": "Level of the qualification on the European Qualifications Framework (EQF), 1 to 8. 6 is bachelor level, 7 is master level, 8 is doctoral level. Omit when unknown. The free-text degree stays the display name.",
52
+
"maximum": 8,
53
+
"minimum": 1,
54
+
"type": "integer",
55
+
"x-skos:closeMatch": [
56
+
"schema:educationalLevel"
57
+
],
58
+
"x-skos:note": "EQF is the value anchor."
59
+
},
37
60
"fieldOfStudy": {
38
61
"description": "Field of study or major.",
39
-
"maxGraphemes": 100,
40
-
"maxLength": 1000,
41
-
"type": "string"
62
+
"maxGraphemes": 256,
63
+
"maxLength": 2560,
64
+
"type": "string",
65
+
"x-skos:closeMatch": [
66
+
"schema:educationalCredentialAwarded"
67
+
],
68
+
"x-skos:note": "ISCED-F is the value anchor."
42
69
},
43
70
"grade": {
44
71
"description": "Grade, GPA, or classification achieved.",
45
72
"maxGraphemes": 50,
46
73
"maxLength": 500,
47
74
"type": "string"
48
75
},
49
76
"institution": {
50
77
"description": "Name of the educational institution.",
51
-
"maxGraphemes": 100,
52
-
"maxLength": 1000,
78
+
"maxGraphemes": 256,
79
+
"maxLength": 2560,
53
80
"minLength": 1,
54
-
"type": "string"
81
+
"type": "string",
82
+
"x-skos:exactMatch": [
83
+
"schema:alumniOf"
84
+
]
55
85
},
56
86
"institutionDid": {
57
87
"description": "DID of the institution's ATproto account, if one exists.",
58
88
"format": "did",
59
89
"type": "string"
60
90
},
91
+
"isPrimary": {
92
+
"description": "Whether this is the user's primary education entry, surfaced in profile Highlights. Any entry may be primary.",
93
+
"type": "boolean"
94
+
},
61
95
"labels": {
62
96
"description": "Self-label values for this education record.",
63
97
"refs": [
64
98
"com.atproto.label.defs#selfLabels"
65
99
],
66
100
"type": "union"
67
101
},
68
102
"location": {
69
-
"description": "Institution location.",
103
+
"description": "Institution location. Sifa enforces ISO 3166-1 alpha-2 country codes at the app layer.",
70
104
"ref": "community.lexicon.location.address",
71
105
"type": "ref"
72
106
},
73
107
"startedAt": {
74
-
"description": "Start date. For month-precision imports, use first day of month at midnight UTC.",
75
-
"format": "datetime",
108
+
"description": "Start date in YYYY-MM or YYYY-MM-DD format.",
76
109
"type": "string"
77
110
}
78
111
},
79
112
"required": [
80
113
"institution",
81
114
"createdAt"
82
115
],
83
116
"type": "object"
84
117
},
85
-
"type": "record"
118
+
"type": "record",
119
+
"x-skos:closeMatch": [
120
+
"schema:EducationalOccupationalCredential"
121
+
],
122
+
"x-skos:note": "One record maps to two schema.org assertions: alumniOf for the institution and hasCredential for the degree."
86
123
}
87
124
},
88
125
"description": "An education entry in the user's professional profile.",
89
126
"id": "id.sifa.profile.education",
90
127
"lexicon": 1
91
128
}