Re: In RDF what is the best practice to represent data provenance (source)?

Hi, Chris!

Please check, if I correctly understand your proposed approach below:

When I want to make assertions about some relationship ":s :p :o",
I define some class ":P_RelShips", which is intended to contain all 
relationships with predicate ":p", that actually hold in the regarded 
domain.

Further, there are two special properties:

   * ':has_P_RelShip', which has class ":P_RelShips" as its rdfs:range,
     and which will receive ":s" of the original triple as its subject

   * ':with', which has class ":P_RelShips" as its rdfs:domain,
     and which will receive ":o" of the original triple as its object

Other properties can than be assigned to an instance of ":P_RelShips" to 
annotate such a relationship.

There should also be some inference method to infer the original 
relationship from such a construct. I can see that Richard Newman has 
proposed such a method in a reply to your post.

Perhaps, I suggest a small change: I would use the /inverse/ property of 
':has_P_RelShip', called ':is_P_RelShip_of', so the ':P_RelShip' class 
is actually in the rdfs:domain of this property. I can then define class 
":P_RelShips" reasonably as an OWL class:

   class(P_RelShips partial
     restriction(is_P_RelShip_of allValuesFrom(P_DOMAIN))
     restriction(with allValuesFrom(P_RANGE))
     restriction(is_P_RelShip_of cardinality(1))
     restriction(with cardinality(1))
   )

Here, "P_DOMAIN" and "P_RANGE" are meant to be 'rdfs:domain' and 
'rdfs:range' of property ':p'. It is now warranted that every 
relationship instance of class ':P_RelShips' will have those two 
properties, and have them exactly once, and that the values of these 
properties will have the intended origin.

Ok, this really seems to work! So I could take this approach as an 
alternative to not having explicit language support for expressing 
relationships.

Thanks,
Michael


Chris Richard wrote:

>>If not, can you tell me some
>>alternative means to reference (and annotate) relationships within a
>>domain? I do not see a second candidate for providing this functionality.
> 
> If you want to talk about the relationships shouldn't you explicitly model
> them?
> 
> Think about "foaf:knows" for a second. If I want to talk about "I know so
> and so" and "I've known them for this long" and "we met each other this way"
> I think you could use "foaf:knows" for the first statement and then
> employ reification with the semantics you described and a few additional
> predicates. But I feel like the proper way to represent this is
> with a different structure. First, a "hasPersonalRelationship" (Person,
> PersonalRelationship) predicate. Related predicates would then be things
> like "with" (PersonalRelationship, foaf:Person), "since"
> (PersonalRelationship, xsd:date), etc. 
> The problem I see with this approach
> is that the existing predicate, "foaf:knows" is basically marooned and you'd
> have to choose between the two vocabularies. But can't "foaf:knows" can just
> be a quick way of saying "hasPersonalRelationship with", i.e.
> 
> Chris foaf:knows Jen
> 
> becomes shorthand for (and equivalent to):
> 
> Chris hasPersonalRelationship _:a
> _:a with Jen
> 
> Is there any way to represent this type of relation amongst predicates with
> OWL or a related language? I see this same modelling technique used in the
> following tagging vocabulary:
> http://www.holygoat.co.uk/owl/redwood/0.1/tags/tags.n3 where resources can
> be tagged by relating them directly to tags with "taggedWithTag" (Resource,
> Tag) or indirectly with "tag" (Resource, Tagging) and "associatedTag"
> (Tagging, Tag).
> 
> In this case, Foo taggedWithTag Bar
> 
> is shorthand for:
> 
> Foo tag _:a
> _:a associatedTag Bar
> 
> Hopefully I'm not way off the mark...
> 
> Chris

Received on Monday, 22 January 2007 13:33:59 UTC