a recipie for ont:UnambiguousProperty, rdfs:isDefinedBy

From: Dan Connolly (connolly@w3.org)
Date: 05/16/01

I took an action to explain how to use
ont:UnambiguousProperty to make unique
names, to see if this addresses the
requirements that led Stefa to propose
introducing the unique names assumption

So I made a little ontology of colors:


containing, e.g.

:red :colorName "red".
:yellow :colorName "orange".
:blue :colorName "blue".

The :colorName property is described/defined ala...

:colorName u:label "color name";
  a ont:UniqueProperty;
  u:subPropertyOf u:label;
  u:domain :Color;
  u:comment """note the domain; each thing with a colorName
  is a Color. note also that this is a UniqueProperty;
  things with different colorNames are different.""".

And that's pretty much all there is to it.

If this seems to make sense, I can expand
the README info at
to make this a chapter in our cookbook-to-be.

Now these names are "scoped" by the :colorName
property; somebody can use "red" as the rdfs:label
of something else without creating a conflict.
Each party that wants to establish a context
for unique names can make up their own property
analagous to
http://www.w3.org/2001/05dun/colors#colorName .
You could use http://example/catalog#className
in an large/flat ontology.

We could put this sort of thing in the "standard library",
i.e. introduce a daml:URI property that takes a
URI in string form, and provides names that are
unique througought the Web.

This would be somewhat tedious to use:

  :red ont:URI "http://www.w3.org/2001/04dun/colors#red".
  :green ont:URI "http://www.w3.org/2001/04dun/colors#green".
  :blue ont:URI "http://www.w3.org/2001/04dun/colors#blue".

and so on. The :colorName style is handy because
you can make it a subPropertyOf rdfs:label, and
you usually want to provide labels anyway;
so it kills two birds with one stone. You
don't want to use
as an rdfs:label.

TimBL and I have talked about a level-breaking
property that would reduce the tedium
considerably, kinda like KIF's name function
  10.3 Changing Levels of Denotation

Let's call this property ont:name
(and assume we've adopted the ont:unambiguousOver
proposal that I just sent).

Then I could just say

	ont:name ont:unambiguousOver :Color.
	:red rdf:type :Color.
	:green rdf:type :Color.
	:blue rdf:type :Color.

and get the same effect as the tedious version above.

Combining this with rules and some string operations,
we can build the unique namespaces Pat mentioned on the telcon...

	<> log:forAll :o, :x, :y, :oname, :xname, :yname.

	{ :o rdf:type ont:UniqueNameOntology;
		ont:name :oname.
	:x ont:name :xname.
	:y ont:name :yname.
	:xname string:notEqual :yname.
	:xname string:startsWith :oname.
	:yname string:startsWith :oname.
	log:implies {
	:x ont:differentIndividualFrom :y

But I dunno if we want to go there.

[By the way... usually I use the minutes
as a trigger to work on action items. I happened
to remember this action without seeing the minutes
this time, but I don't recommend folks count
on that in the future.]

[Also... let me know if the use of RDF "Notation 3" is
too distracting. I can write in KIF-with-faked-namespaces
if that's easier, but I don't have software
to help me, yet.

For reference, RDF/n3 is explained in
and you can convert it to RDF/xml using the form on


Dan Connolly, W3C http://www.w3.org/People/Connolly/

This archive was generated by hypermail 2.1.4 : 04/02/02 EST