0

I would like to know if it is possible to specify a class is a closed set without enumerating all of its individuals.

For eg. given a class of Drivers with individuals A, B and C is there an axiom I can put on Driver that will cause a reasoner to recognize the class has no other individuals without having to specify something like this in the class description?

 <owl:equivalentClass>
            <owl:Class>
                <owl:oneOf rdf:parseType="Collection">
                    <rdf:Description rdf:about="&example;A"/>
                    <rdf:Description rdf:about="&example;B"/>
                    <rdf:Description rdf:about="&example;C"/>
                </owl:oneOf>
            </owl:Class>
 </owl:equivalentClass>

 <owl:NamedIndividual rdf:about="&example;A">
        <rdf:type rdf:resource="&example;Driver"/>
 </owl:NamedIndividual>
 <owl:NamedIndividual rdf:about="&example;B">
        <rdf:type rdf:resource="&example;Driver"/>
 </owl:NamedIndividual>
 <owl:NamedIndividual rdf:about="&example;C">
        <rdf:type rdf:resource="&example;Driver"/>
 </owl:NamedIndividual>

edit: Allow me to clarify, I would like to be able to specify that a class is a closed set without describing the class as an enumeration of a set of individuals.

Kunal Khaladkar
  • 493
  • 3
  • 16
  • "will cause a reasoner to recognize the class has no other individuals" What does "other individuals" mean here? E.g., what criteria can the reasoner user to determine that no other individuals can be a member of this class? Another way of asking this: "how would *we* (the readers of Stack Overflow) to know that ex:D *is not* a member of this class?" – Joshua Taylor Aug 27 '15 at 12:35
  • I added some more code in order to elaborate. If a named individual is not explicitly defined in the ontology file with `rdf:type rdf:resource="&example;Driver` then it is not a Driver. This is the criteria by which the reasoner should determine no other individuals can be a member of this class – Kunal Khaladkar Aug 27 '15 at 12:41
  • That seems like it's about the same as explicitly enumerating the individuals, though. There are workarounds, I suppose. E.g., you could assert that ex:A, ex:B, and ex:C are all different, and that there are at most three ex:Drivers, and that would force them to be just those three. – Joshua Taylor Aug 27 '15 at 12:44

1 Answers1

0

You can create a new property that only the individuals you wish to include have and make the class a subclass of a exact cardinality restriction of 1 for that property. To add or remove individuals, use the new property in assertions - adding multiple assertions will /remove/ the individuals from the class, so this works even for individuals used in imported ontologies.

I'm not clear on your intent though - what are you trying to achieve through this?

Ignazio
  • 10,504
  • 1
  • 14
  • 25
  • I'm not sure this works for this case. Sure the reasoner, given the data available, will only infer that A, B, and C, are elements of the class, but it can't confirm that anything else *isn't* a member of the class (if it has no values for that property). – Joshua Taylor Aug 27 '15 at 19:07
  • That's why I'm not sure of the actual intent. – Ignazio Aug 27 '15 at 22:28
  • I was trying to have a reasoner make certain inferences by specifying negative property assertions between the individuals of the class but ran into the issue Joshua pointed out. Unfortunately it looks like there probably isn't a way around using an enumeration because of the OWA. Thanks for the help though, both of you! – Kunal Khaladkar Aug 28 '15 at 05:12