@base . @prefix okh: <#> . @prefix cc: . @prefix dce: . @prefix dcterms: . @prefix npg: . @prefix obo: . @prefix orcid: . @prefix otrl: . @prefix owl: . @prefix patent: . @prefix rdf: . @prefix rdfs: . @prefix schema: . @prefix spdxt: . @prefix tsdc: . @prefix vann: . @prefix vs: . @prefix xsd: . # SPDX-FileCopyrightText: 2020 - 2021 Martin Häuer # SPDX-FileCopyrightText: 2020 - 2024 Robin Vobruba # # SPDX-License-Identifier: GPL-3.0-or-later <> a owl:Ontology ; vann:preferredNamespacePrefix "okh" ; vann:preferredNamespaceUri "https://w3id.org/oseg/ont/okh#" ; owl:versionInfo "1.1.0" ; owl:versionIRI ; dcterms:title "Open Know How (OKH) ontology"@en ; dcterms:description "Used for indexing, searching and comparing Open Source Hardware projects"@en ; schema:comment """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: , 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."""@en ; dcterms:language ; dce:creator "Martin Häuer " ; dcterms:creator orcid:0000-0002-1611-7129 ; dce:creator "Robin Vobruba " ; dcterms:creator orcid:0009-0004-3559-6542 ; dce:publisher "Robin Vobruba (Open Source Ecology Germany e.V.) " ; dce:issued "2021-08-24 16:32:33" ; dce:modified "2022-02-22 12:01:28" ; dcterms:license ; cc:license ; spdxt:ListedLicense "GPL-3.0-or-later" ; dce:source "https://github.com/OPEN-NEXT/OKH-LOSH/master/OKH-LOSH.ttl" ; . okh:Component a owl:Class ; rdfs:label "Component"@en ; rdfs:comment "Either a module (MOSH) or Part (POSH); more component types may be added in the future"@en ; vs:term_status "unstable" ; . okh:Module a owl:Class ; rdfs:label "Module"@en ; rdfs:comment "Module of Open Source Hardware (MOSH)"@en ; rdfs:subClassOf okh:Component ; vs:term_status "unstable" ; . okh:Part a owl:Class ; rdfs:label "Part"@en ; rdfs:comment "Piece of Open Source Hardware (POSH)"@en ; rdfs:subClassOf okh:Component ; vs:term_status "unstable" ; . okh:Software a owl:Class ; rdfs:label "Software"@en ; rdfs:comment "Software (including firmware) needed to run & use the OSH" ; rdfs:subClassOf okh:Component ; vs:term_status "unstable" ; . okh:Reference a owl:Class ; rdfs:label "unambiguous reference" ; vs:term_status "unstable" ; . okh:Publication a owl:Class ; rdfs:label "Scientific Publication" ; rdfs:comment "_scientific_ (that is: peer reviewed) publication that _contains_ the design files"; rdfs:subClassOf npg:Publication ; vs:term_status "unstable" ; . okh:Standard a owl:Class ; rdfs:label "Technical Standard"@en ; rdfs:comment "official standard used in the _design_ (not e.g. DIN SPEC 3105-1)" ; vs:term_status "unstable" ; . okh:WebsiteUrl a owl:Class ; rdfs:label "Website URL" ; rdfs:subClassOf okh:Reference ; rdfs:subClassOf schema:URL ; vs:term_status "unstable" ; . okh:FileUrl a owl:Class ; rdfs:label "permanent URL to file" ; rdfs:subClassOf okh:ComponentReference ; rdfs:subClassOf schema:URL ; vs:term_status "deprecated" ; owl:deprecated "true"^^xsd:boolean ; cc:deprecatedOn "2023-07-11"^^xsd:date ; schema:supersededBy okh:File ; . okh:File a owl:Class ; vs:term_status "unstable" ; rdfs:label "File" ; rdfs:comment "A file that forms part of the project, specified/located either by a URL (okh:url) or a repo-/project-relative path (okh:relativePath)." ; . okh:ManifestFile a owl:Class ; rdfs:label "manifest file" ; rdfs:comment "file holding the metadata" ; rdfs:subClassOf okh:File ; vs:term_status "unstable" ; . okh:Readme a owl:Class ; rdfs:label "Readme" ; rdfs:subClassOf okh:File ; vs:term_status "unstable" ; . okh:ContributionGuide a owl:Class ; rdfs:label "Contribution Guide" ; rdfs:subClassOf okh:File ; vs:term_status "unstable" ; . okh:Image a owl:Class ; vs:term_status "unstable" ; rdfs:label "Image" ; rdfs:subClassOf okh:File ; . okh:BoM a owl:Class ; rdfs:label "Bill of Materials" ; rdfs:subClassOf okh:File ; vs:term_status "unstable" ; . okh:SourceFile a owl:Class ; rdfs:label "source file" ; rdfs:subClassOf okh:File ; vs:term_status "unstable" ; . okh:ExportFile a owl:Class ; rdfs:label "exported source file" ; rdfs:subClassOf okh:File ; vs:term_status "unstable" ; . okh:AuxiliaryFile a owl:Class ; rdfs:label "auxiliary file (neither source nor export)" ; rdfs:subClassOf okh:File ; vs:term_status "unstable" ; . okh:ManufacturingInstructions a owl:Class ; rdfs:label "Manufacturing Instructions" ; rdfs:subClassOf okh:File ; vs:term_status "unstable" ; . okh:UserManual a owl:Class ; rdfs:label "User Manual" ; rdfs:subClassOf okh:File ; vs:term_status "unstable" ; . okh:OuterDimensions a owl:Class ; rdfs:label "outer dimensions"@en ; rdfs:comment "…of a module or a part"@en ; vs:term_status "unstable" ; . okh:Mass a owl:Class ; rdfs:label "mass"@en ; rdfs:comment "…of a module or a part"@en ; vs:term_status "unstable" ; . okh:ComponentReference a owl:Class ; rdfs:subClassOf okh:Reference ; rdfs:label "Component Reference" ; rdfs:comment ''' others shall be able to identify/procure this component only by the given reference(s), MOSH → URL to corresponding release POSH → URL to containing folder STD → standard designation (preferably naming the _latest_ standard) BUY → unambiguous reference'''@en ; vs:term_status "deprecated" ; owl:deprecated "true"^^xsd:boolean ; cc:deprecatedOn "2023-08-19"^^xsd:date ; . okh:okhv a owl:DatatypeProperty ; rdfs:label "OKH version" ; rdfs:comment "version of OKH specification the metadata is following (different version → different data fields)" ; rdfs:subPropertyOf schema:version ; vs:term_status "unstable" ; schema:domainIncludes okh:ManifestFile ; owl:cardinality 1 ; . okh:dataSource a owl:DatatypeProperty ; rdfs:label "Metadata Source" ; rdfs:comment "platform, where the crawler found the metadata (e.g. GitHub, Wikifactory)"@en ; rdfs:subPropertyOf schema:url ; vs:term_status "unstable" ; schema:domainIncludes okh:Module ; owl:cardinality 1 ; . okh:repoHost a owl:DatatypeProperty ; rdfs:label "Repository Host" ; rdfs:comment "platform where the OSH documentation is located (e.g. GitLab, Wikifactory or any self-hosted website or wiki)"@en ; rdfs:subPropertyOf schema:url ; vs:term_status "unstable" ; schema:domainIncludes okh:Module ; owl:cardinality 1 ; . okh:uploadMethod a owl:DatatypeProperty ; rdfs:label "Upload Method" ; rdfs:comment "e.g. auto (fully integrated platforms) or manifest file (for connected platforms)"@en ; vs:term_status "unstable" ; schema:rangeIncludes xsd:string ; schema:domainIncludes okh:Component ; owl:cardinality 1 ; . ## ----- identification ----- okh: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 ; vs:term_status "unstable" ; schema:rangeIncludes okh:WebsiteUrl ; owl:cardinality 1 ; schema:domainIncludes okh:Module ; . okh:repoSnapshot a owl:ObjectProperty ; rdfs:label "respository snapshot" ; rdfs:comment "Repoistory snapshot (=specific version) URL" ; rdfs:subPropertyOf okh:repo ; vs:term_status "unstable" ; schema:rangeIncludes okh:WebsiteUrl ; owl:cardinality 1 ; schema:domainIncludes okh:Module ; . okh: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 ; vs:term_status "unstable" ; schema:domainIncludes okh:Module ; owl:cardinality 1 ; . okh:forkOf a owl:ObjectProperty ; rdfs:label "fork of" ; rdfs:subPropertyOf schema:isBasedOn ; vs:term_status "unstable" ; owl:cardinality 1 ; schema:domainIncludes okh:Module, okh:Part ; . okh:versionOf a owl:ObjectProperty ; rdfs:label "version of" ; rdfs:comment "connects specific versions of Modules with their versionless superclass" ; vs:term_status "unstable" ; schema:rangeIncludes okh:Module ; schema:domainIncludes okh:Module ; . okh:documentationLanguage a owl:DatatypeProperty ; rdfs:label "documentation language" ; rdfs:comment ''' IETF language tag following the BCP 47 standard e.g. en-GB denotes the language of the documentation for the component subject '''@en; rdfs:subPropertyOf schema:inLanguage ; vs:term_status "unstable" ; owl:cardinality 1 ; schema:domainIncludes okh:Module, okh:Part ; . ## ----- legal ----- okh:licensor a owl:ObjectProperty ; rdfs:label "licensor" ; rdfs:comment "organization/individual behind the hardware design (holder of intellectual property)" ; rdfs:subPropertyOf schema:copyrightHolder ; vs:term_status "unstable" ; schema:rangeIncludes schema:Organization, schema:Person ; schema:domainIncludes okh:Module ; owl:cardinality 1 ; . okh:organization a owl:ObjectProperty ; rdfs:label "organization" ; rdfs:comment "organization representing (most) contributors of this project" ; vs:term_status "unstable" ; schema:rangeIncludes schema:Organization ; schema:domainIncludes okh:Module ; . okh:spdxLicense a owl:ObjectProperty ; rdfs:label "SPDX license identifier" ; rdfs:comment "view complete list under https://spdx.org/licenses/" ; vs:term_status "unstable" ; schema:domainIncludes okh:Module ; schema:rangeIncludes spdxt:ListedLicense ; # aka SPDX license identifier for a single, atomar license owl:cardinality 1 ; . okh:alternativeLicense a owl:ObjectProperty ; rdfs:label "non-SPDX license" ; rdfs:comment "URL to legal code of a license without SPDX identifier, hence OSHWA-compliance is to be checked manually" ; # rdfs:subPropertyOf spdxt:License ; vs:term_status "unstable" ; schema:domainIncludes okh:Module ; schema:rangeIncludes okh:File ; owl:cardinality 1 ; . ## ----- informative ----- # okh:contributorCount # a owl:DatatypeProperty ; # rdfs:label "number of conributors participating in the project" ; # vs:term_status "unstable" ; # schema:domainIncludes okh:Module ; # schema:rangeIncludes xsd:int ; # . ## ----- development stage ----- okh:technologyReadinessLevel a owl:ObjectProperty ; rdfs:label "Technology Readiness Level (TRL)" ; rdfs:comment "…using the OTRL definitions" ; vs:term_status "unstable" ; owl:cardinality 1 ; schema:rangeIncludes otrl:OTRL ; schema:domainIncludes okh:Module ; . okh:documentationReadinessLevel a owl:ObjectProperty ; rdfs:label "Documentation Readiness Level (DLR)" ; rdfs:comment "…using the ODRL definitions" ; vs:term_status "unstable" ; owl:cardinality 1 ; schema:rangeIncludes otrl:ODRL ; schema:domainIncludes okh:Module ; . okh:attestation a owl:ObjectProperty ; rdfs:label "attestation" ; rdfs:comment "permanent URL to evidence of compliance (OSHWA, FSF, DIN SPEC 3105)" ; vs:term_status "unstable" ; schema:rangeIncludes okh:WebsiteUrl ; schema:domainIncludes okh:Module ; . okh:hasPublication a owl:ObjectProperty ; rdfs:label "has Publication" ; rdfs:comment "design files of this OSH modules have been peer reviewed in a scientific publication" ; vs:term_status "unstable" ; rdfs:subPropertyOf npg:hasPublication; schema:domainIncludes okh:Module ; . # okh:certificate # a owl:ObjectProperty ; # rdfs:label "certificate" ; # rdfs:comment "official certificate, such as CE mark" ; # FIXME rdfs:subPropertyOf ; # vs:term_status "unstable" ; # schema:domainIncludes okh:Module ; # . ## ----- basic description ----- okh:cpcPatentClass a owl:ObjectProperty ; rdfs:label "Patent Class" ; rdfs:comment "International Patent Classification (IPC)" ; rdfs:subPropertyOf patent:classificationIPCInventive; vs:term_status "unstable" ; schema:domainIncludes okh:Module ; schema:rangeIncludes xsd:string ; . okh:compliesWith a owl:ObjectProperty ; rdfs:label "complies with a technical standard" ; # rdfs:subPropertyOf wdp:P5009 ; vs:term_status "unstable" ; schema:domainIncludes okh:Component ; schema:rangeIncludes okh:Standard ; . okh:standardID a owl:DatatypeProperty ; rdfs:label "Document identifier for the technical standard" ; # rdfs:subPropertyOf wdp:P5046 ; vs:term_status "unstable" ; schema:rangeIncludes xsd:string ; schema:domainIncludes okh:Standard ; . okh:function a owl:DatatypeProperty ; rdfs:label "functional description" ; rdfs:comment ''' functional description, e.g. what it actually does, what problem it solves, for whom, under which conditions etc. so if you wish that someone finds & uses your okh specifically e.g. for COVID-19-crisis response, include relevant keywords in this field optional: description of input, output and interfaces'''@en ; rdfs:subPropertyOf obo:BFO_0000016 ; # aka function vs:term_status "unstable" ; owl:cardinality 1 ; schema:domainIncludes okh:Module ; schema:rangeIncludes xsd:string ; . okh:hasReadme a owl:ObjectProperty ; rdfs:label "has Readme" ; rdfs:comment "links to the corresponding Readme" ; vs:term_status "unstable" ; schema:rangeIncludes okh:Readme ; schema:domainIncludes okh:Module ; . okh:hasContributionGuide a owl:ObjectProperty ; rdfs:label "has Contribution Guide" ; rdfs:comment "links to the corresponding Contribution Guide" ; vs:term_status "unstable" ; schema:rangeIncludes okh:ContributionGuide ; schema:domainIncludes okh:Module ; . okh:hasBoM a owl:ObjectProperty ; rdfs:label "has Bill of Materials" ; rdfs:comment "links to the corresponding Bill of Materials" ; vs:term_status "unstable" ; schema:rangeIncludes okh:BoM ; schema:domainIncludes okh:Module ; . okh:hasComponent a owl:ObjectProperty ; rdfs:label "has Component" ; 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." ; vs:term_status "unstable" ; schema:rangeIncludes okh:Part, okh:Module, okh:WebsiteUrl ; schema:domainIncludes okh:Module ; . okh:hasImage a owl:ObjectProperty ; rdfs:label "has image" ; rdfs:comment "links to the corresponding Image" ; vs:term_status "unstable" ; rdfs:subPropertyOf schema:image ; schema:rangeIncludes okh:Image ; schema:domainIncludes okh:Component ; . okh:functionalMetadata a owl:DatatypeProperty ; rdfs:label "functionality metadata" ; rdfs:comment "Metadata addressing functionality, such as dimensions, material, weight, RPM,… (not standardized)" ; rdfs:subPropertyOf schema:value ; vs:term_status "unstable" ; schema:rangeIncludes schema:StructuredValue ; schema:domainIncludes okh:Module ; . okh:productionMetadata a rdf:Property ; rdfs:label "production metadata" ; rdfs:comment "production-relevant metadata, such as material, manufacturing technology, outer dimensions, smallest tolerance, finest surface roughness" ; rdfs:subPropertyOf schema:value ; vs:term_status "unstable" ; schema:domainIncludes okh:Module, okh:Part ; . okh:manufacturingProcess a owl:DatatypeProperty ; rdfs:label "manufacturing process" ; rdfs:subPropertyOf okh:productionMetadata ; vs:term_status "unstable" ; . okh:material a owl:DatatypeProperty ; rdfs:label "material" ; rdfs:subPropertyOf okh:productionMetadata ; vs:term_status "unstable" ; . okh:hasOuterDimensions a owl:ObjectProperty ; rdfs:label "outer dimensions using OpenSCAD primitives" ; rdfs:comment "https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids" ; schema:rangeIncludes okh:OuterDimensions ; rdfs:subPropertyOf okh:productionMetadata ; vs:term_status "unstable" ; . okh:hasMass a owl:ObjectProperty ; rdfs:label "mass of the component" ; rdfs:subPropertyOf okh:productionMetadata ; vs:term_status "unstable" ; schema:rangeIncludes okh:Mass ; . okh:openSCAD a owl:DatatypeProperty ; rdfs:label "OpenSCAD code defining a shape" ; vs:term_status "unstable" ; schema:domainIncludes okh:OuterDimensions ; schema:rangeIncludes xsd:string ; . okh:openScad vs:term_status "deprecated" ; owl:deprecated "true"^^xsd:boolean ; cc:deprecatedOn "2023-07-06"^^xsd:date ; schema:supersededBy okh:openSCAD ; owl:sameAs okh:openSCAD ; . okh:unit a owl:DatatypeProperty ; rdfs:label "unit" ; rdfs:comment "mm, cm, m, g, kg" ; vs:term_status "unstable" ; schema:domainIncludes okh:Mass, okh:OuterDimensions ; . okh:value a owl:DatatypeProperty ; rdfs:label "value" ; vs:term_status "unstable" ; schema:domainIncludes okh:Mass ; . okh:smallestToleranceClass a owl:ObjectProperty ; rdfs:label "smallest tolerance class (following ISO 286)" ; # fixme rdfs:subPropertyOf ; rdfs:subPropertyOf okh:productionMetadata ; vs:term_status "unstable" ; schema:domainIncludes okh:Part ; . okh:hasManifestFile a owl:ObjectProperty ; rdfs:label "has manifest file" ; vs:term_status "unstable" ; schema:rangeIncludes okh:ManifestFile ; schema:domainIncludes okh:Module, okh:Part ; . okh:doi a owl:DatatypeProperty ; rdfs:label "DOI"@en ; rdfs:comment "this publication has a digital object identifier (DOI)"@en ; schema:domainIncludes okh:Publication ; rdfs:subPropertyOf npg:doi ; vs:term_status "unstable" ; . okh:relativePath a owl:ObjectProperty ; rdfs:label "Project-/Repo-relative file path, directly starting with the first path element, *NOT* with '/' or './'" ; rdfs:subPropertyOf schema:url ; vs:term_status "unstable" ; schema:domainIncludes okh:File ; # NOTE Looked for HOURS to find a file-path, file-location, ... anything like that in tthe RDF world, suitable for relative paths, and there seems to be none! # Closest thing was this: , # which links to this: , # which does not allow for relative paths, only for absolute ones. # (Searched with ) schema:rangeIncludes xsd:string ; . okh:url a owl:ObjectProperty ; rdfs:label "file URL"@en ; rdfs:comment "Global file locator, using either the HTTP or the HTTPS protocol."@en ; rdfs:subPropertyOf schema:url ; vs:term_status "unstable" ; schema:domainIncludes okh:File ; . okh:fileUrl a owl:ObjectProperty ; rdfs:label "file URL" ; rdfs:subPropertyOf schema:url ; schema:domainIncludes okh:File ; vs:term_status "deprecated" ; owl:deprecated "true"^^xsd:boolean ; cc:deprecatedOn "2023-07-11"^^xsd:date ; schema:supersededBy okh:url ; . okh:permaURL a owl:ObjectProperty ; rdfs:label "Permanent file URL - It was not 'permanent', but rather 'frozen in time', and it was alsoThis was used in the karwler, but badly. Things simply should not be done that way, but rather with a separate manifest file, where either everything is frozen, or nothing is, and the manifest file (internally) itsself being marked accordingly." ; schema:domainIncludes okh:File ; vs:term_status "deprecated" ; owl:deprecated "true"^^xsd:boolean ; cc:deprecatedOn "2023-07-11"^^xsd:date ; . okh:fileFormat a owl:ObjectProperty ; rdfs:label "file format" ; rdfs:subPropertyOf schema:encodingFormat ; vs:term_status "unstable" ; schema:domainIncludes okh:File ; . okh:timestamp a owl:ObjectProperty ; rdfs:label "timestamp" ; rdfs:comment "following ISO 8601; see: " ; vs:term_status "unstable" ; schema:domainIncludes okh:Module ; schema:rangeIncludes xsd:dateTimeStamp ; . okh:source a owl:ObjectProperty ; rdfs:label "source file" ; rdfs:comment "relative link to a source file" ; vs:term_status "unstable" ; schema:rangeIncludes okh:SourceFile ; schema:domainIncludes okh:Module, okh:Part ; . okh:export a owl:ObjectProperty ; rdfs:label "exported source file" ; rdfs:comment "URL to a (generated) exported source file" ; vs:term_status "unstable" ; schema:rangeIncludes okh:ExportFile ; schema:domainIncludes okh:Module, okh:Part ; . okh:auxiliary a owl:ObjectProperty ; rdfs:label "has auxiliary file" ; rdfs:comment "reference to an auxiliary file" ; vs:term_status "unstable" ; schema:rangeIncludes okh:AuxiliaryFile ; schema:domainIncludes okh:Module, okh:Part ; . okh:hasUserManual a owl:ObjectProperty ; rdfs:label "has User Manual" ; vs:term_status "unstable" ; schema:rangeIncludes okh:UserManual ; schema:domainIncludes okh:Module ; . okh:hasManufacturingInstructions a owl:ObjectProperty ; rdfs:label "has Manufacturing Instructions" ; vs:term_status "unstable" ; schema:rangeIncludes okh:ManufacturingInstructions ; schema:domainIncludes okh:Module, okh:Part ; . okh:tsdc a owl:ObjectProperty ; rdfs:label "TsDC" ; rdfs:comment "Applicable Technology-specific Documentation Criteria, according to DIN SPEC 3105-1, e.g. `tsdc:3DP`" ; vs:term_status "unstable" ; schema:rangeIncludes tsdc:OHTsDC ; schema:domainIncludes okh:Component ; . okh:relatedTsdc vs:term_status "deprecated" ; owl:deprecated "true"^^xsd:boolean ; cc:deprecatedOn "2023-07-10"^^xsd:date ; schema:supersededBy okh:tsdc ; owl:sameAs okh:tsdc ; . # source, export okh:hasSoftware a owl:ObjectProperty ; rdfs:label "has Software" ; vs:term_status "unstable" ; schema:rangeIncludes okh:Software ; schema:domainIncludes okh:Module ; . okh:release a owl:DatatypeProperty ; rdfs:label "release" ; rdfs:comment "URL to release" ; # rdfs:subPropertyOf schema:url ; vs:term_status "unstable" ; schema:domainIncludes okh:Module, okh:Software ; . okh:installationGuide a owl:DatatypeProperty ; rdfs:label "Installation Guide" ; # rdfs:subPropertyOf schema:url ; vs:term_status "unstable" ; schema:domainIncludes okh:Software ; . ### ----- source/export subproperties ----- ### (from TsDC) # #okh:rationale # a owl:ObjectProperty ; # rdfs:label "rationale" ; # vs:term_status "unstable" ; # schema:rangeIncludes # okh:export, # okh:source ; # schema:domainIncludes okh:Component ; # . # #okh:design # a owl:ObjectProperty ; # rdfs:label "design file" ; # vs:term_status "unstable" ; # schema:rangeIncludes # okh:export, # okh:source ; # schema:domainIncludes # okh:Module, # okh:Part ; # .