RoleNoun

From W3C Wiki

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)

(While I see the appeal of the RoleNoun pattern, there are many relations (so-called "properties") that don't fit into it, e.g. isGreaterThan, isNextTo, summarizes, dependsOn, reducesTo, etc. One of RDF's strengths is its ability to capture these non-noun relationships and work treat them logically. If you adopt the RoleNoun pattern you will have two kinds of property labels - nouns where there are nouns, verb phrases when not - and no automatable way to tell them apart. I would prefer a convention where the property label could be uniformly put in between the subject and object labels to get a sentence, and this would dictate including the "has" word that you don't like. Possible solution: One label property to use when you want a noun ("father"), which would fail when there is no such noun; another when you want a verb phrase ("has father"), which would work all of the time. ... Related to this, another reason I dislike RoleNoun is that I can never remember whether "capital" is short for "is capital of" or "has as its capital" ... maybe that's just an incompetence that I'll get over in another 5 years of working with RDF. In the meantime I'm going to put "has" in my noun-property-labels just so I don't confuse myself. - JonathanRees)

Labels for User Interface

While the discussion of what local-names to give predicates is relatively academic, as it is those writing ontologies 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 unambiguously globally define the predicate. For example, for foaf:mox_sha1sum, which goves the checksum of the mailto: 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