I’m on the Semantic Web! Pt. 2
Ok. So in the last post I was talking about how I created an RDF graph to describe myself and found that I’d entered into a huge rambling geekfest about the design of the FOAF vocabluary. So, I decided to cut all of that out and post it here separately. For context, it follows directly from having created this RDF document. If your interested read on…
From that experience, of creating my own RDF graph, I had only one hiccup: using the FOAF vocabulary, while it is relatively simple to define a group (such as the company which employs you) and list its members (in that case, staff), it seems impossible to do it the other way around. Essentially, you cannot say “I work for OpenText” but can say “OpenText employs me”. I do understand why this is, though: it is fairly standard for predicates to assume ahas relationship not an is one (#me has foaf:name Chris, not is foaf:name Chris), and standards are essential for Linked Data to work.
You may think that the problem described above sounds pretty irrelevant (you may be right: read on), so let me run through my thought process:
Imagine two graphs, one describing me and one describing OpenText. In the OpenText graph there is a list of employees (as there is on Freebase) which include a reference to my graph. You could, then, search (for the purpose of an example) for the weblogs of OpenText employees fairly successfully. If, however, you were using my graph, you couldn’t find a list of colleagues of mine because I couldn’t add “Chris is employed by OpenText” to then graph and, hence, the two could not be connected.
Someone obviously agreed with that assessment as I discovered the RoleVocab vocabulary on the FOAF wiki. I used that vocab in my person profile document to assert that “Chris has a role in the organization OpenText”.
With hindsight, I think that might have been a mistake, though. My mind-frame was trapped in the resource – the me. Perhaps I should have been thinking about the whole RDF graph. Why couldn’t I include a separate resource about OpenText which only included my employment? Well, because the domain of the foaf:member property is foaf:Group and the foaf:Organization type is a direct subclass of foaf:Agent. Essentially, the foaf vocabulary is saying that you can only be a member of a group and not an organization. Personally, I think that the most semantically correct way around this issue would be to make foaf:Organization a subClass of foaf:Group or, failing that, foaf:Organization could be added as a second rdfs:domain property of foaf:member…. I may make the suggestion.
In the meantime, I’ve also added an OWL Object Property to the top of my RDF document which describes the predicate”employee”, as in “OpenText has employee Chris”.
So: apologies for the geeky and rambling post and please let me know your thoughts on the whole “Group has member Person”/”Person participates in Group” conundrum.