3

I think I am going crazy! I have followed the various tutorials for Owl and Protege and still cannot figure out the answer. Use case is simple. I have defined a class called ‘Person’. I have defined a data property called hasFirstName. I have added a ‘subclass of’ restriction to Person like this : ‘hasFirstName exactly 1 string’. I have also added an individual called Alex of type Person, and have not added the hasFirstName property. I expect the reasoner to complain as I have specified the cardinality of 1, and asserted that Alex is a Person, but have not added the property value to Alex individual, yet the reasoner does not complain. If however I add two statements e.g. hasFirstName ‘Alex’ and hasFirstName ‘John’ then I get a complain. What I am doing wrong? Any help will be most appreciated, thanks.

Alex
  • 43
  • 3

1 Answers1

5

There's no inconsistency in the first case. OWL makes the open world assumption, which means that something being unknown is different from it being known to be true or known to be false. Your username, at the time I'm writing this answer is user3552593. I'm relatively confident that you have a name, and that's not inconsistent with the fact that I don't know what it is yet.

By saying that

Person ⊑ =1 hasFirstName.String

and that

Alex : Person

you can infer that

Alex : =1 hasFirstName.String

There's nothing inconsistent with that; Alex, by virtue of Alex's personhood, has exactly one first name—we just don't know what it is yet.

Joshua Taylor
  • 84,998
  • 9
  • 154
  • 353
  • 1
    That makes sense, many thanks. Is there any way than under open world assumption to specify in OWL that there must a property with a value for an individual within known knowledge base? Or do you do have to get into closed world assumptions? – Alex Apr 20 '14 at 07:42
  • That's sort of a broad question. You can add axioms that "close" the knowledgebase, e.g., that enumerate the individuals of a class, and by adding negative property assertions. For query purposes, there's also SPARQL. If you had queried for individuals with fewer than one name, you'd have retrieved the individual that didn't have a declared name; SPARQL is a data query language for RDF, and acts more like a closed world database in that regard. – Joshua Taylor Apr 20 '14 at 12:16