From W3C Wiki

Inverse Functional Property

OWL defines an "InverseFunctionalProperty."

Let's recall our RDF setence, SubjectPredicateObject:

 (subject) (predicate) (object)

If the predicate has the "InverseFunctionalProperty", than that means that wherever you see the (subject) linked to an (object) by this particular (predicate), then the (subject) is the one and only (subject) with that (object) connected by the (predicate.) If you ever saw some other subject linked to the object by the predicate, you'd know that the "other" subject was actually the same subject.

For instance, if you took US Dollars, and thought about the "Serial Number" property, then that would have the InverseFunctionalProperty. Unless the dollar is a counterfit, you know exactly what dollar you are talking about, just by knowing it's Serial Number.

But peoples' names do not have the InverseFunctionalProperty. If you see a person with a particular name- there could be two people sharing that same name, so you don't necessarily know who it is by the name alone. (You could make some educated guesses, but looking world-wide- you couldn't know for sure who it is.)

In the language of the databases world, "Inverse Functional Property" means "This property is a Unique."

See Also


When I think of a function, of something that is functional, I next wonder how to compute it. In the example above, if someone gave me the serial number of a US Dollar, how would I use it? Is there a database I can search with the serial number and get back where and when it was minted? Also, sometimes it is suggested that we don't need to create URI names for things because we can rely on IFPs. A common example is US Social Security Numbers, or mailboxes. How does one take a SS# and find out the person to whom it was assigned? Is there a central database I can query with a SS# and get back the name. Similarly with a mailbox. Can I lookup a mailbox and find out who uses it?

Well, in most cases I can't. This is where RdfSmushing comes in: I don't know who owns, but as soon as I stumble upon other data containing that address, I can connect them and hope that at least one source defines a name or similar more useful information.

Fair enough. But what sort of a use case involves this kind of hopefull stumbling as data processing? I'm sure there are some. I just can't think of any now. I wouldn't want to ride in a plane if Boeing built their database by hopefull stumbling upon data that shares a URI. Especially since there is still no standard (or even defacto 7-28-2006) way of establishing or discovering what the intended reference of a URI is.