[foaf-dev] Linking foaf and other rdf documents/resources

Bruce Whealton bruce at whealton.info
Wed Jun 29 18:42:19 CEST 2011

Hi Mischa,
        I might need you to clarify what you mean by “foaf:knows'ing a foaf:Person URI” which you said is more efficient.  Does the foaf:Person URI refer to a foaf:Person node in an RDF (FOAF) document?

And relating to what you said Matthew, where you can use owl:sameAs what can I say my foaf file is the same as – another url that is about me, like a freebase topic?


From: Mischa Tuffield 
Sent: Wednesday, June 29, 2011 6:16 AM
To: Matthew Rowe 
Cc: Bruce Whealton ; foaf-dev at lists.foaf-project.org 
Subject: Re: [foaf-dev] Linking foaf and other rdf documents/resources


On 29 Jun 2011, at 09:39, Matthew Rowe wrote:

  Hi Bruce 

  On 29 Jun 2011, at 01:11, Bruce Whealton wrote:

    Hello all,
                    So, there are a few ways that one can link various profiles, or RDF FOAF files/resources.  I’m wondering if there is a best practice.
    I had been using 
             <rdfs:seeAlso rdf:resource=”http://url/pathto/foaf.rdf"/>

    But some FOAF profiles I’ve seen setup with method #2.
    <rdf: Description rdf: about=”http://pathToFileAboutPerson/longstringofcharacters” >
          ... information about the person
    </rdf: Description>

    then further down there would be a 
    <foaf: knows resource=”http://pathToFileAboutPerson/longstringofcharacters”/>

    I assume that the about="http://pathToFileAboutPerson/longstringofcharacters” refers to a FOAF file but I guess it doesn’t have to link to a foaf file.
    I wonder if there is a benefit to using method #2 or a best practice that favors this?  

  I don't think that there is a best practice per se, as both are, as you have found, commonly used conventions. Another is to place a link to an equivalent foaf:Person instance using owl:sameAs within the foaf:Person instance in a foaf profile:

  <owl:sameAs rdf:resource="http://pathToFileAboutPerson/hashURI"/>

Indeed, people do do this, I find it a bit wasteful in terms of number of triples authored, but that is merely personal preference. 

    I can see that it might make it easier if one had to refer, more than once, to the resource that represents a person (through their FOAF profile) in a document.
    As one uses more vocabularies and has more extensive rdf files, it becomes more likely that one is going to make numerous assertions about that person (resource).  

  My preference is for your latter example over the former as data is not duplicated in this instance. However, if I was to create new information about a person (for example by exporting it from a Social Web platform) then I would go for the former option of creating a new instance of foaf:Person and then associating additional, existing information about the person to this instance using either rdfs:seeAlso or owl:sameAs.

    Most importantly though, will there be any difference in the ability of crawlers or other apps to follow the links between various FOAF profile files?

  In theory, no. Any crawler should have built in 'lookups' that traverse the links and dereference any URIs that are described as being equivalent or providing additional information about the instance (i.e. rdfs:seeAlso and owl:sameAs).

I still think the former approach of using bnodes for People, rdfs:seeAlso, and Inverse Functional Properties is not as efficient as foaf:knows'ing a foaf:Person URI, as below: 

If i (a crawler) come across triples such as below in the foaf:Person http://socialnet.example/user/lame#foo's foaf:PersonalProfileDocument: 

<http://socialnet.example/user/lame#foo> foaf:knows _:bnode0 . 
_:bnode0 a foaf:Person . 
_:bnode0 rdfs:seeAlso <http://foozle.example/foaf.rdf> .
_:bnode0 foaf:name "Joe Bloggs" . 
_:bnode0 foaf:mbox <mailto:joe.bloggs at lame.example> . 

I would have to fetch all the triples in "http://foozle.example/foaf.rdf", and I would have to sparql for all the foaf:Person(s) in the document, and I would have to get all of people's foaf:mbox's to find out which of the foaf:Person(s)  http://socialnet.example/user/lame#foo was claiming to know. 

Aside from that I am not criticising the approach, what I find really useful about the bnode manner of foaf:knows'ing someone is for when you don't know the URI of the foaf:Person's foaf:PersonalProfileDocument of their foaf:Person URI, as you can simply state, without the rdfs:seeAlso.

<http://socialnet.example/user/lame#foo> foaf:knows _:bnode0 . 
_:bnode0 a foaf:Person . 
_:bnode0 foaf:name "Joe Bloggs" . 
_:bnode0 foaf:mbox <mailto:joe.bloggs at lame.example> .

^^ is pretty neat from my point of view, allowing one the ability to foaf:know's someone, regardless of whether or not you know what social network their foaf:PersonalProfileDocument resides. 



-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.foaf-project.org/pipermail/foaf-dev/attachments/20110629/8298b856/attachment-0001.htm 

More information about the foaf-dev mailing list