@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,336 @@
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
+ # Discipline Schema
9
+ # =============================================================================
10
+ # Engineering specialization that defines T-shaped skill profiles.
11
+ # =============================================================================
12
+
13
+ # -----------------------------------------------------------------------------
14
+ # Classes
15
+ # -----------------------------------------------------------------------------
16
+
17
+ fit:Discipline a rdfs:Class ;
18
+ rdfs:label "Discipline"@en ;
19
+ rdfs:comment "Engineering specialization that defines T-shaped skill profiles"@en .
20
+
21
+ fit:DisciplineHumanSection a rdfs:Class ;
22
+ rdfs:label "Discipline Human Section"@en ;
23
+ rdfs:comment "Human-specific content for a discipline"@en .
24
+
25
+ fit:DisciplineAgentSection a rdfs:Class ;
26
+ rdfs:label "Discipline Agent Section"@en ;
27
+ rdfs:comment "Agent-specific content for a discipline"@en .
28
+
29
+ fit:BehaviourModifier a rdfs:Class ;
30
+ rdfs:label "Behaviour Modifier"@en ;
31
+ rdfs:comment "Modifier applied to a behaviour by a discipline or track"@en .
32
+
33
+ # -----------------------------------------------------------------------------
34
+ # Properties
35
+ # -----------------------------------------------------------------------------
36
+
37
+ fit:specialization a rdf:Property ;
38
+ rdfs:label "specialization"@en ;
39
+ rdfs:comment "Name of the specialization (e.g., Software Engineering)"@en ;
40
+ rdfs:domain fit:Discipline ;
41
+ rdfs:range xsd:string .
42
+
43
+ fit:roleTitle a rdf:Property ;
44
+ rdfs:label "roleTitle"@en ;
45
+ rdfs:comment "Base role title (e.g., Software Engineer)"@en ;
46
+ rdfs:domain fit:Discipline ;
47
+ rdfs:range xsd:string .
48
+
49
+ fit:isProfessional a rdf:Property ;
50
+ rdfs:label "isProfessional"@en ;
51
+ rdfs:comment "If true, this is an IC/professional discipline (default true)"@en ;
52
+ rdfs:domain fit:Discipline ;
53
+ rdfs:range xsd:boolean .
54
+
55
+ fit:isManagement a rdf:Property ;
56
+ rdfs:label "isManagement"@en ;
57
+ rdfs:comment "If true, this is a management discipline (default false)"@en ;
58
+ rdfs:domain fit:Discipline ;
59
+ rdfs:range xsd:boolean .
60
+
61
+ fit:validTracks a rdf:Property ;
62
+ rdfs:label "validTracks"@en ;
63
+ rdfs:comment "REQUIRED. Explicit list of valid tracks. Empty array = trackless only."@en ;
64
+ rdfs:domain fit:Discipline ;
65
+ rdfs:range fit:Track .
66
+
67
+ fit:coreSkills a rdf:Property ;
68
+ rdfs:label "coreSkills"@en ;
69
+ rdfs:comment "Primary skills for deep expertise (references skill IDs)"@en ;
70
+ rdfs:domain fit:Discipline ;
71
+ rdfs:range fit:Skill .
72
+
73
+ fit:supportingSkills a rdf:Property ;
74
+ rdfs:label "supportingSkills"@en ;
75
+ rdfs:comment "Secondary skills for supporting capabilities (references skill IDs)"@en ;
76
+ rdfs:domain fit:Discipline ;
77
+ rdfs:range fit:Skill .
78
+
79
+ fit:broadSkills a rdf:Property ;
80
+ rdfs:label "broadSkills"@en ;
81
+ rdfs:comment "Skills for general awareness (references skill IDs)"@en ;
82
+ rdfs:domain fit:Discipline ;
83
+ rdfs:range fit:Skill .
84
+
85
+ fit:behaviourModifiers a rdf:Property ;
86
+ rdfs:label "behaviourModifiers"@en ;
87
+ rdfs:comment "Modifiers to behaviour expectations"@en .
88
+
89
+ fit:professionalRoleSummary a rdf:Property ;
90
+ rdfs:label "professionalRoleSummary"@en ;
91
+ rdfs:comment "Role summary for professional/IC track. May use {roleTitle} placeholder."@en ;
92
+ rdfs:domain fit:DisciplineHumanSection ;
93
+ rdfs:range xsd:string .
94
+
95
+ fit:managementRoleSummary a rdf:Property ;
96
+ rdfs:label "managementRoleSummary"@en ;
97
+ rdfs:comment "Role summary for management track. May use {specialization} placeholder."@en ;
98
+ rdfs:domain fit:DisciplineHumanSection ;
99
+ rdfs:range xsd:string .
100
+
101
+ # Agent Section Properties
102
+ fit:identity a rdf:Property ;
103
+ rdfs:label "identity"@en ;
104
+ rdfs:comment "Core identity statement for the agent"@en ;
105
+ rdfs:range xsd:string .
106
+
107
+ fit:priority a rdf:Property ;
108
+ rdfs:label "priority"@en ;
109
+ rdfs:comment "Priority guidance for the agent"@en ;
110
+ rdfs:range xsd:string .
111
+
112
+ fit:beforeMakingChanges a rdf:Property ;
113
+ rdfs:label "beforeMakingChanges"@en ;
114
+ rdfs:comment "Checklist items to consider before making changes"@en ;
115
+ rdfs:range xsd:string .
116
+
117
+ fit:delegation a rdf:Property ;
118
+ rdfs:label "delegation"@en ;
119
+ rdfs:comment "Guidance on when and how to delegate to subagents"@en ;
120
+ rdfs:range xsd:string .
121
+
122
+ # Modifier Properties
123
+ fit:targetBehaviour a rdf:Property ;
124
+ rdfs:label "targetBehaviour"@en ;
125
+ rdfs:comment "The behaviour this modifier applies to"@en ;
126
+ rdfs:domain fit:BehaviourModifier ;
127
+ rdfs:range fit:Behaviour .
128
+
129
+ fit:modifierValue a rdf:Property ;
130
+ rdfs:label "modifierValue"@en ;
131
+ rdfs:comment "The modifier value (-1, 0, or 1)"@en ;
132
+ rdfs:range xsd:integer .
133
+
134
+ # =============================================================================
135
+ # SHACL SHAPES
136
+ # =============================================================================
137
+
138
+ # -----------------------------------------------------------------------------
139
+ # Discipline Shape
140
+ # -----------------------------------------------------------------------------
141
+
142
+ fit:DisciplineShape a sh:NodeShape ;
143
+ sh:targetClass fit:Discipline ;
144
+ sh:property [
145
+ sh:path fit:id ;
146
+ sh:datatype xsd:string ;
147
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
148
+ sh:maxCount 1 ;
149
+ sh:name "id" ;
150
+ sh:description "Discipline identifier (derived from filename)" ;
151
+ ] ;
152
+ sh:property [
153
+ sh:path fit:specialization ;
154
+ sh:datatype xsd:string ;
155
+ sh:minCount 1 ;
156
+ sh:maxCount 1 ;
157
+ sh:name "specialization" ;
158
+ sh:description "Name of the specialization (e.g., Software Engineering)" ;
159
+ ] ;
160
+ sh:property [
161
+ sh:path fit:roleTitle ;
162
+ sh:datatype xsd:string ;
163
+ sh:minCount 1 ;
164
+ sh:maxCount 1 ;
165
+ sh:name "roleTitle" ;
166
+ sh:description "Base role title (e.g., Software Engineer)" ;
167
+ ] ;
168
+ sh:property [
169
+ sh:path fit:isProfessional ;
170
+ sh:datatype xsd:boolean ;
171
+ sh:maxCount 1 ;
172
+ sh:name "isProfessional" ;
173
+ sh:description "If true, this is an IC/professional discipline (default true)" ;
174
+ ] ;
175
+ sh:property [
176
+ sh:path fit:isManagement ;
177
+ sh:datatype xsd:boolean ;
178
+ sh:maxCount 1 ;
179
+ sh:name "isManagement" ;
180
+ sh:description "If true, this is a management discipline (default false)" ;
181
+ ] ;
182
+ sh:property [
183
+ sh:path fit:validTracks ;
184
+ sh:minCount 1 ;
185
+ sh:name "validTracks" ;
186
+ sh:description "REQUIRED. Valid track configurations. Use null for trackless (generalist)." ;
187
+ sh:or (
188
+ [ sh:datatype xsd:string ; sh:pattern "^[a-z][a-z0-9_]*$" ]
189
+ [ sh:nodeKind sh:Literal ; sh:hasValue "null" ]
190
+ ) ;
191
+ ] ;
192
+ sh:property [
193
+ sh:path fit:minGrade ;
194
+ sh:datatype xsd:string ;
195
+ sh:pattern "^[A-Z][A-Z0-9]*$" ;
196
+ sh:maxCount 1 ;
197
+ sh:name "minGrade" ;
198
+ sh:description "Minimum grade required for this discipline (grade ID)" ;
199
+ ] ;
200
+ sh:property [
201
+ sh:path fit:description ;
202
+ sh:datatype xsd:string ;
203
+ sh:maxCount 1 ;
204
+ sh:name "description" ;
205
+ sh:description "Description of the discipline's focus" ;
206
+ ] ;
207
+ sh:property [
208
+ sh:path fit:coreSkills ;
209
+ sh:datatype xsd:string ;
210
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
211
+ sh:minCount 1 ;
212
+ sh:name "coreSkills" ;
213
+ sh:description "Primary skills for deep expertise (skill IDs)" ;
214
+ ] ;
215
+ sh:property [
216
+ sh:path fit:supportingSkills ;
217
+ sh:datatype xsd:string ;
218
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
219
+ sh:name "supportingSkills" ;
220
+ sh:description "Secondary skills for supporting capabilities (skill IDs)" ;
221
+ ] ;
222
+ sh:property [
223
+ sh:path fit:broadSkills ;
224
+ sh:datatype xsd:string ;
225
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
226
+ sh:name "broadSkills" ;
227
+ sh:description "Skills for general awareness (skill IDs)" ;
228
+ ] ;
229
+ sh:property [
230
+ sh:path fit:behaviourModifiers ;
231
+ sh:node fit:BehaviourModifierShape ;
232
+ sh:name "behaviourModifiers" ;
233
+ sh:description "Modifiers to behaviour expectations" ;
234
+ ] ;
235
+ sh:property [
236
+ sh:path fit:human ;
237
+ sh:node fit:DisciplineHumanSectionShape ;
238
+ sh:maxCount 1 ;
239
+ sh:name "human" ;
240
+ sh:description "Human-specific content" ;
241
+ ] ;
242
+ sh:property [
243
+ sh:path fit:agent ;
244
+ sh:node fit:DisciplineAgentSectionShape ;
245
+ sh:maxCount 1 ;
246
+ sh:name "agent" ;
247
+ sh:description "Agent-specific content" ;
248
+ ] .
249
+
250
+ # -----------------------------------------------------------------------------
251
+ # Discipline Human Section Shape
252
+ # -----------------------------------------------------------------------------
253
+
254
+ fit:DisciplineHumanSectionShape a sh:NodeShape ;
255
+ sh:targetClass fit:DisciplineHumanSection ;
256
+ sh:property [
257
+ sh:path fit:professionalRoleSummary ;
258
+ sh:datatype xsd:string ;
259
+ sh:maxCount 1 ;
260
+ sh:name "professionalRoleSummary" ;
261
+ sh:description "Role summary for professional/IC track" ;
262
+ ] ;
263
+ sh:property [
264
+ sh:path fit:managementRoleSummary ;
265
+ sh:datatype xsd:string ;
266
+ sh:maxCount 1 ;
267
+ sh:name "managementRoleSummary" ;
268
+ sh:description "Role summary for management track" ;
269
+ ] .
270
+
271
+ # -----------------------------------------------------------------------------
272
+ # Discipline Agent Section Shape
273
+ # -----------------------------------------------------------------------------
274
+
275
+ fit:DisciplineAgentSectionShape a sh:NodeShape ;
276
+ sh:targetClass fit:DisciplineAgentSection ;
277
+ sh:property [
278
+ sh:path fit:identity ;
279
+ sh:datatype xsd:string ;
280
+ sh:minCount 1 ;
281
+ sh:maxCount 1 ;
282
+ sh:name "identity" ;
283
+ sh:description "Core identity statement for the agent" ;
284
+ ] ;
285
+ sh:property [
286
+ sh:path fit:priority ;
287
+ sh:datatype xsd:string ;
288
+ sh:maxCount 1 ;
289
+ sh:name "priority" ;
290
+ sh:description "Priority guidance for the agent" ;
291
+ ] ;
292
+ sh:property [
293
+ sh:path fit:beforeMakingChanges ;
294
+ sh:datatype xsd:string ;
295
+ sh:name "beforeMakingChanges" ;
296
+ sh:description "Checklist items to consider before making changes" ;
297
+ ] ;
298
+ sh:property [
299
+ sh:path fit:delegation ;
300
+ sh:datatype xsd:string ;
301
+ sh:maxCount 1 ;
302
+ sh:name "delegation" ;
303
+ sh:description "Guidance on when and how to delegate to subagents" ;
304
+ ] ;
305
+ sh:property [
306
+ sh:path fit:constraints ;
307
+ sh:datatype xsd:string ;
308
+ sh:name "constraints" ;
309
+ sh:description "Things the agent should avoid or never do" ;
310
+ ] .
311
+
312
+ # -----------------------------------------------------------------------------
313
+ # Behaviour Modifier Shape
314
+ # -----------------------------------------------------------------------------
315
+
316
+ fit:BehaviourModifierShape a sh:NodeShape ;
317
+ sh:targetClass fit:BehaviourModifier ;
318
+ sh:property [
319
+ sh:path fit:targetBehaviour ;
320
+ sh:datatype xsd:string ;
321
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
322
+ sh:minCount 1 ;
323
+ sh:maxCount 1 ;
324
+ sh:name "targetBehaviour" ;
325
+ sh:description "The behaviour this modifier applies to" ;
326
+ ] ;
327
+ sh:property [
328
+ sh:path fit:modifierValue ;
329
+ sh:datatype xsd:integer ;
330
+ sh:minInclusive -1 ;
331
+ sh:maxInclusive 1 ;
332
+ sh:minCount 1 ;
333
+ sh:maxCount 1 ;
334
+ sh:name "modifierValue" ;
335
+ sh:description "Modifier value (-1, 0, or 1)" ;
336
+ ] .
@@ -0,0 +1,84 @@
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
+ # Drivers Schema
9
+ # =============================================================================
10
+ # Organizational outcomes that productive teams achieve.
11
+ # =============================================================================
12
+
13
+ # -----------------------------------------------------------------------------
14
+ # Classes
15
+ # -----------------------------------------------------------------------------
16
+
17
+ fit:Driver a rdfs:Class ;
18
+ rdfs:label "Driver"@en ;
19
+ rdfs:comment "Organizational outcome that productive teams achieve"@en .
20
+
21
+ # -----------------------------------------------------------------------------
22
+ # Properties
23
+ # -----------------------------------------------------------------------------
24
+
25
+ fit:contributingSkills a rdf:Property ;
26
+ rdfs:label "contributingSkills"@en ;
27
+ rdfs:comment "Skills that contribute to this driver"@en ;
28
+ rdfs:domain fit:Driver ;
29
+ rdfs:range fit:Skill .
30
+
31
+ fit:contributingBehaviours a rdf:Property ;
32
+ rdfs:label "contributingBehaviours"@en ;
33
+ rdfs:comment "Behaviours that contribute to this driver"@en ;
34
+ rdfs:domain fit:Driver ;
35
+ rdfs:range fit:Behaviour .
36
+
37
+ # =============================================================================
38
+ # SHACL SHAPES
39
+ # =============================================================================
40
+
41
+ # -----------------------------------------------------------------------------
42
+ # Driver Shape
43
+ # -----------------------------------------------------------------------------
44
+
45
+ fit:DriverShape a sh:NodeShape ;
46
+ sh:targetClass fit:Driver ;
47
+ sh:property [
48
+ sh:path fit:id ;
49
+ sh:datatype xsd:string ;
50
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
51
+ sh:minCount 1 ;
52
+ sh:maxCount 1 ;
53
+ sh:name "id" ;
54
+ sh:description "Unique driver identifier (snake_case)" ;
55
+ ] ;
56
+ sh:property [
57
+ sh:path fit:name ;
58
+ sh:datatype xsd:string ;
59
+ sh:minCount 1 ;
60
+ sh:maxCount 1 ;
61
+ sh:name "name" ;
62
+ sh:description "Human-readable driver name" ;
63
+ ] ;
64
+ sh:property [
65
+ sh:path fit:description ;
66
+ sh:datatype xsd:string ;
67
+ sh:maxCount 1 ;
68
+ sh:name "description" ;
69
+ sh:description "Description of the business outcome" ;
70
+ ] ;
71
+ sh:property [
72
+ sh:path fit:contributingSkills ;
73
+ sh:datatype xsd:string ;
74
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
75
+ sh:name "contributingSkills" ;
76
+ sh:description "Skills that contribute to this driver (skill IDs)" ;
77
+ ] ;
78
+ sh:property [
79
+ sh:path fit:contributingBehaviours ;
80
+ sh:datatype xsd:string ;
81
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
82
+ sh:name "contributingBehaviours" ;
83
+ sh:description "Behaviours that contribute to this driver (behaviour IDs)" ;
84
+ ] .
@@ -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
+ # Framework Schema
9
+ # =============================================================================
10
+ # High-level framework configuration.
11
+ # =============================================================================
12
+
13
+ # -----------------------------------------------------------------------------
14
+ # Classes
15
+ # -----------------------------------------------------------------------------
16
+
17
+ fit:Framework a rdfs:Class ;
18
+ rdfs:label "Framework"@en ;
19
+ rdfs:comment "High-level framework configuration"@en .
20
+
21
+ fit:EntityDefinition a rdfs:Class ;
22
+ rdfs:label "Entity Definition"@en ;
23
+ rdfs:comment "Definition for an entity type used in pages and chapters"@en .
24
+
25
+ # -----------------------------------------------------------------------------
26
+ # Properties
27
+ # -----------------------------------------------------------------------------
28
+
29
+ fit:tag a rdf:Property ;
30
+ rdfs:label "tag"@en ;
31
+ rdfs:comment "Organization tag or identifier"@en ;
32
+ rdfs:domain fit:Framework ;
33
+ rdfs:range xsd:string .
34
+
35
+ fit:entityDefinitions a rdf:Property ;
36
+ rdfs:label "entityDefinitions"@en ;
37
+ rdfs:comment "Definitions for each entity type"@en ;
38
+ rdfs:domain fit:Framework ;
39
+ rdfs:range fit:EntityDefinition .
40
+
41
+ fit:entityType a rdf:Property ;
42
+ rdfs:label "entityType"@en ;
43
+ rdfs:comment "The type of entity this definition describes"@en ;
44
+ rdfs:domain fit:EntityDefinition ;
45
+ rdfs:range xsd:string .
46
+
47
+ # =============================================================================
48
+ # SHACL SHAPES
49
+ # =============================================================================
50
+
51
+ # -----------------------------------------------------------------------------
52
+ # Framework Shape
53
+ # -----------------------------------------------------------------------------
54
+
55
+ fit:FrameworkShape a sh:NodeShape ;
56
+ sh:targetClass fit:Framework ;
57
+ sh:property [
58
+ sh:path fit:title ;
59
+ sh:datatype xsd:string ;
60
+ sh:minCount 1 ;
61
+ sh:maxCount 1 ;
62
+ sh:name "title" ;
63
+ sh:description "Title of the engineering pathway" ;
64
+ ] ;
65
+ sh:property [
66
+ sh:path fit:emojiIcon ;
67
+ sh:datatype xsd:string ;
68
+ sh:maxCount 1 ;
69
+ sh:name "emojiIcon" ;
70
+ sh:description "Emoji for visual representation" ;
71
+ ] ;
72
+ sh:property [
73
+ sh:path fit:tag ;
74
+ sh:datatype xsd:string ;
75
+ sh:maxCount 1 ;
76
+ sh:name "tag" ;
77
+ sh:description "Organization tag or identifier" ;
78
+ ] ;
79
+ sh:property [
80
+ sh:path fit:description ;
81
+ sh:datatype xsd:string ;
82
+ sh:maxCount 1 ;
83
+ sh:name "description" ;
84
+ sh:description "Description of the framework's purpose" ;
85
+ ] ;
86
+ sh:property [
87
+ sh:path fit:entityDefinitions ;
88
+ sh:node fit:EntityDefinitionShape ;
89
+ sh:name "entityDefinitions" ;
90
+ sh:description "Definitions for each entity type" ;
91
+ ] .
92
+
93
+ # -----------------------------------------------------------------------------
94
+ # Entity Definition Shape
95
+ # -----------------------------------------------------------------------------
96
+
97
+ fit:EntityDefinitionShape a sh:NodeShape ;
98
+ sh:targetClass fit:EntityDefinition ;
99
+ sh:property [
100
+ sh:path fit:entityType ;
101
+ sh:datatype xsd:string ;
102
+ sh:minCount 1 ;
103
+ sh:maxCount 1 ;
104
+ sh:name "entityType" ;
105
+ sh:description "The type of entity this definition describes" ;
106
+ ] ;
107
+ sh:property [
108
+ sh:path fit:title ;
109
+ sh:datatype xsd:string ;
110
+ sh:minCount 1 ;
111
+ sh:maxCount 1 ;
112
+ sh:name "title" ;
113
+ sh:description "Display title for the entity" ;
114
+ ] ;
115
+ sh:property [
116
+ sh:path fit:emojiIcon ;
117
+ sh:datatype xsd:string ;
118
+ sh:maxCount 1 ;
119
+ sh:name "emojiIcon" ;
120
+ sh:description "Emoji for visual representation" ;
121
+ ] ;
122
+ sh:property [
123
+ sh:path fit:description ;
124
+ sh:datatype xsd:string ;
125
+ sh:maxCount 1 ;
126
+ sh:name "description" ;
127
+ sh:description "Description of the entity type" ;
128
+ ] .