This document reports on implementations and usage of the four normative specifications ([[PROV-DM]], [[PROV-N]], [[PROV-O]], [[PROV-CONSTRAINTS]]) of the PROV Family of Documents [[PROV-OVERVIEW]]. In particular, it's aim is to demonstrate that the features defined in PROV are implementable and interoperable. Features are defined as: the constructs specified in [[PROV-DM]] and their realisation in OWL (see [[PROV-O]]) and in the [[PROV-N]] syntax; the constraints defined within [[PROV-CONSTRAINTS]]. Interoperability is defined through both the interchange of provenance information and the coverage of test cases.

During the lifetime of the Provenance Working Group, implementation experience of the PROV specifications was reported. This document summarises those experiences. The version at http://www.w3.org/TR/2013/WD-prov-implementations-20130312/ is the version used for purposes of transition to proposed recommendation. For comments, please send a mail to public-prov-comments@w3.org [archive].

Introduction

The goal of PROV is to enable interoperable interchange of provenance on the Web. We take two approaches to documenting the implementation and interoperability of PROV.

  1. For the data model [[PROV-DM]] and the two working group defined serializations, we document the existence of multiple implementations that support each of the constructs within the data model and that there exists at least two implementations that are reported to exchange these constructs.
  2. We document that the PROV-Constraints specification is implementable by documenting the existence of at least two implementations that report to support all the defined constraints. To evaluate the coverage of implementations, the PROV-Constraints Test Cases are used as a point of reference. There are 280 test cases in total, which map to the the constraints defined by the document.

PROV is useful not only for applications/programs but also for exposing provenance within datasets and as a foundation for other vocabularies. We also document that usage as well.

Implementation evidence was gathered using four surveys.

This report summarizes the results of these surveys.

Meeting the Exit Criteria

At the start of the Candidate Recommendation phase, the Working Group defined a series of exit criteria. These exit criteria can be summarized as for each feature defined by PROV there are at least two implementations that support the feature and that there exists one interoperability pair that can exchange that feature. Section 3.1 shows that three implementations both produce and consume all constructs defined in PROV-DM. PROV-O is implemented by over 40 implementations and PROV-N is implemented by 12 implementations.

In terms of implementation pairs, Section 4 enumerates which pairs of implementations report exchanging provenance. Here, we meet the exit criteria in that each feature is exchanged by at least two implementations.

Finally, three validators have implemented all of the constraints defined in PROV-Constraints passing the requisite test cases, thus, passing the exit criteria. The working group recognizes that implementing the PROV-Constraints document requires substantial effort. It is nice to see that three radically different approaches were chosen to implement this specification: SPARQL, Java, Prolog, which speaks to the implementability of this specification.

For a systematic enumeration of how the exit criteria were met, please see http://www.w3.org/2011/prov/wiki/MeetingProvCRExitCriteria

List of Implementations

The following lists the reported implementations, the type of implementation, supported PROV encodings and the URL of the implementation.

Implementation Type:

Table 1: List of implementations reported to the PROV Working Group.
# Name Type PROV Encodings
1 StatJR eBook system Application PROV-O, PROV-JSON
2 PoN Application PROV-N
3 WingsProvenanceExport Application PROV-O
4 Taverna Application PROV-O
5 CollabMap Application PROV-JSON
6 WebLab-PROV Application PROV-O, PROV-N
7 ProvToolbox Framework / API
Service
PROV-O, PROV-N, PROV-XML, PROV-JSON
8 Provenance for Earth Science Application
Service
PROV-O
9 Provenance Environment (ProvEn) Services Application
Service
PROV-O
10 Annotation Inference Framework Application
Framework / API
PROV-O, PROV-N, PROV-XML, PROV-JSON
11 PROVoKing Framework / API PROV-O
12 Triplify Service PROV-O
13 Prov-gen Application PROV-N
14 OBIAMA (Ontology-Based Integrated Action Modelling Arena Application PROV-O
15 Amalgame Application
Framework / API
Service
PROV-O
16 D2R Server Service PROV-O
17 Provenance server Service PROV-N, PROV-JSON
18 agentSwitch Application PROV-N, PROV-JSON
19 Oracle Enterprise Transactions Controls Governor 8.6.4 Application PROV-O, PROV-XML
20 Pubby Service PROV-O
21 Semantic Proteomics Dashboard (SemPoD) Application PROV-O
22 DeFacto Application PROV-O
23 Quality Assessment Framework Framework / API PROV-O
24 Global Change Information System - Information Model and Semantic Application Prototypes Application PROV-O
25 OpenUp Prov Application PROV-O
26 APROVeD: Automatic Provenance Derivation Application PROV-N, PROV-JSON
27 Raw2LD Application PROV-O
28 PROV-N to Neo4J DB mapping Application PROV-N
29 Earth System Science Server Application PROV-XML, PROV-JSON
30 prov-api Framework / API PROV-O
31 Policy Reasoning Framework Framework / API PROV-O
32 Informed Rural Passenger Information Infrastructure Application PROV-O
33 PubFlow Provenance Archive Application
Framework / API
PROV-O, PROV-XML
34 PROV Python library Framework / API PROV-N, PROV-JSON
35 csv2rdf4lod-automation Application PROV-O
36 recoprov Application PROV-O, PROV-N
37 DataFAQs Application PROV-O
38 provx2o Application PROV-O, PROV-XML
39 Hedgehog Application PROV-XML
40 QuerioCity research prototype Application
Framework / API
Service
PROV-O
41 Tinga Provenance Service Service PROV-O, PROV-JSON
42 Human Computation ontology Vocabulary Extension PROV-O
43 tavernaprov Vocabulary Extension PROV-O
44 The Open Provenance Model for Workflows (OPMW) Vocabulary Extension PROV-O
45 roevo Vocabulary Extension PROV-O
46 wfprov Vocabulary Extension PROV-O
47 P-plan Vocabulary Extension PROV-O
48 Provenance Vocabulary Core Ontology Specification Vocabulary Extension PROV-O
49 Systems molecular biology provenance ontology (SysPro) Vocabulary Extension PROV-O, None
50 Yanfeng Shu Vocabulary Extension PROV-O
51 ISO_19115_Lineage Vocabulary Extension PROV-O, none
52 PAV Provenance, Authoring and Versioning Vocabulary Extension PROV-O
53 cProv Vocabulary Extension PROV-N, PROV-XML
54 PML 3.0 Vocabulary Extension PROV-O
55 Music Ontology to Media Value Chain Ontology and PROV-O Ontology Mapping Vocabulary Usage PROV-O
56 PROV-DM: the PROV data model Vocabulary Usage PROV-N
57 DBpedia Vocabulary Usage PROV-O
58 AERS-LD Vocabulary Usage PROV-O
59 TWC Healthdata Vocabulary Usage PROV-O
60 University of Southampton Open Data Vocabulary Usage PROV-XML
61 SIGNA Vocabulary Usage PROV-O
62 Dublin Core to PROV mapping Vocabulary Usage PROV-O
63 OECD Linked Data Vocabulary Usage PROV-O
64 prov-check Validator PROV-O
65 Prov-Validator Validator PROV-O, PROV-N, PROV-XML, PROV-JSON
66 checker.pl Validator PROV-XML

Feature Coverage

PROV Usage

This section enumerates the PROV-DM terms [[PROV-DM]] that are consumed (Consume Icon), produced (Produce Icon), or both consumed and produced (Consume and Produce Icon) by a particular implementation.

Hover over the numbers to see the implementation name.
Table 2: Coverage of PROV-DM terms in implementations of type Application, Framework / API, or Service.
PROV Component Term #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 #16 #17 #18 #19 #20 #21 #22 #23 #24 #25 #26 #27 #28 #29 #30 #31 #32 #33 #34 #35 #36 #37 #38 #39 #40 #41 Term
C1: Entities/Activities Entity 2 19 18 Entity
Activity 3 18 18 Activity
Generation 3 15 18 Generation
Usage 3 14 20 Usage
Communication 1 7 5 Communication
Start 2 10 6 Start
End 2 10 7 End
Invalidation 1 8 Invalidation
C2: Derivations Derivation 3 12 13 Derivation
Revision 2 7 3 Revision
Quotation 1 7 Quotation
Primary Source 2 7 1 Primary Source
C3: Agents Agent 2 18 18 Agent
Attribution 1 10 9 Attribution
Association 2 10 18 Association
Delegation 1 8 6 Delegation
Plan 3 7 10 Plan
Person 2 10 6 Person
Organization 1 10 2 Organization
SoftwareAgent 2 9 8 SoftwareAgent
Influence 1 5 3 Influence
C4: Bundles Bundle 1 8 7 Bundle
C5: Alternate Alternate 2 6 3 Alternate
Specialization 1 7 3 Specialization
C6: Collections Collection 7 1 Collection
EmptyCollection 5 2 EmptyCollection
Membership 8 1 Membership
Other Elements Identififer 1 8 6 Identififer
Attribute 2 8 7 Attribute
Label 1 8 6 Label
Location 1 6 3 Location
Role 2 6 2 Role
Type 1 9 8 Type
Value 1 8 7 Value

PROV Usage by Extension

Table 3: PROV Terms extended by Vocabularies.
PROV Component Term #42 #43 #44 #45 #46 #47 #48 #49 #50 #51 #52 #53 #54 Total
C1: Entities/Activities Entity 12
Activity 12
Generation 11
Usage 11
Communication 3
Start 4
End 5
Invalidation 2
C2: Derivations Derivation 5
Revision 3
Quotation 2
Primary Source 2
C3: Agents Agent 10
Attribution 7
Association 9
Delegation 3
Plan 9
Person 3
Organization 2
SoftwareAgent 5
Influence 6
C4: Bundles Bundle 3
C5: Alternate Alternate 2
Specialization 2
C6: Collections Collection 1
EmptyCollection 0
Membership 1
Other Elements Identififer 0
Attribute 2
Label 1
Location 5
Role 5
Type 1
Value 3

PROV Usage in Datasets

Table 4: PROV Terms used by Datasets and Vocabularies.
PROV Component Term #55 #56 #57 #58 #59 #60 #61 #62 #63 Total
C1: Entities/Activities Entity 6
Activity 7
Generation 7
Usage 7
Communication 4
Start 3
End 3
Invalidation 1
C2: Derivations Derivation 7
Revision 3
Quotation 1
Primary Source 2
C3: Agents Agent 7
Attribution 6
Association 5
Delegation 3
Plan 3
Person 1
Organization 1
SoftwareAgent 2
Influence 2
C4: Bundles Bundle 1
C5: Alternate Alternate 3
Specialization 3
C6: Collections Collection 1
EmptyCollection 1
Membership 1
Other Elements Identififer 1
Attribute 1
Label 1
Location 2
Role 2
Type 1
Value 2

PROV Constraints Implementation

Table 5: PROV Contraints [[PROV-CONSTRAINTS]] implemented by validators or other software
Constraint #64 #65 #66
Constraint 22 (key-object)      
Constraint 23 (key-properties)      
Constraint 24 (unique-generation)      
Constraint 25 (unique-invalidation)      
Constraint 26 (unique-wasStartedBy)      
Constraint 27 (unique-wasEndedBy)      
Constraint 28 (unique-startTime)      
Constraint 29 (unique-endTime)      
Constraint 30 (start-precedes-end)      
Constraint 31 (start-start-ordering)      
Constraint 32 (end-end-ordering)      
Constraint 33 (usage-within-activity)      
Constraint 34 (generation-within-activity)      
Constraint 35 (wasInformedBy-ordering)      
Constraint 36 (generation-precedes-invalidation)      
Constraint 37 (generation-precedes-usage)      
Constraint 38 (usage-precedes-invalidation)      
Constraint 39 (generation-generation-ordering)      
Constraint 40 (invalidation-invalidation-ordering)      
Constraint 41 (derivation-usage-generation-ordering)      
Constraint 42 (derivation-generation-generation-ordering)      
Constraint 43 (wasStartedBy-ordering)      
Constraint 44 (wasEndedBy-ordering)      
Constraint 45 (specialization-generation-ordering)      
Constraint 46 (specialization-invalidation-ordering)      
Constraint 47 (wasAssociatedWith-ordering)      
Constraint 48 (wasAttributedTo-ordering)      
Constraint 49 (actedOnBehalfOf-ordering)      
Constraint 50 (typing)      
Constraint 51 (impossible-unspecified-derivation-generation-use)      
Constraint 52 (impossible-specialization-reflexive)      
Constraint 53 (impossible-property-overlap)      
Constraint 54 (impossible-object-property-overlap)      
Constraint 55 (entity-activity-disjoint)      
Constraint 56 (membership-empty-collection)      

The table above was produced from the results of running PROV-CONSTRAINTS test cases submitted by implementers.

Implementations Exchanging Provenance

Table 6: Implementations exchanging PROV with the representation(s) exchanged in parentheses. An implementation that supports every feature defined by the representation is denoted with All.
  Producer: ProvToolbox PROVoKing Provenenane Server APROVeD PROV Python Prov-Validator PROV-DM
Consumer
Provenance Server All (PROV-JSON)         All (PROV-JSON)  
Prov-Validator   All (PROV-O) All (PROV-N) Partial (PROV-N) All (PROV-N)   All (PROV-N)
prov-check All (PROV-O)            

Summary:

Table 7: Features exchanged by PROV implementation pairs.
PROV Component Producer: #11 #7 Total #17 #26 #55 Total
Consumer: #65 #64 #65 #65 #65
Term PROV-O PROV-N
C1: Entities/Activities Entity 2 3
Activity 2 3
Generation 2 3
Usage 2 3
Communication 2 2
Start 2 2
End 2 2
Invalidation 2 2
C2: Derivations Derivation 2 3
Revision 2 2
Quotation 2 2
Primary Source 2 2
C3: Agents Agent 2 3
Attribution 2 2
Association 2 3
Delegation 2 2
Plan 2 2
Person 2 2
Organization 2 3
SoftwareAgent 2 2
Influence 2 2
C4: Bundles Bundle 2 3
C5: Alternate Alternate 2 2
Specialization 2 2
C6: Collections Collection 2 2
EmptyCollection 2 2
Membership 2 2
Other Elements Identififer 2 2
Attribute 2 2
Label 2 2
Location 2 2
Role 2 3
Type 2 3
Value 2 2

Although the Provenance Server (#17) and the Prov-Validator (#65) are from the same institution (i.e. University of Southampton), it is worth noting that they were built from two independent code bases (one in Python and the other in Java)

Acknowledgements

We would like to thank the following who reported their PROV implementations to us: Ali Mufajjul, Amir Sezavar Keshavarz, Ashley Smith, Chester Chen, Chris Baillie, Clément Caron, Daniel Garijo, Danius Michaelides, David Corsar, Edoardo Pignotti, Eric Stephan, Hook Hua, Irene Celino, Jacco van Ossenbruggen, James Cheney, James McCusker, Jens Lehmann, Jun Zhao, Kerry Taylor, Khalid Belhajjame, Landong Zuo, Luc Moreau, Luis M. Vilches-Blázquez, Michael Jewell, Mohamed Morsey, Olaf Hartig, Palma Raul, Paolo Missier, Paul Groth, Peer Brauer, Peter Slaughter, Reza B'Far, Rinke Hoekstra, Sara Magliacane, Sarven Capadisli, Satya Sahoo, Simon Miles, Spyros Kotoulas, Stephan Zednik, Stian Soiland-Reyes, Timothy Lebo, Tom De Nies, Trung Dong Huynh, Victor Rodriguez, Yanfeng Shu.