- From: Nicholas Car via GitHub <sysbot+gh@w3.org>
- Date: Sat, 23 Jun 2018 11:32:00 +0000
- To: public-dxwg-wg@w3.org
**challenging DROV-DC**
I would like to challenge an assumption in [PROV-DC](https://www.w3.org/TR/2013/NOTE-prov-dc-20130430) that I think is unhelpful in mapping PROV to Dublin Core Terms.
In examples like the `dct:publisher` mapping which is used as an illustrated example in [Figure 1](https://www.w3.org/TR/2013/NOTE-prov-dc-20130430/#figure_mapping_example), the assumption is that the `prov:Entity`, which is the domain of the `dct:publisher` property, is "The activity [`prov:Publish`] must have taken as input the document [`prov:Entity`] to be published...".
No! the `prov:Entity` of interest is, in fact, the *output* of the activity (`Publish`). We don't care what was used behind the scenes ("taken as input"): we only care, and know about, the thing in the catalogue described by DCAT: the output of any `prov:Publish` activity.
This greatly simplified modelling. Instead of modelling `:Dataset_X dct:publisher :Agent_Y ;` like this in PROV-O, as per [PROV-DC, dct:publisher](https://www.w3.org/TR/2013/NOTE-prov-dc-20130430/#dct-publisher):
```
:Dataset_X a prov:Entity ;
prov:wasAttributedTo :Agent_Y .
_:usedEntity a prov:Entity ;
prov:specializationOf :Dataset_X .
_:activity a prov:Activity, prov:Publish ;
prov:used _:usedEntity ;
prov:wasAssociatedWith :Agent_Y ;
prov:qualifiedAssociation [
a prov:Association ;
prov:agent :Agent_Y ;
prov:hadRole [a prov:Publisher] .
].
_:resultingEntity a prov:Entity ;
prov:specializationOf :Entity_X ;
prov:wasDerivedFrom _:usedEntity ;
prov:wasGeneratedBy _:activity ;
prov:wasAttributedTo :Agent_Y .
```
we model it like this:
```
:Dataset_X a prov:Entity ;
prov:wasAttributedTo :Agent_Y ;
prov:wasGeneratedBy [
a prov:Activity, prov:Publish ;
prov:generated :Dataset_X ;
prov:wasAssociatedWith :Agent_Y ;
prov:qualifiedAssociation [
a prov:Association ;
prov:agent :Agent_Y ;
prov:hadRole [a prov:Publisher] .
] .
] .
```
We could add in a blank node for an `prov:Entity`, unknown, like this:
```
:Dataset_X a prov:Entity ;
prov:wasAttributedTo :Agent_Y ;
prov:wasGeneratedBy [
a prov:Activity, prov:Publish ;
prov:wasAssociatedWith :Agent_Y ;
prov:qualifiedAssociation [
a prov:Association ;
prov:agent :Agent_Y ;
prov:hadRole [a prov:Publisher] .
] ;
prov:used _:usedEntity .
] .
```
but why? We don't know anything about the pre-published `Entity` so where's the value.
So in this way we have out `prov:hadRole` for a *Publisher* role without all the fuss of two extra used and generated unknown `Entities`.
**Issued**
Also, with this in mind we can then re-model `dct:issued` like this:
```
:Dataset_X dct:issued :DateTime_Z .
:Dataset_X prov:generatedAtTime :DateTime_Z .
```
*Iff* the generating `prov:Activity` is, in fact, a specialised `prov:Publish` as per PROV-DC or, with qualified form:
```
:Dataset_X dct:issued :DateTime_Z .
:Dataset_X a prov:Entity ;
prov:qualifiedGeneration [
a prov:Generation ;
prov:atTime :DateTime_Z ;
prov:activity [
a prov:Publish ;
] ;
] ;
```
--
GitHub Notification of comment by nicholascar
Please view or discuss this issue at https://github.com/w3c/dxwg/issues/79#issuecomment-399668872 using your GitHub account
Received on Saturday, 23 June 2018 11:32:05 UTC