@forwardimpact/schema 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +58 -0
  3. package/bin/fit-schema.js +48 -21
  4. package/examples/behaviours/outcome_ownership.yaml +1 -1
  5. package/examples/behaviours/polymathic_knowledge.yaml +1 -1
  6. package/examples/behaviours/precise_communication.yaml +1 -1
  7. package/examples/behaviours/relentless_curiosity.yaml +1 -1
  8. package/examples/behaviours/systems_thinking.yaml +1 -1
  9. package/examples/capabilities/business.yaml +1 -1
  10. package/examples/capabilities/delivery.yaml +1 -1
  11. package/examples/capabilities/people.yaml +1 -1
  12. package/examples/capabilities/reliability.yaml +1 -1
  13. package/examples/capabilities/scale.yaml +1 -1
  14. package/examples/disciplines/data_engineering.yaml +1 -1
  15. package/examples/disciplines/engineering_management.yaml +1 -1
  16. package/examples/disciplines/software_engineering.yaml +1 -1
  17. package/examples/drivers.yaml +1 -1
  18. package/examples/framework.yaml +1 -1
  19. package/examples/grades.yaml +1 -1
  20. package/examples/questions/behaviours/outcome_ownership.yaml +1 -1
  21. package/examples/questions/behaviours/polymathic_knowledge.yaml +1 -1
  22. package/examples/questions/behaviours/precise_communication.yaml +1 -1
  23. package/examples/questions/behaviours/relentless_curiosity.yaml +1 -1
  24. package/examples/questions/behaviours/systems_thinking.yaml +1 -1
  25. package/examples/questions/skills/architecture_design.yaml +1 -1
  26. package/examples/questions/skills/cloud_platforms.yaml +1 -1
  27. package/examples/questions/skills/code_quality.yaml +1 -1
  28. package/examples/questions/skills/data_modeling.yaml +1 -1
  29. package/examples/questions/skills/devops.yaml +1 -1
  30. package/examples/questions/skills/full_stack_development.yaml +1 -1
  31. package/examples/questions/skills/sre_practices.yaml +1 -1
  32. package/examples/questions/skills/stakeholder_management.yaml +1 -1
  33. package/examples/questions/skills/team_collaboration.yaml +1 -1
  34. package/examples/questions/skills/technical_writing.yaml +1 -1
  35. package/examples/self-assessments.yaml +1 -1
  36. package/examples/stages.yaml +1 -1
  37. package/examples/tracks/platform.yaml +1 -1
  38. package/examples/tracks/sre.yaml +1 -1
  39. package/lib/schema-validation.js +1 -1
  40. package/package.json +5 -5
  41. package/schema/json/behaviour-questions.schema.json +1 -1
  42. package/schema/json/behaviour.schema.json +1 -1
  43. package/schema/json/capability.schema.json +1 -1
  44. package/schema/json/defs.schema.json +1 -1
  45. package/schema/json/discipline.schema.json +1 -1
  46. package/schema/json/drivers.schema.json +1 -1
  47. package/schema/json/framework.schema.json +1 -1
  48. package/schema/json/grades.schema.json +1 -1
  49. package/schema/json/self-assessments.schema.json +1 -1
  50. package/schema/json/skill-questions.schema.json +1 -1
  51. package/schema/json/stages.schema.json +1 -1
  52. package/schema/json/track.schema.json +1 -1
  53. package/schema/rdf/behaviour-questions.ttl +96 -0
  54. package/schema/rdf/behaviour.ttl +130 -0
  55. package/schema/rdf/capability.ttl +440 -0
  56. package/schema/rdf/defs.ttl +396 -0
  57. package/schema/rdf/discipline.ttl +336 -0
  58. package/schema/rdf/drivers.ttl +84 -0
  59. package/schema/rdf/framework.ttl +128 -0
  60. package/schema/rdf/grades.ttl +357 -0
  61. package/schema/rdf/self-assessments.ttl +147 -0
  62. package/schema/rdf/skill-questions.ttl +128 -0
  63. package/schema/rdf/stages.ttl +142 -0
  64. package/schema/rdf/track.ttl +231 -0
  65. package/schema/json/index.schema.json +0 -18
  66. package/schema/rdf/pathway.ttl +0 -2362
@@ -0,0 +1,357 @@
1
+ @prefix fit: <https://www.forwardimpact.team/schema/rdf/> .
2
+ @prefix sh: <http://www.w3.org/ns/shacl#> .
3
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
4
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
5
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
6
+
7
+ # =============================================================================
8
+ # Grades Schema
9
+ # =============================================================================
10
+ # Career level defining expectations for skill proficiency, behaviour maturity,
11
+ # and scope of impact.
12
+ # =============================================================================
13
+
14
+ # -----------------------------------------------------------------------------
15
+ # Classes
16
+ # -----------------------------------------------------------------------------
17
+
18
+ fit:Grade a rdfs:Class ;
19
+ rdfs:label "Grade"@en ;
20
+ rdfs:comment "Career level defining expectations for skill proficiency, behaviour maturity, and scope of impact"@en .
21
+
22
+ fit:BaseSkillLevels a rdfs:Class ;
23
+ rdfs:label "Base Skill Levels"@en ;
24
+ rdfs:comment "Base skill levels by skill tier for a grade"@en .
25
+
26
+ fit:GradeExpectations a rdfs:Class ;
27
+ rdfs:label "Grade Expectations"@en ;
28
+ rdfs:comment "Expectations for impact, autonomy, influence, and complexity at a grade level"@en .
29
+
30
+ fit:BreadthCriteria a rdfs:Class ;
31
+ rdfs:label "Breadth Criteria"@en ;
32
+ rdfs:comment "Minimum number of skills at each level for breadth (senior grades only)"@en .
33
+
34
+ # -----------------------------------------------------------------------------
35
+ # Properties
36
+ # -----------------------------------------------------------------------------
37
+
38
+ fit:professionalTitle a rdf:Property ;
39
+ rdfs:label "professionalTitle"@en ;
40
+ rdfs:comment "Title for professional/IC track"@en ;
41
+ rdfs:domain fit:Grade ;
42
+ rdfs:range xsd:string .
43
+
44
+ fit:managementTitle a rdf:Property ;
45
+ rdfs:label "managementTitle"@en ;
46
+ rdfs:comment "Title for management track"@en ;
47
+ rdfs:domain fit:Grade ;
48
+ rdfs:range xsd:string .
49
+
50
+ fit:typicalExperienceRange a rdf:Property ;
51
+ rdfs:label "typicalExperienceRange"@en ;
52
+ rdfs:comment "Expected years of experience range"@en ;
53
+ rdfs:domain fit:Grade ;
54
+ rdfs:range xsd:string .
55
+
56
+ fit:ordinalRank a rdf:Property ;
57
+ rdfs:label "ordinalRank"@en ;
58
+ rdfs:comment "Numeric rank for ordering grades (1 = lowest)"@en ;
59
+ rdfs:domain fit:Grade ;
60
+ rdfs:range xsd:integer .
61
+
62
+ fit:qualificationSummary a rdf:Property ;
63
+ rdfs:label "qualificationSummary"@en ;
64
+ rdfs:comment "Summary of qualifications expected at this grade"@en ;
65
+ rdfs:domain fit:Grade ;
66
+ rdfs:range xsd:string .
67
+
68
+ fit:baseSkillLevels a rdf:Property ;
69
+ rdfs:label "baseSkillLevels"@en ;
70
+ rdfs:comment "Base skill levels by skill tier for this grade"@en ;
71
+ rdfs:domain fit:Grade ;
72
+ rdfs:range fit:BaseSkillLevels .
73
+
74
+ fit:baseBehaviourMaturity a rdf:Property ;
75
+ rdfs:label "baseBehaviourMaturity"@en ;
76
+ rdfs:comment "Base behaviour maturity for this grade"@en ;
77
+ rdfs:domain fit:Grade ;
78
+ rdfs:range fit:BehaviourMaturity .
79
+
80
+ fit:breadthCriteria a rdf:Property ;
81
+ rdfs:label "breadthCriteria"@en ;
82
+ rdfs:comment "Minimum number of skills at each level for breadth"@en ;
83
+ rdfs:domain fit:Grade ;
84
+ rdfs:range fit:BreadthCriteria .
85
+
86
+ fit:expectations a rdf:Property ;
87
+ rdfs:label "expectations"@en ;
88
+ rdfs:comment "Expectations for impact, autonomy, influence, and complexity"@en ;
89
+ rdfs:domain fit:Grade ;
90
+ rdfs:range fit:GradeExpectations .
91
+
92
+ # Base Skill Level Properties
93
+ fit:primary a rdf:Property ;
94
+ rdfs:label "primary"@en ;
95
+ rdfs:comment "Level for core/primary skills"@en ;
96
+ rdfs:domain fit:BaseSkillLevels ;
97
+ rdfs:range fit:SkillLevel .
98
+
99
+ fit:secondary a rdf:Property ;
100
+ rdfs:label "secondary"@en ;
101
+ rdfs:comment "Level for supporting/secondary skills"@en ;
102
+ rdfs:domain fit:BaseSkillLevels ;
103
+ rdfs:range fit:SkillLevel .
104
+
105
+ fit:broad a rdf:Property ;
106
+ rdfs:label "broad"@en ;
107
+ rdfs:comment "Level for broad skills"@en ;
108
+ rdfs:domain fit:BaseSkillLevels ;
109
+ rdfs:range fit:SkillLevel .
110
+
111
+ # Grade Expectation Properties
112
+ fit:impactScope a rdf:Property ;
113
+ rdfs:label "impactScope"@en ;
114
+ rdfs:comment "Scope of impact expected at this grade"@en ;
115
+ rdfs:domain fit:GradeExpectations ;
116
+ rdfs:range xsd:string .
117
+
118
+ fit:autonomyExpectation a rdf:Property ;
119
+ rdfs:label "autonomyExpectation"@en ;
120
+ rdfs:comment "Level of autonomy expected"@en ;
121
+ rdfs:domain fit:GradeExpectations ;
122
+ rdfs:range xsd:string .
123
+
124
+ fit:influenceScope a rdf:Property ;
125
+ rdfs:label "influenceScope"@en ;
126
+ rdfs:comment "Scope of influence"@en ;
127
+ rdfs:domain fit:GradeExpectations ;
128
+ rdfs:range xsd:string .
129
+
130
+ fit:complexityHandled a rdf:Property ;
131
+ rdfs:label "complexityHandled"@en ;
132
+ rdfs:comment "Complexity level the grade should handle"@en ;
133
+ rdfs:domain fit:GradeExpectations ;
134
+ rdfs:range xsd:string .
135
+
136
+ # Breadth Criteria Properties
137
+ fit:awarenessCount a rdf:Property ;
138
+ rdfs:label "awarenessCount"@en ;
139
+ rdfs:domain fit:BreadthCriteria ;
140
+ rdfs:range xsd:integer .
141
+
142
+ fit:foundationalCount a rdf:Property ;
143
+ rdfs:label "foundationalCount"@en ;
144
+ rdfs:domain fit:BreadthCriteria ;
145
+ rdfs:range xsd:integer .
146
+
147
+ fit:workingCount a rdf:Property ;
148
+ rdfs:label "workingCount"@en ;
149
+ rdfs:domain fit:BreadthCriteria ;
150
+ rdfs:range xsd:integer .
151
+
152
+ fit:practitionerCount a rdf:Property ;
153
+ rdfs:label "practitionerCount"@en ;
154
+ rdfs:domain fit:BreadthCriteria ;
155
+ rdfs:range xsd:integer .
156
+
157
+ fit:expertCount a rdf:Property ;
158
+ rdfs:label "expertCount"@en ;
159
+ rdfs:domain fit:BreadthCriteria ;
160
+ rdfs:range xsd:integer .
161
+
162
+ # =============================================================================
163
+ # SHACL SHAPES
164
+ # =============================================================================
165
+
166
+ # -----------------------------------------------------------------------------
167
+ # Grade Shape
168
+ # -----------------------------------------------------------------------------
169
+
170
+ fit:GradeShape a sh:NodeShape ;
171
+ sh:targetClass fit:Grade ;
172
+ sh:property [
173
+ sh:path fit:id ;
174
+ sh:datatype xsd:string ;
175
+ sh:pattern "^[A-Z][A-Z0-9]*$" ;
176
+ sh:minCount 1 ;
177
+ sh:maxCount 1 ;
178
+ sh:name "id" ;
179
+ sh:description "Unique grade identifier (e.g., L1, L2, L3)" ;
180
+ ] ;
181
+ sh:property [
182
+ sh:path fit:professionalTitle ;
183
+ sh:datatype xsd:string ;
184
+ sh:minCount 1 ;
185
+ sh:maxCount 1 ;
186
+ sh:name "professionalTitle" ;
187
+ sh:description "Title for professional/IC track" ;
188
+ ] ;
189
+ sh:property [
190
+ sh:path fit:managementTitle ;
191
+ sh:datatype xsd:string ;
192
+ sh:minCount 1 ;
193
+ sh:maxCount 1 ;
194
+ sh:name "managementTitle" ;
195
+ sh:description "Title for management track" ;
196
+ ] ;
197
+ sh:property [
198
+ sh:path fit:typicalExperienceRange ;
199
+ sh:datatype xsd:string ;
200
+ sh:maxCount 1 ;
201
+ sh:name "typicalExperienceRange" ;
202
+ sh:description "Expected years of experience range" ;
203
+ ] ;
204
+ sh:property [
205
+ sh:path fit:ordinalRank ;
206
+ sh:datatype xsd:integer ;
207
+ sh:minInclusive 1 ;
208
+ sh:minCount 1 ;
209
+ sh:maxCount 1 ;
210
+ sh:name "ordinalRank" ;
211
+ sh:description "Numeric rank for ordering grades (1 = lowest)" ;
212
+ ] ;
213
+ sh:property [
214
+ sh:path fit:qualificationSummary ;
215
+ sh:datatype xsd:string ;
216
+ sh:maxCount 1 ;
217
+ sh:name "qualificationSummary" ;
218
+ sh:description "Summary of qualifications expected at this grade" ;
219
+ ] ;
220
+ sh:property [
221
+ sh:path fit:baseSkillLevels ;
222
+ sh:node fit:BaseSkillLevelsShape ;
223
+ sh:minCount 1 ;
224
+ sh:maxCount 1 ;
225
+ sh:name "baseSkillLevels" ;
226
+ sh:description "Base skill levels by skill tier for this grade" ;
227
+ ] ;
228
+ sh:property [
229
+ sh:path fit:baseBehaviourMaturity ;
230
+ sh:in ( fit:emerging fit:developing fit:practicing fit:role_modeling fit:exemplifying ) ;
231
+ sh:minCount 1 ;
232
+ sh:maxCount 1 ;
233
+ sh:name "baseBehaviourMaturity" ;
234
+ sh:description "Base behaviour maturity for this grade" ;
235
+ ] ;
236
+ sh:property [
237
+ sh:path fit:breadthCriteria ;
238
+ sh:node fit:BreadthCriteriaShape ;
239
+ sh:maxCount 1 ;
240
+ sh:name "breadthCriteria" ;
241
+ sh:description "Minimum number of skills at each level for breadth" ;
242
+ ] ;
243
+ sh:property [
244
+ sh:path fit:expectations ;
245
+ sh:node fit:GradeExpectationsShape ;
246
+ sh:maxCount 1 ;
247
+ sh:name "expectations" ;
248
+ sh:description "Expectations for impact, autonomy, influence, and complexity" ;
249
+ ] .
250
+
251
+ # -----------------------------------------------------------------------------
252
+ # Base Skill Levels Shape
253
+ # -----------------------------------------------------------------------------
254
+
255
+ fit:BaseSkillLevelsShape a sh:NodeShape ;
256
+ sh:targetClass fit:BaseSkillLevels ;
257
+ sh:property [
258
+ sh:path fit:primary ;
259
+ sh:in ( fit:awareness fit:foundational fit:working fit:practitioner fit:expert ) ;
260
+ sh:minCount 1 ;
261
+ sh:maxCount 1 ;
262
+ sh:name "primary" ;
263
+ sh:description "Level for core/primary skills" ;
264
+ ] ;
265
+ sh:property [
266
+ sh:path fit:secondary ;
267
+ sh:in ( fit:awareness fit:foundational fit:working fit:practitioner fit:expert ) ;
268
+ sh:minCount 1 ;
269
+ sh:maxCount 1 ;
270
+ sh:name "secondary" ;
271
+ sh:description "Level for supporting/secondary skills" ;
272
+ ] ;
273
+ sh:property [
274
+ sh:path fit:broad ;
275
+ sh:in ( fit:awareness fit:foundational fit:working fit:practitioner fit:expert ) ;
276
+ sh:minCount 1 ;
277
+ sh:maxCount 1 ;
278
+ sh:name "broad" ;
279
+ sh:description "Level for broad skills" ;
280
+ ] .
281
+
282
+ # -----------------------------------------------------------------------------
283
+ # Breadth Criteria Shape
284
+ # -----------------------------------------------------------------------------
285
+
286
+ fit:BreadthCriteriaShape a sh:NodeShape ;
287
+ sh:targetClass fit:BreadthCriteria ;
288
+ sh:property [
289
+ sh:path fit:awarenessCount ;
290
+ sh:datatype xsd:integer ;
291
+ sh:minInclusive 1 ;
292
+ sh:maxCount 1 ;
293
+ sh:name "awareness" ;
294
+ ] ;
295
+ sh:property [
296
+ sh:path fit:foundationalCount ;
297
+ sh:datatype xsd:integer ;
298
+ sh:minInclusive 1 ;
299
+ sh:maxCount 1 ;
300
+ sh:name "foundational" ;
301
+ ] ;
302
+ sh:property [
303
+ sh:path fit:workingCount ;
304
+ sh:datatype xsd:integer ;
305
+ sh:minInclusive 1 ;
306
+ sh:maxCount 1 ;
307
+ sh:name "working" ;
308
+ ] ;
309
+ sh:property [
310
+ sh:path fit:practitionerCount ;
311
+ sh:datatype xsd:integer ;
312
+ sh:minInclusive 1 ;
313
+ sh:maxCount 1 ;
314
+ sh:name "practitioner" ;
315
+ ] ;
316
+ sh:property [
317
+ sh:path fit:expertCount ;
318
+ sh:datatype xsd:integer ;
319
+ sh:minInclusive 1 ;
320
+ sh:maxCount 1 ;
321
+ sh:name "expert" ;
322
+ ] .
323
+
324
+ # -----------------------------------------------------------------------------
325
+ # Grade Expectations Shape
326
+ # -----------------------------------------------------------------------------
327
+
328
+ fit:GradeExpectationsShape a sh:NodeShape ;
329
+ sh:targetClass fit:GradeExpectations ;
330
+ sh:property [
331
+ sh:path fit:impactScope ;
332
+ sh:datatype xsd:string ;
333
+ sh:maxCount 1 ;
334
+ sh:name "impactScope" ;
335
+ sh:description "Scope of impact expected at this grade" ;
336
+ ] ;
337
+ sh:property [
338
+ sh:path fit:autonomyExpectation ;
339
+ sh:datatype xsd:string ;
340
+ sh:maxCount 1 ;
341
+ sh:name "autonomyExpectation" ;
342
+ sh:description "Level of autonomy expected" ;
343
+ ] ;
344
+ sh:property [
345
+ sh:path fit:influenceScope ;
346
+ sh:datatype xsd:string ;
347
+ sh:maxCount 1 ;
348
+ sh:name "influenceScope" ;
349
+ sh:description "Scope of influence" ;
350
+ ] ;
351
+ sh:property [
352
+ sh:path fit:complexityHandled ;
353
+ sh:datatype xsd:string ;
354
+ sh:maxCount 1 ;
355
+ sh:name "complexityHandled" ;
356
+ sh:description "Complexity level the grade should handle" ;
357
+ ] .
@@ -0,0 +1,147 @@
1
+ @prefix fit: <https://www.forwardimpact.team/schema/rdf/> .
2
+ @prefix sh: <http://www.w3.org/ns/shacl#> .
3
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
4
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
5
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
6
+
7
+ # =============================================================================
8
+ # Self Assessments Schema
9
+ # =============================================================================
10
+ # Example candidate profiles for testing candidate matching.
11
+ # =============================================================================
12
+
13
+ # -----------------------------------------------------------------------------
14
+ # Classes
15
+ # -----------------------------------------------------------------------------
16
+
17
+ fit:SelfAssessment a rdfs:Class ;
18
+ rdfs:label "Self Assessment"@en ;
19
+ rdfs:comment "Example candidate profile for testing candidate matching"@en .
20
+
21
+ fit:SkillAssessment a rdfs:Class ;
22
+ rdfs:label "Skill Assessment"@en ;
23
+ rdfs:comment "Assessment of a skill at a particular level"@en .
24
+
25
+ fit:BehaviourAssessment a rdfs:Class ;
26
+ rdfs:label "Behaviour Assessment"@en ;
27
+ rdfs:comment "Assessment of a behaviour at a particular maturity"@en .
28
+
29
+ # -----------------------------------------------------------------------------
30
+ # Properties
31
+ # -----------------------------------------------------------------------------
32
+
33
+ fit:skillLevels a rdf:Property ;
34
+ rdfs:label "skillLevels"@en ;
35
+ rdfs:comment "Skill assessments"@en ;
36
+ rdfs:domain fit:SelfAssessment ;
37
+ rdfs:range fit:SkillAssessment .
38
+
39
+ fit:behaviourMaturities a rdf:Property ;
40
+ rdfs:label "behaviourMaturities"@en ;
41
+ rdfs:comment "Behaviour assessments"@en ;
42
+ rdfs:domain fit:SelfAssessment ;
43
+ rdfs:range fit:BehaviourAssessment .
44
+
45
+ fit:assessedSkill a rdf:Property ;
46
+ rdfs:label "assessedSkill"@en ;
47
+ rdfs:comment "The skill being assessed"@en ;
48
+ rdfs:domain fit:SkillAssessment ;
49
+ rdfs:range fit:Skill .
50
+
51
+ fit:assessedLevel a rdf:Property ;
52
+ rdfs:label "assessedLevel"@en ;
53
+ rdfs:comment "The assessed level for the skill"@en ;
54
+ rdfs:domain fit:SkillAssessment ;
55
+ rdfs:range fit:SkillLevel .
56
+
57
+ fit:assessedBehaviour a rdf:Property ;
58
+ rdfs:label "assessedBehaviour"@en ;
59
+ rdfs:comment "The behaviour being assessed"@en ;
60
+ rdfs:domain fit:BehaviourAssessment ;
61
+ rdfs:range fit:Behaviour .
62
+
63
+ fit:assessedMaturity a rdf:Property ;
64
+ rdfs:label "assessedMaturity"@en ;
65
+ rdfs:comment "The assessed maturity for the behaviour"@en ;
66
+ rdfs:domain fit:BehaviourAssessment ;
67
+ rdfs:range fit:BehaviourMaturity .
68
+
69
+ # =============================================================================
70
+ # SHACL SHAPES
71
+ # =============================================================================
72
+
73
+ # -----------------------------------------------------------------------------
74
+ # Self Assessment Shape
75
+ # -----------------------------------------------------------------------------
76
+
77
+ fit:SelfAssessmentShape a sh:NodeShape ;
78
+ sh:targetClass fit:SelfAssessment ;
79
+ sh:property [
80
+ sh:path fit:id ;
81
+ sh:datatype xsd:string ;
82
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
83
+ sh:minCount 1 ;
84
+ sh:maxCount 1 ;
85
+ sh:name "id" ;
86
+ sh:description "Unique assessment identifier" ;
87
+ ] ;
88
+ sh:property [
89
+ sh:path fit:skillLevels ;
90
+ sh:node fit:SkillAssessmentShape ;
91
+ sh:name "skillLevels" ;
92
+ sh:description "Skill assessments" ;
93
+ ] ;
94
+ sh:property [
95
+ sh:path fit:behaviourMaturities ;
96
+ sh:node fit:BehaviourAssessmentShape ;
97
+ sh:name "behaviourMaturities" ;
98
+ sh:description "Behaviour assessments" ;
99
+ ] .
100
+
101
+ # -----------------------------------------------------------------------------
102
+ # Skill Assessment Shape
103
+ # -----------------------------------------------------------------------------
104
+
105
+ fit:SkillAssessmentShape a sh:NodeShape ;
106
+ sh:targetClass fit:SkillAssessment ;
107
+ sh:property [
108
+ sh:path fit:assessedSkill ;
109
+ sh:datatype xsd:string ;
110
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
111
+ sh:minCount 1 ;
112
+ sh:maxCount 1 ;
113
+ sh:name "assessedSkill" ;
114
+ sh:description "The skill being assessed (skill ID)" ;
115
+ ] ;
116
+ sh:property [
117
+ sh:path fit:assessedLevel ;
118
+ sh:in ( fit:awareness fit:foundational fit:working fit:practitioner fit:expert ) ;
119
+ sh:minCount 1 ;
120
+ sh:maxCount 1 ;
121
+ sh:name "assessedLevel" ;
122
+ sh:description "The assessed level for the skill" ;
123
+ ] .
124
+
125
+ # -----------------------------------------------------------------------------
126
+ # Behaviour Assessment Shape
127
+ # -----------------------------------------------------------------------------
128
+
129
+ fit:BehaviourAssessmentShape a sh:NodeShape ;
130
+ sh:targetClass fit:BehaviourAssessment ;
131
+ sh:property [
132
+ sh:path fit:assessedBehaviour ;
133
+ sh:datatype xsd:string ;
134
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
135
+ sh:minCount 1 ;
136
+ sh:maxCount 1 ;
137
+ sh:name "assessedBehaviour" ;
138
+ sh:description "The behaviour being assessed (behaviour ID)" ;
139
+ ] ;
140
+ sh:property [
141
+ sh:path fit:assessedMaturity ;
142
+ sh:in ( fit:emerging fit:developing fit:practicing fit:role_modeling fit:exemplifying ) ;
143
+ sh:minCount 1 ;
144
+ sh:maxCount 1 ;
145
+ sh:name "assessedMaturity" ;
146
+ sh:description "The assessed maturity for the behaviour" ;
147
+ ] .
@@ -0,0 +1,128 @@
1
+ @prefix fit: <https://www.forwardimpact.team/schema/rdf/> .
2
+ @prefix sh: <http://www.w3.org/ns/shacl#> .
3
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
4
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
5
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
6
+
7
+ # =============================================================================
8
+ # Skill Questions Schema
9
+ # =============================================================================
10
+ # Interview questions for assessing skills.
11
+ # =============================================================================
12
+
13
+ # -----------------------------------------------------------------------------
14
+ # Classes
15
+ # -----------------------------------------------------------------------------
16
+
17
+ fit:Question a rdfs:Class ;
18
+ rdfs:label "Question"@en ;
19
+ rdfs:comment "Interview question for assessing skills or behaviours"@en .
20
+
21
+ # -----------------------------------------------------------------------------
22
+ # Properties
23
+ # -----------------------------------------------------------------------------
24
+
25
+ fit:text a rdf:Property ;
26
+ rdfs:label "text"@en ;
27
+ rdfs:comment "The question text"@en ;
28
+ rdfs:domain fit:Question ;
29
+ rdfs:range xsd:string .
30
+
31
+ fit:lookingFor a rdf:Property ;
32
+ rdfs:label "lookingFor"@en ;
33
+ rdfs:comment "Bullet points of good answer indicators"@en ;
34
+ rdfs:domain fit:Question ;
35
+ rdfs:range xsd:string .
36
+
37
+ fit:expectedDurationMinutes a rdf:Property ;
38
+ rdfs:label "expectedDurationMinutes"@en ;
39
+ rdfs:comment "Expected duration in minutes"@en ;
40
+ rdfs:domain fit:Question ;
41
+ rdfs:range xsd:integer .
42
+
43
+ fit:followUps a rdf:Property ;
44
+ rdfs:label "followUps"@en ;
45
+ rdfs:comment "Probing questions for deeper exploration"@en ;
46
+ rdfs:domain fit:Question ;
47
+ rdfs:range xsd:string .
48
+
49
+ fit:forSkill a rdf:Property ;
50
+ rdfs:label "forSkill"@en ;
51
+ rdfs:comment "The skill this question assesses"@en ;
52
+ rdfs:domain fit:Question ;
53
+ rdfs:range fit:Skill .
54
+
55
+ fit:atLevel a rdf:Property ;
56
+ rdfs:label "atLevel"@en ;
57
+ rdfs:comment "The skill level this question is for"@en ;
58
+ rdfs:domain fit:Question ;
59
+ rdfs:range fit:SkillLevel .
60
+
61
+ # =============================================================================
62
+ # SHACL SHAPES
63
+ # =============================================================================
64
+
65
+ # -----------------------------------------------------------------------------
66
+ # Skill Question Shape
67
+ # -----------------------------------------------------------------------------
68
+
69
+ fit:SkillQuestionShape a sh:NodeShape ;
70
+ sh:targetClass fit:Question ;
71
+ sh:property [
72
+ sh:path fit:id ;
73
+ sh:datatype xsd:string ;
74
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
75
+ sh:minCount 1 ;
76
+ sh:maxCount 1 ;
77
+ sh:name "id" ;
78
+ sh:description "Unique question identifier" ;
79
+ ] ;
80
+ sh:property [
81
+ sh:path fit:text ;
82
+ sh:datatype xsd:string ;
83
+ sh:maxLength 150 ;
84
+ sh:minCount 1 ;
85
+ sh:maxCount 1 ;
86
+ sh:name "text" ;
87
+ sh:description "The question text (under 150 characters)" ;
88
+ ] ;
89
+ sh:property [
90
+ sh:path fit:lookingFor ;
91
+ sh:datatype xsd:string ;
92
+ sh:minCount 1 ;
93
+ sh:maxCount 4 ;
94
+ sh:name "lookingFor" ;
95
+ sh:description "2-4 bullet points of good answer indicators" ;
96
+ ] ;
97
+ sh:property [
98
+ sh:path fit:expectedDurationMinutes ;
99
+ sh:datatype xsd:integer ;
100
+ sh:minInclusive 1 ;
101
+ sh:maxCount 1 ;
102
+ sh:name "expectedDurationMinutes" ;
103
+ sh:description "Expected duration in minutes" ;
104
+ ] ;
105
+ sh:property [
106
+ sh:path fit:followUps ;
107
+ sh:datatype xsd:string ;
108
+ sh:maxCount 3 ;
109
+ sh:name "followUps" ;
110
+ sh:description "1-3 probing questions for deeper exploration" ;
111
+ ] ;
112
+ sh:property [
113
+ sh:path fit:forSkill ;
114
+ sh:datatype xsd:string ;
115
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
116
+ sh:minCount 1 ;
117
+ sh:maxCount 1 ;
118
+ sh:name "forSkill" ;
119
+ sh:description "The skill this question assesses (skill ID)" ;
120
+ ] ;
121
+ sh:property [
122
+ sh:path fit:atLevel ;
123
+ sh:in ( fit:awareness fit:foundational fit:working fit:practitioner fit:expert ) ;
124
+ sh:minCount 1 ;
125
+ sh:maxCount 1 ;
126
+ sh:name "atLevel" ;
127
+ sh:description "The skill level this question is for" ;
128
+ ] .