-
Notifications
You must be signed in to change notification settings - Fork 0
/
osh.ttl
410 lines (346 loc) · 13.4 KB
/
osh.ttl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
@base <https://github.com/OSEGermany/osh-ont/raw/master/osh.ttl> .
@prefix osh: <#> .
@prefix oshex: <https://github.com/OSEGermany/osh-ont/raw/master/osh-example.ttl#> .
@prefix okh: <#> .
@prefix obo: <http://purl.obolibrary.org/obo/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix schema: <http://schema.org/> .
@prefix spdxt: <http://spdx.org/rdf/terms#> .
@prefix cc: <http://creativecommons.org/ns#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix epo: <http://data.epo.org/linked-data/def/patent/> .
@prefix npg: <http://ns.nature.com/terms/> .
@prefix otrl: <https://github.com/OPEN-NEXT/OKH-LOSH/raw/master/OTRL.ttl#> .
@prefix tsdc: <https://gitlab.com/OSEGermany/oh-tsdc/-/raw/master/oh-tsdc.ttl#> .
# SPDX-FileCopyrightText: 2023 Robin Vobruba <[email protected]>
#
# SPDX-License-Identifier: CC0-1.0
# NOTE:
# Regarding the use of `schema:domainIncludes`
# and `schema:rangeIncludes` in this ontology:
# Looking at the definitions for the RDFS version
# of the two, `rdfs:domain` and `rdfs:range`:
# * https://www.w3.org/TR/rdf-schema/#ch_domain
# * https://www.w3.org/TR/rdf-schema/#ch_range
# and as described in this StackOverflow answer:
# <https://stackoverflow.com/a/74782257/586229>,
# multiple objects for the two RDFS properties mean,
# that *all of them* apply, simultaneously,
# not *one of them*.
# You may think of this as an `AND` coupling.
# We want the *one of them* meaning though (`OR`).
# The `schema:*` properties give us just that.
<>
a owl:Ontology ;
owl:versionInfo "0.1" ;
owl:versionIRI <> ;
rdfs:label "Open Source Hardware"@en ;
rdfs:comment "An OSH design-space and physical world ontology"@en ;
dcterms:contributor "Robin Vobruba <[email protected]>" ;
dcterms:license <https://www.gnu.org/licenses/agpl-3.0.txt> ;
cc:license <https://www.gnu.org/licenses/agpl-3.0.txt> ;
spdxt:ListedLicense "AGPL-3.0-or-later" ;
.
# everything is a thing (or tangible artifact)!!!
# some are indivisible, and everything else can be expressed as relationships (module, interface, part of, ...)
# In the design space, a each thing has a design or specification (is a spec. also a design, or vice versa?)
# - Interfaces can define interactions between a hardware device, software program and a user.
# - The exchange can be between software, {computer hardware, peripheral devices}, humans, and combinations of these.
# segment article item part piece specimen instance occurence component section porton chunk section
# indivisible (= átomos (Gr.))
# put-together assemble compose join-up construct join unit
# extend patch
# module element constituent
# # BoM vs "shopping list"
# BoM includes only your parts (and quantities, specs etc.) and the shopping list states where you're getting the materials from. e.g. shopping list may include parts from another machine that are then processed into parts that appear in your BoM.
osh:Realm
a owl:Class ;
rdfs:label "OSH-Realm" ;
rdfs:comment "A sphere/level/space/realm within hte OSH world (TODO Improve this comment)."@en ;
.
osh:PhysicalRealm
a osh:Realm ;
rdfs:label "Physical World" ;
rdfs:comment "The realm of all things touchable."@en ;
.
osh:DesignRealm
a osh:Realm ;
rdfs:label "Design Space" ;
rdfs:comment "The realm of the designd and documentation of things; living in the virtual world."@en ;
.
osh:RegulationRealm
a osh:Realm ;
rdfs:label "Regulations" ;
rdfs:comment "The realm of legal/official and technical standards and specifications; living in the legal and virtual world."@en ;
.
osh:MetaRealm
a osh:Realm ;
rdfs:label "Meta-Data Packages Store" ;
rdfs:comment "The realm where we track histories of snapshots of meta-data about objects (aka \"Passports\") in other realms; these also ive in the virtual world."@en ;
.
osh:AbstractRealm
a osh:Realm ;
rdfs:label "Abstract Realm" ;
rdfs:comment "The realm where we place abstract objects, that are not specfically situated in any (number of) the other realms, but rather just serve as base to inherit from, to form objects that *are* situated in the other (real) ralms."@en ;
.
osh:Thing
a owl:Class ;
rdfs:label "Physical object"@en ;
rdfs:comment "Could be a solid, a gas, a liquid, an electromagnetic wave, or a combination of any number of these in different shapes and constellations"@en ;
osh:realms osh:PhysicalRealm ;
.
osh:Design
a owl:Class ;
rdfs:label "Virtual description of an osh:Thing"@en ;
rdfs:comment "A bunch of (hopefully) well structured files describing how a thing is shaped, formed, manufactured, assembled and possibly even recycled and used."@en ;
osh:realms osh:DesignRealm ;
.
osh:Regulation
a owl:Class ;
rdfs:label "Regulation"@en ;
rdfs:comment "Official, Legal or Technical Norm/Standard/Specification applicable to an osh:Thing or osh:Design"@en ;
osh:realms osh:RegulationRealm ;
.
osh:Passport
a owl:Class ;
rdfs:label "Digital Passport"@en ;
rdfs:comment "A store of a history of snapshots of data (including meta-data) about a single physical or virtual object. Here we apply it to an osh:Thing, osh:Design or osh:Interface"@en ;
osh:realms osh:MetaRealm ;
.
osh:Interface
a owl:Class ;
rdfs:label "Interface" ;
rdfs:comment "A virtual description of a shared boundary across two or more separate components. This is an abstract base class."@en ;
rdfs:comment "NOTE As of our knowledge, there is no open way to technically define this (as of August 2023)."@en ;
osh:realms osh:AbstractRealm ;
.
osh:HardwareInterface
a osh:Interface ;
rdfs:label "Things Interface" ;
rdfs:comment "A virtual description of a physical interface between things (osh:Thing)."@en ;
rdfs:comment "NOTE As of our knowledge, there is no open way to technically define this (as of August 2023)."@en ;
osh:realms
osh:PhysicalRealm ,
osh:DesignRealm ;
.
osh:UserInterface
a osh:Interface ;
rdfs:label "User Interface" ;
rdfs:comment "A virtual description of an interface involving at least one user (living thing) and one thing (osh:Thing)."@en ;
rdfs:comment "NOTE As of our knowledge, there is no open way to technically define this (as of August 2023)."@en ;
osh:realms
osh:PhysicalRealm ,
osh:DesignRealm ;
.
osh:TextileInterface
a osh:Interface ;
rdfs:label "Textile Interface" ;
rdfs:comment "A virtual description of an interface involving at least one textile."@en ;
rdfs:comment "NOTE As of our knowledge, there is no open way to technically define this (as of August 2023)."@en ;
osh:realms
osh:PhysicalRealm ,
osh:DesignRealm ;
.
osh:WetwareInterface
a osh:Interface ;
rdfs:label "Wetware Interface" ;
rdfs:comment "A virtual description of an interface involving at least one wetware."@en ;
rdfs:comment "NOTE As of our knowledge, there is no open way to technically define this (as of August 2023)."@en ;
osh:realms
osh:PhysicalRealm ,
osh:DesignRealm ;
.
osh:hasPart
a owl:ObjectProperty ;
rdfs:label "has part" ;
rdfs:comment "Links a sub-part (a thing) to its enclosing thing. This is the `osh:PhysicalRealm` alternative to `osh:hasComponent`." ;
schema:rangeIncludes osh:Thing ;
schema:domainIncludes osh:Thing ;
osh:realms osh:PhysicalRealm ;
.
osh:hasComponent
a owl:ObjectProperty ;
rdfs:label "has component" ;
rdfs:comment "Links a sub-component (a design) to its enclosing design. This is the `osh:DesignRealm` alternative to `osh:hasPart`." ;
schema:rangeIncludes osh:Design ;
schema:domainIncludes osh:Design ;
osh:realms osh:DesignRealm ;
.
# osh:hasInterface
# a owl:ObjectProperty ;
# rdfs:label "has interface" ;
# rdfs:comment "Indicates that a design implements an osh:Interface; TODO Which side of the interface?" ;
# schema:rangeIncludes osh:Interface ;
# schema:domainIncludes osh:Design ;
# osh:realms osh:DesignRealm ;
# .
osh:providesInterface
a owl:ObjectProperty ;
rdfs:label "provides interface" ;
rdfs:comment "Indicates that a design *provides* an osh:Interface" ;
schema:rangeIncludes osh:Interface ;
schema:domainIncludes osh:Design ;
osh:realms osh:DesignRealm ;
.
osh:implementsInterface
a owl:ObjectProperty ;
rdfs:label "provides interface" ;
rdfs:comment "Indicates that a design *implements* an osh:Interface" ;
schema:rangeIncludes osh:Interface ;
schema:domainIncludes osh:Design ;
osh:realms osh:DesignRealm ;
.
osh:isDefinedBy
a owl:ObjectProperty ;
rdfs:label "is defined by" ;
rdfs:comment "Indicates that a thing is defined by/desgined in/documented in a specific osh:Design." ;
schema:rangeIncludes osh:Design ;
schema:domainIncludes osh:Thing ;
osh:realms osh:PhysicalRealm ;
.
# osh:isExample
# a owl:ObjectProperty ;
# rdfs:label "is example" ;
# rdfs:comment "Indicates that something is an example instance, not to be considered actual data, but to be used for documentation purposes." ;
# schema:rangeIncludes xsd:boolean ;
# schema:domainIncludes
# osh:Thing ,
# osh:Design ,
# osh:Regulation ,
# osh:Passport ,
# osh:Interface ;
# # osh:realms osh:DesignRealm ;
# .
# osh:BoM
# a owl:Class ;
# owl:sameAs okh:BoM ;
# rdfs:label "Bill of Materials" ;
# rdfs:subClassOf schema:SpreadsheetDigitalDocument ;
# schema:domainIncludes osh:Design ;
# osh:realms osh:DesignRealm ;
# .
# osh:ManufacturingInstructions
# a owl:Class ;
# rdfs:label "Manufacturing Instructions" ;
# schema:domainIncludes osh:Design ;
# osh:realms osh:DesignRealm ;
# .
# osh:UserManual
# a owl:Class ;
# rdfs:label "User Manual" ;
# schema:domainIncludes osh:Design ;
# osh:realms osh:DesignRealm ;
# .
# osh:ontVersion
# a owl:DatatypeProperty ;
# rdfs:label "OKH version" ;
# rdfs:comment "version of OSH specification the metadata is following (different version → different data fields)" ;
# rdfs:subPropertyOf schema:version ;
# schema:domainIncludes osh:Design ;
# osh:realms osh:DesignRealm ;
# owl:cardinality 1 ;
# .
# osh:repo
# a owl:ObjectProperty ;
# rdfs:label "repository" ;
# rdfs:comment '''
# URL to the place where development happens (typically the repository)" ;
# following this link people shall be able to contribute to the development
# (reporting issues, suggesting changes, connecting to the team etc.)" '''@en;
# rdfs:subPropertyOf schema:codeRepository ;
# schema:rangeIncludes schema:Url ;
# schema:domainIncludes osh:Design ;
# osh:realms osh:DesignRealm ;
# owl:cardinality 1 ;
# .
# osh:repoSnapshot
# a owl:ObjectProperty ;
# rdfs:label "respository snapshot" ;
# rdfs:comment "Repoistory snapshot (=specific version) URL" ;
# rdfs:subPropertyOf osh:repo ;
# .
# osh:version
# a owl:DatatypeProperty ;
# rdfs:label "version" ;
# rdfs:comment "version of this Component, preferably in the semantic versioning scheme (semver.org)" ;
# rdfs:subPropertyOf schema:version ;
# schema:rangeIncludes xsd:string ;
# schema:domainIncludes osh:Design ;
# osh:realms
# osh:PhysicalRealm ,
# osh:DesignRealm ;
# owl:cardinality 1 ;
# .
# osh:snapshotOf
# a owl:ObjectProperty ;
# rdfs:label "version of" ;
# rdfs:comment "connects specific versions of Modules with their versionless superclass" ;
# schema:rangeIncludes osh:Design ;
# schema:domainIncludes osh:Design ;
# osh:realms osh:DesignRealm ;
# .
# osh:license
# a owl:ObjectProperty ;
# rdfs:label "SPDX license identifier" ;
# rdfs:comment "view complete list under https://spdx.org/licenses/" ;
# schema:rangeIncludes spdxt:ListedLicense ; # aka SPDX license identifier for a single, atomar license
# schema:domainIncludes osh:Design ;
# osh:realms osh:DesignRealm ;
# owl:cardinality 1 ;
# .
# osh:cpcPatentClass
# a owl:ObjectProperty ;
# rdfs:label "Patent Class" ;
# rdfs:comment "International Patent Classification (IPC)" ;
# rdfs:subPropertyOf epo:classificationIPCInventive;
# schema:rangeIncludes xsd:string ;
# schema:domainIncludes osh:Design ;
# osh:realms osh:DesignRealm ;
# .
# osh:timestamp
# a owl:ObjectProperty ;
# rdfs:label "timestamp" ;
# rdfs:comment "following ISO 8601; see: <https://www.w3.org/TR/xmlschema11-2/#dateTimeStamp>" ;
# schema:rangeIncludes xsd:dateTimeStamp ;
# schema:domainIncludes osh:Design ;
# osh:realms osh:DesignRealm ;
# .
oshex:TractorMotorInterfaceY
a osh:HardwareInterface ;
rdfs:label "Tractor Motor Interface Y" ;
.
oshex:TractorX
a osh:Design ;
rdfs:label "Tractor X Design" ;
osh:providesInterface oshex:TractorMotorInterfaceY ;
.
oshex:TractorCylinderHeadZ
a osh:Design ;
rdfs:label "Tractor Cylinder-Head Z" ;
.
oshex:TractorXMotorGasoline
a osh:Design ;
rdfs:label "Tractor X Motor Gasoline" ;
osh:implementsInterface oshex:TractorMotorInterfaceY ;
osh:hasComponent oshex:TractorCylinderHeadZ ;
.
oshex:TractorXMotorDiesel
a osh:Design ;
rdfs:label "Tractor X Motor Diesel" ;
osh:implementsInterface oshex:TractorMotorInterfaceY ;
osh:hasComponent oshex:TractorCylinderHeadZ ;
.
oshex:BobbiesTractorMotorDiesel
a osh:Thing ;
rdfs:label "Bobbies Tractor Motor (Diesel)" ;
osh:isDefinedBy oshex:TractorXMotorDiesel ;
.
oshex:BobbiesFirstTractor
a osh:Thing ;
rdfs:label "Bobbies first Tractor" ;
osh:isDefinedBy oshex:TractorX ;
osh:hasPart oshex:BobbiesTractorMotorDiesel ;
.