Re: How do you go about versioning ?

Skip to first unread message

Stian Soiland-Reyes

Sep 22, 2014, 8:45:44 AM9/22/14
to Andrea Splendiani, w3c semweb hcls,
On 22 September 2014 12:59, Andrea Splendiani
<> wrote:
> Ho,
> a related question:
> hasPreviousVersion: what does it have for domain/range ?
> I would use this relations as a predicate on versions only. Leaving
> relations among versions independent from the versioned object.

Note that there is no "has" in the previous version relationship -
pav:previousVersion does not indicate any kind of hierarchical
ownership, it just points to the previous version.

has the picture :)

We say:

> Note that PAV does not define any explicit classes or domain/ranges, as every property is meant to be used directly on the described online resource.

You can interpret "online resource" as you wish - but the intention is
that the links would be resolvable - so

pav:hasCurrentVersion <urn:uuid:33d2fd62-20b6-43e4-a0a1-06144ad86f25> .

would be slightly counter-productive - but at least you have
identified the current version :).

From the parents in PROV the domain would generally be prov:Entity,
and range usually prov:Entity or prov:Agent.

The pav:hasCurrentVersion definition hints that you SHOULD provide
pav:version on the range and not on the domain.

Specifically there is no "Version" or "Versioned" class - we don't see
versioned resources as any different from other resources. Introducing
such a class would easily make people think that a Version is a
free-standing conceptual thing (like a "version number") rather than
an equivalent snapshot of the resource.

Stian Soiland-Reyes, myGrid team
School of Computer Science
The University of Manchester

Stian Soiland-Reyes

Sep 22, 2014, 10:26:39 AM9/22/14
to Andrea Splendiani, w3c semweb hcls,
On 22 September 2014 14:19, Andrea Splendiani
<> wrote:
> ok, so it seems our representations are pretty much aligned, except for the
> "" I don't say anything but simply redirect to the current
> versions.

I think that's fine as long as it's not in conflict with say the HTML
representation - depending if you want to gather links to the
versioned or unversioned resource.

> Each version page state things like "this is a version of
>, previousVersion... and so on. Latest version is the one,
> by definition, not replaced by any other version.

> Per contra, if I understand you correctly, you are explicit about which
> versions are out there and which is the latest version in the response page
> to Right ?

Yes, initially PAV only had "previousVersion" and I used the same
reasoning - the last one which no-one has as previous is the latest.

But this has two problems:

1) Require closed-world assumptions
2) There could be a later version that is not (yet) the current
version e.g. a draft update
3) Requires more complicated reasoning

So, asked for by EBI / Simon Jupp, we added the pav:hasVersion and
pav:hasCurrentVersion as a kind of top-down navigation tool. It is
arguably not directly provenance, but more bibliographic information.
In many cases you can simply think of them as shortcuts - e.g.
pav:hasVersion will point directly to each of the versioned resources
in the pav:previousVersion chain. (we also added the transitive

The inverse dct:isVersionOf approach is more allowing of any
third-party "versions" that are not "official releases". It would very
quickly be wrong for anything except for the master version and its
actual current version to claim to be the current version. :). By
adding the has*Version relations we found a way to also be specific
about that "officialness".
Reply all
Reply to author
0 new messages