@base             <https://w3id.org/oseg/ont/tsdc/requirements> .
@prefix tsdcr:    <#> .
@prefix cc:       <http://creativecommons.org/ns#> .
@prefix dcat:     <http://www.w3.org/ns/dcat#> .
@prefix dcterms:  <http://purl.org/dc/terms/> .
@prefix osegprof: <https://w3id.org/oseg/ont/oseg-profiles#> .
@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 schema:   <http://schema.org/> .
@prefix spdxt:    <http://spdx.org/rdf/terms#> .
@prefix spdxl:    <https://spdx.org/licenses/> .
@prefix tsdc:     <https://w3id.org/oseg/ont/tsdc/core#> .
@prefix vann:     <http://purl.org/vocab/vann/> .
@prefix xsd:      <http://www.w3.org/2001/XMLSchema#> .

<>
  a owl:Ontology ;
  vann:preferredNamespacePrefix "tsdcr" ;
  vann:preferredNamespaceUri "https://w3id.org/oseg/ont/tsdc/requirements#" ;
  owl:versionInfo "0.1" ;
  owl:versionIRI <https://w3id.org/oseg/ont/0.2/tsdc/requirements> ;
  dcterms:title "Technology specific Documentation Criteria (TsDC) - Requirements"@en ;
  dcterms:description "A modular standard modal for specification requirements for Open-Hardware projects, associated with the DIN Open-Hardware Norm and Guideline."@en ;
  schema:comment '''
# SPDX-FileCopyrightText: 2020 - 2021 Martin Häuer <martin.haeuer@ose-germany.de>
# SPDX-FileCopyrightText: 2020 - 2022 Robin Vobruba <hoijui.quaero@gmail.com>
#
# SPDX-License-Identifier: GPL-3.0-or-later
''' ;
  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:
<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.'''@en ;
  dcterms:language <http://id.loc.gov/vocabulary/iso639-1/en> ;
  dcterms:created "2019-11-29Z"^^xsd:date ;
  dcterms:creator osegprof:martinHaeuer ;
  schema:creator osegprof:martinHaeuer ;
  dcterms:creator osegprof:robinVobruba ;
  schema:creator osegprof:robinVobruba ;
  dcterms:issued "2021-06-10Z"^^xsd:date ;
  dcterms:license "https://www.gnu.org/licenses/gpl-3.0.txt" ;
  cc:license "https://www.gnu.org/licenses/gpl-3.0.txt" ;
  spdxt:licenseDeclared spdxl:GPL-3.0-or-later ;
  dcterms:source "https://gitlab.com/OSEGermany/oh-tsdc/-/blob/master/tsdc-req.ttl" ;
  schema:codeRepository "https://gitlab.com/OSEGermany/oh-tsdc/" ;
  dcat:keyword "TsDC", "hardware", "design", "open-source", "open-source-hardware", "requirements" ;
  dcat:contactPoint "https://gitlab.com/OSEGermany/oh-tsdc/" ;
  .

tsdcr:AdditionalManufacturingFiles
  a owl:Class ;
  tsdc:isBelow tsdcr:CommonSourceFiles ;
  rdfs:label "Additional Manufacturing Files"@en ;
  rdfs:comment "e.g. STL files for additive manufacturing processes"@en ;
  .

tsdcr:Assembly
  a tsdcr:RequirementSpecifier ;
  rdfs:label "Assembly"@en ;
  tsdcr:commonSourceFiles tsdcr:AssemblyDrawing ;
  tsdcr:commonSourceFiles tsdcr:BOM ;
  tsdcr:commonSourceFiles tsdcr:DismantlingPlan ;
  tsdcr:commonSourceFiles tsdcr:ManufacturingPlan ;
  tsdcr:describesReqsFor tsdc:Assembly ;
  tsdcr:requiredInfo tsdcr:AssemblyInstructions ;
  tsdcr:requiredInfo tsdcr:Geometry ;
  tsdcr:requiredInfo tsdcr:InvolvedComponents ;
  tsdcr:requiredInfo tsdcr:Junctions ;
  tsdcr:requiredInfo tsdcr:ManufacturingTechnology ;
  .

tsdcr:AssemblyDrawing
  a owl:Class ;
  tsdc:isBelow tsdcr:CommonSourceFiles ;
  rdfs:label "Assembly Drawing"@en ;
  .

tsdcr:AssemblyInstructions
  a owl:Class ;
  tsdc:isBelow tsdcr:RequiredInformation ;
  rdfs:label "Assembly Instructions"@en ;
  .

tsdcr:BOM
  a owl:Class ;
  tsdc:isBelow tsdcr:CommonSourceFiles ;
  rdfs:label "Bill of Materials"@en ;
  .

tsdcr:CADModel
  a owl:Class ;
  tsdc:isBelow tsdcr:CommonSourceFiles ;
  rdfs:label "CAD Model"@en ;
  .

tsdcr:Certificate
  a owl:Class ;
  tsdc:isBelow tsdcr:RequiredInformation ;
  rdfs:label "Certificate"@en ;
  rdfs:comment "Certificate according to OSHWA/DIN SPEC 3105"@en ;
  .

tsdcr:ChoiceClarification # TODO Should this not rather be a RequiredInformation?
  a owl:Class ;
  tsdc:isBelow tsdcr:CommonSourceFiles ;
  rdfs:comment "Why this part and not an other?"@en ;
  .

tsdcr:CommonSourceFiles
  a owl:Class ;
  tsdc:isBelow tsdcr:Requirement ;
  rdfs:label "Common Source Files"@en ;
  .

tsdcr:DataSheet
  a owl:Class ;
  tsdc:isBelow tsdcr:CommonSourceFiles ;
  rdfs:label "Data-Sheet"@en ;
  rdfs:comment "as file or link"@en ;
  .

tsdcr:Dependencies
  a owl:Class ;
  tsdc:isBelow tsdcr:CommonSourceFiles ;
  rdfs:label "Dependencies"@en ;
  rdfs:comment "e.g. additional hardware/software"@en ;
  .

tsdcr:DismantlingPlan
  a owl:Class ;
  tsdc:isBelow tsdcr:CommonSourceFiles ;
  rdfs:label "Dismantling Plan"@en ;
  .

tsdcr:Geometry
  a owl:Class ;
  tsdc:isBelow tsdcr:RequiredInformation ;
  rdfs:label "Geometry"@en ;
  .

tsdcr:InvolvedComponents
  a owl:Class ;
  tsdc:isBelow tsdcr:RequiredInformation ;
  rdfs:label "Involved Components"@en ;
  .

tsdcr:Junctions
  a owl:Class ;
  tsdc:isBelow tsdcr:RequiredInformation ;
  rdfs:label "Junctions"@en ;
  .

tsdcr:LinkToTechnicalDocumentation
  a owl:Class ;
  tsdc:isBelow tsdcr:RequiredInformation ;
  rdfs:label "link to technical documentation"@en ;
  .

tsdcr:Manifest
  a owl:Class ;
  tsdc:isBelow tsdcr:CommonSourceFiles ;
  rdfs:label "Manifest"@en ;
  rdfs:comment "see [related standards](README.md#related-standards)"@en ;
  .

tsdcr:ManufacturedComponent
  a tsdcr:RequirementSpecifier ;
  rdfs:label "Manufactured Component"@en ;
  tsdcr:commonSourceFiles tsdcr:CADModel ;
  tsdcr:commonSourceFiles tsdcr:TechnicalDrawing ;
  tsdcr:commonSourceFilesIfTechnicallyNecessary tsdcr:AdditionalManufacturingFiles ;
  tsdcr:commonSourceFilesIfTechnicallyNecessary tsdcr:ManufacturingInstructions ;
  tsdcr:describesReqsFor tsdc:ManufacturedComponent ;
  tsdcr:requiredInfo tsdcr:Geometry ;
  tsdcr:requiredInfo tsdcr:MaterialProperties ;
  tsdcr:requiredInfo tsdcr:SurfaceSpecifications ;
  tsdcr:requiredInfo tsdcr:Tolerances ;
  tsdcr:requiredInfoIfTechnicallyNecessary tsdcr:ManufacturingSpecifications ;
  .

tsdcr:ManufacturingInstructions
  a owl:Class ;
  tsdc:isBelow tsdcr:CommonSourceFiles ;
  rdfs:label "Manufacturing Instructions"@en ;
  .

tsdcr:ManufacturingPlan
  a owl:Class ;
  tsdc:isBelow tsdcr:CommonSourceFiles ;
  rdfs:label "Manufacturing Plan"@en ;
  .

tsdcr:ManufacturingSpecifications
  a owl:Class ;
  tsdc:isBelow tsdcr:RequiredInformation ;
  rdfs:label "Manufacturing Specifications"@en ;
  rdfs:comment "e.g. manufacturing process, machine settings"@en ;
  .

tsdcr:ManufacturingTechnology
  a owl:Class ;
  tsdc:isBelow tsdcr:RequiredInformation ;
  rdfs:label "Manufacturing Technology"@en ;
  .

tsdcr:MaterialProperties
  a owl:Class ;
  tsdc:isBelow tsdcr:RequiredInformation ;
  rdfs:label "Material Properties"@en ;
  .

tsdcr:OpenSourceComponent
  a tsdcr:RequirementSpecifier ;
  rdfs:label "Open Source Component"@en ;
  tsdcr:commonSourceFiles tsdcr:Manifest ;
  tsdcr:describesReqsFor tsdc:OpenSourceComponent ;
  tsdcr:requiredInfo tsdcr:Certificate ;
  tsdcr:requiredInfo tsdcr:LinkToTechnicalDocumentation ;
  .

tsdcr:ProprietaryComponent
  a tsdcr:RequirementSpecifier ;
  rdfs:label "Proprietary Component"@en ;
  tsdcr:commonSourceFiles tsdcr:ChoiceClarification ;
  tsdcr:commonSourceFiles tsdcr:DataSheet ;
  tsdcr:commonSourceFiles tsdcr:Dependencies ;
  tsdcr:describesReqsFor tsdc:ProprietaryComponent ;
  tsdcr:requiredInfo tsdcr:RelevantSpecifications ;
  .

tsdcr:RelevantSpecifications
  a owl:Class ;
  tsdc:isBelow tsdcr:RequiredInformation ;
  rdfs:label "Relevant Specifications"@en ;
  .

tsdcr:RequiredInformation
  a owl:Class ;
  tsdc:isBelow tsdcr:Requirement ;
  rdfs:label "Required Information"@en ;
  .

tsdcr:Requirement
  a owl:Class ;
  rdfs:label "Requirement"@en ;
  .

tsdcr:RequirementSpecifier # TODO Better name! Maybe "RequirementLinker" ... needs more though
  a owl:Class ;
  rdfs:comment "Links a set of requirements and a set of common source files to a specific TechnicalDocumentation class"@en ;
  .

tsdcr:SurfaceSpecifications
  a owl:Class ;
  tsdc:isBelow tsdcr:RequiredInformation ;
  rdfs:label "Surface Specifications"@en ;
  .

tsdcr:TechnicalDrawing
  a owl:Class ;
  tsdc:isBelow tsdcr:CommonSourceFiles ;
  rdfs:label "Technical Drawing"@en ;
  .

tsdcr:Tolerances
  a owl:Class ;
  tsdc:isBelow tsdcr:RequiredInformation ;
  rdfs:label "Tolerances"@en ;
  .

tsdcr:commonSourceFiles
  a owl:ObjectProperty ;
  rdfs:label "common source files"@en ;
  rdfs:domain tsdcr:RequirementSpecifier ;
  rdfs:range tsdcr:RequiredInformation ;
  .

tsdcr:commonSourceFilesIfTechnicallyNecessary
  a owl:ObjectProperty ;
  rdfs:subPropertyOf tsdcr:commonSourceFiles ;
  rdfs:label "common source files if technically necessary"@en ;
  .

tsdcr:describesReqsFor
  a owl:ObjectProperty ;
  rdfs:label "describes requirements for"@en ;
  owl:minCardinality "1"^^xsd:integer ;
  rdfs:domain tsdcr:RequirementSpecifier ;
  rdfs:range tsdc:TechnicalDocumentation ;
  .

tsdcr:onlyIfTechnicallyNecessary
  a owl:DatatypeProperty ;
  rdfs:label "only if technically necessary"@en ;
  owl:maxCardinality "1"^^xsd:integer ;
  rdfs:domain tsdcr:Requirement ;
  rdfs:range xsd:boolean ;
  .

tsdcr:requiredInfo
  a owl:ObjectProperty ;
  rdfs:label "required info"@en ;
  rdfs:domain tsdcr:RequirementSpecifier ;
  rdfs:range tsdcr:RequiredInformation ;
  .

tsdcr:requiredInfoIfTechnicallyNecessary
  a owl:ObjectProperty ;
  rdfs:subPropertyOf tsdcr:requiredInfo ;
  rdfs:label "required info if technically necessary"@en ;
  .
