I like how this cleanly and naturally extends to handle the question. I agree with the practice of turning Predicates into an instances. This is exactly where we're at. We've turned Subjects and Objects into instances and we're now about to turn Predicates into instances.
Great points!
Let me explain using a "framelike" notation what I do for topic maps
-- ignoring URIs for the moment.
I have two actors:
frame: id = '123'
label = 'CO2'
frame id = '789'
label = 'Climate Change'
I have a predicate type:
frame id='CausesType' //note I am using a unique, but 'semantic'
name for this type
label = 'causes'
Now in a 'traditional' rdf graph, the triple might look like this:
{123, CausesType, 789}
But, what I do is to create an instance of the predicate and wire the
triple from that:
frame id='CausesType_1'
instanceOf = '#CausesType'
{123, CausesType_1, 789}
Now, suppose someone creates a node which exists in an issue map, the
frame for which is this:
frame id='999'
instanceOf = '#IBISQuestionType'
label = 'What is the evidence for that?'
Given an "edge" predicate since it doesn't need to be an actor:
'Questions' (See David Price's comments that not all predicates need
to be actors):
We can now start a conversation on the earlier assertion, thus:
{999, Questions, CausesType_1}
I can similarly tie properties to that causes instance, such as
'hasBiography' which would point to another frame (Topic) which is the
biography of that causal assertion.