Re: OWL/RDF Ref/Def and Namespace Reference?

On 12 Jul 2009, at 22:19, Brad Cox wrote:

> Could someone please recommend a concise reference for when (and  
> why) to use the various reference/dereferencing options
> (rdf:ID, rdf:about, rdf:resource, others?). Also namespaces (when  
> to use foo:bar vs foo#bar vs &foo;bar and so forth). I've searched  
> high and low and am constantly confused by the proliferation of  
> twisty passages.
>
> I've worked some of these out experimentally but that broke down  
> when I divided a large ontology into separate files. I'm really  
> hoping for something like a best practices but will take whatevers  
> available.


I don't know of anything extant except what's in my head, so I hereby  
transcribe that into this email :)

Underlying principle: Avoid distinctions in syntax that don't show up  
in the model, unless the syntax forces you (or it's convenient).

 From this, the Golden Rule: Don't ever use rdf:ID.

(rdf:ID is confusing -- even deceptive -- and not very robust)

Other underlying principle: Be consistent.

The simplest thing to do is use rdf:about everywhere. That leads to  
slightly more verbose RDF/XML, e.g.,

A:	<rdf:Description rdf:about="#sheevah">
		<foaf:imaginaryFriend>
			<rdf:Description rdf:about="#bijan"/>
		</foaf:imaginaryFriend>
	<rdf:Description>

instead of:
B:	<rdf:Description rdf:about="#sheevah">
		<foaf:imaginaryFriend rdf:resource="#bijan"/>
	<rdf:Description>

But A is robust (e.g., it's straightforward to add more nesting) and  
simple. It can be cleaner if you have a one off rdf:type, e.g.,

A'	<foaf:Person rdf:about="#sheevah">
		<foaf:imaginaryFriend>
			<foaf:Person rdf:about="#bijan"/>
		</foaf:imaginaryFriend>
	<foaf:Person>

vs.

B'    <foaf:Person rdf:about="#sheevah">
		<foaf:imaginaryFriend rdf:resource="#bijan"/>
	<foaf:Person>
	<foaf:Person rdf:about="#bijan"/>

I personally use the rule: rdf:about everywhere except in a terminal  
object node where I use rdf:resource. Basically, "rdf:resource  
everywhere I can, rdf:about otherwise".

# vs. /, well, basically "be consistent". Either is fine  
semantically, # is rather more common, so # is simpler. # *can* cause  
problems if you are in a rare situtation where people are  
dereferencing a term (ewww...don't do that) and not caching...they  
can hammer your server. From the client perspective, it can force  
them to download far more than they needed. Contrariwise, you end up  
in the wordnet situation with a slew of microontologies. Bleah.

&foo;bar is a pure syntax issue and I would use it only when forced.  
You are forced when you have to put uris in attribute content and  
they are not from your base (thus can't be relative). It's *much*  
better to use entities than to try to scatter bases throughout your  
document. The most common in owl is &xsd; since you need that for the  
brute syntax.

You might also consider the forthcoming OWL/XML with has a somewhat  
simpler story wrt all this. Sorta. Mostly. :) Basically, you can use  
a curie variant throughout.

Cheers,
Bijan.

Cheers,
Bijan.

Received on Monday, 13 July 2009 09:26:46 UTC