@canonical/anatomy-dsl 0.2.0 → 0.2.1
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.
- package/definitions/ontology.ttl +190 -0
- package/definitions/shapes.ttl +232 -0
- package/package.json +3 -2
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
@prefix anatomy: <http://anatomy-dsl.example.org/ontology#> .
|
|
2
|
+
@prefix owl: <http://www.w3.org/2002/07/owl#> .
|
|
3
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
4
|
+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
|
5
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
6
|
+
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
|
|
7
|
+
|
|
8
|
+
# ═══════════════════════════════════════════════════════════════
|
|
9
|
+
# ONTOLOGY DECLARATION
|
|
10
|
+
# ═══════════════════════════════════════════════════════════════
|
|
11
|
+
|
|
12
|
+
<http://anatomy-dsl.example.org/ontology> a owl:Ontology ;
|
|
13
|
+
owl:versionInfo "0.2.0" ;
|
|
14
|
+
rdfs:label "Anatomy DSL Ontology" ;
|
|
15
|
+
rdfs:comment "Compliant with OWL DL profile" ;
|
|
16
|
+
skos:definition """Meta-model for the Anatomy DSL — a YAML-based language
|
|
17
|
+
for describing design system component structure.
|
|
18
|
+
|
|
19
|
+
Models anatomy files as trees of nodes connected by reified edges.
|
|
20
|
+
Inspired by the Relay GraphQL connection pattern.
|
|
21
|
+
|
|
22
|
+
Consolidates WD404 (core) and WD404.1 (addendum 1).
|
|
23
|
+
|
|
24
|
+
OUT OF SCOPE (matching the DSL itself):
|
|
25
|
+
- Prop mapping
|
|
26
|
+
- State or state machines
|
|
27
|
+
- Modifier descriptions (only token references)
|
|
28
|
+
|
|
29
|
+
Validation shapes defined in shapes.ttl.""" .
|
|
30
|
+
|
|
31
|
+
# ═══════════════════════════════════════════════════════════════
|
|
32
|
+
# CORE CLASSES
|
|
33
|
+
# ═══════════════════════════════════════════════════════════════
|
|
34
|
+
|
|
35
|
+
anatomy:Specification a owl:Class ;
|
|
36
|
+
rdfs:label "Specification" ;
|
|
37
|
+
skos:definition "Root of an anatomy file." .
|
|
38
|
+
|
|
39
|
+
anatomy:Node a owl:Class ;
|
|
40
|
+
rdfs:label "Node" ;
|
|
41
|
+
skos:definition "Position in the anatomy tree." .
|
|
42
|
+
|
|
43
|
+
anatomy:NamedNode a owl:Class ;
|
|
44
|
+
rdfs:subClassOf anatomy:Node ;
|
|
45
|
+
rdfs:label "Named Node" ;
|
|
46
|
+
skos:definition "Design system entity instantiable by consumers." .
|
|
47
|
+
|
|
48
|
+
anatomy:AnonymousNode a owl:Class ;
|
|
49
|
+
rdfs:subClassOf anatomy:Node ;
|
|
50
|
+
rdfs:label "Anonymous Node" ;
|
|
51
|
+
skos:definition "Structural element without design system identity." .
|
|
52
|
+
|
|
53
|
+
anatomy:Edge a owl:Class ;
|
|
54
|
+
rdfs:label "Edge" ;
|
|
55
|
+
skos:definition "Reified parent-child relationship in the anatomy tree." .
|
|
56
|
+
|
|
57
|
+
anatomy:Relation a owl:Class ;
|
|
58
|
+
rdfs:label "Relation" ;
|
|
59
|
+
skos:definition "Metadata qualifying a parent-child relationship." .
|
|
60
|
+
|
|
61
|
+
anatomy:Style a owl:Class ;
|
|
62
|
+
rdfs:label "Style" ;
|
|
63
|
+
skos:definition "A single style declaration binding a property key to a value." .
|
|
64
|
+
|
|
65
|
+
# ═══════════════════════════════════════════════════════════════
|
|
66
|
+
# SWITCH CONSTRUCT
|
|
67
|
+
# ═══════════════════════════════════════════════════════════════
|
|
68
|
+
|
|
69
|
+
anatomy:Switch a owl:Class ;
|
|
70
|
+
rdfs:label "Switch" ;
|
|
71
|
+
skos:definition "Polymorphic position admitting several alternatives." .
|
|
72
|
+
|
|
73
|
+
anatomy:SwitchCase a owl:Class ;
|
|
74
|
+
rdfs:label "Switch Case" ;
|
|
75
|
+
skos:definition "One alternative within a Switch." .
|
|
76
|
+
|
|
77
|
+
# ═══════════════════════════════════════════════════════════════
|
|
78
|
+
# OBJECT PROPERTIES
|
|
79
|
+
# ═══════════════════════════════════════════════════════════════
|
|
80
|
+
|
|
81
|
+
anatomy:rootNode a owl:ObjectProperty ;
|
|
82
|
+
rdfs:label "root node" ;
|
|
83
|
+
rdfs:domain anatomy:Specification ;
|
|
84
|
+
rdfs:range anatomy:NamedNode ;
|
|
85
|
+
skos:definition "Top-level node of an anatomy specification." .
|
|
86
|
+
|
|
87
|
+
anatomy:hasEdge a owl:ObjectProperty ;
|
|
88
|
+
rdfs:label "has edge" ;
|
|
89
|
+
rdfs:domain anatomy:Node ;
|
|
90
|
+
rdfs:range anatomy:Edge ;
|
|
91
|
+
skos:definition "Connects a node to a child relationship." .
|
|
92
|
+
|
|
93
|
+
anatomy:hasRelation a owl:ObjectProperty ;
|
|
94
|
+
rdfs:label "has relation" ;
|
|
95
|
+
rdfs:domain anatomy:Edge ;
|
|
96
|
+
rdfs:range anatomy:Relation ;
|
|
97
|
+
skos:definition "Relation qualifying this edge." .
|
|
98
|
+
|
|
99
|
+
anatomy:edgeTarget a owl:ObjectProperty ;
|
|
100
|
+
rdfs:label "edge target" ;
|
|
101
|
+
rdfs:domain anatomy:Edge ;
|
|
102
|
+
rdfs:range anatomy:Node ;
|
|
103
|
+
skos:definition "Child node this edge connects to." .
|
|
104
|
+
|
|
105
|
+
anatomy:edgeSwitch a owl:ObjectProperty ;
|
|
106
|
+
rdfs:label "edge switch" ;
|
|
107
|
+
rdfs:domain anatomy:Edge ;
|
|
108
|
+
rdfs:range anatomy:Switch ;
|
|
109
|
+
skos:definition "Polymorphic switch this edge connects to." .
|
|
110
|
+
|
|
111
|
+
anatomy:hasCase a owl:ObjectProperty ;
|
|
112
|
+
rdfs:label "has case" ;
|
|
113
|
+
rdfs:domain anatomy:Switch ;
|
|
114
|
+
rdfs:range anatomy:SwitchCase ;
|
|
115
|
+
skos:definition "An alternative within this switch." .
|
|
116
|
+
|
|
117
|
+
anatomy:caseNode a owl:ObjectProperty ;
|
|
118
|
+
rdfs:label "case node" ;
|
|
119
|
+
rdfs:domain anatomy:SwitchCase ;
|
|
120
|
+
rdfs:range anatomy:Node ;
|
|
121
|
+
skos:definition "Node this case resolves to." .
|
|
122
|
+
|
|
123
|
+
anatomy:hasStyle a owl:ObjectProperty ;
|
|
124
|
+
rdfs:label "has style" ;
|
|
125
|
+
rdfs:domain anatomy:Node ;
|
|
126
|
+
rdfs:range anatomy:Style ;
|
|
127
|
+
skos:definition "Attaches a style declaration to a node." .
|
|
128
|
+
|
|
129
|
+
# ═══════════════════════════════════════════════════════════════
|
|
130
|
+
# DATATYPE PROPERTIES
|
|
131
|
+
# ═══════════════════════════════════════════════════════════════
|
|
132
|
+
|
|
133
|
+
anatomy:uri a owl:DatatypeProperty ;
|
|
134
|
+
rdfs:label "uri" ;
|
|
135
|
+
rdfs:domain anatomy:NamedNode ;
|
|
136
|
+
rdfs:range xsd:string ;
|
|
137
|
+
skos:definition "Unique identifier for a named node within the design system." ;
|
|
138
|
+
skos:example "global.component.button" ,
|
|
139
|
+
"global.subcomponent.accordion-item" ,
|
|
140
|
+
"global.subcomponent.card_header" .
|
|
141
|
+
|
|
142
|
+
anatomy:role a owl:DatatypeProperty ;
|
|
143
|
+
rdfs:label "role" ;
|
|
144
|
+
rdfs:domain anatomy:AnonymousNode ;
|
|
145
|
+
rdfs:range xsd:string ;
|
|
146
|
+
skos:definition "Human-readable purpose of an anonymous node." ;
|
|
147
|
+
skos:example "content wrapper" ,
|
|
148
|
+
"spacer element" ,
|
|
149
|
+
"icon container" .
|
|
150
|
+
|
|
151
|
+
anatomy:discriminator a owl:DatatypeProperty ;
|
|
152
|
+
rdfs:label "discriminator" ;
|
|
153
|
+
rdfs:domain anatomy:Switch ;
|
|
154
|
+
rdfs:range xsd:string ;
|
|
155
|
+
skos:definition "What determines which case applies." ;
|
|
156
|
+
skos:example "props" , "internal" , "override" .
|
|
157
|
+
|
|
158
|
+
anatomy:cardinality a owl:DatatypeProperty ;
|
|
159
|
+
rdfs:label "cardinality" ;
|
|
160
|
+
rdfs:domain anatomy:Relation ;
|
|
161
|
+
rdfs:range xsd:string ;
|
|
162
|
+
skos:definition "Instance count constraint on the child." ;
|
|
163
|
+
skos:example "1" , "0..1" , "0..*" , "1..*" , "2..5" .
|
|
164
|
+
|
|
165
|
+
anatomy:slotName a owl:DatatypeProperty ;
|
|
166
|
+
rdfs:label "slot name" ;
|
|
167
|
+
rdfs:domain anatomy:Relation ;
|
|
168
|
+
rdfs:range xsd:string ;
|
|
169
|
+
skos:definition "Named slot in the parent that this child maps to." ;
|
|
170
|
+
skos:example "default" , "header" , "footer" , "icon" .
|
|
171
|
+
|
|
172
|
+
anatomy:styleKey a owl:DatatypeProperty ;
|
|
173
|
+
rdfs:label "style key" ;
|
|
174
|
+
rdfs:domain anatomy:Style ;
|
|
175
|
+
rdfs:range xsd:string ;
|
|
176
|
+
skos:definition "Platform-agnostic style property identifier." ;
|
|
177
|
+
skos:example "layout.type" ,
|
|
178
|
+
"spacing.internal" ,
|
|
179
|
+
"appearance.background" ,
|
|
180
|
+
"typography.weight" .
|
|
181
|
+
|
|
182
|
+
anatomy:styleValue a owl:DatatypeProperty ;
|
|
183
|
+
rdfs:label "style value" ;
|
|
184
|
+
rdfs:domain anatomy:Style ;
|
|
185
|
+
rdfs:range xsd:string ;
|
|
186
|
+
skos:definition "Value for a style property." ;
|
|
187
|
+
skos:example "stack" ,
|
|
188
|
+
"spacing/medium" ,
|
|
189
|
+
"color/surface/primary" ,
|
|
190
|
+
"color/surface/button?" .
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
@prefix anatomy: <http://anatomy-dsl.example.org/ontology#> .
|
|
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 skos: <http://www.w3.org/2004/02/skos/core#> .
|
|
6
|
+
|
|
7
|
+
# ═══════════════════════════════════════════════════════════════
|
|
8
|
+
# SHACL SHAPES FOR ANATOMY DSL 0.2.0
|
|
9
|
+
# ═══════════════════════════════════════════════════════════════
|
|
10
|
+
#
|
|
11
|
+
# Constraints, patterns, enumerations, and encoding conventions.
|
|
12
|
+
# Semantic definitions live in ontology.ttl.
|
|
13
|
+
#
|
|
14
|
+
# Shapes:
|
|
15
|
+
# SpecificationShape — root document
|
|
16
|
+
# NamedNodeShape — uri required, encoding pattern
|
|
17
|
+
# AnonymousNodeShape — role required
|
|
18
|
+
# EdgeShape — edgeTarget XOR edgeSwitch
|
|
19
|
+
# RelationShape — cardinality pattern, optional slotName
|
|
20
|
+
# SwitchShape — discriminator enum, minimum cases
|
|
21
|
+
# SwitchCaseShape — case node required
|
|
22
|
+
# StyleShape — reified key-value tuple (one key, one value)
|
|
23
|
+
# ═══════════════════════════════════════════════════════════════
|
|
24
|
+
|
|
25
|
+
# ───────────────────────────────────────────────────────────────
|
|
26
|
+
# SPECIFICATION
|
|
27
|
+
# ───────────────────────────────────────────────────────────────
|
|
28
|
+
|
|
29
|
+
anatomy:SpecificationShape a sh:NodeShape ;
|
|
30
|
+
sh:targetClass anatomy:Specification ;
|
|
31
|
+
rdfs:label "Specification Shape" ;
|
|
32
|
+
skos:definition "Root document constraints." ;
|
|
33
|
+
|
|
34
|
+
sh:property [
|
|
35
|
+
sh:path anatomy:rootNode ;
|
|
36
|
+
sh:minCount 1 ;
|
|
37
|
+
sh:maxCount 1 ;
|
|
38
|
+
sh:class anatomy:NamedNode ;
|
|
39
|
+
sh:message "Specification requires exactly one rootNode of type NamedNode." ;
|
|
40
|
+
] .
|
|
41
|
+
|
|
42
|
+
# ───────────────────────────────────────────────────────────────
|
|
43
|
+
# NAMED NODE
|
|
44
|
+
# ───────────────────────────────────────────────────────────────
|
|
45
|
+
|
|
46
|
+
anatomy:NamedNodeShape a sh:NodeShape ;
|
|
47
|
+
sh:targetClass anatomy:NamedNode ;
|
|
48
|
+
rdfs:label "Named Node Shape" ;
|
|
49
|
+
skos:definition "URI encoding and presence constraints." ;
|
|
50
|
+
|
|
51
|
+
sh:property [
|
|
52
|
+
sh:path anatomy:uri ;
|
|
53
|
+
sh:minCount 1 ;
|
|
54
|
+
sh:maxCount 1 ;
|
|
55
|
+
sh:datatype xsd:string ;
|
|
56
|
+
sh:minLength 1 ;
|
|
57
|
+
sh:message "NamedNode requires exactly one non-empty uri." ;
|
|
58
|
+
] ;
|
|
59
|
+
|
|
60
|
+
# URI encoding: dot-separated hierarchy, underscore for PascalCase
|
|
61
|
+
# word boundaries, hyphen for compound names from dotted labels.
|
|
62
|
+
# Reserved value "$custom" for consumer-provided components.
|
|
63
|
+
sh:property [
|
|
64
|
+
sh:path anatomy:uri ;
|
|
65
|
+
sh:pattern "^(\\$custom|[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)*)$" ;
|
|
66
|
+
sh:message "URI must be dot-separated lowercase path or '$custom'." ;
|
|
67
|
+
] ;
|
|
68
|
+
|
|
69
|
+
sh:property [
|
|
70
|
+
sh:path anatomy:role ;
|
|
71
|
+
sh:maxCount 0 ;
|
|
72
|
+
sh:message "NamedNode must not have a role (use AnonymousNode instead)." ;
|
|
73
|
+
] .
|
|
74
|
+
|
|
75
|
+
# ───────────────────────────────────────────────────────────────
|
|
76
|
+
# ANONYMOUS NODE
|
|
77
|
+
# ───────────────────────────────────────────────────────────────
|
|
78
|
+
|
|
79
|
+
anatomy:AnonymousNodeShape a sh:NodeShape ;
|
|
80
|
+
sh:targetClass anatomy:AnonymousNode ;
|
|
81
|
+
rdfs:label "Anonymous Node Shape" ;
|
|
82
|
+
skos:definition "Role presence and uri exclusion." ;
|
|
83
|
+
|
|
84
|
+
sh:property [
|
|
85
|
+
sh:path anatomy:role ;
|
|
86
|
+
sh:minCount 1 ;
|
|
87
|
+
sh:maxCount 1 ;
|
|
88
|
+
sh:datatype xsd:string ;
|
|
89
|
+
sh:minLength 1 ;
|
|
90
|
+
sh:message "AnonymousNode requires exactly one non-empty role." ;
|
|
91
|
+
] ;
|
|
92
|
+
|
|
93
|
+
sh:property [
|
|
94
|
+
sh:path anatomy:uri ;
|
|
95
|
+
sh:maxCount 0 ;
|
|
96
|
+
sh:message "AnonymousNode must not have a uri (use NamedNode instead)." ;
|
|
97
|
+
] .
|
|
98
|
+
|
|
99
|
+
# ───────────────────────────────────────────────────────────────
|
|
100
|
+
# EDGE
|
|
101
|
+
# ───────────────────────────────────────────────────────────────
|
|
102
|
+
|
|
103
|
+
anatomy:EdgeShape a sh:NodeShape ;
|
|
104
|
+
sh:targetClass anatomy:Edge ;
|
|
105
|
+
rdfs:label "Edge Shape" ;
|
|
106
|
+
skos:definition "Mutual exclusivity of edgeTarget and edgeSwitch." ;
|
|
107
|
+
|
|
108
|
+
sh:property [
|
|
109
|
+
sh:path anatomy:hasRelation ;
|
|
110
|
+
sh:minCount 1 ;
|
|
111
|
+
sh:maxCount 1 ;
|
|
112
|
+
sh:class anatomy:Relation ;
|
|
113
|
+
sh:message "Edge requires exactly one relation." ;
|
|
114
|
+
] ;
|
|
115
|
+
|
|
116
|
+
sh:or (
|
|
117
|
+
[
|
|
118
|
+
sh:property [
|
|
119
|
+
sh:path anatomy:edgeTarget ;
|
|
120
|
+
sh:minCount 1 ;
|
|
121
|
+
sh:maxCount 1 ;
|
|
122
|
+
] ;
|
|
123
|
+
sh:property [
|
|
124
|
+
sh:path anatomy:edgeSwitch ;
|
|
125
|
+
sh:maxCount 0 ;
|
|
126
|
+
] ;
|
|
127
|
+
]
|
|
128
|
+
[
|
|
129
|
+
sh:property [
|
|
130
|
+
sh:path anatomy:edgeSwitch ;
|
|
131
|
+
sh:minCount 1 ;
|
|
132
|
+
sh:maxCount 1 ;
|
|
133
|
+
] ;
|
|
134
|
+
sh:property [
|
|
135
|
+
sh:path anatomy:edgeTarget ;
|
|
136
|
+
sh:maxCount 0 ;
|
|
137
|
+
] ;
|
|
138
|
+
]
|
|
139
|
+
) ;
|
|
140
|
+
sh:message "Edge requires exactly one of edgeTarget or edgeSwitch." .
|
|
141
|
+
|
|
142
|
+
# ───────────────────────────────────────────────────────────────
|
|
143
|
+
# RELATION
|
|
144
|
+
# ───────────────────────────────────────────────────────────────
|
|
145
|
+
|
|
146
|
+
anatomy:RelationShape a sh:NodeShape ;
|
|
147
|
+
sh:targetClass anatomy:Relation ;
|
|
148
|
+
rdfs:label "Relation Shape" ;
|
|
149
|
+
skos:definition "Cardinality pattern and slotName constraints." ;
|
|
150
|
+
|
|
151
|
+
sh:property [
|
|
152
|
+
sh:path anatomy:cardinality ;
|
|
153
|
+
sh:minCount 1 ;
|
|
154
|
+
sh:maxCount 1 ;
|
|
155
|
+
sh:datatype xsd:string ;
|
|
156
|
+
sh:pattern "^\\d+(\\.\\.(\\d+|\\*))?$" ;
|
|
157
|
+
sh:message "Cardinality must match: digit+ ('..' (digit+ | '*'))?" ;
|
|
158
|
+
] ;
|
|
159
|
+
|
|
160
|
+
sh:property [
|
|
161
|
+
sh:path anatomy:slotName ;
|
|
162
|
+
sh:maxCount 1 ;
|
|
163
|
+
sh:datatype xsd:string ;
|
|
164
|
+
] .
|
|
165
|
+
|
|
166
|
+
# ───────────────────────────────────────────────────────────────
|
|
167
|
+
# SWITCH
|
|
168
|
+
# ───────────────────────────────────────────────────────────────
|
|
169
|
+
|
|
170
|
+
anatomy:SwitchShape a sh:NodeShape ;
|
|
171
|
+
sh:targetClass anatomy:Switch ;
|
|
172
|
+
rdfs:label "Switch Shape" ;
|
|
173
|
+
skos:definition "Discriminator vocabulary and minimum case count." ;
|
|
174
|
+
|
|
175
|
+
sh:property [
|
|
176
|
+
sh:path anatomy:discriminator ;
|
|
177
|
+
sh:minCount 1 ;
|
|
178
|
+
sh:maxCount 1 ;
|
|
179
|
+
sh:datatype xsd:string ;
|
|
180
|
+
sh:in ( "props" "internal" "override" ) ;
|
|
181
|
+
sh:message "Discriminator must be one of: props, internal, override." ;
|
|
182
|
+
] ;
|
|
183
|
+
|
|
184
|
+
sh:property [
|
|
185
|
+
sh:path anatomy:hasCase ;
|
|
186
|
+
sh:minCount 2 ;
|
|
187
|
+
sh:class anatomy:SwitchCase ;
|
|
188
|
+
sh:message "Switch requires at least two cases." ;
|
|
189
|
+
] .
|
|
190
|
+
|
|
191
|
+
# ───────────────────────────────────────────────────────────────
|
|
192
|
+
# SWITCH CASE
|
|
193
|
+
# ───────────────────────────────────────────────────────────────
|
|
194
|
+
|
|
195
|
+
anatomy:SwitchCaseShape a sh:NodeShape ;
|
|
196
|
+
sh:targetClass anatomy:SwitchCase ;
|
|
197
|
+
rdfs:label "Switch Case Shape" ;
|
|
198
|
+
skos:definition "Each case resolves to a node." ;
|
|
199
|
+
|
|
200
|
+
sh:property [
|
|
201
|
+
sh:path anatomy:caseNode ;
|
|
202
|
+
sh:minCount 1 ;
|
|
203
|
+
sh:maxCount 1 ;
|
|
204
|
+
sh:class anatomy:Node ;
|
|
205
|
+
sh:message "SwitchCase requires exactly one caseNode." ;
|
|
206
|
+
] .
|
|
207
|
+
|
|
208
|
+
# ───────────────────────────────────────────────────────────────
|
|
209
|
+
# STYLE
|
|
210
|
+
# ───────────────────────────────────────────────────────────────
|
|
211
|
+
|
|
212
|
+
anatomy:StyleShape a sh:NodeShape ;
|
|
213
|
+
sh:targetClass anatomy:Style ;
|
|
214
|
+
rdfs:label "Style Shape" ;
|
|
215
|
+
skos:definition "Reified key-value tuple: exactly one key and one value." ;
|
|
216
|
+
|
|
217
|
+
sh:property [
|
|
218
|
+
sh:path anatomy:styleKey ;
|
|
219
|
+
sh:minCount 1 ;
|
|
220
|
+
sh:maxCount 1 ;
|
|
221
|
+
sh:datatype xsd:string ;
|
|
222
|
+
sh:pattern "^[a-z]+\\.[a-z]+(\\.[a-z]+)*$" ;
|
|
223
|
+
sh:message "Style key must follow CTI dot-notation: category.type[.item]." ;
|
|
224
|
+
] ;
|
|
225
|
+
|
|
226
|
+
sh:property [
|
|
227
|
+
sh:path anatomy:styleValue ;
|
|
228
|
+
sh:minCount 1 ;
|
|
229
|
+
sh:maxCount 1 ;
|
|
230
|
+
sh:datatype xsd:string ;
|
|
231
|
+
sh:message "Style requires exactly one value." ;
|
|
232
|
+
] .
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canonical/anatomy-dsl",
|
|
3
3
|
"description": "Anatomy DSL meta-model: TypeScript types mirroring the OWL ontology, and a YAML-to-Turtle transform",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
7
7
|
"types": "dist/types/index.d.ts",
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"files": [
|
|
15
|
-
"dist"
|
|
15
|
+
"dist",
|
|
16
|
+
"definitions"
|
|
16
17
|
],
|
|
17
18
|
"license": "LGPL-3.0",
|
|
18
19
|
"scripts": {
|