# The pattern's own illustration: an aggregated electricity provider formed by providers.
# The consortium, the regional group inside it and the municipal utilities are all objects
# of the same kind, which is what separates aggregation from parthood - a turbine is part of
# an engine but is not an engine. hasAggregatedMember is transitive, so the consortium also
# aggregates the two Rhine valley utilities without that being written down. The group is
# both: an Object to the consortium above it, an AggregatedObject to the utilities below.

@prefix simpleoraggregated: <http://delicias.dia.fi.upm.es/ontologies/SimpleOrAggregated.owl#> .
@prefix ex: <https://w3id.org/ontoboard/example/simpleoraggregated#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

ex:SuedwestEnergie a owl:NamedIndividual , simpleoraggregated:AggregatedObject ;
    rdfs:label "Suedwest Energie, an electricity provider formed by regional providers" ;
    simpleoraggregated:hasAggregatedMember ex:RhineValleyGroup ,
        ex:StadtwerkeStuttgart .

ex:RhineValleyGroup a owl:NamedIndividual , simpleoraggregated:Object , simpleoraggregated:AggregatedObject ;
    rdfs:label "Rhine Valley utilities group, a provider formed by two municipal providers" ;
    simpleoraggregated:hasAggregatedMember ex:StadtwerkeKarlsruhe ,
        ex:StadtwerkeMannheim .

ex:StadtwerkeStuttgart a owl:NamedIndividual , simpleoraggregated:Object ;
    rdfs:label "Stadtwerke Stuttgart, a municipal electricity provider" .

ex:StadtwerkeKarlsruhe a owl:NamedIndividual , simpleoraggregated:Object ;
    rdfs:label "Stadtwerke Karlsruhe, a municipal electricity provider" .

ex:StadtwerkeMannheim a owl:NamedIndividual , simpleoraggregated:Object ;
    rdfs:label "Stadtwerke Mannheim, a municipal electricity provider" .

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