Looking over the new documentation you put up about this, it seems to muddy and confuse the conceptualization of events. While easy for humans to parse, it seems perhaps a bit inflexible comparend to a concept I was playing around with yesterday, namely the OWL document I've set up over here. It's not complete, but somewhat illustrates a way to document generic events as well as specific events, being based in the concepts of the GENTECH model.
For example, one may create an event of a given type, or a generic event specifying a custom type defined within a document, describe the type as having roles to be played, with appropriate properties for allowing deductions to be made, and then specifying players, the roles they play, and their identity.
Take, for example, the following N3 data model that (roughly) illustrates how it might be used in a 'default' Birth event...
<#a> a x-gene:Birth ;
x-gene:hasPlayer <#aa> ;
x-gene:hasPlayer <#ab> ;
x-gene:hasPlayer <#ac> .
<#ac> a x-gene:Player ;
x-gene:playsRole x-gene:BirthFather ;
x-gene:playedBy <#aca> .
<#aca> a x-gene:Person ;
x-gene:name "John Smith" .
<#ab> a x-gene:Player ;
x-gene:playsRole x-gene:BirthMother ;
x-gene:playedBy <#aba> .
<#aba> a x-gene:Person ;
x-gene:name "Jane Smith" .
<#aa> a x-gene:Player ;
x-gene:playsRole x-gene:Child ;
x-gene:playedBy <#aaa> .
<#aaa> a x-gene:Person ;
x-gene:name "John Smith, Jr." .
Note that, for the Birth Event, x-gene:Child is defined as being related by an x-gene:hasPrimaryRole property (thus marking any such event as 'belonging,' in a sense, to the Child), and x-gene:BirthFather and x-gene:BirthMother are x-gene:hasMajorRole, which implies that the roles must always exist even if unspecified. On the other hand, cardinality may be a better marker on roles so as to indicate that BirthFather and BirthMother have a cardinality of 1. It also allows flexibility in defining any number of further custom roles in any event (such as a midwife who can be referenced as the author of a source affirming the Birth, or a doctor doing something similar.)
Furthermore, this definition opens up the ability to work in tandem with a rule-language (e.g. SWRL) to build further descriptions up. For example, one could define a rule that states that any person playing an x-gene:BirthMother or x-gene:BirthFather role in a Birth event is the x-gene:ancestorOf (a transitive property) the person playing the x-gene:Child role in the Birth event. Building from this, one could then start doing simple error checking with further rules and functional properties (such as the fact that the object of an x-gene:ancestorOf must be born BEFORE the birth date of the subject of such a statement), and perform RDQL or SPARQL queries to find all ancestors of a specific person, etc.
It's certainly a bit more complex for humans to understand off the bat, but further implications (such as the reverse, that a x-gene:hasBirthMother property implies that a Birth event has a player played by the object of the x-gene:hasBirthMother property playing the role of x-gene:BirthMother) might be defined as further rules in the language allowing for the terse forms you propose. -- Pipian 19:23, 3 March 2007 (EST)
I've been mulling this one over in mind the last few days. It is certainly a bit more complex, but I'm not quite sure what the benefit is. I do see value in having this "role" concept, as software which is unfamiliar with some user-defined event will still be able to work with "primary" and "major" roles. However, this could also be expressed by just using gc:primaryRole and gc:majorRole predicates, and have predicates like gc:born and gc:gaveBirth be subproperties of these more generic predicates. I sense that there's greater value in having this "player" concept, but I'm not sure what it is. So what I'm wondering is if you could elaborate a bit more on the benefit of adding that. --Hilton 18:07, 6 March 2007 (EST)
I think the advantage of the role model is the possiblity to use subclasses of "Role". So instead of creating a new (and complete unknown because unlinked) predicate "baptised" for a person we add a role "BaptizedChild" that inherits from a generic role. That way even the most exotic role can at least be read by any program (that would probably be confused by an unknown prediate). -- Jzedlitz 09:32, 9 March 2007 (EST)
Why do we need the class "Player"? Isn't is sufficient to use "x-gene:Child" or "x-gene:BirthFather" as type of the role? I have created three diagrams showing the possibilities. -- Jzedlitz 13:39, 9 March 2007 (EST)
#a^^Birth gene-x:hasRole #b^^Child gene-x:playedBy #c ⇔ #c born #a
rdf:type(?a, x-gene:Birth) ⋀ gene-x:hasRole(?a, ?b) ⋀ rdf:type(?b, gene-x:Child) ⋀ gene-x:playedBy(?b, ?c) ⇔ gc:born(?c, ?a)
(#a^^Birth gene-x:hasRole #b^^Child gene-x:playedBy #c) && (#a^^Birth gene-x:hasRole #d^^BirthFather gene-x:playedBy #e) ⇒ #e ancestorOf #c
rdf:type(?a, x-gene:Birth) ⋀ gene-x:hasRole(?a, ?b) ⋀ rdf:type(?b, gene-x:Child) ⋀ gene-x:playedBy(?b, ?c) ⋀ gene-x:hasRole(?a, ?d) ⋀ rdf:type(?d, gene-x:BirthFather) ⋀ gene-x:playedBy(?d, ?e) ⇒ gene-x:ancestorOf(?c, ?e)
SWRL implication relating the non-player version to the predicate version (SWRL) |
SWRL implication that defines 'ancestry' (SWRL) |
#georgeWashington gc:born #a . #augustineWashington gc:fathered #a . #maryBall gc:gaveBirth #a .
#augustineWashington x-gene:ancestorOf #georgeWashington . #mildredWarner x-gene:ancestorOf #georgeWashington .
I went ahead and updated the event data model pages to reflect this discussion. I think I got it right. I took the liberty of using the GC namespace, I hope that was your intention, Pipian.
--Hilton 12:33, 14 March 2007 (EDT)