id.sifa.profile.education

sifa.id

Schema Diff

+38 -4

From

CID
bafyreif7ma3pa3a...
Indexed At
2026-07-26 20:04 UTC
View this version

To

CID
bafyreid3dvmuqs7...
Indexed At
2026-09-25 22:02 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 8 non-breaking changes.

Non-Breaking Changes (8)
  • 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.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.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 }

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.eqfLevel" }
  • AddedVertex { vertex_id: "id.sifa.profile.education:body.isPrimary" }

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.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 27
            "maxGraphemes": 256,
23 28
            "maxLength": 2560,
24 -
            "type": "string"
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 42
            "description": "End date (graduation or expected graduation) in YYYY-MM or YYYY-MM-DD format. Omit if currently enrolled.",
34 43
            "type": "string"
35 44
          },
36 45
          "entityRef": {
37 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.",
38 47
            "format": "uri",
39 48
            "type": "string"
40 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 +
          },
41 60
          "fieldOfStudy": {
42 61
            "description": "Field of study or major.",
43 62
            "maxGraphemes": 256,
44 63
            "maxLength": 2560,
45 -
            "type": "string"
64 +
            "type": "string",
65 +
            "x-skos:closeMatch": [
66 +
              "schema:educationalCredentialAwarded"
67 +
            ],
68 +
            "x-skos:note": "ISCED-F is the value anchor."
46 69
          },
47 70
          "grade": {
48 71
            "description": "Grade, GPA, or classification achieved.",
49 72
            "maxGraphemes": 50,
50 73
            "maxLength": 500,
51 74
            "type": "string"
52 75
          },
53 76
          "institution": {
54 77
            "description": "Name of the educational institution.",
55 78
            "maxGraphemes": 256,
56 79
            "maxLength": 2560,
57 80
            "minLength": 1,
58 -
            "type": "string"
81 +
            "type": "string",
82 +
            "x-skos:exactMatch": [
83 +
              "schema:alumniOf"
84 +
            ]
59 85
          },
60 86
          "institutionDid": {
61 87
            "description": "DID of the institution's ATproto account, if one exists.",
62 88
            "format": "did",
63 89
            "type": "string"
64 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 +
          },
65 95
          "labels": {
66 96
            "description": "Self-label values for this education record.",
67 97
            "refs": [
68 98
              "com.atproto.label.defs#selfLabels"
69 99
            ],
70 100
            "type": "union"
71 101
          },
72 102
          "location": {
73 103
            "description": "Institution location. Sifa enforces ISO 3166-1 alpha-2 country codes at the app layer.",
74 104
            "ref": "community.lexicon.location.address",
75 105
            "type": "ref"
76 106
          },
77 107
          "startedAt": {
78 108
            "description": "Start date in YYYY-MM or YYYY-MM-DD format.",
79 109
            "type": "string"
80 110
          }
81 111
        },
82 112
        "required": [
83 113
          "institution",
84 114
          "createdAt"
85 115
        ],
86 116
        "type": "object"
87 117
      },
88 -
      "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."
89 123
    }
90 124
  },
91 125
  "description": "An education entry in the user's professional profile.",
92 126
  "id": "id.sifa.profile.education",
93 127
  "lexicon": 1
94 128
}

Compare Other Versions

Lexicon Garden

@