Open marcolarosa opened 4 years ago
Model this like create actions using https://sparontologies.github.io/pro/current/pro.html
This is parked for now - needs more consideration from the ro-crate experts. https://github.com/ResearchObject/ro-crate/issues/79
@ptsefton @spikelynch
So I've been ruminating on role modelling since Friday as this is a requirement for PARADISEC but I can believe it would be for many others as well. The schema.org way according to a blog post from 2014 (http://blog.schema.org/2014/06/introducing-role.html) is as follows:
Say you wish to document a contributor. You would have something like: Dataset.contributor -> Person
If you now want to add a role for that person you push the Person definition out by one so you have: Dataset.contributor -> Role.contributor -> Person
That intermediate object has properties related to the person's role and defines how the Person is related as a contributor. This is how I've done the modern paradisec modelling.
Obviously we can do this in describo but it requires a few code changes. Firstly, I need to remap the @type property of the type definition that defines a contributor (I won't show the code here but I can demo over a conf). This is true for any type that could be the entry for a role. We then also need a way to differentiate a type is used for a role (and needs remapping) and when it isn't.
Then, the pill that shows a linked item (the green information blob that says contributor maps to person X) needs to do a second lookup when it encounters a role to show who is actually connected via that role. Here's how it looks now: Screen Shot 2020-05-17 at 11.14.24 am.png
The role name is shown; not the name of the person the role points to.
This is a flexible modelling construct in that a person (a single def in the crate) can be shown to have multiple roles within a project (dataset1: collector, dataset2: publisher etc etc).
However, it is a somewhat complicated construct to grok conceptually and I'm wondering if it's actually overkill.
We have one use case so far which needs this capability and from its perspective it doesn't need people to say Nick has role X related to this data blob and role Y related to the other one. Nick has roles X and Y in relation to this crate (a given item or collection). So, I want to propose the idea that we don't model roles the schema.org way and we just add a role property that can be used against a person or an org.
If a person has multiple roles then their entry in the crate will contain an array of roles:
{ @type: Person, name: Nick, roles: [ x, y, z, a, b, c] }
This isn't as flexible as the schema.org way but it's conceptually way easier for anyone who uses this data to understand his role.
I know this is a contentious idea but I firmly believe that a simpler conceptual model outweighs the flexibility of the schema.org way and it likely covers most use cases given that people will not typically bundle multiple, distinct types of data that would really benefit from the schema.org way. And if they did, there's no reason they couldn't build a crate of crates where each crate has a person with their singular role in it.
Can we discuss this Monday afternoon at some point? I have work to do but this one is a blocker that needs to be tackled this week before I windup my work on this.