- From: Bob MacGregor <macgregor@ISI.EDU>
- Date: Sun, 6 Apr 2003 14:02:04 -0700
- To: <www-rdf-logic@w3.org>
- Message-ID: <003e01c2fc80$70418230$8d01a8c0@tubular>
IMHO OWL's InverseFunctionalProperty is confusing and dangerous, and ought to be eliminated (in favor of keys, which are straightforward). Here is an example of the problem: Suppose I have an OWL-lite employee database with class Employee and property 'hasSSN' (social security number). 'hasSSN' is a key for this class, so I declare statements that include the following: Employee rdf:type rdfs:Class hasSSN rdfs:domain Employee hasSSN rdf:type InverseFunctionalProperty Now I decide to build another class, EmployeeHistory, which has data about employees, indexed by SSN and date. Should I reuse the 'hasSSN' property, or invent a new one? I decide that it would be hard for users to remember which was which if I have two different properties to point to SSNs. However, I need to widen the domain of 'hasSSN' if I want to attach it to EmployeeHistory as well as Employee. If I'm using OWL-DL, I could replace the domain statement by a restriction. If I'm using OWL-cool, I could switch to subdomains. But, I'm using OWL-lite, so I guess I'll use the blank node trick: Employee rdf:type rdfs:Class hasSSN rdfs:domain _:domainOfHasSSN hasSSN rdf:type InverseFunctionalProperty Employee rdfs:subClassOf _:domainOfHasSSN EmployeeHistory rdf:type rdfs:Class EmployeeHistory rdfs:subClassOf _:domainOfHasSSN hasDate rdfs:range Date hasDate rdfs:domain EmployeeHistory Oops, almost surely I want to widen the domain of 'hasDate' as well. Pretend that I use the blank node trick for that as well. Now I'm happy. Or am I. Turns out that I have unwittingly screwed up badly, because while 'hasSSN' is a proper key for Employee, EmployeeHistory needs to have either no key at all, or have the compound key <hasSSN, hasDate>. Summarizing, InverseFunctionalProperty is confusing, may be misused, with serious consequences, and if used properly, may cause ontologies to become unnecessarily bloated. Suppose instead we had a property owl:simpleKey. If I assert Employee owl:simpleKey hasSSN this means that no two distinct employees can have the same value for the attribute 'hasSSN'. Almost the same thing as if I used InverseFunctionalProperty, except that the restriction attaches to the class instead of to the property. Hence, my EmployeeHistory class is not impacted by my asserting a key for the class Employee. Of course, I'd really like to be able to assert the compound key restriction for EmployeeHistory. I'll leave that as an exercise (as I did before). Cheers, Bob
Received on Sunday, 6 April 2003 17:06:47 UTC