# A road bicycle and its assemblies. hasComponent is not transitive, so the chain is a
# component of the drivetrain and not of the bicycle - though a reasoner still derives
# that it is a part of the bicycle, because the superproperty hasPart is transitive.

@prefix componency: <http://www.ontologydesignpatterns.org/cp/owl/componency.owl#> .
@prefix ex: <https://w3id.org/ontoboard/example/componency#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

ex:RoadBicycle a owl:NamedIndividual , componency:Object ;
    rdfs:label "a road bicycle" ;
    componency:hasComponent ex:Frame ,
        ex:FrontWheel ,
        ex:RearWheel ,
        ex:Drivetrain .

ex:Frame a owl:NamedIndividual , componency:Object ;
    rdfs:label "its aluminium frame" .

ex:FrontWheel a owl:NamedIndividual , componency:Object ;
    rdfs:label "its front wheel" .

ex:RearWheel a owl:NamedIndividual , componency:Object ;
    rdfs:label "its rear wheel" .

ex:Drivetrain a owl:NamedIndividual , componency:Object ;
    rdfs:label "its drivetrain" ;
    componency:hasComponent ex:Chain .

ex:Chain a owl:NamedIndividual , componency:Object ;
    rdfs:label "the chain" .

ex:Crankset a owl:NamedIndividual , componency:Object ;
    rdfs:label "the crankset" ;
    componency:isComponentOf ex:Drivetrain .

# Only one direction of each inverse pair is asserted: hasComponent/isComponentOf, hasPart/isPartOf. A reasoner adds the other.

