Copyright © 2012-2013 W3C® (MIT, ERCIM, Keio, Beihang), All Rights Reserved. W3C liability, trademark and document use rules apply.
Provenance is information about entities, activities, and people involved in producing a piece of data or thing, which can be used to form assessments about its quality, reliability or trustworthiness. PROV-DM is the conceptual data model that forms a basis for the W3C provenance (PROV) family of specifications. It defines a concepts for expressing provenance information enabling interchange. This document introduces an XML schema for the PROV data model (PROV-DM), allowing instances of the PROV data model to be serialized in XML.
The PROV Document Overview describes the overall state of PROV, and should be read before other PROV documents.
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.
This document was published by the Provenance Working Group as a Working Draft. If you wish to make comments regarding this document, please send them to public-prov-comments@w3.org (subscribe, archives). All comments are welcome.
Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. The group does not expect this document to become a W3C Recommendation. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
For the purpose of this specification, provenance ◊ is defined as a record that describes the people, institutions, entities, and activities involved in producing, influencing, or delivering a piece of data or a thing. In particular, the provenance of information is crucial in deciding whether information is to be trusted, how it should be integrated with other diverse information sources, and how to give credit to its originators when reusing it. In an open and inclusive environment such as the Web, where users find information that is often contradictory or questionable, provenance can help those users to make trust judgements.
The PROV data model, PROV-DM, presents a generic data model for provenance that allows domain and application specific representations of provenance to be translated into such a data model and interchanged between systems. Thus, heterogeneous systems can export their native provenance into such a core data model, and applications that need to make sense of provenance can then import it, process it, and reason over it.
The PROV data model distinguishes core structures from extended structures: core structures form the essence of provenance information, and are commonly found in various domain-specific vocabularies that deal with provenance or similar kinds of information [Mappings]. Extended structures enhance and refine core structures with more expressive capabilities to cater for more advanced uses of provenance. The PROV data model, comprising both core and extended structures, is a domain-agnostic model, but with clear extensibility points allowing further domain-specific and application-specific extensions to be defined.
The PROV data model has a modular design and is structured according to six components covering various facets of provenance:
This specification goal is to provide a succinct definition of the XML form of PROV-DM, thus, we refer the reader to the PROV-DM to provide overall justification and context to the definitions presented here.
The PROV namespace is http://www.w3.org/ns/prov#.
All the concepts, reserved names and attributes introduced in this specification belong to the PROV namespace.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
Several general design principles and patterns were used in the construction of the PROV XML Schema.
The PROV-XML schema have been modularized so that extension elements defined in Working Group Notes can be defined in separate schemas. Elements corresponding to terms defined in the PROV-DM are defined in the prov-core.xsd schema and elements corresponding to terms defined in notes are defined in extension schemas (e.g. prov-dictionary.xsd, prov-links.xsd). The default schema, prov.xsd, imports prov-core.xsd and all extension schemas developed by the Working Group. With this modeling all PROV elements, even those defined in Notes, are defined from the default schema. If the user wishes to leverage a schema that does not include extension elements the user can use schemaLocation to directly reference prov-core.xsd.
The default schema - prov.xsd
<?xml version="1.0" encoding="utf-8"?> <xs:schema targetNamespace="http://www.w3.org/ns/prov#" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:include schemaLocation="prov-core.xsd"/> <xs:include schemaLocation="prov-dictionary.xsd"/> <xs:include schemaLocation="prov-links.xsd"/> </xs:schema>
Extension schemas import the prov-core.xsd schema and make use of a substitution group on the prov:internalElement
to add extension-defined elements to the list of valid PROV elements in a bundle or document.
The prov-links.xsd extension schema.
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/ns/prov#" xmlns:prov="http://www.w3.org/ns/prov#" elementFormDefault="qualified"> <xs:include schemaLocation="prov-core.xsd" /> <xs:complexType name="Mention"> <xs:sequence> <xs:element name="specificEntity" type="prov:IDRef" /> <xs:element name="generalEntity" type="prov:IDRef" /> <xs:element name="bundle" type="prov:IDRef" /> </xs:sequence> </xs:complexType> <xs:element name="mentionOf" type="prov:Mention" substitutionGroup="prov:internalElement" /> </xs:schema>
All schemas developed by the PROV WG utilize the PROV namespace.
The general design pattern for the XML schema has been called Salami Slice Design. With this design, the individual components are each defined at the top level as separate elements with distinct types. This allows the types to be easily reusable for domain specific extensions.
The prov:document
element has been defined to act as a convenient root element for a PROV-XML document, but it's use as the root element is not required. The schema follows the Salami Slice pattern to ensure PROV XML elements can be integrated with mixed-schema XML documents which require a different document root.
The general PROV-N syntax patterns for expressing provenance concepts are:
thing(id, elem1, elem2, ..., [attr1=val1, attr2=val2]) concept(id; elem1, elem2, ... [attr1=val2, attr2=val2])
In both cases (required id or optional id), the PROV-N id is treated as an XML attribute (prov:id
), the PROV-N "elements" are treated as XML elements, always with the same required order (position) as the PROV-DM/PROV-N description, and optional PROV-N "attributes", if allowed, always follow and are also represented by XML elements. As in PROV-N, the attributes can be specified multiple times, but unlike PROV-N the attributes have a fixed (alphabetical) order. The PROV-N "attribute" elements are always defined at the end of the encompassing sequence after all PROV-N "elements". Elements defined in namespaces other than the PROV namespace may be included in a element after all PROV elements.
Wherever an "id" is referenced from a later concept, the id is referenced as a prov:ref attribute of the element within the concept.
This transformation technique yields a general XML pattern:
<prov:thing prov:id="id"> <prov:elem1 /> <prov:elem2 /> ... <ex:attr1>val1</ex:attr1> <ex:attr2>val2</ex:attr2> ... </prov:thing>
Most of the concepts described below follow this general pattern.
The PROV-DM states type information is described using the prov:type PROV attribute and may occur multiple times for a given entity, activity, agent, or relation.
PROV-XML uses the element prov:type
to represent the prov:type PROV attribute. This element can be use to represent both PROV and non-PROV type information. The following examples shows type information encoded using the prov:type
element.
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#" xmlns:tr="http://example.com/ns/tr#"> <prov:entity prov:id="tr:WD-prov-dm-20111215"> <prov:type xsi:type="xsd:QName">prov:Plan</prov:type> <prov:type xsi:type="xsd:QName">ex:Workflow</prov:type> </prov:entity> </prov:document>
The prov:type
element can be used in conjunction with schema-defined PROV types (see examples 2-5).
PROV-XML defines complexTypes to match the PROV defined type values. These types provide a more native XML representation of PROV types. The following example is considered equivalent to the previous example because the element prov:plan
has type prov:Plan
. All complexTypes representing a PROV type which is defined as a subclass of another PROV type are defined in PROV-XML as extensions of their parent PROV type's complexType. For example, prov:Plan
is defined as an extension of the complexType prov:Entity
and may be referenced by either prov:plan
or prov:entity
.
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#" xmlns:tr="http://example.com/ns/tr#"> <prov:plan prov:id="tr:WD-prov-dm-20111215"> <prov:type xsi:type="xsd:QName">ex:Workflow</prov:type> </prov:plan> </prov:document>
When an extended type is used a PROV type attribute relation may be inferred for the current and any parent type of the declared type.
Stating all type information using the PROV type attribute assists in interoperability with non-PROV-XML encoding of PROV.
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#" xmlns:tr="http://example.com/ns/tr#"> <prov:plan prov:id="tr:WD-prov-dm-20111215"> <prov:type xsi:type="xsd:QName">ex:Workflow</prov:type> <prov:type>prov:Plan</prov:type> <!-- inferred --> <prov:type>prov:Entity</prov:type> <!-- inferred --> </prov:plan> </prov:document>
Because the prov:Plan
complexType is defined as an extension of the complexType prov:Entity
, the following example using xsi:type
is valid and considered equivalent to the two previous examples. The attribute xsi:type
tells an XML parser the complexType of the element. The value of xsi:type
must be a complexType derived from the default element type in a schema with known location (referenced through xsi:schemaLocation
).
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#" xmlns:tr="http://example.com/ns/tr#"> <prov:entity prov:id="tr:WD-prov-dm-20111215" xsi:type="prov:Plan"> <prov:type xsi:type="xsd:QName">ex:Workflow</prov:type> </prov:entity> </prov:document>
A PROV type attribute relation may be inferred by the use of the xsi:type
XML attribute.
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#" xmlns:tr="http://example.com/ns/tr#"> <prov:entity prov:id="tr:WD-prov-dm-20111215" xsi:type="prov:Plan"> <prov:type xsi:type="xsd:QName">ex:Workflow</prov:type> <prov:type>prov:Plan</prov:type> <!-- inferred --> <prov:type>prov:Entity</prov:type> <!-- inferred --> </prov:entity> </prov:document>
Element names are aligned with [PROV-N] record names (e.g. prov:wasGeneratedBy
, prov:actedOnBehalfOf
) and record parameter roles (e.g. prov:delegate
, prov:responsible
on a Delegation). Elements are named in camelCase which also conforms with [PROV-N] naming conventions.
ComplexType names are aligned with [PROV-DM] type names (e.g. prov:Generation
, prov:Delegation
). ComplexTypes are named in PascalCase which conforms to [PROV-DM] naming conventions and differentiates complexTypes from elements in the schema.
Provenance concepts, expressed as PROV-DM types and relations, are organized according to six components that are defined in this section.
Table 1 is a mapping of PROV-DM types and relations in PROV-XML schema XML types and elements.
Type or Relation Name | XML Schema ComplexType | XML Schema Referencing Element | Component |
Entity | prov:Entity | prov:entity | Component 1: Entities/Activities |
Activity | prov:Activity | prov:activity | |
Generation | prov:Generation | prov:wasGeneratedBy | |
Usage | prov:Usage | prov:used | |
Communication | prov:Communication | prov:wasInformedBy | |
Start | prov:Start | prov:wasStartedBy | |
End | prov:End | prov:wasEndedBy | |
Invalidation | prov:Invalidation | prov:wasInvalidatedBy | |
Derivation | prov:Derivation | prov:wasDerivedFrom | Component 2: Derivations |
Revision | prov:Revision | prov:wasRevisionOf | |
Quotation | prov:Quotation | prov:wasQuotedFrom | |
Primary Source | prov:PrimarySource | prov:hadPrimarySource | |
Agent | prov:Agent | prov:agent | Component 3: Agents, Responsibility, Influence |
Attribution | prov:Attribution | prov:wasAttributedTo | |
Association | prov:Association | prov:wasAssociatedWith | |
Delegation | prov:Delegation | prov:actedOnBehalfOf | |
Plan | prov:Plan | prov:plan | |
Person | prov:Person | prov:person | |
Organization | prov:Organization | prov:organization | |
Software Agent | prov:SoftwareAgent | prov:softwareAgent | |
Influence | prov:Influence | prov:wasInfluencedBy | |
Bundle | prov:Bundle | prov:bundle | Component 4: Bundles |
Bundle Constructor | prov:BundleConstructor | prov:bundleContent | |
Alternate | prov:Alternate | prov:alternateOf | Component 5: Alternate |
Specialization | prov:Specialization | prov:specializationOf | |
Collection | prov:Collection | prov:collection | Component 6: Collections |
Empty Collection | prov:EmptyCollection | prov:emptyCollection | |
Membership | prov:Membership | prov:hadMember |
In the rest of the section, each type is defined, in English initially, followed by its XML schema definition and some example.
The first component of PROV-DM is concerned with entities and activities, and their inter-relations: Usage, Generation, Start, End, and Communication.
Type definition in XML Schema:
<xs:complexType name="Entity"> <xs:sequence> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:value" minOccurs="0"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:entity
is used to reference a prov:Entity from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="entity" type="prov:Entity"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#" xmlns:tr="http://example.com/ns/tr#"> <prov:entity prov:id="tr:WD-prov-dm-20111215"> <prov:type xsi:type="xsd:QName">document</prov:type> <ex:version>2</ex:version> </prov:entity> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Activity"> <xs:sequence> <xs:element name="startTime" type="xs:dateTime" minOccurs="0"/> <xs:element name="endTime" type="xs:dateTime" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:activity
is used to reference a prov:Activity from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="activity" type="prov:Activity"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:activity prov:id="a1"> <prov:startTime>2011-11-16T16:05:00</prov:startTime> <prov:endTime>2011-11-16T16:06:00</prov:endTime> <prov:type xsi:type="xsd:QName">ex:edit</prov:type> <ex:host>server.example.org</ex:host> </prov:activity> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Generation"> <xs:sequence> <xs:element name="entity" type="prov:IDRef"/> <xs:element name="activity" type="prov:IDRef" minOccurs="0"/> <xs:element name="time" type="xs:dateTime" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:wasGeneratedBy
is used to reference a prov:Generation from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasGeneratedBy" type="prov:Generation"/>
<prov:document xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:entity prov:id="e1"/> <prov:activity prov:id="a1"/> <prov:wasGeneratedBy> <prov:entity prov:ref="e1"/> <prov:activity prov:ref="a1"/> <prov:time>2001-10-26T21:32:52</prov:time> <ex:port>p1</ex:port> </prov:wasGeneratedBy> <prov:entity prov:id="e2"/> <prov:wasGeneratedBy> <prov:entity prov:ref="e2"/> <prov:activity prov:ref="a1"/> <prov:time>2001-10-26T10:00:00</prov:time> <ex:port>p2</ex:port> </prov:wasGeneratedBy> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Usage"> <xs:sequence> <xs:element name="activity" type="prov:IDRef"/> <xs:element name="entity" type="prov:IDRef" minOccurs="0"/> <xs:element name="time" type="xs:dateTime" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:used
is used to reference a prov:Usage from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="used" type="prov:Usage"/>
<prov:document xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:activity prov:id="a1"/> <prov:entity prov:id="e1"/> <prov:entity prov:id="e2"/> <prov:used> <prov:activity prov:ref="a1"/> <prov:entity prov:ref="e1"/> <prov:time≶2011-11-16T16:00:00</prov:time> <ex:parameter>p1</ex:parameter> </prov:used> <prov:used> <prov:activity prov:ref="a1"/> <prov:entity prov:ref="e2"/> <prov:time>2011-11-16T16:00:01</prov:time> <ex:parameter>p2</ex:parameter> </prov:used> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Communication"> <xs:sequence> <xs:element name="informed" type="prov:IDRef"/> <xs:element name="informant" type="prov:IDRef"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:wasInformedBy
is used to reference a prov:Communication from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasInformedBy" type="prov:Communication"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#"> <prov:activity prov:id="a1"> <prov:type xsi:type="xsd:string">traffic regulations enforcing<prov:type> </prov:activity> <prov:activity prov:id="a2"> <prov:type xsi:type="xsd:string">fine paying, check writing, and mailing</prov:type> </prov:activity> <prov:wasInformedBy> <prov:informed prov:ref="a2"/> <prov:informant prov:ref="a1"/> </prov:wasInformedBy> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Start"> <xs:sequence> <xs:element name="activity" type="prov:IDRef"/> <xs:element name="trigger" type="prov:IDRef" minOccurs="0"/> <xs:element name="starter" type="prov:IDRef" minOccurs="0"/> <xs:element name="time" type="xs:dateTime" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:wasStartedBy
is used to reference a prov:Start from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasStartedBy" type="prov:Start"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:entity prov:id="e1"> <prov:type xsi:type="xsd:string">email message</prov:type> </prov:entity> <prov:activity prov:id="a1"> <prov:type xsi:type="xsd:QName">Discuss</prov:type> </prov:activity> <prov:wasStartedBy> <prov:activity prov:ref="a1"/> <prov:trigger prov:ref="e1"/> <prov:time>2011-11-16T16:05:00</prov:time> </prov:wasStartedBy> <prov:used> <prov:activity prov:ref="a1"/> <prov:entity prov:ref="e1"/> </prov:used> <prov:activity prov:id="a0"> <prov:type xsi:type="xsd:QName">Write</prov:type> </prov:activity> <prov:wasGeneratedBy> <prov:entity prov:ref="e1"/> <prov:activity prov:ref="a0"/> </prov:wasGeneratedBy> <prov:wasStartedBy> <prov:activity prov:ref="a1"/> <prov:trigger prov:ref="e1"/> <prov:starter prov:ref="a0"/> <prov:time>2011-11-16T16:05:00</prov:time> </prov:wasStartedBy> <prov:wasStartedBy> <prov:activity prov:ref="a1"/> <prov:starter prov:ref="a0"/> <prov:time>2011-11-16T16:05:00</prov:time> </prov:wasStartedBy> </prov:document>
Type definition in XML Schema:
<xs:complexType name="End"> <xs:sequence> <xs:element name="activity" type="prov:IDRef"/> <xs:element name="trigger" type="prov:IDRef" minOccurs="0"/> <xs:element name="ender" type="prov:IDRef" minOccurs="0"/> <xs:element name="time" type="xs:dateTime" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:wasEndedBy
is used to reference a prov:End from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasEndedBy" type="prov:End"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:entity prov:id="e1"> <prov:type xsi:type="xsd:string">approval document</prov:type> </prov:entity> <prov:activity prov:id="a1"> <prov:type xsi:type="xsd:QName">Editing</prov:type> </prov:activity> <prov:wasEndedBy> <prov:activity prov:ref="a1"/> <prov:trigger prov:ref="e1"/> </prov:wasEndedBy> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Invalidation"> <xs:sequence> <xs:element name="entity" type="prov:IDRef"/> <xs:element name="activity" type="prov:IDRef" minOccurs="0"/> <xs:element name="time" type="xs:dateTime" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:wasInvalidatedBy
is used to reference a prov:Invalidation from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasInvalidatedBy" type="prov:Invalidation"/>
<prov:document xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#" xmlns:bbc="http://www.bbc.co.uk/news/"> <prov:entity prov:id="ex:The-Painter"/> <prov:agent prov:id="ex:Picasso"/> <prov:wasAttributedTo> <prov:entity prov:ref="ex:The-Painter" /> <prov:agent prov:ref="ex:Picasso" /> </prov:wasAttributedTo> <prov:activity prov:id="ex:crash"/> <prov:wasInvalidatedBy> <prov:entity prov:ref="ex:The-Painter"/> <prov:activity prov:ref="ex:crash"/> <prov:time>1998-09-03T01:31:00</prov:time> <ex:circumstances>plane accident</ex:circumstances> </prov:wasInvalidatedBy> </prov:document>
The second component of PROV-DM is concerned with: derivations of entities from other entities and derivation subtypes WasRevisionOf (Revision), WasQuotedFrom (Quotation), and HasPrimarySource (Primary Source).
Type definition in XML Schema:
<xs:complexType name="Derivation"> <xs:sequence> <xs:element name="generatedEntity" type="prov:IDRef"/> <xs:element name="usedEntity" type="prov:IDRef"/> <xs:element name="activity" type="prov:IDRef" minOccurs="0"/> <xs:element name="generation" type="prov:IDRef" minOccurs="0"/> <xs:element name="usage" type="prov:IDRef" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:wasDerivedFrom
is used to reference a prov:Derivation from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasDerivedFrom" type="prov:Derivation"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#"> <prov:entity prov:id="e1"/> <prov:entity prov:id="e2"/> <prov:wasDerivedFrom> <prov:generatedEntity prov:ref="e2"/> <prov:usedEntity prov:ref="e1"/> </prov:wasDerivedFrom> <prov:wasDerivedFrom> <prov:generatedEntity prov:ref="e2"/> <prov:usedEntity prov:ref="e1"/> <prov:type xsi:type="xsd:string">physical transform</prov:type> </prov:wasDerivedFrom> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Revision"> <xs:complexContent> <xs:extension base="prov:Derivation"> </xs:extension> </xs:complexContent> </xs:complexType>
The element prov:wasRevisionOf
is used to reference a prov:Revision from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasRevisionOf" type="prov:Revision"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:rec54="http://www.w3.org/2001/02pd/rec54#" xmlns:tr="http://example.com/ns/tr#"> <prov:entity prov:id="tr:WD-prov-dm-20111215"> <prov:type xsi:type="xsd:QName">rec54:WD</prov:type> </prov:entity> <prov:entity prov:id="tr:WD-prov-dm-20111018"> <prov:type xsi:type="xsd:QName">rec54:WD</prov:type> </prov:entity> <prov:wasRevisionOf> <prov:generatedEntity prov:ref="tr:WD-prov-dm-20111215"/> <prov:usedEntity prov:ref="tr:WD-prov-dm-20111018"/> </prov:wasRevisionOf> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Quotation"> <xs:complexContent> <xs:extension base="prov:Derivation"> </xs:extension> </xs:complexContent> </xs:complexType>
The element prov:wasQuotedFrom
is used to reference a prov:Quotation from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasQuotedFrom" type="prov:Quotation"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:wp="http://thinklinks.wordpress.com/2012/03/07/" xmlns:ex="http://example.com/ns/ex#" xmlns:dm="http://dvcs.w3.org/hg/prov/raw-file/default/model/prov-dm.html#"> <prov:entity prov:id="wp:thoughts-from-the-dagstuhl-principles-of-provenance-workshop"/> <prov:entity prov:id="dm:bl-dagstuhl"/> <prov:person prov:id="ex:Luc"/> <prov:person prov:id="ex:Paul"/> <prov:wasQuotedFrom> <prov:generatedEntity prov:ref="dm:gl-dagstuhl"/> <prov:usedEntity prov:ref="wp:thoughts-from-the-dagstuhl-principles-of-provenance-workshop"/> </prov:wasQuotedFrom> <prov:wasAttributedTo> <prov:entity prov:ref="dm:bl-dagstuhl"/> <prov:agent prov:ref="ex:Luc"/> </prov:wasAttributedTo> <prov:wasAttributedTo> <prov:entity prov:ref="wp:thoughts-from-the-dagstuhl-principles-of-provenance-workshop"/> <prov:agent prov:ref="ex:Paul"/> </prov:wasAttributedTo> </prov:document>
Type definition in XML Schema:
<xs:complexType name="PrimarySource"> <xs:complexContent> <xs:extension base="prov:Derivation"> </xs:extension> </xs:complexContent> </xs:complexType>
The element prov:hadPrimarySource
is used to reference a prov:PrimarySource from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="hadPrimarySource" type="prov:PrimarySource"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:entity prov:id="ex:la-campagne-de-Russie-1812-1813"> <prov:type xsi:type="xsd:QName">map</prov:type> </prov:entity> <prov:entity prov:id="ex:revue-d-Histoire-de-la-Pharmacie-t-XVIII"> <prov:type xsi:type="xsd:QName">journal</prov:type> </prov:entity> <prov:hadPrimarySource> <prov:generatedEntity prov:ref="ex:la-campagne-de-Russie-1812-1813"/> <prov:usedEntity prov:ref="ex:revue-d-Histoire-de-la-Pharmacie-t-XVIII"/> </prov:hadPrimarySource> </prov:document>
The third component of PROV-DM is concerned with agents and the relations WasAttributedTo (Attribution), WasAssociatedWith (Association), ActedOnBehalfOf (Delegation), relating agents to entities, activities, and agents, respectively.
Type definition in XML Schema:
<xs:complexType name="Agent"> <xs:sequence> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:agent
is used to reference a prov:Agent from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="agent" type="prov:Agent"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:agent prov:id="e1"> <prov:type xsi:type="xsd:QName">prov:Person</prov:type> <ex:name>Alice</ex:name> <ex:employee>1234</ex:employee> </prov:agent> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Person"> <xs:complexContent> <xs:extension base="prov:Agent"> </xs:extension> </xs:complexContent> </xs:complexType>
The element prov:person
is used to reference a prov:Person from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="person" type="prov:Person"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:person prov:id="ex:Paolo" /> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Organization"> <xs:complexContent> <xs:extension base="prov:Agent"> </xs:extension> </xs:complexContent> </xs:complexType>
The element prov:organization
is used to reference a prov:Organization from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="organization" type="prov:Organization"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:organization prov:id="w3:Consortium" /> </prov:document>
Type definition in XML Schema:
<xs:complexType name="SoftwareAgent"> <xs:complexContent> <xs:extension base="prov:Agent"> </xs:extension> </xs:complexContent> </xs:complexType>
The element prov:softwareAgent
is used to reference a prov:SoftwareAgent from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="softwareAgent" type="prov:SoftwareAgent"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:softwareAgent prov:id="ag" /> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Attribution"> <xs:sequence> <xs:element name="entity" type="prov:IDRef"/> <xs:element name="agent" type="prov:IDRef"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:wasAttributedTo
is used to reference a prov:Attribution from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasAttributedTo" type="prov:Attribution"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#" xmlns:tr="http://example.com/ns/tr#" xmlns:rec54="http://example.com/ns/rec54#"> <prov:agent prov:id="ex:Paolo"> <prov:typexsi:type="xsd:QName">prov:Person</prov:type> </prov:agent> <prov:agent prov:id="ex:Simon"> <prov:type xsi:type="xsd:QName">prov:Person</prov:type> </prov:agent> <prov:entity prov:id="tr:WD-prov-dm-20111215"> <prov:type xsi:type="xsd:QName">rec54:WD</prov:type> </prov:entity> <prov:wasAttributedTo> <prov:entity prov:ref="rec54:WD"/> <prov:agent prov:ref="ex:Paolo"/> <prov:type xsi:type="xsd:QName">editorship</prov:type> </prov:wasAttributedTo> <prov:wasAttributedTo> <prov:entity prov:ref="rec54:WD"/> <prov:agent prov:ref="ex:Simon"/> <prov:type xsi:type="xsd:QName">authorship</prov:type> </prov:wasAttributedTo> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Association"> <xs:sequence> <xs:element name="activity" type="prov:IDRef"/> <xs:element name="agent" type="prov:IDRef" minOccurs="0"/> <xs:element name="plan" type="prov:IDRef" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:wasAssociatedWith
is used to reference a prov:Association from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasAssociatedWith" type="prov:Association"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:activity prov:id="a"> <prov:type xsi:type="xsd:string">workflow execution</prov:type> </prov:activity> <prov:agent prov:id="ag1"> <prov:type xsi:type="xsd:QName">operator</prov:type> </prov:agent> <prov:agent prov:id="ag2"> <prov:type xsi:type="xsd:QName">designator</prov:type> </prov:agent> <prov:wasAssociatedWith> <prov:activity prov:ref="a"/> <prov:agent prov:ref="ag1"/> <prov:role xsi:type="xsd:QName">loggedInUser</prov:role> <ex:how>webapp</ex:how> </prov:wasAssociatedWith> <prov:wasAssociatedWith> <prov:activity prov:ref="a"/> <prov:agent prov:ref="ag2"/> <prov:plan prov:ref="ex:wf"/> <prov:role xsi:type="xsd:QName">designer</prov:role> <ex:content>project1</ex:content> </prov:wasAssociatedWith> <prov:plan prov:id="ex:wf"> <ex:label>Workflow 1</ex:label> <prov:location xsi:type="xsd:anyURI">http://example.org/workflow1.bpel</prov:location> </prov:plan> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Plan"> <xs:complexContent> <xs:extension base="prov:Entity"> </xs:extension> </xs:complexContent> </xs:complexType>
The element prov:plan
is used to reference a prov:Plan from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="plan" type="prov:Plan"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:activity prov:id="a"> <prov:type xsi:type="xsd:string">workflow execution</prov:type> </prov:activity> <prov:agent prov:id="ag1"> <prov:type xsi:type="xsd:QName">operator</prov:type> </prov:agent> <prov:agent prov:id="ag2"> <prov:type xsi:type="xsd:QName">designator</prov:type> </prov:agent> <prov:wasAssociatedWith> <prov:activity prov:ref="a"/> <prov:agent prov:ref="ag1"/> <prov:role xsi:type="xsd:QName">loggedInUser</prov:role> <ex:how>webapp</ex:how> </prov:wasAssociatedWith> <prov:wasAssociatedWith> <prov:activity prov:ref="a"/> <prov:agent prov:ref="ag2"/> <prov:plan prov:ref="ex:wf"/> <prov:role xsi:type="xsd:QName">designer</prov:role> <ex:content>project1</ex:content> </prov:wasAssociatedWith> <prov:plan prov:id="ex:wf"> <ex:label>Workflow 1</ex:label> <prov:location xsi:type="xsd:anyURI">http://example.org/workflow1.bpel</prov:location> </prov:plan> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Delegation"> <xs:sequence> <xs:element name="delegate" type="prov:IDRef"/> <xs:element name="responsible" type="prov:IDRef"/> <xs:element name="activity" type="prov:IDRef" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:actedOnBehalfOf
is used to reference a prov:Delegation from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="actedOnBehalfOf" type="prov:Delegation"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#"> <prov:activity prov:id="a"> <prov:type xsi:type="xsd:QName">workflow</prov:type> </prov:activity> <prov:agent prov:id="ag1"> <prov:type xsi:type="xsd:QName">programmer</prov:type> </prov:agent> <prov:agent prov:id="ag2"> <prov:type xsi:type="xsd:QName">researcher</prov:type> </prov:agent> <prov:agent prov:id="ag3"> <prov:type xsi:type="xsd:QName">funder</prov:type> </prov:agent> <prov:wasAssociatedWith> <prov:activity prov:ref="a"/> <prov:agent prov:ref="ag1"/> <prov:role xsi:type="xsd:QName">loggedInUser</prov:role> </prov:wasAssociatedWith> <prov:wasAssociatedWith> <prov:activity prov:ref="a"/> <prov:agent prov:ref="ag2"/> </prov:wasAssociatedWith> <prov:wasAssociatedWith> <prov:activity prov:ref="a"/> <prov:agent prov:ref="ag3"/> </prov:wasAssociatedWith> <prov:actedOnBehalfOf> <prov:delegate prov:ref="ag1"/> <prov:responsible prov:ref="ag2"/> <prov:activity prov:ref="a"/> <prov:type xsi:type="xsd:QName">line-management</prov:type> </prov:actedOnBehalfOf> <prov:actedOnBehalfOf> <prov:delegate prov:ref="ag2"/> <prov:responsible prov:ref="ag3"/> <prov:activity prov:ref="a"/> <prov:type xsi:type="xsd:QName">contract</prov:type> </prov:actedOnBehalfOf> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Influence"> <xs:sequence> <xs:element name="influencee" type="prov:IDRef"/> <xs:element name="influencer" type="prov:IDRef"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:wasInfluencedBy
is used to reference a prov:Influence from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasInfluencedBy" type="prov:Influence"/>
<prov:document xmlns:prov="http://www.w3.org/ns/prov#" xmlns:tr="http://example.com/ns/tr#" xmlns:w3="http://w3.org/"> <prov:entity prov:id="tr:WD-prov-dm-20111215"/> <prov:agent prov:id="w3:Consortium"/> <prov:wasInfluencedBy> <prov:influencee prov:ref="tr:WD-prov-dm-20111215"/> <prov:influencer prov:ref="w3:Consortium"/> </prov:wasInfluencedBy> </prov:document>
The fourth component is concerned with bundles, a mechanism to support provenance of provenance.
A prov:Bundle
identifies a set of provenance descriptions, and is an extension of prov:Entity
, so allowing provenance of provenance to be expressed by referencing the associated entity. The content of a bundle, i.e. its provenance records, can be represented by the prov:BundleConstructor
complexType and can be specified with the prov:bundleContent
element, its prov:id
corresponds to the bundle entity.
Type definition in XML Schema:
<xs:complexType name="Bundle"> <xs:complexContent> <xs:extension base="prov:Entity"> </xs:extension> </xs:complexContent> </xs:complexType>
The element prov:bundle
is used to reference a prov:Bundle from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="bundle" type="prov:Bundle"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#" xmlns:bob="http://example.com/ns/bob#" xmlns:alice="http://example.com/ns/alice#" xmlns:agg="http://example.com/ns/agg#"> <prov:bundle prov:id="ex:bundle1"> <ex:version>1</ex:version> </prov:bundle> <prov:bundleContent prov:id="ex:bundle1"> <prov:entity prov:id="ex:report1"/> <prov:entity prov:id="ex:report2"> <prov:type xsi:type="xsd:QName">report</prov:type> <ex:version>2</ex:version> </prov:entity> <prov:wasGeneratedBy> <prov:entity prov:ref="ex:report2"/> <prov:time>2012-05-25T11:00:01</prov:time> </prov:wasGeneratedBy> <prov:wasDerivedFrom> <prov:generatedEntity prov:ref="ex:report2"/> <prov:usedEntity prov:ref="ex:report1"/> </prov:wasDerivedFrom> </prov:bundleContent> </prov:document>
The prov:BundleConstructor
complexType is used to define a named set of provenance statements. The Bundle Constructor type supports the prov:id
attribute.
The bundle entity associated with a bundle constructor set must have the same prov:id
as the bundle constructor set.
Type definition in XML Schema:
<xs:complexType name="BundleConstructor"> <xs:sequence maxOccurs="unbounded"> <xs:group ref="prov:documentElements"/> <xs:any namespace="##other" processContents="lax" minOccurs="0"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType>
The element prov:bundleContent
is used to reference a set of nested provenance statements from within a prov:Document.
Although prov:bundleContent
can only be expressed at the prov:document
level, the corresponding bundle entities may be specified at from either the prov:document
or any prov:bundleContent
, if at all.
<xs:complexType name="Document"> <xs:sequence maxOccurs="unbounded"> <xs:group ref="prov:documentElements" minOccurs="0"/> <xs:element name="bundleContent" type="prov:BundleConstructor" minOccurs="0"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" /> </xs:sequence> </xs:complexType>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#" xmlns:bob="http://example.com/ns/bob#" xmlns:alice="http://example.com/ns/alice#" xmlns:agg="http://example.com/ns/agg#"> <prov:bundle prov:id="ex:bundle1"> <ex:version>1</ex:version> </prov:bundle> <prov:bundleContent prov:id="ex:bundle1"> <prov:entity prov:id="ex:report1"/> <prov:entity prov:id="ex:report2"> <prov:type xsi:type="xsd:QName">report</prov:type> <ex:version>2</ex:version> </prov:entity> <prov:wasGeneratedBy> <prov:entity prov:ref="ex:report2"/> <prov:time>2012-05-25T11:00:01</prov:time> </prov:wasGeneratedBy> <prov:wasDerivedFrom> <prov:generatedEntity prov:ref="ex:report2"/> <prov:usedEntity prov:ref="ex:report1"/> </prov:wasDerivedFrom> </prov:bundleContent> </prov:document>
The fifth component of PROV-DM is concerned with relations SpecializationOf (Specialization) and AlternateOf (Alternate) between entities.
Type definition in XML Schema:
<xs:complexType name="Specialization"> <xs:sequence> <xs:element name="specificEntity" type="prov:IDRef"/> <xs:element name="generalEntity" type="prov:IDRef"/> </xs:sequence> </xs:complexType>
The element prov:specializationOf
is used to reference a prov:Specialization from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="specializationOf" type="prov:Specialization"/>
<prov:document xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#" xmlns:bbc="http://www.bbc.co.uk/"> <prov:entity prov:id="ex:bbcNews2012-03-23"/> <prov:entity prov:id="bbc:news"/> <prov:specializationOf> <prov:specificEntity prov:ref="ex:bbcNews2012-03-23"/> <prov:generalEntity prov:ref="bbc:news"/> </prov:specializationOf> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Alternate"> <xs:sequence> <xs:element name="alternate1" type="prov:IDRef"/> <xs:element name="alternate2" type="prov:IDRef"/> </xs:sequence> </xs:complexType>
The element prov:alternateOf
is used to reference a prov:Alternate from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="alternateOf" type="prov:Alternate"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:bbc="http://www.bbc.co.uk/news" xmlns:bbcmobile="http://www.bbc.co.uk/news/mobile"> <prov:entity prov:id="bbc:science-environment-17526723"> <prov:type xsi:type="xsd:string">a news item for desktop</prov:type> </prov:entity> <prov:entity prov:id="bbcmobile:science-environment-17526723"> <prov:type xsi:type="xsd:string">a news item for mobile devices</prov:type> </prov:entity> <prov:alternateOf> <prov:alternate1 prov:ref="bbcmobile:science-environment-17526723"/> <prov:alternate2 prov:ref="bbc:science-environment-17526723"/> </prov:alternateOf> </prov:document>
The sixth component of PROV-DM is concerned with the notion of collections. A collection is an entity that has some members. The members are themselves entities, and therefore their provenance can be expressed. Some applications need to be able to express the provenance of the collection itself: e.g. who maintains the collection (attribution), which members it contains as it evolves, and how it was assembled. The purpose of Component 6 is to define the types and relations that are useful to express the provenance of collections.
Type definition in XML Schema:
<xs:complexType name="Collection"> <xs:complexContent> <xs:extension base="prov:Entity"> </xs:extension> </xs:complexContent> </xs:complexType>
The element prov:collection
is used to reference a prov:Collection from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="collection" type="prov:Collection"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:collection prov:id="c1" /> </prov:document>
Type definition in XML Schema:
<xs:complexType name="EmptyCollection"> <xs:complexContent> <xs:extension base="prov:Collection"> </xs:extension> </xs:complexContent> </xs:complexType>
The element prov:emptyCollection
is used to reference a prov:EmptyCollection from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="emptyCollection" type="prov:EmptyCollection"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:bbc="http://www.bbc.co.uk/news" xmlns:bbcmobile="http://www.bbc.co.uk/news/mobile"> <prov:emptyCollection prov:id="c0"/> </prov:document>
Type definition in XML Schema:
<xs:complexType name="Membership"> <xs:sequence> <xs:element name="collection" type="prov:IDRef"/> <xs:element name="entity" type="prov:IDRef" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType>
The element prov:hadMember
is used to reference a prov:Membership from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="hadMember" type="prov:Membership"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#"> <prov:entity prov:id="e0"/> <prov:entity prov:id="e1"/> <prov:entity prov:id="e2"/> <prov:collection prov:id="c"/> <prov:hadMember> <prov:collection prov:ref="c"/> <prov:entity prov:ref="e0"/> <prov:entity prov:ref="e1"/> <prov:entity prov:ref="e2"/> </prov:hadMember> </prov:document>
This section introduces further elements of PROV.
The identifier attribute is used to identify instances of PROV types or relations.
<xs:attribute xmlns:xs="http://www.w3.org/2001/XMLSchema" name="id" type="xs:QName"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#" xmlns:tr="http://example.com/ns/tr#"> <prov:entity prov:id="tr:WD-prov-dm-20111215"> <prov:type xsi:type="xsd:Qname">document</prov:type> <ex:version>2</ex:version> </prov:entity> </prov:document>
A reference-by-id to a PROV entity, activity, agent, or relation.
<xs:attribute ref="prov:ref" use="required" />
<prov:document xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:entity prov:id="e1"/> <prov:activity prov:id="a1"/> <prov:wasGeneratedBy> <prov:entity prov:ref="e1"/> <prov:activity prov:ref="a1"/> <prov:time>2001-10-26T21:32:52</prov:time> <ex:port>p1</ex:port> </prov:wasGeneratedBy> </prov:document>
The PROV-DM defined PROV attributes are represented in XML as elements.
The element prov:label
is used to represent a PROV label attribute and has type prov:InternationalizedString.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="label" type="prov:InternationalizedString"/>
<prov:document xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:entity prov:id="ex:e1"> <prov:label>This is a human-readable label</prov:label> </prov:entity> <prov:entity prov:id="ex:car01"> <prov:label xml:lang="fr">Voiture 01</prov:label> <prov:label xml:lang="en">Car 01</prov:label> </prov:entity> </prov:document>
The element prov:location
is used to represent a PROV location attribute and has type xs:anySimpleType.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="location" type="xs:anySimpleType"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:entity prov:id="ex:MonaLisa"> <prov:type xsi:type="xsd:QName">StillImage</prov:type> <prov:location xsi:type="xsd:string">Le Louvre, Paris</prov:location> </prov:entity> <prov:entity prov:id="ex:cell"> <prov:location xsi:type="xsd:string">(5,5)</prov:location> <prov:value xsi:type="xsd:integer">10</prov:value> </prov:entity> </prov:document>
The element prov:role
is used to represent a PROV Role attribute and has type xs:anySimpleType.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="role" type="xs:anySimpleType"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:wasAssociatedWith> <prov:activity prov:ref="a"/> <prov:agent prov:ref="ag1"/> <prov:role xsi:type="xsd:QName">loggedInUser</prov:role> <ex:how>webapp</ex:how> </prov:wasAssociatedWith> <prov:wasAssociatedWith> <prov:activity prov:ref="a"/> <prov:agent prov:ref="ag2"/> <prov:plan prov:ref="ex:wf"/> <prov:role xsi:type="xsd:QName">designer</prov:role> <ex:content>project1</ex:content> </prov:wasAssociatedWith> </prov:document>
The element prov:type
is used to represent a PROV Type attribute and has type xs:anySimpleType.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="type" type="xs:anySimpleType"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#" xmlns:tr="http://example.com/ns/tr#"> <prov:entity prov:id="tr:WD-prov-dm-20111215"> <prov:type xsi:type="xsd:QName">document</prov:type> <ex:version>2</ex:version> </prov:entity> <prov:agent prov:id="e1"> <prov:type xsi:type="xsd:QName">prov:Person</prov:type> <ex:name>Alice</ex:name> <ex:employee>1234</ex:employee> </prov:agent> <prov:activity prov:id="a1"> <prov:startTime>2011-11-16T16:05:00</prov:startTime> <prov:endTime>2011-11-16T16:06:00</prov:endTime> <prov:type xsi:type="xsd:QName">ex:edit</prov:type> <ex:host>server.example.org</ex:host> </prov:activity> </prov:document>
The element prov:value
is used to represent a PROV Value attribute and has type xs:anySimpleType.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="value" type="xs:anySimpleType"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <prov:entity prov:id="ex:in"> <prov:value xsi:type="xsd:string">abcd</prov:value> </prov:entity> <prov:entity prov:id="ex:out"> <prov:value xsi:type="xsd:integer">4</prov:value> </prov:entity> </prov:document>
Relations defined by the PROV-DM to have type Value have type xs:anySimpleType
in PROV-XML unless otherwise specified.
The root element of all PROV-XML documents is prov:document
which has type prov:Document
.
Similar to a prov:BundleConstructor
, the prov:Document
complexType is used to define a set of provenance statements.
Unlike the prov:BundleConstructor
, a prov:Document
prov:bundle
elements (but not other prov:document
elements)Type definition in XML Schema:
<xs:complexType name="Document"> <xs:sequence maxOccurs="unbounded"> <xs:group ref="prov:documentElements" minOccurs="0"/> <xs:element name="bundleContent" type="prov:BundleConstructor" minOccurs="0"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" /> </xs:sequence> </xs:complexType>
The element prov:document
may only be used as the root element of a a PROV-XML document.
The element prov:document
is used to reference a prov:Document from within a prov:Document or prov:BundleConstructor.
Element definition in XML Schema:
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="document" type="prov:Document"/>
<prov:document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ex="http://example.com/ns/ex#"> <!-- prov statements go here --> </prov:document>
The Internet Media Type / MIME type for PROV-XML is "application/provenance+xml
".
It is recommended that PROV-XML files have the extension ".provx
" (all lowercase) on all platforms.
It is recommended that PROV-XML files stored on Macintosh HFS file systems be given a file type of TEXT
.
The information that follows has been submitted to the IESG for review, approval, and registration with IANA.
<?xml version="1.0" encoding="utf-8"?> <xs:schema targetNamespace="http://www.w3.org/ns/prov#" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:include schemaLocation="prov-core.xsd"/> <xs:include schemaLocation="prov-dictionary.xsd"/> <xs:include schemaLocation="prov-links.xsd"/> </xs:schema>
<?xml version="1.0" encoding="utf-8"?> <xs:schema targetNamespace="http://www.w3.org/ns/prov#" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:cu="http://www.w3.org/1999/xhtml/datatypes/" xmlns:xml="http://www.w3.org/XML/1998/namespace" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:import namespace="http://www.w3.org/1999/xhtml/datatypes/" /> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/> <!-- Component 1 --> <xs:complexType name="Entity"> <xs:sequence> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:value" minOccurs="0"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <xs:complexType name="Activity"> <xs:sequence> <xs:element name="startTime" type="xs:dateTime" minOccurs="0"/> <xs:element name="endTime" type="xs:dateTime" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <xs:complexType name="Generation"> <xs:sequence> <xs:element name="entity" type="prov:IDRef"/> <xs:element name="activity" type="prov:IDRef" minOccurs="0"/> <xs:element name="time" type="xs:dateTime" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <xs:complexType name="Usage"> <xs:sequence> <xs:element name="activity" type="prov:IDRef"/> <xs:element name="entity" type="prov:IDRef" minOccurs="0"/> <xs:element name="time" type="xs:dateTime" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <xs:complexType name="Communication"> <xs:sequence> <xs:element name="informed" type="prov:IDRef"/> <xs:element name="informant" type="prov:IDRef"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <xs:complexType name="Start"> <xs:sequence> <xs:element name="activity" type="prov:IDRef"/> <xs:element name="trigger" type="prov:IDRef" minOccurs="0"/> <xs:element name="starter" type="prov:IDRef" minOccurs="0"/> <xs:element name="time" type="xs:dateTime" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <xs:complexType name="End"> <xs:sequence> <xs:element name="activity" type="prov:IDRef"/> <xs:element name="trigger" type="prov:IDRef" minOccurs="0"/> <xs:element name="ender" type="prov:IDRef" minOccurs="0"/> <xs:element name="time" type="xs:dateTime" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <xs:complexType name="Invalidation"> <xs:sequence> <xs:element name="entity" type="prov:IDRef"/> <xs:element name="activity" type="prov:IDRef" minOccurs="0"/> <xs:element name="time" type="xs:dateTime" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <!-- Component 2 --> <xs:complexType name="Derivation"> <xs:sequence> <xs:element name="generatedEntity" type="prov:IDRef"/> <xs:element name="usedEntity" type="prov:IDRef"/> <xs:element name="activity" type="prov:IDRef" minOccurs="0"/> <xs:element name="generation" type="prov:IDRef" minOccurs="0"/> <xs:element name="usage" type="prov:IDRef" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <xs:complexType name="Revision"> <xs:complexContent> <xs:extension base="prov:Derivation"> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="Quotation"> <xs:complexContent> <xs:extension base="prov:Derivation"> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="PrimarySource"> <xs:complexContent> <xs:extension base="prov:Derivation"> </xs:extension> </xs:complexContent> </xs:complexType> <!-- Component 3 --> <xs:complexType name="Agent"> <xs:sequence> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:location" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <xs:complexType name="Person"> <xs:complexContent> <xs:extension base="prov:Agent"> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="Organization"> <xs:complexContent> <xs:extension base="prov:Agent"> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="SoftwareAgent"> <xs:complexContent> <xs:extension base="prov:Agent"> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="Attribution"> <xs:sequence> <xs:element name="entity" type="prov:IDRef"/> <xs:element name="agent" type="prov:IDRef"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <xs:complexType name="Association"> <xs:sequence> <xs:element name="activity" type="prov:IDRef"/> <xs:element name="agent" type="prov:IDRef" minOccurs="0"/> <xs:element name="plan" type="prov:IDRef" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <xs:complexType name="Delegation"> <xs:sequence> <xs:element name="delegate" type="prov:IDRef"/> <xs:element name="responsible" type="prov:IDRef"/> <xs:element name="activity" type="prov:IDRef" minOccurs="0"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <xs:complexType name="Influence"> <xs:sequence> <xs:element name="influencee" type="prov:IDRef"/> <xs:element name="influencer" type="prov:IDRef"/> <!-- prov attributes --> <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <!-- Component 4 --> <!-- Is there a way to have this still extend prov:Entity? --> <xs:complexType name="Bundle"> <xs:complexContent> <xs:extension base="prov:Entity"> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="BundleConstructor"> <xs:sequence maxOccurs="unbounded"> <xs:group ref="prov:documentElements"/> <xs:any namespace="##other" processContents="lax" minOccurs="0"/> </xs:sequence> <xs:attribute ref="prov:id"/> </xs:complexType> <!-- Component 5 --> <xs:complexType name="Specialization"> <xs:sequence> <xs:element name="specificEntity" type="prov:IDRef"/> <xs:element name="generalEntity" type="prov:IDRef"/> </xs:sequence> </xs:complexType> <xs:complexType name="Alternate"> <xs:sequence> <xs:element name="alternate1" type="prov:IDRef"/> <xs:element name="alternate2" type="prov:IDRef"/> </xs:sequence> </xs:complexType> <!-- Component 6 --> <xs:complexType name="Collection"> <xs:complexContent> <xs:extension base="prov:Entity"> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="EmptyCollection"> <xs:complexContent> <xs:extension base="prov:Collection"> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="Membership"> <xs:sequence> <xs:element name="collection" type="prov:IDRef"/> <xs:element name="entity" type="prov:IDRef" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name="Plan"> <xs:complexContent> <xs:extension base="prov:Entity"> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="InternationalizedString"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute ref="xml:lang" use="optional"/> </xs:extension> </xs:simpleContent> </xs:complexType> <!-- Typed literals are encoded by means of xsi:type that represent the prov:datatype. --> <xs:element name="label" type="prov:InternationalizedString"/> <xs:element name="role" type="xs:anySimpleType"/> <xs:element name="type" type="xs:anySimpleType"/> <xs:element name="location" type="xs:anySimpleType"/> <xs:element name="value" type="xs:anySimpleType"/> <xs:attribute name="id" type="xs:QName"/> <xs:attribute name="ref" type="xs:QName"/> <xs:complexType name="IDRef"> <xs:attribute ref="prov:ref" use="required" /> </xs:complexType> <!-- top-level definition of elements following the salami slice XSD design pattern to encourage integration within existing non-prov XML documents. --> <!-- Component 1 elements --> <xs:element name="entity" type="prov:Entity"/> <xs:element name="activity" type="prov:Activity"/> <xs:element name="wasGeneratedBy" type="prov:Generation"/> <xs:element name="used" type="prov:Usage"/> <xs:element name="wasInformedBy" type="prov:Communication"/> <xs:element name="wasStartedBy" type="prov:Start"/> <xs:element name="wasEndedBy" type="prov:End"/> <xs:element name="wasInvalidatedBy" type="prov:Invalidation"/> <!-- Component 2 elements --> <xs:element name="wasDerivedFrom" type="prov:Derivation"/> <xs:element name="wasRevisionOf" type="prov:Revision"/> <xs:element name="wasQuotedFrom" type="prov:Quotation"/> <xs:element name="hadPrimarySource" type="prov:PrimarySource"/> <!-- Component 3 elements --> <xs:element name="agent" type="prov:Agent"/> <xs:element name="person" type="prov:Person"/> <xs:element name="organization" type="prov:Organization"/> <xs:element name="softwareAgent" type="prov:SoftwareAgent"/> <xs:element name="wasAttributedTo" type="prov:Attribution"/> <xs:element name="wasAssociatedWith" type="prov:Association"/> <xs:element name="actedOnBehalfOf" type="prov:Delegation"/> <xs:element name="wasInfluencedBy" type="prov:Influence"/> <!-- Component 5 elements --> <xs:element name="bundle" type="prov:Bundle"/> <xs:element name="specializationOf" type="prov:Specialization"/> <xs:element name="alternateOf" type="prov:Alternate"/> <!-- Component 6 elements --> <xs:element name="hadMember" type="prov:Membership"/> <xs:element name="collection" type="prov:Collection"/> <xs:element name="emptyCollection" type="prov:EmptyCollection"/> <!-- Component 7 elements --> <xs:element name="plan" type="prov:Plan"/> <!-- document elements --> <xs:group name="documentElements"> <xs:sequence> <xs:element ref="prov:entity" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:activity" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:wasGeneratedBy" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:used" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:wasInformedBy" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:wasStartedBy" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:wasEndedBy" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:wasInvalidatedBy" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:wasDerivedFrom" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:wasRevisionOf" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:wasQuotedFrom" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:hadPrimarySource" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:agent" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:person" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:organization" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:softwareAgent" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:wasAttributedTo" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:wasAssociatedWith" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:actedOnBehalfOf" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:wasInfluencedBy" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:bundle" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:specializationOf" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:alternateOf" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:collection" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:emptyCollection" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:hadMember" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:plan" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="prov:internalElement" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:group> <xs:element name="document" type="prov:Document" /> <xs:complexType name="Document"> <xs:sequence maxOccurs="unbounded"> <xs:group ref="prov:documentElements" minOccurs="0"/> <xs:element name="bundleContent" type="prov:BundleConstructor" minOccurs="0"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" /> </xs:sequence> </xs:complexType> <!-- abstract element used by extensions --> <xs:element name="internalElement" abstract="true" /> </xs:schema>
Extension schemas are schemas in the PROV Namespace that define additional PROV elements not from the PROV-DM. Workgroup Notes provide extension schemas to define their Note-introduced PROV elements. Extension schemas must import (using xs:include
) the prov-core.xsd schema and make use of a substitution group on the prov:internalElement
to add extension defined elements to the list of valid PROV elements in a bundle or document.
Here is an example from the prov-links.xsd extension schema.
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/ns/prov#" xmlns:prov="http://www.w3.org/ns/prov#" elementFormDefault="qualified"> <xs:include schemaLocation="prov-core.xsd" /> <xs:complexType name="Mention"> <xs:sequence> <xs:element name="specificEntity" type="prov:IDRef" /> <xs:element name="generalEntity" type="prov:IDRef" /> <xs:element name="bundle" type="prov:IDRef" /> </xs:sequence> </xs:complexType> <xs:element name="mentionOf" type="prov:Mention" substitutionGroup="prov:internalElement" /> </xs:schema>
Members of the PROV Working Group at the time of publication of this document were: Ilkay Altintas (Invited expert), Reza B'Far (Oracle Corporation), Khalid Belhajjame (University of Manchester), James Cheney (University of Edinburgh, School of Informatics), Sam Coppens (IBBT), David Corsar (University of Aberdeen, Computing Science), Stephen Cresswell (The National Archives), Tom De Nies (IBBT), Helena Deus (DERI Galway at the National University of Ireland, Galway, Ireland), Simon Dobson (Invited expert), Martin Doerr (Foundation for Research and Technology - Hellas(FORTH)), Kai Eckert (Invited expert), Jean-Pierre EVAIN (European Broadcasting Union, EBU-UER), James Frew (Invited expert), Irini Fundulaki (Foundation for Research and Technology - Hellas(FORTH)), Daniel Garijo (Universidad Politécnica de Madrid), Yolanda Gil (Invited expert), Ryan Golden (Oracle Corporation), Paul Groth (Vrije Universiteit), Olaf Hartig (Invited expert), David Hau (National Cancer Institute, NCI), Sandro Hawke (W3C/MIT), Jörn Hees (German Research Center for Artificial Intelligence (DFKI) Gmbh), Ivan Herman, (W3C/ERCIM), Ralph Hodgson (TopQuadrant), Hook Hua (Invited expert), Trung Dong Huynh (University of Southampton), Graham Klyne (University of Oxford), Michael Lang (Revelytix, Inc.), Timothy Lebo (Rensselaer Polytechnic Institute), James McCusker (Rensselaer Polytechnic Institute), Deborah McGuinness (Rensselaer Polytechnic Institute), Simon Miles (Invited expert), Paolo Missier (School of Computing Science, Newcastle university), Luc Moreau (University of Southampton), James Myers (Rensselaer Polytechnic Institute), Vinh Nguyen (Wright State University), Edoardo Pignotti (University of Aberdeen, Computing Science), Paulo da Silva Pinheiro (Rensselaer Polytechnic Institute), Carl Reed (Open Geospatial Consortium), Adam Retter (Invited Expert), Christine Runnegar (Invited expert), Satya Sahoo (Invited expert), David Schaengold (Revelytix, Inc.), Daniel Schutzer (FSTC, Financial Services Technology Consortium), Yogesh Simmhan (Invited expert), Stian Soiland-Reyes (University of Manchester), Eric Stephan (Pacific Northwest National Laboratory), Linda Stewart (The National Archives), Ed Summers (Library of Congress), Maria Theodoridou (Foundation for Research and Technology - Hellas(FORTH)), Ted Thibodeau (OpenLink Software Inc.), Curt Tilmes (National Aeronautics and Space Administration), Craig Trim (IBM Corporation), Stephan Zednik (Rensselaer Polytechnic Institute), Jun Zhao (University of Oxford), Yuting Zhao (University of Aberdeen, Computing Science).