I'm a beginner in Protege / OWL and I'm having trouble understanding why max cardinality is working and min cardinality is not. I tried Hermit Pellet and Fact as reasoners. I know about the Open World Assumtion, but this seems not logical to me.
I want to express that there must be at least 2 Persons in a Marriage event.
Class: MarriageEvent
EquivalentTo:
This works:
MarriageEvent and is_event_of max 2 Person
And this not:
MarriageEvent and is_event_of min 2 Person
All individuals are declared as different individuals.
My ontology:
<?xml version="1.0"?>
<Ontology xmlns="http://www.w3.org/2002/07/owl#"
xml:base="http://www.semanticweb.org/anato/ontologies/2017/7/untitled-ontology-184"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
ontologyIRI="http://www.semanticweb.org/anato/ontologies/2017/7/untitled-ontology-184">
<Prefix name="owl" IRI="http://www.w3.org/2002/07/owl#"/>
<Prefix name="rdf" IRI="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
<Prefix name="xml" IRI="http://www.w3.org/XML/1998/namespace"/>
<Prefix name="xsd" IRI="http://www.w3.org/2001/XMLSchema#"/>
<Prefix name="rdfs" IRI="http://www.w3.org/2000/01/rdf-schema#"/>
<Declaration>
<NamedIndividual IRI="#Peter"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#Julia"/>
</Declaration>
<Declaration>
<ObjectProperty IRI="#is_event_of"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#Max"/>
</Declaration>
<Declaration>
<Class IRI="#Person"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#Event_Marriage"/>
</Declaration>
<Declaration>
<Class IRI="#MarriageEvent"/>
</Declaration>
<EquivalentClasses>
<Class IRI="#MarriageEvent"/>
<ObjectIntersectionOf>
<Class IRI="#MarriageEvent"/>
<ObjectMinCardinality cardinality="2">
<ObjectProperty IRI="#is_event_of"/>
<Class IRI="#Person"/>
</ObjectMinCardinality>
</ObjectIntersectionOf>
</EquivalentClasses>
<EquivalentClasses>
<Class IRI="#MarriageEvent"/>
<ObjectIntersectionOf>
<Class IRI="#MarriageEvent"/>
<ObjectMaxCardinality cardinality="2">
<ObjectProperty IRI="#is_event_of"/>
<Class IRI="#Person"/>
</ObjectMaxCardinality>
</ObjectIntersectionOf>
</EquivalentClasses>
<DisjointClasses>
<Class IRI="#MarriageEvent"/>
<Class IRI="#Person"/>
</DisjointClasses>
<ClassAssertion>
<Class IRI="#MarriageEvent"/>
<NamedIndividual IRI="#Event_Marriage"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#Julia"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#Max"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#Peter"/>
</ClassAssertion>
<DifferentIndividuals>
<NamedIndividual IRI="#Event_Marriage"/>
<NamedIndividual IRI="#Julia"/>
<NamedIndividual IRI="#Max"/>
<NamedIndividual IRI="#Peter"/>
</DifferentIndividuals>
<ObjectPropertyAssertion>
<ObjectProperty IRI="#is_event_of"/>
<NamedIndividual IRI="#Event_Marriage"/>
<NamedIndividual IRI="#Julia"/>
</ObjectPropertyAssertion>
<ObjectPropertyAssertion>
<ObjectProperty IRI="#is_event_of"/>
<NamedIndividual IRI="#Event_Marriage"/>
<NamedIndividual IRI="#Peter"/>
</ObjectPropertyAssertion>
<SubObjectPropertyOf>
<ObjectProperty IRI="#is_event_of"/>
<ObjectProperty abbreviatedIRI="owl:topObjectProperty"/>
</SubObjectPropertyOf>
<IrreflexiveObjectProperty>
<ObjectProperty IRI="#is_event_of"/>
</IrreflexiveObjectProperty>
<ObjectPropertyDomain>
<ObjectProperty IRI="#is_event_of"/>
<Class IRI="#MarriageEvent"/>
</ObjectPropertyDomain>
<ObjectPropertyRange>
<ObjectProperty IRI="#is_event_of"/>
<Class IRI="#Person"/>
</ObjectPropertyRange>
</Ontology>
<!-- Generated by the OWL API (version 4.2.8.20170104-2310) https://github.com/owlcs/owlapi -->
min 2 Person
will not complain about marriages where only one person is known because of the Open World Assumption. Just because the second party to the wedding is not known, does not mean that it's not there.