Formally, URIs are opaque; for all the machines care, we can choose names like a23o8u23o for property names and use rdfs:labels to relate them to natural language. (If you don't start with a letter, watch out for XML element name restrictions.) But we still need labels in order to learn the terms and discuss them in natural language.

The subject/predicate/object structure of RDF suggests using verbs like foaf:knows, but using a RoleNoun such as foaf:name seems natural in a much larger set of cases. Plus, it's handy in expressions such as "Joe's brother's uncle's wife's pet" which is much like an XPath expression.

NotationThree has syntactic support for inverses that synergizes nicely with the RoleNoun pattern:  Sally father Joe  says the same thing that  Joe is father of Sally  says.

This pattern suggests that rdfs:subClassOf should have been called superclass. The whole HasPropertyOf idiom is sort of ugly, no? Note that it is superclass not superClass because "superclass" is a normal english word, found in many dictionaries.

(True, but the English word is only used in a highly specialized context, and does not have the RDFS meaning. Is it wise to use the English word under these circumstances? Readers who know what it means will start thinking about phyla. -PatHayes) (Comment: This whole issue, of whether the isFooOf or hasFoo polarity should be the plain-word default, reminds me of the debates about whether it is best to write function names prefix or postfix. There isn't a clear obvious answer: there are pros and cons both ways. English of course uses both, so one can always find nice intuitive evidence for whichever convention you decide to like best. I suggest that rather than debate this (for ever?) we should find ways to convert easily. The N3 (is...of) is an elegant half of the solution, but we just also need an inversion rule that reads naturally with the other convention, a kind of de-is/of-ing convention. This is harder. My son's name is Simon: (Pat isFatherOf Simon) or (Simon Father Pat) or (Pat is Father of Simon) in N3, but what could render (Simon ?1? isFatherOf ?2? Pat). Hmmm, how about has...from? Artificial, but it might work: (Simon has isFatherOf from Pat) ? Anyway, you get the idea. Its not going to be possible to convince everyone to use a single convention, so we need easy conversions in both directions. -PatHayes)

Labels for User Interface

While the discussion of what local-names to give predicates is reatively academic, as it is those writng onttologies and code which have to understand what they mean. However, the choice of labels is much more important. Labels are used by user interface software to convert data on the semantic web into forms, tables and sometimes sentences.

The user is used to role-nouns in forms, like:

name

_

address

_

SSN

_

child

_

and really does not want to be shown:

hasName

_

hasAddress

_

hasSSN

_

isParentOf

_

So, even (especially) if you have not chosen role-nouns for the past part of the URI, it is good practice to provide RDFS:label which is a role-noun as the user would expect.

A label does not need to completely unambigiously globally define the predicate. For example, for foaf:mox_sha1sum, which goves the checksum of the mailt:URI of an agent's mailbox, a suitable label could be "email hash" rather than "SHA-1 checksum of mailbox URI".


sources: N3 design alternatives, TimBL, 2002/03/14

RoleNoun (last edited 2008-01-03 15:01:56 by PatHayes)