@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .

@prefix vann: <http://purl.org/vocab/vann/> .
@prefix voaf: <http://purl.org/vocommons/voaf#> .
@prefix dce:  <http://purl.org/dc/elements/1.1/> .
@prefix dct:  <http://purl.org/dc/terms/> .
@prefix widoco:	<https://w3id.org/widoco/vocab#>.

@prefix thing: <https://w3id.org/fm/thing#> .
@prefix product: <https://w3id.org/fm/product#> .
@prefix resource: <https://w3id.org/fm/resource#> .

<https://w3id.org/fm/product> 
    rdf:type owl:Ontology ;
    vann:preferredNamespaceUri    "https://w3id.org/fm/product#" ;
    vann:preferredNamespacePrefix "product" ;
    owl:versionIRI <https://w3id.org/fm/product/1.0.1>;
    owl:versionInfo "1.0.1" ;
    rdfs:label "The FM Product Ontology"@en ;
    rdfs:comment "A core ontology for production related Products"@en;
    dct:created  "2025-11-01"^^xsd:date ;
    dct:modified "2026-09-29"^^xsd:date ;
    dct:issued   "2026-09-29"^^xsd:date ;
    dce:title "The Product Ontology"@en ;
    dct:license <https://creativecommons.org/licenses/by/4.0/>;
    dct:subject "top"@en;

    dce:abstract '''
The core Product Ontology for production related concepts. A Product is something that is consumed or producted by some manufacturing activity.
'''@en;

    widoco:introduction '''
A Product is something that is consumed or producted by some manufacturing activity.

Examples are:
- materials like wood or metal
- furnitures like screws and paper
- manufactured items like flashlights
- manufactured items used as production resources, like vehicles or batteries
  - those Products are also Resources:
  - start of their life cycle, as Products: they are produced by a production activity
  - during their life cycle, as Resources: they are used by some other manufacturing activity
  - end of their life cycle, as Products: they a consumed by some Rex activity
'''@en;

    dce:description '''
Products inherit from Resource (and transitively from Thing):
- the ProductDefinition concept: allowing to capture commonalities between entities
- the hierarchy in subEntities and subDefinitions: providing a whole/part hierarchy

Concepts:
- a `product:Entity` is an actual Product, consumed or produced in the production process
- a `product:SubEntity` is a part or component of the product:Entity
  - a reference to the product:Entity belonging to the parent product:Entity
  - additional information related to the child Entity in the context of the parent Entity:
    - detail of the mount event, when the part was added to the whole
    - detail of the dismount event, when the part was removed from the whole
  - basically, it is the reified relationship `hasSubEntity`between assembly and component
    - is optional, as long as the `hasSubEntity` association is sufficient
- a `product:Definition` captures commonalities between Entities
  - a CAD design
  - material properties
  - information to the make of the Product


```mermaid
classDiagram
    class ProductEntity  
    class ProductDefinition:::definition 
    class ProductSubDefinition:::definition 

    ProductEntity o-- ProductSubEntity: subEntity
    ProductDefinition o-- ProductSubDefinition: subDefinition
    ProductDefinition --|> ProductEntity
    ProductDefinition --> ProductDefinition: hasSubDefinition
    ProductSubDefinition --|> ProductSubEntity
    ProductEntity --> ProductDefinition : entityDefinition
    ProductEntity --> ProductEntity : hasSubEntity
    ProductSubEntity --> ProductEntity : subEntityEntity
    ProductSubDefinition --> ProductDefinition : subDefinitionDefinition
    ProductSubEntity --> ProductSubDefinition : subEntityDefinition

    classDef default fill:#f96,color:black
    classDef definition fill:#e9edc9,color:black
```
'''@en.  

# entities
product:Entity
    rdf:type owl:Class;
    rdfs:subClassOf resource:Entity;
    rdfs:comment '''A Product is something produced or consumed by a Process; 
    a Product can be used by the process and is therefore also a Resource'''@en.

product:SubEntity
    rdf:type owl:Class;
    rdfs:subClassOf resource:SubEntity.

product:subEntity
    rdf:type owl:ObjectProperty;
    rdfs:domain product:Entity;
    rdfs:range product:SubEntity.

product:subEntityEntity
    rdf:type owl:ObjectProperty;
    rdfs:subPropertyOf resource:subEntityEntity;
    rdf:type owl:FunctionalProperty;
    rdfs:domain product:SubEntity;
    rdfs:range product:Entity.

product:hasSubEntity
    rdf:type owl:ObjectProperty;
    rdfs:subPropertyOf resource:hasSubEntity;
    rdfs:domain product:Entity;
    rdfs:range product:Entity;
    owl:propertyChainAxiom (
         product:subEntity 
         product:subEntityEntity
    ).

# definitions
product:entityDefinition 
    rdf:type owl:ObjectProperty;
    rdfs:subPropertyOf resource:entityDefinition;
    rdfs:domain product:Entity;
    rdfs:range product:Definition.

product:Definition
    rdf:type owl:Class;
    rdfs:subClassOf product:Entity;
    rdfs:subClassOf resource:Definition.

product:subEntityDefinition 
    rdf:type owl:ObjectProperty;
    rdfs:subPropertyOf resource:subEntityDefinition;
    rdfs:domain product:SubEntity;
    rdfs:range product:SubDefinition.

product:SubDefinition
    rdf:type owl:Class;
    rdfs:subClassOf product:SubEntity;
    rdfs:subClassOf resource:SubDefinition.

product:subDefinition
    rdf:type owl:ObjectProperty;
    rdfs:subPropertyOf resource:subDefinition;
    rdfs:domain product:Definition;
    rdfs:range product:SubDefinition.

product:subDefinitionDefinition
    rdf:type owl:ObjectProperty;
    rdfs:subPropertyOf resource:subDefinitionDefinition;
    rdf:type owl:FunctionalProperty;
    rdfs:domain product:SubDefinition;
    rdfs:range product:Definition.

product:hasSubDefinition
    rdf:type owl:ObjectProperty;
    rdfs:subPropertyOf resource:hasSubDefinition;
    rdfs:domain product:Definition;
    rdfs:range product:Definition;
    owl:propertyChainAxiom (
         product:subDefinition 
         product:subDefinitionDefinition
    ).


# Serialization annotations added by generate_docs.py
<https://w3id.org/fm/product>
    <https://w3id.org/widoco/vocab#turtleSerialization> "product.ttl" ;
    <https://w3id.org/widoco/vocab#rdfxmlSerialization> "product.rdf" ;
    <https://w3id.org/widoco/vocab#ntSerialization> "product.nt" ;
    <https://w3id.org/widoco/vocab#jsonldSerialization> "product.jsonld" .
