PREFIX okh: <http://w3id.org/oseg/ont/okh#>
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#>

<http://purl.org/dc/terms/Standard> a rdfs:Class .

okh:Dimensions a rdfs:Class ;
  rdfs:label "outer dimensions"@en ;
  rdfs:comment """… of a module or a part;
This follows the same logic as the \"bounding-box\" in computer graphics,
but in the physical world.
This is commonly used to calculate (or at least estimate)
how many items of a manufactured module or part
can be packed into storage space of known dimensions."""@en ;
  rdfs:subClassOf <http://purl.org/dc/terms/SizeOrDuration> .

okh:Standard a rdfs:Class ;
  rdfs:label "technical standard"@en ;
  rdfs:comment "official standard used in the _design_ (_not_ e.g. DIN SPEC 3105-1)"@en ;
  rdfs:subClassOf <http://purl.org/dc/terms/Standard> .

okh:Part a rdfs:Class ;
  rdfs:label "part"@en ;
  rdfs:comment "Piece of Open Source Hardware (POSH)"@en ;
  rdfs:subClassOf okh:Component .

<http://xmlns.com/foaf/0.1/Image> a rdfs:Class .

<http://ns.nature.com/terms/Publication> a rdfs:Class .

<http://www.w3.org/2004/02/skos/core#Concept> a rdfs:Class .

<http://schema.org/TextDigitalDocument> a rdfs:Class .

okh:Software a rdfs:Class ;
  rdfs:label "software"@en ;
  rdfs:comment "Software (including firmware) needed to run & use the OSH"@en ;
  rdfs:subClassOf okh:Component , <http://purl.org/dc/dcmitype/Software> .

okh:Publication a rdfs:Class ;
  rdfs:label "scientific publication"@en ;
  rdfs:comment "_scientific_ (that is: peer reviewed) publication that _contains_ the design files"@en ;
  rdfs:subClassOf <http://ns.nature.com/terms/Publication> .

<http://purl.org/dc/dcmitype/Software> a rdfs:Class .

<http://w3id.org/oseg/ont/ods#File> a rdfs:Class .

<http://schema.org/ImageObject> a rdfs:Class .

okh:Component a rdfs:Class ;
  rdfs:label "component"@en ;
  rdfs:comment "Either a module (MOSH) or Part (POSH); more component types may be added in the future"@en .

okh:ManifestFile a rdfs:Class ;
  rdfs:label "manifest file"@en ;
  rdfs:comment "source file holding this projects OKH data in TOML format, from which RDF is generated"@en ;
  rdfs:subClassOf <http://schema.org/TextDigitalDocument> , <http://w3id.org/oseg/ont/ods#File> .

<http://purl.org/dc/dcmitype/StillImage> a rdfs:Class .

okh:Image a rdfs:Class ;
  rdfs:label "image"@en ;
  rdfs:subClassOf <http://purl.org/dc/dcmitype/StillImage> , <http://schema.org/ImageObject> , <http://w3id.org/oseg/ont/ods#File> , <http://xmlns.com/foaf/0.1/Image> .

<http://purl.org/dc/terms/SizeOrDuration> a rdfs:Class .

<https://w3id.org/linkml/Any> a rdfs:Class ;
  rdfs:comment "An unconstrained type or object" .

okh:Module a rdfs:Class ;
  rdfs:label "module"@en ;
  rdfs:comment "Module of Open Source Hardware (MOSH)"@en ;
  rdfs:subClassOf okh:Component .

<http://data.epo.org/linked-data/def/patent/classificationIPCInventive> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://ns.nature.com/terms/doi> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://ns.nature.com/terms/hasPublication> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://purl.obolibrary.org/obo/BFO_0000016> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://purl.org/dc/terms/conformsTo> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://purl.org/dc/terms/format> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://purl.org/dc/terms/hasFormat> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://purl.org/dc/terms/identifier> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://purl.org/dc/terms/instructionalMethod> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://schema.org/abstract> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://schema.org/image> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://schema.org/inLanguage> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://schema.org/isBasedOn> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://schema.org/keywords> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://schema.org/value> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://schema.org/version> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:attestation a rdf:Property ;
  rdfs:label "attestation"@en ;
  rdfs:comment """A permanent URL to a valid attestation;
evidence of completeness and compliance to OSH principles,
for example from OSHWA, FSF, or DIN SPEC 3105.

Issuing conformity assessment bodies according to DIN SPEC 3105-2:

- [Open Hardware Observatory](https://en.oho.wiki/wiki/Request_certification_for_your_project)
- [Open Source Ecology Germany](https://gitlab.opensourceecology.de/verein/projekte/cab/CAB)

OSHWA:

- [OSHWA certification programme](https://certification.oshwa.org/)

FSF (computing only):

- [Hardware Devices that Support GNU/Linux](https://www.fsf.org/resources/hw)
"""@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:compliesWith a rdf:Property ;
  rdfs:label "complies with"@en ;
  rdfs:comment "Links to a standard the subject complies with"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://purl.org/dc/terms/conformsTo> .

okh:cpcPatentClass a rdf:Property ;
  rdfs:label "patent class"@en ;
  rdfs:comment """Cooperative Patent Classification identifier (CPC-ID)
of the International Patent Classification (IPC)
that describes best the field of technology of the OSH module.
To find the meaning of one,
or to find one fitting to your project,
please use this resource:
<https://worldwide.espacenet.com/classification>"""@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://data.epo.org/linked-data/def/patent/classificationIPCInventive> .

okh:depicts a rdf:Property ;
  rdfs:label "depicts"@en ;
  rdfs:comment """Human oriented description of what is visible in the image.
This matters for example:

- for visually impaired or blind people
- in case the image is not available
- to be able to put it as a caption next to the image"""@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://xmlns.com/foaf/0.1/depicts> , <http://schema.org/abstract> .

okh:depth a rdf:Property ;
  rdfs:label "depth [mm]"@en ;
  rdfs:comment "The outer depth of the product"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:documentationLanguage a rdf:Property ;
  rdfs:label "documentation language"@en ;
  rdfs:comment """denotes the language of the documentation.
The concrete format is an IETF language tag
following the BCP 47 standard;
e.g. \"en-GB\""""@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://schema.org/inLanguage> .

okh:documentationReadinessLevel a rdf:Property ;
  rdfs:label "Documentation Readiness Level (DLR)"@en ;
  rdfs:comment "Indicates the development stage of the **documentation** using the ODRL definitions; see the OTRL ontology."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:doi a rdf:Property ;
  rdfs:label "DOI"@en ;
  rdfs:comment "The digital object identifier (DOI) associated with the publication"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://ns.nature.com/terms/doi> .

okh:fillsSlot a rdf:Property ;
  rdfs:label "fills slot"@en ;
  rdfs:comment """Denotes the slot the image fills within the subject it belongs to.
You may also think of it as the 'role' the image plays for its parent.
The available slots are predefined,
see the [OKH image slots](http://w3id.org/oseg/ont/okhimg#slots);
there you will also read about the ability to define custom ones,
though you might also consider proposing a new common tag
[in an issue](https://github.com/iop-alliance/OpenKnowHow/issues/new).
An image can fill multiple slots,
but each slot can be filled at most once.
This is useful for things like the projects icon,
or the left-side view of the 3D model."""@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://schema.org/keywords> .

okh:forkOf a rdf:Property ;
  rdfs:label "fork of"@en ;
  rdfs:comment "Indicates that this project was split of (aka forked) from an other project at some point in the past"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://schema.org/isBasedOn> .

okh:function a rdf:Property ;
  rdfs:label "functional description"@en ;
  rdfs:comment """What does the hardware actually do,
what problem does it solve,
for whom,
under which conditions etc.

If you wish that someone finds & uses your OSH -
specifically e.g. for solving a concrete medical issue -
include relevant keywords in this field.

Optional:
description of input, output and interfaces"""@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://purl.obolibrary.org/obo/BFO_0000016> .

okh:functionalMetadata a rdf:Property ;
  rdfs:label "functionality metadata"@en ;
  rdfs:comment "Metadata addressing functionality, such as dimensions, material, weight, RPM,… (not standardized)"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://schema.org/value> .

okh:hasAuxiliary a rdf:Property ;
  rdfs:label "has auxiliary file"@en ;
  rdfs:comment "This links to files associated with the subject, which classify neither as source nor as export, but are still useful in the repository"@en ;
  rdfs:seeAlso okh:hasExport , okh:hasSource ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:hasBoM a rdf:Property ;
  rdfs:label "has Bill of Materials"@en ;
  rdfs:comment "links to the corresponding Bill of Materials, which is a list or table of the parts required to build a component"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:hasComponent a rdf:Property ;
  rdfs:label "has Component"@en ;
  rdfs:comment "Links to sub-components of the Module. In the case of that sub-component being an external Module, it has to refer to a snapshot of the RDF object representing that OKH Module. Each sub-component should also appear in the BoM."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:hasContributionGuide a rdf:Property ;
  rdfs:label "has contribution guide"@en ;
  rdfs:comment "links to the corresponding Contribution Guide"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://purl.org/dc/terms/instructionalMethod> .

okh:hasExport a rdf:Property ;
  rdfs:label "has exported file"@en ;
  rdfs:comment "Links to a file that was generated/exported from a source file of the project"@en ;
  rdfs:seeAlso okh:hasSource , okh:hasAuxiliary ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:hasImage a rdf:Property ;
  rdfs:label "has image"@en ;
  rdfs:comment "links to the corresponding Image"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://schema.org/image> .

okh:hasManifestFile a rdf:Property ;
  rdfs:label "has manifest file"@en ;
  rdfs:comment "Links to the source TOML manifest file for (this) RDF data"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://purl.org/dc/terms/hasFormat> .

okh:hasManufacturingInstructions a rdf:Property ;
  rdfs:label "has manufacturing instructions"@en ;
  rdfs:comment "Links to a file containing a manual/instructions of some kind, that explain how to manufacture the hardware."@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://purl.org/dc/terms/instructionalMethod> .

okh:hasMass a rdf:Property ;
  rdfs:label "mass [g]"@en ;
  rdfs:comment "mass of the component in g"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf okh:productionMetadata .

okh:hasOuterDimensions a rdf:Property ;
  rdfs:label "outer dimensions"@en ;
  rdfs:comment "defined through width, depth and height in mm"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://purl.org/dc/terms/format> , okh:productionMetadata .

okh:hasPublication a rdf:Property ;
  rdfs:label "has Publication"@en ;
  rdfs:comment "design files of this OSH module have been peer reviewed in the linked-to scientific publication"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://ns.nature.com/terms/hasPublication> .

okh:hasReadme a rdf:Property ;
  rdfs:label "has ReadMe"@en ;
  rdfs:comment "repo-relative path (or absolute HTTP(S) URL) to to the corresponding ReadMe, which is the (human) entry-point into (the sources of) an OSH project"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://purl.org/dc/terms/instructionalMethod> .

okh:hasSoftware a rdf:Property ;
  rdfs:label "has software"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:hasSource a rdf:Property ;
  rdfs:label "has source file"@en ;
  rdfs:comment "Links to a file that forms part of the sources of the project; meaning, these are the primary files the designers and other contributors of the project are working on."@en ;
  rdfs:seeAlso okh:hasExport , okh:hasAuxiliary ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:hasTag a rdf:Property ;
  rdfs:label "has tag"@en ;
  rdfs:comment """Links to a tag fit to describe the image.
The available tags are predefined,
see the [OKH image tags](http://w3id.org/oseg/ont/okhimg#tags);
there you will also read about the ability to define custom ones,
though you might also consider proposing a new common tag
[in an issue](https://github.com/iop-alliance/OpenKnowHow/issues/new).
An image can have multiple tags
and each tag can be used by multiple images
even within a single project."""@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://schema.org/keywords> .

okh:hasUserManual a rdf:Property ;
  rdfs:label "has user manual"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://purl.org/dc/terms/instructionalMethod> .

okh:height a rdf:Property ;
  rdfs:label "height [mm]"@en ;
  rdfs:comment "The outer height of the product"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:manufacturingProcess a rdf:Property ;
  rdfs:label "manufacturing process"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf okh:productionMetadata .

okh:material a rdf:Property ;
  rdfs:label "material"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf okh:productionMetadata .

okh:name a rdf:Property ;
  rdfs:label "name"@en ;
  rdfs:comment "Working title of the OSH component"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:normalizedManifestContent a rdf:Property ;
  rdfs:label "has normalized manifest content"@en ;
  rdfs:comment """Points to a string literal containing the normalized (by the scraper)
content of the (TOML) manifest file, zlib compressed and base64 encoded.
We provide this,
so it can be used as a base for a manually curated manifest file for the project,
for a project that was scraped through a process that does not involve a manifest file,
like through an API of the hosting platform.
You should **not** use this as a data-source,
e.g. for searching the name of the project;
please use the RDF data for that!"""@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:okhv a rdf:Property ;
  rdfs:label "OKH version"@en ;
  rdfs:comment """The version of the OKH specification
the OSH projects metadata claims to follow.
Different version → different data fields in this file.
This describes the scraped-dataset,
so it refers to the OKH version the original meta-data at the source adheres to,
meaning the e.g. the TOML manifest manually created yb the project maintainers,
or the OKH v1 YAML manifest generated by the hosting platforms API.

The OKH version the final RDF data adheres to,
is specified by the OKH IRI it uses,
and simultaneously by the version defined in the owl:Ontology element
that is located at that IRI.

In general, this property will link to the same or an earlier version of the OKH spec,
compared to the version defined by the OKH namespace IRI
in the RDF version of a projects data."""@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://schema.org/version> .

okh:organization a rdf:Property ;
  rdfs:label "organization"@en ;
  rdfs:comment "organization of the licensor or that represents (some of) the contributors of the project"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:productionMetadata a rdf:Property ;
  rdfs:label "production metadata"@en ;
  rdfs:comment "production-relevant metadata, such as material, manufacturing technology, outer dimensions, smallest tolerance, finest surface roughness"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://schema.org/value> .

okh:release a rdf:Property ;
  rdfs:label "release"@en ;
  rdfs:comment "URL to release"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:smallestToleranceClass a rdf:Property ;
  rdfs:label "smallest tolerance class"@en ;
  rdfs:comment "according to the ISO 286 standard"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf okh:productionMetadata .

okh:standardID a rdf:Property ;
  rdfs:label "document ID"@en ;
  rdfs:comment "document identifier for the technical standard"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://purl.org/dc/terms/identifier> .

okh:technologyReadinessLevel a rdf:Property ;
  rdfs:label "Technology Readiness Level (TRL)"@en ;
  rdfs:comment "Indicates the development stage of the **hardware design** using the OTRL definitions; see the OTRL ontology."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:tsdc a rdf:Property ;
  rdfs:label "has related TsDC"@en ;
  rdfs:comment "Applicable _**T**echnology-**s**pecific **D**ocumentation **C**riteria_, according to DIN SPEC 3105-1, e.g. `tsdc:3DP`"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:version a rdf:Property ;
  rdfs:label "version"@en ;
  rdfs:comment "version of this Module, preferably following the [semantic versioning-scheme v2.0.0](https://semver.org/#semantic-versioning-200)"@en ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf <http://schema.org/version> .

okh:versionOf a rdf:Property ;
  rdfs:label "version of"@en ;
  rdfs:comment "connects specific versions of Modules with their versionless superclass"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

okh:width a rdf:Property ;
  rdfs:label "width [mm]"@en ;
  rdfs:comment "The outer width of the product"@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

<http://xmlns.com/foaf/0.1/depicts> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .
