# The granularity ladder from the pattern's own comment: a river, the water in its
# channel, a molecule of that water, and that molecule's atoms. Each step crosses a
# layer, which is why these are constituents and not parts. The individuals are
# untyped because this pattern declares properties and no classes.

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

ex:RiverRhine a owl:NamedIndividual ;
    rdfs:label "the River Rhine" ;
    constituency:hasConstituent ex:RhineWater .

ex:RhineWater a owl:NamedIndividual ;
    rdfs:label "the water in the Rhine's channel" ;
    constituency:hasConstituent ex:WaterMolecule .

ex:WaterMolecule a owl:NamedIndividual ;
    rdfs:label "one H2O molecule in that water" ;
    constituency:hasConstituent ex:OxygenAtom ,
        ex:FirstHydrogenAtom .

ex:OxygenAtom a owl:NamedIndividual ;
    rdfs:label "the oxygen atom of that molecule" .

ex:FirstHydrogenAtom a owl:NamedIndividual ;
    rdfs:label "its first hydrogen atom" .

ex:SecondHydrogenAtom a owl:NamedIndividual ;
    rdfs:label "its second hydrogen atom" ;
    constituency:isConstituentOf ex:WaterMolecule .

# Only one direction of each inverse pair is asserted: hasConstituent/isConstituentOf. A reasoner adds the other.

