id.sifa.profile.education
Schema Diff
+30 -12
Compatibility Analysis
Backward Compatible
Backward compatible. 10 non-breaking changes.
Non-Breaking Changes (10)
- AddedVertex AddedVertex { vertex_id: "id.sifa.profile.education:body.entityRef" }
- AddedEdge AddedEdge { src: "id.sifa.profile.education:body", tgt: "id.sifa.profile.education:body.entityRef", kind: "prop", name: Some("entityRef") }
- 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" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.education:body.startedAt", sort: "format" }
- 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" }
- 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" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.education:body.endedAt", sort: "format" }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "id.sifa.profile.education:body.entityRef" }
Constraint Changes
- ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.education:body.startedAt", sort: "format" }
- 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" }
- 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" }
- 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" }
Additional Notes
- Non-breaking: AddedEdge { src: "id.sifa.profile.education:body", tgt: "id.sifa.profile.education:body.entityRef", kind: "prop", name: Some("entityRef") }
1
1
{
2
2
"id": "id.sifa.profile.education",
3
3
"defs": {
4
4
"main": {
5
5
"key": "tid",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"institution",
11
11
"createdAt"
12
12
],
13
13
"properties": {
14
14
"grade": {
15
15
"type": "string",
16
16
"maxLength": 500,
17
17
"description": "Grade, GPA, or classification achieved.",
18
18
"maxGraphemes": 50
19
19
},
20
20
"degree": {
21
21
"type": "string",
22
-
"maxLength": 1000,
22
+
"maxLength": 2560,
23
23
"description": "Degree name (e.g., 'Bachelor of Science', 'Master of Arts').",
24
-
"maxGraphemes": 100
24
+
"maxGraphemes": 256,
25
+
"x-skos:closeMatch": [
26
+
"schema:hasCredential",
27
+
"bibo:degree"
28
+
]
25
29
},
26
30
"labels": {
27
31
"refs": [
28
32
"com.atproto.label.defs#selfLabels"
29
33
],
30
34
"type": "union",
31
35
"description": "Self-label values for this education record."
32
36
},
33
37
"endedAt": {
34
38
"type": "string",
35
-
"format": "datetime",
36
-
"description": "End date (graduation or expected graduation). Omit if currently enrolled."
39
+
"description": "End date (graduation or expected graduation) in YYYY-MM or YYYY-MM-DD format. Omit if currently enrolled."
37
40
},
38
41
"location": {
39
42
"ref": "community.lexicon.location.address",
40
43
"type": "ref",
41
-
"description": "Institution location."
44
+
"description": "Institution location. Sifa enforces ISO 3166-1 alpha-2 country codes at the app layer."
42
45
},
43
46
"createdAt": {
44
47
"type": "string",
45
48
"format": "datetime",
46
49
"description": "Client-declared timestamp when this record was originally created."
47
50
},
51
+
"entityRef": {
52
+
"type": "string",
53
+
"format": "uri",
54
+
"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."
55
+
},
48
56
"startedAt": {
49
57
"type": "string",
50
-
"format": "datetime",
51
-
"description": "Start date. For month-precision imports, use first day of month at midnight UTC."
58
+
"description": "Start date in YYYY-MM or YYYY-MM-DD format."
52
59
},
53
60
"activities": {
54
61
"type": "string",
55
62
"maxLength": 10000,
56
63
"description": "Activities, societies, and extracurriculars.",
57
64
"maxGraphemes": 1000
58
65
},
59
66
"description": {
60
67
"type": "string",
61
68
"maxLength": 50000,
62
69
"description": "Additional description or notes about the education.",
63
70
"maxGraphemes": 5000
64
71
},
65
72
"institution": {
66
73
"type": "string",
67
-
"maxLength": 1000,
74
+
"maxLength": 2560,
68
75
"minLength": 1,
69
76
"description": "Name of the educational institution.",
70
-
"maxGraphemes": 100
77
+
"maxGraphemes": 256,
78
+
"x-skos:exactMatch": [
79
+
"schema:alumniOf"
80
+
]
71
81
},
72
82
"fieldOfStudy": {
73
83
"type": "string",
74
-
"maxLength": 1000,
84
+
"maxLength": 2560,
75
85
"description": "Field of study or major.",
76
-
"maxGraphemes": 100
86
+
"x-skos:note": "ISCED-F is the value anchor.",
87
+
"maxGraphemes": 256,
88
+
"x-skos:closeMatch": [
89
+
"schema:educationalCredentialAwarded"
90
+
]
77
91
},
78
92
"institutionDid": {
79
93
"type": "string",
80
94
"format": "did",
81
95
"description": "DID of the institution's ATproto account, if one exists."
82
96
}
83
97
}
84
98
},
85
-
"description": "Record representing a single education credential."
99
+
"description": "Record representing a single education credential.",
100
+
"x-skos:note": "One record maps to two schema.org assertions: alumniOf for the institution and hasCredential for the degree.",
101
+
"x-skos:closeMatch": [
102
+
"schema:EducationalOccupationalCredential"
103
+
]
86
104
}
87
105
},
88
106
"$type": "com.atproto.lexicon.schema",
89
107
"lexicon": 1,
90
108
"description": "An education entry in the user's professional profile."
91
109
}