id.sifa.profile.education

sifa.id

Schema Diff

+30 -12

From

CID
bafyreiezueps3hj...
Indexed At
2026-03-27 23:46 UTC
View this version

To

CID
bafyreiez5b53edd...
Indexed At
2026-08-07 11:35 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@