Attribution vs association

A valid question when writing provenance in responsibility view and process view is. Should we attribute contributors from entities, isn’t that what the activities are showing? In this blog post we explore the different options.

Specially with roles it may seem unnecessary to also declare wasAttributedTo statements.

It is true that you can conclude from:

wasAttributed(ex:entity, ex:agent)

then there was some activity X such that:

wasGeneratedBy(ex:entity, X)  
wasAssociatedWith(X, ex:entity)

This conclusion follows from the constraint on agents and the definition of wasAttributedTo.

However you can’t conclude the opposite directions – someone might be associated with an activity but not be responsible for a particular entity generated by that activity.

Imagine three family members writing Christmas cards:


wasAssociatedWith(ex:Alice, ex:WritingCards, prov:role=['ex:Writing'])
wasAssociatedWith(ex:Bob, ex:WritingCards, prov:role=['ex:Writing'])
wasAssociatedWith(ex:Charlie, ex:WritingCards, prov:role=['ex:Addressing'])


Now from this we may want to give the cards attribution to the individual agents, and while we can perhaps assume Charlie has written the address on all the cards, we don’t know if it was Alice or Bob who wrote the particular card going to Frank.

We therefore can add more specifically:

wasAttributedTo(ex:cardToEve, ex:Alice)  
wasAttributedTo(ex:cardToFrank, ex:Alice)  
wasAttributedTo(ex:cardToMalory, ex:Bob)

.. and for completeness:

wasAttributedTo(ex:cardToEve, ex:Charlie)  
wasAttributedTo(ex:cardToFrank, ex:Charlie)  
wasAttributedTo(ex:cardToMalory, ex:Charlie)

This highlights that responsibility view and process view can complement each other.

It is part of our modelling to decide what is considered “work height” in terms of attributions. Perhaps we should not consider Charlie putting on addresses as part of writing the cards, if what mattered was the personalized message, not how the cards were posted.

It is possible to also assign prov:type to wasAttributedTo relations, e.g. ex:authorship, but this can easily become overlapping with the roles in associations with the corresponding activity. This is perhaps more useful when the activity is not explicitly declared, or we want to declare explicit contributor roles using metadata models like CRediT.