W3C

PROV-XML: The PROV XML Schema

W3C Working Draft 11 December 201212 March 2013

This version:
http://www.w3.org/TR/2013/WD-prov-xml-20130312/
Latest published version:
http://www.w3.org/TR/prov-xml/
Latest editor's draft:
http://dvcs.w3.org/hg/prov/raw-file/default/xml/prov-xml.html
Previous version:
http://www.w3.org/TR/2012/WD-prov-xml-20121211/ (color-coded diff)
Latest published version:http://www.w3.org/TR/prov-xml/Latest editor's draft:http://dvcs.w3.org/hg/prov/raw-file/default/xml/prov-xml.html
Editors:
(In alphabetical order)
Hook Hua, Jet Propulsion Laboratory / California Institute of TechnologyInvited Expert
Curt Tilmes, National Aeronautics and Space Administration
Stephan Zednik, Rensselaer Polytechnic Institute
Author:
Luc Moreau, University of Southampton

Abstract

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.

Status of This Document

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/.

PROV Family of Documents

This document is part of the PROV family of documents, a set of documents defining various aspects that are necessary to achieve the vision of inter-operable interchange of provenance information in heterogeneous environments such as the Web. These documents are: PROV-OVERVIEW (To be published as Note), an overview ofare listed below. Please consult the PROV family of documents [PROV-OVERVIEW] for a guide to reading these documents.

This document was published by the Provenance Working Group as a First Public Working Draft. If you wish to make comments regarding this document, please send them to public-prov-comments@w3.org (subscribe, archives). All feedback iscomments 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.

Table of Contents

1. Introduction

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.

1.1 PROV Namespace

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.

1.2 Conventions

The key words "must"MUST", "must not", "MUST NOT", "required", "REQUIRED", "shall", "SHALL", "shall", "SHALL notNOT", "should", "SHOULD", "should not", "SHOULD NOT", "recommended", "RECOMMENDED",", "may"MAY",", and "optional"OPTIONAL"" in this document are to be interpreted as described in [RFC2119].

2. XML Schema Design

Several general design principles and patterns were used in the construction of the PROV XML Schema.

2.1 Schema Modularization

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.

2.2 Salami Slice Design Pattern

The general design pattern for the XML schema has been called Salami Slice Design (cite?).. 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.

2.3 Elements vs. Attributes

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,attribute (prov:id), the PROV-N "elements""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","attributes", if allowed, always follow and are also represented by XML elements. As in PROV-N, the attributes can be specified multiple times, andbut 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 any order, as long as they arenamespaces other than the PROV namespace may be included in a element after all at the end of the encompassing element. PROV elements.

Wherever an "id""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:id="id">
  <prov:elem1 />
  <prov:elem2 />
  ...
  <prov:attr1>val1</prov:attr1>
  <prov:attr2>val2</prov:attr2><ex:attr1>val1</ex:attr1>
  <ex:attr2>val2</ex:attr2>
  ...
</prov:thing>

Most of the concepts described below follow this general pattern.

REVIEW QUESTION: Is this ordering of elements/attributes reasonable/satisfactory? Would it be better to loosen the ordering requirement allowing any mix of elements/attributes, or to tighten the ordering requirement, requiring all "prov:" namespace attributes to precede all non-"prov:" namespace attributes when expressed as XML elements? REVIEW QUESTION:

2.4 Type Conventions

2.4.1 PROV Type Attribute

The current design has mirroredPROV-DM states type information is described using the naming from PROV-N.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 often involves relianceelement can be use to represent both PROV and non-PROV type information. The following examples shows type information encoded using the prov:type element.

Example 1: type information using prov:type PROV 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">
    <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).

2.4.2 Extension Types

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.

Example 2: type information using schema defined types
<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.

Example 3: type information using schema defined types - type inferences
<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>

2.4.3 XSI Type

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).

Example 4: type information using xsi:type
<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.

Example 5: type information using xsi:type - type inferences
<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>

2.5 Naming Conventions

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 "prov:type" attribute to distinguish some relations. In order to simplify the overall expression of those concepts in XML, we are considering adding additional explicitly named top level elements rather than requiring "prov:type". schema.

For example, a Quotation is currently expressed in PROV-N as a type of Derivation like this: wasDerivedFrom(a, b, [prov:type='prov:Quotation']) which is transformed to: <prov:wasDerivedFrom> <prov:generatedEntity prov:ref="a"/> <prov:usedEntity prov:ref="b"/> <prov:type xsi:type="xsd:QName">prov:Quotation</prov:type> </prov:wasDerivedFrom> This proposal would replace that with an explicit "Quotation" element: <prov:Quotation> <prov:generatedEntity prov:ref="a"/> <prov:usedEntity prov:ref="b"/> </prov:Quotation> Other "typed" concepts and relations would be handled similarly.

3. PROV XML Schema

Provenance concepts, expressed as PROV-DM types and relations, are organized according to six components that are defined in this section.

PROV-DM Components agents/responsibility agents/responsibility agents/responsibility derivations derivations alternate collections activities/entities bundles
Figure 1 ◊: PROV-DM Components (Informative)

Table 1 is a mapping of PROV-DM types and relations in PROV-XML schema XML types and elements.

UsagePrimary SourceDelegationPersonSoftwareAgentEmptyCollection
Table 1 ◊: PROV-DM Types and Relations to XML Schema Mapping
Type or Relation Name XML Schema ComplexType or usage XML Schema Referencing Element Component
Entity prov:Entity prov:entity Component 1: Entities/Activities
Activity prov:Activity Generation prov:Generationprov:activity
Generation prov:Usage Communicationprov:Generation prov:Communicationprov:wasGeneratedBy
StartUsage prov:Startprov:Usage prov:used
EndCommunication prov:Endprov:Communication prov:wasInformedBy
InvalidationStart prov:Start prov:wasStartedBy
End prov:End prov:wasEndedBy
Invalidation prov:Invalidation prov:wasInvalidatedBy
Derivation prov:Derivation prov:wasDerivedFrom Component 2: Derivations
Revision use <prov:type>prov:Revision</prov:type> in Derivation Quotationprov:Revision use <prov:type>prov:Quotation</prov:type> in Derivationprov:wasRevisionOf
Quotation use <prov:type>prov:PrimarySource</prov:type> in Derivationprov:Quotation prov:wasQuotedFrom
Primary Source prov:PrimarySource prov:hadPrimarySource
Agent prov:Agent prov:agent Component 3: Agents, Responsibility, Influence
Attribution prov:Attribution Association prov:Associationprov:wasAttributedTo
Association prov:Delegation Planprov:Association use <prov:type>prov:Plan</prov:type> in Entityprov:wasAssociatedWith
Delegation use <prov:type>prov:Person</prov:type> in Agent Organizationprov:Delegation use <prov:type>prov:Organization</prov:type> in Agentprov:actedOnBehalfOf
Plan use <prov:type>prov:SoftwareAgent</prov:type> in Agentprov:Plan prov:plan
InfluencePerson prov:Person prov:person
Organization prov:Organization prov:organization
Software Agent prov:SoftwareAgent prov:softwareAgent
Influence prov:Influence prov:wasInfluencedBy
Bundle constructor ???prov:Bundle prov:bundle Component 4: Bundles
Bundle typeConstructor use <prov:type>prov:Bundle</prov:type> in Entityprov:BundleConstructor prov:bundleContent
Alternate prov:Alternate prov:alternateOf Component 5: Alternate
Specialization prov:Specialization prov:specializationOf
Collection use <prov:type>prov:Collection</prov:type> in Entityprov:Collection prov:collection Component 6: Collections
Empty Collection use <prov:type>prov:EmptyCollection</prov:type> in Entityprov:EmptyCollection prov:emptyCollection
Membership prov:Membership prov:hadMember
This mapping table is still under discussion and it's structure is subject to change.

In the rest of the section, each type is defined, in English initially, followed by its XML schema definition and some example.

3.1 Component 1: Entities and Activities

The first component of PROV-DM is concerned with entities and activities, and their inter-relations: Usage, Generation, Start, End, and Communication.

3.1.1 Entity

An entity is a physical, digital, conceptual, or other kind of thing with some fixed aspects; entities may be real or imaginary.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Entity">name="Entity">
  <xs:sequence>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:location"/>
      <xs:element ref="prov:value"/>
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      <!-- 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"/>
    </xs:choice>namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>ref="prov:id"/>
</xs:complexType>
  

UsageThe element prov:entity is used to reference a prov:Entity from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="entity" type="prov:Entity"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="entity" type="prov:Entity"/>
Example 6: 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#">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:id="tr:WD-prov-dm-20111215">
    <prov:type xsi:type="xsd:QName">document</prov:type>xsi:type="xsd:QName">document</prov:type>
    <ex:version>2</ex:version>
  </prov:entity>

</prov:document>

3.1.2 Activity

An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Activity">name="Activity">
  <xs:sequence>
    <xs:element name="startTime" type="xs:dateTime" minOccurs="0"/>name="startTime" type="xs:dateTime" minOccurs="0"/> 
    <xs:element name="endTime" type="xs:dateTime" minOccurs="0"/>name="endTime" type="xs:dateTime" minOccurs="0"/>
    <!-- prov attributes --> 
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:location"/>
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      <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"/>
    </xs:choice>namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>ref="prov:id"/>
</xs:complexType>

UsageThe element prov:activity is used to reference a prov:Activity from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="activity" type="prov:Activity"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="activity" type="prov:Activity"/>
Example 7: 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#">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: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>xsi:type="xsd:QName">ex:edit</prov:type>
    <ex:host>server.example.org</ex:host>
  </prov:activity>

</prov:document>

3.1.3 Generation

Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Generation">name="Generation">
  <xs:sequence>
    <xs:element name="entity" type="prov:EntityRef"/>
    <xs:element name="activity" type="prov:ActivityRef" minOccurs="0"/>
    <xs:element name="time" type="xs:dateTime" minOccurs="0"/>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:location"/>
      <xs:element ref="prov:role"/>
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      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"/>
    </xs:choice>namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>ref="prov:id"/>
</xs:complexType>

UsageThe element prov:wasGeneratedBy is used to reference a prov:Generation from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasGeneratedBy" type="prov:Generation"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasGeneratedBy" type="prov:Generation"/>
Example 8: prov:wasGeneratedBy
<prov:document
    xmlns:prov="http://www.w3.org/ns/prov#"
    xmlns:ex="http://example.com/ns/ex#">xmlns:prov="http://www.w3.org/ns/prov#"
    xmlns:ex="http://example.com/ns/ex#">

  <prov:entity prov:id="e1"/>prov:id="e1"/>

  <prov:activity prov:id="a1"/>prov:id="a1"/>

  <prov:wasGeneratedBy>
    <prov:entity prov:ref="e1"/>prov:ref="e1"/>
    <prov:activity prov:ref="a1"/>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:id="e2"/>

  <prov:wasGeneratedBy>
    <prov:entity prov:ref="e2"/>prov:ref="e2"/>
    <prov:activity prov:ref="a1"/>prov:ref="a1"/>
    <prov:time>2001-10-26T10:00:00</prov:time>
    <ex:port>p2</ex:port>
  </prov:wasGeneratedBy>

</prov:document>

3.1.4 Usage

Usage is the beginning of utilizing an entity by an activity. Before usage, the activity had not begun to utilize this entity and could not have been affected by the entity.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Usage">name="Usage">
  <xs:sequence>
    <xs:element name="activity" type="prov:ActivityRef"/>
    <xs:element name="entity" type="prov:EntityRef" minOccurs="0"/>
    <xs:element name="time" type="xs:dateTime" minOccurs="0"/>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:location"/>
      <xs:element ref="prov:role"/>
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      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"/>
    </xs:choice>namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  
<xs:attribute ref="prov:id"/>ref="prov:id"/>
</xs:complexType>

UsageThe element prov:used is used to reference a prov:Usage from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="used" type="prov:Usage"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="used" type="prov:Usage"/>
Example 9: prov:used
<prov:document
    xmlns:prov="http://www.w3.org/ns/prov#"
    xmlns:ex="http://example.com/ns/ex#">xmlns:prov="http://www.w3.org/ns/prov#"
    xmlns:ex="http://example.com/ns/ex#">

  <prov:activity prov:id="a1"/>prov:id="a1"/>

  <prov:entity prov:id="e1"/>prov:id="e1"/>

  <prov:entity prov:id="e2"/>prov:id="e2"/>

  <prov:used>
    <prov:activity prov:ref="a1"/>prov:ref="a1"/>
    <prov:entity prov:ref="e1"/>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:ref="a1"/>
    <prov:entity prov:ref="e2"/>prov:ref="e2"/>
    <prov:time>2011-11-16T16:00:01</prov:time>
    <ex:parameter>p2</ex:parameter>
  </prov:used>

</prov:document>

3.1.5 Communication

Communication is the exchange of some unspecified entity by two activities, one activity using some entity generated by the other.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Communication">name="Communication">
  <xs:sequence>
    <xs:element name="informed" type="prov:ActivityRef"/>
    <xs:element name="informant" type="prov:ActivityRef"/>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      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"/>
    </xs:choice>namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>ref="prov:id"/>
</xs:complexType>

UsageThe element prov:wasInformedBy is used to reference a prov:Communication from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasInformedBy" type="prov:Communication"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasInformedBy" type="prov:Communication"/>
Example 10: prov:wasInformedBy
<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: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:id="a1">
    <prov:type xsi:type="xsd:string">trafficxsi:type="xsd:string">traffic regulations enforcing<prov:type>
  </prov:activity>

  <prov:activity prov:id="a2">prov:id="a2">
    <prov:type xsi:type="xsd:string">finexsi:type="xsd:string">fine paying, check writing, and mailing</prov:type>
  </prov:activity>

  <prov:wasInformedBy>
    <prov:informed prov:ref="a2"/>prov:ref="a2"/>
    <prov:informant prov:ref="a1"/>prov:ref="a1"/>
  </prov:wasInformedBy>

</prov:document>

3.1.6 Start

Start is when an activity is deemed to have been started by an entity, known as trigger. The activity did not exist before its start. Any usage, generation, or invalidation involving an activity follows the activity's start. A start may refer to a trigger entity that set off the activity, or to an activity, known as starter, that generated the trigger.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Start">name="Start">
  <xs:sequence>
    <xs:element name="activity" type="prov:ActivityRef"/>
    <xs:element name="trigger" type="prov:EntityRef" minOccurs="0"/>
    <xs:element name="starter" type="prov:ActivityRef" minOccurs="0"/>
    <xs:element name="time" type="xs:dateTime" minOccurs="0"/>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:location"/>
      <xs:element ref="prov:role"/>
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      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"/>
    </xs:choice>namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>ref="prov:id"/>
</xs:complexType>

UsageThe element prov:wasStartedBy is used to reference a prov:Start from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasStartedBy" type="prov:Start"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasStartedBy" type="prov:Start"/>
Example 11: prov:wasStartedBy
<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: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:id="e1">
    <prov:type xsi:type="xsd:string">emailxsi:type="xsd:string">email message</prov:type>
  </prov:entity>

  <prov:activity prov:id="a1">prov:id="a1">
    <prov:type xsi:type="xsd:QName">Discuss</prov:type>xsi:type="xsd:QName">Discuss</prov:type>
  </prov:activity>

  <prov:wasStartedBy>
    <prov:activity prov:ref="a1"/>prov:ref="a1"/>
    <prov:trigger prov:ref="e1"/>prov:ref="e1"/>
    <prov:time>2011-11-16T16:05:00</prov:time>
  </prov:wasStartedBy>

  <prov:used>
    <prov:activity prov:ref="a1"/>prov:ref="a1"/>
    <prov:entity prov:ref="e1"/>prov:ref="e1"/>
  </prov:used>

  <prov:activity prov:id="a0">prov:id="a0">
    <prov:type xsi:type="xsd:QName">Write</prov:type>xsi:type="xsd:QName">Write</prov:type>
  </prov:activity>

  <prov:wasGeneratedBy>
    <prov:entity prov:ref="e1"/>prov:ref="e1"/>
    <prov:activity prov:ref="a0"/>prov:ref="a0"/>
  </prov:wasGeneratedBy>

  <prov:wasStartedBy>
    <prov:activity prov:ref="a1"/>prov:ref="a1"/>
    <prov:trigger prov:ref="e1"/>prov:ref="e1"/>
    <prov:starter prov:ref="a0"/>prov:ref="a0"/>
    <prov:time>2011-11-16T16:05:00</prov:time>
  </prov:wasStartedBy>

  <prov:wasStartedBy>
    <prov:activity prov:ref="a1"/>prov:ref="a1"/>
    <prov:starter prov:ref="a0"/>prov:ref="a0"/>
    <prov:time>2011-11-16T16:05:00</prov:time>
  </prov:wasStartedBy>

</prov:document>

3.1.7 End

End is when an activity is deemed to have been ended by an entity, known as trigger. The activity no longer exists after its end. Any usage, generation, or invalidation involving an activity precedes the activity's end. An end may refer to a trigger entity that terminated the activity, or to an activity, known as ender that generated the trigger.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="End">name="End">
  <xs:sequence>
    <xs:element name="activity" type="prov:ActivityRef"/>
    <xs:element name="trigger" type="prov:EntityRef"name="activity" type="prov:IDRef"/>
    <xs:element name="trigger" type="prov:IDRef"  minOccurs="0"/>
    <xs:element name="ender" type="prov:ActivityRef" minOccurs="0"/>
    <xs:element name="time" type="xs:dateTime" minOccurs="0"/>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:location"/>
      <xs:element ref="prov:role"/>
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      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"/>
    </xs:choice>namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>ref="prov:id"/>
</xs:complexType>

UsageThe element prov:wasEndedBy is used to reference a prov:End from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasEndedBy" ype="prov:End"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasEndedBy" type="prov:End"/>
Example 12: prov:wasEndedBy
<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: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:id="e1">
    <prov:type xsi:type="xsd:string">approvalxsi:type="xsd:string">approval document</prov:type>
  </prov:entity>

  <prov:activity prov:id="a1">prov:id="a1">
    <prov:type xsi:type="xsd:QName">Editing</prov:type>xsi:type="xsd:QName">Editing</prov:type>
  </prov:activity>

  <prov:wasEndedBy>
    <prov:activity prov:ref="a1"/>prov:ref="a1"/>
    <prov:trigger prov:ref="e1"/>prov:ref="e1"/>
  </prov:wasEndedBy>

</prov:document>

3.1.8 Invalidation

Invalidation is the start of the destruction, cessation, or expiry of an existing entity by an activity. The entity is no longer available for use (or further invalidation) after invalidation. Any generation or usage of an entity precedes its invalidation.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Invalidation">name="Invalidation">
  <xs:sequence>
    <xs:element name="entity" type="prov:EntityRef"/>
    <xs:element name="activity" type="prov:ActivityRef" minOccurs="0"/>
    <xs:element name="time" type="xs:dateTime" minOccurs="0"/>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:location"/>
      <xs:element ref="prov:role"/>
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      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"/>
    </xs:choice>namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>ref="prov:id"/>
</xs:complexType>

UsageThe element prov:wasInvalidatedBy is used to reference a prov:Invalidation from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasInvalidatedBy" type="prov:Invalidation"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasInvalidatedBy" type="prov:Invalidation"/>
Example 13: prov:wasInvalidatedBy
<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/">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:id="ex:The-Painter"/>

  <prov:agent prov:id="ex:Picasso"/>prov:id="ex:Picasso"/>

  <prov:wasAttributedTo>
    <prov:entity prov:ref="ex:The-Painter"prov:ref="ex:The-Painter" />
    <prov:agent prov:ref="ex:Picasso"prov:ref="ex:Picasso" />
  </prov:wasAttributedTo>

  <prov:activity prov:id="ex:crash"/>prov:id="ex:crash"/>

  <prov:wasInvalidatedBy>
    <prov:entity prov:ref="ex:The-Painter"/>prov:ref="ex:The-Painter"/>
    <prov:activity prov:ref="ex:crash"/>prov:ref="ex:crash"/>
    <prov:time>1998-09-03T01:31:00</prov:time>
    <ex:circumstances>plane accident</ex:circumstances>
  </prov:wasInvalidatedBy>

</prov:document>

3.2 Component 2: Derivations

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).

3.2.1 Derivation

A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Derivation">name="Derivation">
  <xs:sequence>
    <xs:element name="generatedEntity" type="prov:EntityRef"/>
    <xs:element name="usedEntity" type="prov:EntityRef"/>
    <xs:element name="activity" type="prov:ActivityRef" minOccurs="0"/>
    <xs:element name="generation" type="prov:GenerationRef" minOccurs="0"/>
    <xs:element name="usage" type="prov:UsageRef" minOccurs="0"/>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      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"/>
    </xs:choice>namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>ref="prov:id"/>
</xs:complexType>

UsageThe element prov:wasDerivedFrom is used to reference a prov:Derivation from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasDerivedFrom" type="prov:Derivation"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasDerivedFrom" type="prov:Derivation"/>
Example 14: prov:wasDerivedFrom
<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: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:id="e1"/>

  <prov:entity prov:id="e2"/>prov:id="e2"/>

  <prov:wasDerivedFrom>
    <prov:generatedEntity prov:ref="e2"/>prov:ref="e2"/>
    <prov:usedEntity prov:ref="e1"/>prov:ref="e1"/>
  </prov:wasDerivedFrom>

  <prov:wasDerivedFrom>
    <prov:generatedEntity prov:ref="e2"/>prov:ref="e2"/>
    <prov:usedEntity prov:ref="e1"/>prov:ref="e1"/>
    <prov:type xsi:type="xsd:string">physicalxsi:type="xsd:string">physical transform</prov:type>
  </prov:wasDerivedFrom>

</prov:document>

3.2.2 Revision

A revision is a derivation for which the resulting entity is a revised version of some original.

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"/>
Example 15: prov:wasRevisionOf
To specialize a Derivation relationship as a Revision relationship, include a prov:type with the value "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#">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:id="tr:WD-prov-dm-20111215">
    <prov:type xsi:type="xsd:QName">rec54:WD</prov:type>xsi:type="xsd:QName">rec54:WD</prov:type>
  </prov:entity>

  <prov:entity prov:id="tr:WD-prov-dm-20111018">prov:id="tr:WD-prov-dm-20111018">
    <prov:type xsi:type="xsd:QName">rec54:WD</prov:type>xsi:type="xsd:QName">rec54:WD</prov:type>
  </prov:entity>

  <prov:wasDerivedFrom><prov:wasRevisionOf>
    <prov:generatedEntity prov:ref="tr:WD-prov-dm-20111215"/>prov:ref="tr:WD-prov-dm-20111215"/>
    <prov:usedEntity prov:ref="tr:WD-prov-dm-20111018"/>
    <prov:type xsi:type="xsd:QName">prov:Revision</prov:type>prov:ref="tr:WD-prov-dm-20111018"/>
  </prov:wasRevisionOf>
  </prov:wasDerivedFrom>

</prov:document>
The modeling of Revision is currently under discussion and is subject to change.

3.2.3 Quotation

A quotation is the repeat of (some or all of) an entity, such as text or image, by someone who may or may not be its original author.

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"/>
Example 16: prov:wasQuotedFrom
To specialize a Derivation relationship as a Quotation relationship, include a prov:type with the value "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#">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:id="wp:thoughts-from-the-dagstuhl-principles-of-provenance-workshop"/>

  <prov:entity prov:id="dm:bl-dagstuhl"/>prov:id="dm:bl-dagstuhl"/>

  <prov:agent prov:id="ex:Luc"/><prov:person prov:id="ex:Luc"/>

  <prov:agent prov:id="ex:Paul"/><prov:person prov:id="ex:Paul"/>

  <prov:wasDerivedFrom><prov:wasQuotedFrom>
    <prov:generatedEntity prov:ref="dm:gl-dagstuhl"/>prov:ref="dm:gl-dagstuhl"/>
    <prov:usedEntity prov:ref="wp:thoughts-from-the-dagstuhl-principles-of-provenance-workshop"/>
    <prov:type xsi:type="xsd:QName">prov:Quotation</prov:type>prov:ref="wp:thoughts-from-the-dagstuhl-principles-of-provenance-workshop"/>
  </prov:wasQuotedFrom>
  </prov:wasDerivedFrom>

  <prov:wasAttributedTo>
    <prov:entity prov:ref="dm:bl-dagstuhl"/>prov:ref="dm:bl-dagstuhl"/>
    <prov:agent prov:ref="ex:Luc"/>prov:ref="ex:Luc"/>
  </prov:wasAttributedTo>

  <prov:wasAttributedTo>
    <prov:entity prov:ref="wp:thoughts-from-the-dagstuhl-principles-of-provenance-workshop"/>prov:ref="wp:thoughts-from-the-dagstuhl-principles-of-provenance-workshop"/>
    <prov:agent prov:ref="ex:Paul"/>prov:ref="ex:Paul"/>
  </prov:wasAttributedTo>

</prov:document>
The modeling of Quotation is currently under discussion and is subject to change.

3.2.4 Primary Source

A primary source for a topic refers to something produced by some agent with direct experience and knowledge about the topic, at the time of the topic's study, without benefit from hindsight.

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"/>
Example 17: prov:hadPrimarySource
To specialize a Derivation relationship as a Primary Source relationship, include a prov:type with the value "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#">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:id="ex:la-campagne-de-Russie-1812-1813">
    <prov:type xsi:type="xsd:QName">map</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:id="ex:revue-d-Histoire-de-la-Pharmacie-t-XVIII">
    <prov:type xsi:type="xsd:QName">journal</prov:type>xsi:type="xsd:QName">journal</prov:type>
  </prov:entity>

  <prov:wasDerivedFrom><prov:hadPrimarySource>
    <prov:generatedEntity prov:ref="ex:la-campagne-de-Russie-1812-1813"/>prov:ref="ex:la-campagne-de-Russie-1812-1813"/>
    <prov:usedEntity prov:ref="ex:revue-d-Histoire-de-la-Pharmacie-t-XVIII"/>
    <prov:type xsi:type="xsd:QName">prov:PrimarySource</prov:type>prov:ref="ex:revue-d-Histoire-de-la-Pharmacie-t-XVIII"/>
  </prov:hadPrimarySource>
  </prov:wasDerivedFrom>

</prov:document>
The modeling of PrimarySource is currently under discussion and is subject to change.

3.3 Component 3: Agents, Responsibility, and Influence

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.

3.3.1 Agent

An agent is something that bears some form of responsibility for an activity taking place, for the existence of an entity, or for another agent's activity.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Agent">name="Agent">
  <xs:sequence>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:location"/>
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      <!-- 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"/>
    </xs:choice>namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>ref="prov:id"/>
</xs:complexType>

UsageThe element prov:agent is used to reference a prov:Agent from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="agent" type="prov:Agent"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="agent" type="prov:Agent"/>
Example 18: 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#">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:id="e1">
    <prov:type xsi:type="xsd:QName">prov:Person</prov:type>xsi:type="xsd:QName">prov:Person</prov:type>
    <ex:name>Alice</ex:name>
    <ex:employee>1234</ex:employee>
  </prov:agent>

</prov:document>
3.3.2 Attribution 3.3.1.1 Person
Attribution is the ascribingAgents of an entity to an agent. type Person are people.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Attribution">
  <xs:sequence>
    <xs:element name="entity" type="prov:EntityRef"/>
    <xs:element name="agent" type="prov:AgentRef"/>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      <xs:any namespace="##other"/>
    </xs:choice>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>name="Person">
  <xs:complexContent>
    <xs:extension base="prov:Agent">
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

UsageThe element prov:person is used to reference a prov:Person from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasAttributedTo" type="prov:Attribution"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="person" type="prov:Person"/>
Example 19: 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#"
    xmlns:tr="http://example.com/ns/tr#"
    xmlns:rec54="http://example.com/ns/rec54#">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>
3.3.1.2 Organization
Agents of type Organization are social or legal institutions such as companies, societies, etc.

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"/>
Example 20: 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>
3.3.1.3 Software Agent
A SoftwareAgent is running software.

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"/>
Example 21: 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>

3.3.2 Attribution

Attribution is the ascribing of an entity to an agent.

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"/>
Example 22: prov:wasAttributedTo
<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:id="ex:Paolo">
    <prov:typexsi:type="xsd:QName">prov:Person</prov:type>
  </prov:agent>

  <prov:agent prov:id="ex:Simon">prov:id="ex:Simon">
    <prov:type xsi:type="xsd:QName">prov:Person</prov:type>xsi:type="xsd:QName">prov:Person</prov:type>
  </prov:agent>

  <prov:entity prov:id="tr:WD-prov-dm-20111215">prov:id="tr:WD-prov-dm-20111215">
    <prov:type xsi:type="xsd:QName">rec54:WD</prov:type>xsi:type="xsd:QName">rec54:WD</prov:type>
  </prov:entity>

  <prov:wasAttributedTo>
    <prov:entity prov:ref="rec54:WD"/>prov:ref="rec54:WD"/>
    <prov:agent prov:ref="ex:Paolo"/>prov:ref="ex:Paolo"/>
    <prov:type xsi:type="xsd:QName">editorship</prov:type>xsi:type="xsd:QName">editorship</prov:type>
  </prov:wasAttributedTo>

  <prov:wasAttributedTo>
    <prov:entity prov:ref="rec54:WD"/>prov:ref="rec54:WD"/>
    <prov:agent prov:ref="ex:Simon"/>prov:ref="ex:Simon"/>
    <prov:type xsi:type="xsd:QName">authorship</prov:type>xsi:type="xsd:QName">authorship</prov:type>
  </prov:wasAttributedTo>

</prov:document>

3.3.3 Association

An activity association is an assignment of responsibility to an agent for an activity, indicating that the agent had a role in the activity. It further allows for a plan to be specified, which is the plan intended by the agent to achieve some goals in the context of this activity.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Association">name="Association">
  <xs:sequence>
    <xs:element name="activity" type="prov:ActivityRef"/>
    <xs:element name="agent" type="prov:AgentRef" minOccurs="0"/>
    <xs:element name="plan" type="prov:EntityRef" minOccurs="0"/>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:role"/>
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      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"/>
    </xs:choice>namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>ref="prov:id"/>
</xs:complexType>

UsageThe element prov:wasAssociatedWith is used to reference a prov:Association from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasAssociatedWith" type="prov:Association"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasAssociatedWith" type="prov:Association"/>
Example 23: prov:wasAssociatedWith
<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: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:id="a">
    <prov:type xsi:type="xsd:string">workflowxsi:type="xsd:string">workflow execution</prov:type>
  </prov:activity>

  <prov:agent prov:id="ag1">prov:id="ag1">
    <prov:type xsi:type="xsd:QName">operator</prov:type>xsi:type="xsd:QName">operator</prov:type>
  </prov:agent>

  <prov:agent prov:id="ag2">prov:id="ag2">
    <prov:type xsi:type="xsd:QName">designator</prov:type>xsi:type="xsd:QName">designator</prov:type>
  </prov:agent>

  <prov:wasAssociatedWith>
    <prov:activity prov:ref="a"/>prov:ref="a"/>
    <prov:agent prov:ref="ag1"/>prov:ref="ag1"/>
    <prov:role xsi:type="xsd:QName">loggedInUser</prov:role>xsi:type="xsd:QName">loggedInUser</prov:role>
    <ex:how>webapp</ex:how>
  </prov:wasAssociatedWith>

  <prov:wasAssociatedWith>
    <prov:activity prov:ref="a"/>prov:ref="a"/>
    <prov:agent prov:ref="ag2"/>prov:ref="ag2"/>
    <prov:plan prov:ref="ex:wf"/>prov:ref="ex:wf"/>
    <prov:role xsi:type="xsd:QName">designer</prov:role>xsi:type="xsd:QName">designer</prov:role>
    <ex:content>project1</ex:content>
  </prov:wasAssociatedWith>

  <prov:entity prov:id="ex:wf">
    <prov:type xsi:type="xsd:QName">prov:Plan</prov:type><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:entity>xsi:type="xsd:anyURI">http://example.org/workflow1.bpel</prov:location>
  </prov:plan>

</prov:document>
3.3.4 Delegation 3.3.3.1 Plan
DelegationA plan is the assignmentan entity that represents a set of authority and responsibilityactions or steps intended by one or more agents to an agent (by itself or by another agent)achieve some goals. to carry out a specific activity as a delegate or representative, while the agent it acts on behalf of retains some responsibility for the outcome of the delegated work.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Delegation">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"/>
Example 24: 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>

3.3.4 Delegation

Delegation is the assignment of authority and responsibility to an agent (by itself or by another agent) to carry out a specific activity as a delegate or representative, while the agent it acts on behalf of retains some responsibility for the outcome of the delegated work.

Type definition in XML Schema:

<xs:complexType name="Delegation">
  <xs:sequence>
    <xs:element name="delegate" type="prov:AgentRef"/>
    <xs:element name="responsible" type="prov:AgentRef"/>
    <xs:element name="activity" type="prov:ActivityRef" minOccurs="0"/>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      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"/>
    </xs:choice>namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>ref="prov:id"/>
</xs:complexType>

UsageThe element prov:actedOnBehalfOf is used to reference a prov:Delegation from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="actedOnBehalfOf" type="prov:Delegation"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="actedOnBehalfOf" type="prov:Delegation"/>
Example 25: prov:actedOnBehalfOf
<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: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:id="a">
    <prov:type xsi:type="xsd:QName">workflow</prov:type>xsi:type="xsd:QName">workflow</prov:type>
  </prov:activity>

  <prov:agent prov:id="ag1">prov:id="ag1">
    <prov:type xsi:type="xsd:QName">programmer</prov:type>xsi:type="xsd:QName">programmer</prov:type>
  </prov:agent>

  <prov:agent prov:id="ag2">prov:id="ag2">
    <prov:type xsi:type="xsd:QName">researcher</prov:type>xsi:type="xsd:QName">researcher</prov:type>
  </prov:agent>

  <prov:agent prov:id="ag3">prov:id="ag3">
    <prov:type xsi:type="xsd:QName">funder</prov:type>xsi:type="xsd:QName">funder</prov:type>
  </prov:agent>

  <prov:wasAssociatedWith>
    <prov:activity prov:ref="a"/>prov:ref="a"/>
    <prov:agent prov:ref="ag1"/>prov:ref="ag1"/>
    <prov:role xsi:type="xsd:QName">loggedInUser</prov:role>xsi:type="xsd:QName">loggedInUser</prov:role>
  </prov:wasAssociatedWith>

  <prov:wasAssociatedWith>
    <prov:activity prov:ref="a"/>prov:ref="a"/>
    <prov:agent prov:ref="ag2"/>prov:ref="ag2"/>
  </prov:wasAssociatedWith>

  <prov:wasAssociatedWith>
    <prov:activity prov:ref="a"/>prov:ref="a"/>
    <prov:agent prov:ref="ag3"/>prov:ref="ag3"/>
  </prov:wasAssociatedWith>

  <prov:actedOnBehalfOf>
    <prov:delegate prov:ref="ag1"/>prov:ref="ag1"/>
    <prov:responsible prov:ref="ag2"/>prov:ref="ag2"/>
    <prov:activity prov:ref="a"/>prov:ref="a"/>
    <prov:type xsi:type="xsd:QName">line-management</prov:type>xsi:type="xsd:QName">line-management</prov:type>
  </prov:actedOnBehalfOf>

  <prov:actedOnBehalfOf>
    <prov:delegate prov:ref="ag2"/>prov:ref="ag2"/>
    <prov:responsible prov:ref="ag3"/>prov:ref="ag3"/>
    <prov:activity prov:ref="a"/>prov:ref="a"/>
    <prov:type xsi:type="xsd:QName">contract</prov:type>xsi:type="xsd:QName">contract</prov:type>
  </prov:actedOnBehalfOf>

</prov:document>

3.3.5 Influence

Influence is the capacity of an entity, activity, or agent to have an effect on the character, development, or behavior of another by means of usage, start, end, generation, invalidation, communication, derivation, attribution, association, or delegation.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Influence">name="Influence">
  <xs:sequence>
    <xs:element name="influencee" type="prov:AnyRef"/>
    <xs:element name="influencer" type="prov:AnyRef"/>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="prov:label"/>
      <xs:element ref="prov:type"/>
      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"/>
    </xs:choice>namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>ref="prov:id"/>
</xs:complexType>

UsageThe element prov:wasInfluencedBy is used to reference a prov:Influence from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasInfluencedBy" type="prov:Influence"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="wasInfluencedBy" type="prov:Influence"/>
Example 26: prov:wasInfluencedBy
<prov:document
    xmlns:prov="http://www.w3.org/ns/prov#"
    xmlns:tr="http://example.com/ns/tr#"
    xmlns:w3="http://w3.org/">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:id="tr:WD-prov-dm-20111215"/>

  <prov:agent prov:id="w3:Consortium"/>prov:id="w3:Consortium"/>

  <prov:wasInfluencedBy>
    <prov:influencee prov:ref="tr:WD-prov-dm-20111215"/>prov:ref="tr:WD-prov-dm-20111215"/>
    <prov:influencer prov:ref="w3:Consortium"/>prov:ref="w3:Consortium"/>
  </prov:wasInfluencedBy>

</prov:document>

3.4 Component 4: Bundles

The fourth component is concerned with bundles, a mechanism to support provenance of provenance.

Content in this section is still under discussion and may be subject to change.

3.4.1 Bundle

A bundle is a named set of provenance descriptions, and is itself an entity, so allowing provenance of provenance to be expressed.

A Bundleprov:Bundle identifies a set of provenance descriptions, and is an entity thatextension 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 contain nested provenance statements.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 xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Bundle">
  <xs:sequence>
    <xs:group ref="prov:documentElements"/>
  </xs:sequence>
  <xs:attribute ref="prov:id"/>name="Bundle">
  <xs:complexContent>
    <xs:extension base="prov:Entity">
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

To specialize an Entity asThe element prov:bundle is used to reference a Bundle, includeprov:Bundle from within a prov:type with the value "prov:Bundle". The bundle element with nested provenance statements is declared separately from the bundle's entity.prov:Document or prov:BundleConstructor.

UsageElement definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="document" type="prov:Document" /> <xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Document"> <xs:sequence> <xs:choice maxOccurs="unbounded"> <xs:group ref="prov:documentElements"/> <xs:element name="bundle" type="prov:Bundle"/> </xs:choice> </xs:sequence> </xs:complexType>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="bundle" type="prov:Bundle"/>
Example 27: 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:entity prov:id="ex:report1">
    <prov:type xsi:type="xsd:QName">report</prov:type>
    <ex:version>1</ex:version>
  </prov:entity>
  
  <prov:entity prov:id="ex:report2">
    <prov:type xsi:type="xsd:QName">report</prov:type>
    <ex:version>2</ex:version>
  </prov:entity>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="bob:bundle1">prov:id="ex:bundle1">
    <ex:version>1</ex:version>
  </prov:bundle>
    
  <prov:bundleContent prov:id="ex:bundle1">
    <prov:entity prov:id="ex:report1">prov:id="ex:report1"/>
    
    <prov:entity prov:id="ex:report2">
      <prov:type xsi:type="xsd:QName">report</prov:type>xsi:type="xsd:QName">report</prov:type>
      <ex:version>1</ex:version><ex:version>2</ex:version>
    </prov:entity>
    
    <prov:wasGeneratedBy>
      <prov:entity prov:ref="ex:report1"/>prov:ref="ex:report2"/>
      <prov:time>2012-05-24T10:00:01</prov:time><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>

3.4.2 Bundle Constructor

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>
Example 28: prov:bundleContent
<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:bundle prov:id="alice:bundle2"><prov:bundleContent prov:id="ex:bundle1">
    <prov:entity prov:id="ex:report1"/>prov:id="ex:report1"/>
    
    <prov:entity prov:id="ex:report2">prov:id="ex:report2">
      <prov:type xsi:type="xsd:QName">report</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:ref="ex:report2"/>
      <prov:time>2012-05-25T11:00:01</prov:time>
    </prov:wasGeneratedBy>
    
    <prov:wasDerivedFrom>
      <prov:generatedEntity prov:ref="ex:report2"/>prov:ref="ex:report2"/>
      <prov:usedEntity prov:ref="ex:report1"/>prov:ref="ex:report1"/>
    </prov:wasDerivedFrom>
  </prov:bundle></prov:bundleContent>b>
  
  <prov:entity prov:id="bob:bundle1">
    <prov:type xsi:type="xsd:QName">prov:Bundle</prov:type>
  </prov:entity>
  
  <prov:wasGeneratedBy>
    <prov:entity prov:ref="bob:bundle1"/>
    <prov:time>2012-05-24T10:30:00</prov:time>
  </prov:wasGeneratedBy>

  <prov:wasAttributedTo>
    <prov:entity prov:ref="bob:bundle1"/>
    <prov:agent prov:ref="ex:Bob"/>
  </prov:wasAttributedTo>
  
  <prov:entity prov:id="alice:bundle2">
    <prov:type xsi:type="xsd:QName">prov:Bundle</prov:type>
  </prov:entity>
  
  <prov:wasGeneratedBy>
    <prov:entity prov:ref="alice:bundle2"/>
    <prov:time>2012-05-25T11:15:00</prov:time>
  </prov:wasGeneratedBy>
    
  <prov:wasAttributedTo>
    <prov:entity prov:ref="alice:bundle2"/>
    <prov:agent prov:ref="ex:Alice"/>
  </prov:wasAttributedTo>
  
</prov:document>

3.5 Component 5: Alternate Entities

The fifth component of PROV-DM is concerned with relations SpecializationOf (specializationSpecialization) and AlternateOf (alternateAlternate) between entities.

3.5.1 Specialization

An entity that is a specialization of another shares all aspects of the latter, and additionally presents more specific aspects of the same thing as the latter. In particular, the lifetime of the entity being specialized contains that of any specialization.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Specialization">name="Specialization">
  <xs:sequence>
    <xs:element name="specificEntity" type="prov:EntityRef"/>
    <xs:element name="generalEntity" type="prov:EntityRef"/>name="specificEntity" type="prov:IDRef"/>
    <xs:element name="generalEntity" type="prov:IDRef"/>
  </xs:sequence>
</xs:complexType>

UsageThe element prov:specializationOf is used to reference a prov:Specialization from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="specializationOf" type="prov:Specialization"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="specializationOf" type="prov:Specialization"/>
Example 29: prov:specializationOf
<prov:document
    xmlns:prov="http://www.w3.org/ns/prov#"
    xmlns:ex="http://example.com/ns/ex#"
    xmlns:bbc="http://www.bbc.co.uk/">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:id="ex:bbcNews2012-03-23"/>

  <prov:entity prov:id="bbc:news"/>prov:id="bbc:news"/>

  <prov:specializationOf>
    <prov:specificEntity prov:ref="ex:bbcNews2012-03-23"/>prov:ref="ex:bbcNews2012-03-23"/>
    <prov:generalEntity prov:ref="bbc:news"/>prov:ref="bbc:news"/>
  </prov:specializationOf>

</prov:document>

3.5.2 Alternate

Two alternate entities present aspects of the same thing. These aspects may be the same or different, and the alternate entities may or may not overlap in time.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Alternate">name="Alternate">
  <xs:sequence>
    <xs:element name="alternate1" type="prov:EntityRef"/>
    <xs:element name="alternate2" type="prov:EntityRef"/>name="alternate1" type="prov:IDRef"/>
    <xs:element name="alternate2" type="prov:IDRef"/>
  </xs:sequence>
</xs:complexType>

UsageThe element prov:alternateOf is used to reference a prov:Alternate from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="alternateOf" type="prov:Alternate"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="alternateOf" type="prov:Alternate"/>
Example 30: prov:alternateOf
<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">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:id="bbc:science-environment-17526723">
    <prov:type xsi:type="xsd:string">axsi:type="xsd:string">a news item for desktop</prov:type>
  </prov:entity>

  <prov:entity prov:id="bbcmobile:science-environment-17526723">prov:id="bbcmobile:science-environment-17526723">
    <prov:type xsi:type="xsd:string">axsi:type="xsd:string">a news item for mobile devices</prov:type>
  </prov:entity>

  <prov:alternateOf>
    <prov:alternate1 prov:ref="bbcmobile:science-environment-17526723"/>prov:ref="bbcmobile:science-environment-17526723"/>
    <prov:alternate2 prov:ref="bbc:science-environment-17526723"/>prov:ref="bbc:science-environment-17526723"/>
  </prov:alternateOf>

</prov:document>

3.6 Component 6: Collections

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.

3.6.1 Collection

A collection is an entity that provides a structure to some constituents that must themselves be entities. These constituents are said to be member of the 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"/>
Example 31: prov:collection
To specialize an Entity as a Collection, include a prov:type with the value "prov:Collection". An EmptyCollection is asserted with the prov:type "prov:EmptyCollection" and denotes a Collection with no members.
<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: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#">

  <!-- c0 is an empty collection -->
  <prov:entity prov:id="c0">
    <prov:type xsi:type="xsd:QName">prov:EmptyCollection</prov:type>
  </prov:entity>

  <!-- c1 is a collection, with unknown content -->
  <prov:entity prov:id="c1">
    <prov:type xsi:type="xsd:QName">prov:Collection</prov:type>
  </prov:entity><prov:collection prov:id="c1" />

</prov:document>
The modeling of
3.6.1.1 Empty Collection
An empty collection is currently under discussion and is subject to change. 3.6.2 Membership Membership is the belonging of an entitya collection without members. to a collection.

Type definition in XML Schema:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Membership">
  <xs:sequence>
    <xs:element name="collection"  type="prov:EntityRef"/>
    <xs:element name="entity"      type="prov:EntityRef" maxOccurs="unbounded"/>
  </xs:sequence>name="EmptyCollection">
  <xs:complexContent>
    <xs:extension base="prov:Collection">
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

UsageThe element prov:emptyCollection is used to reference a prov:EmptyCollection from within a prov:Document or prov:BundleConstructor.

Element definition in XML:XML Schema:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="hadMember" type="prov:Membership"/>
<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="emptyCollection" type="prov:EmptyCollection"/>
Example 32: 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: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>

3.6.2 Membership

Membership is the belonging of an entity to a collection.

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"/>
Example 33: prov:hadMember
<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:id="e0"/>
  <prov:entity prov:id="e1"/>prov:id="e1"/>
  <prov:entity prov:id="e2"/>prov:id="e2"/>

  <prov:entity prov:id="c">
    <prov:type xsi:type="xsd:QName">prov:Collection</prov:type>
  </prov:entity><prov:collection prov:id="c"/>

  <prov:hadMember>
    <prov:collection prov:ref="c"/>prov:ref="c"/>
    <prov:entity prov:ref="e0"/>prov:ref="e0"/>
    <prov:entity prov:ref="e1"/>prov:ref="e1"/>
    <prov:entity prov:ref="e2"/>prov:ref="e2"/>
  </prov:hadMember>

</prov:document>

3.7 Further Elements of PROV

This section introduces further elements of PROV.

3.7.1 Identifier

The identifier attribute is used to identify instances of PROV types or relations.

Usage in XML:
<xs:attribute xmlns:xs="http://www.w3.org/2001/XMLSchema" name="id" type="xs:QName"/>xmlns:xs="http://www.w3.org/2001/XMLSchema" name="id" type="xs:QName"/>
Example 34: prov:id
<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: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:ex="http://example.com/ns/ex#"
    xmlns:tr="http://example.com/ns/tr#">

  <prov:entity prov:id="tr:WD-prov-dm-20111215"prov:id="tr:WD-prov-dm-20111215">
    <prov:type xsi:type="xsd:Qname">document</prov:type>xsi:type="xsd:Qname">document</prov:type>
    <ex:version>2</ex:version>
  </prov:entity>

</prov:document>
REVIEW QUESTION: The Identifier type is currently still under discussion. We intend to use an identifier type that makes sense for XML conventions and current XML tooling. The PROV-XML group is currently seeking feedback on recommended type ranges for the id attribute.

3.7.2 Reference

A reference-by-id to a PROV entity, activity, agent, or relation.

<xs:attribute ref="prov:ref" use="required" />
Example 35: prov:ref
<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>

3.7.3 Attributes

The PROV-DM defined PROV attributes are represented in XML as elements.

3.7.2.13.7.3.1 Label
The attribute prov:label provides a human-readable representation of an instance of a PROV-DM type or relation.

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"/>
Example 36: prov:label
Usage in XML:<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:prov="http://www.w3.org/ns/prov#" 
    xmlns:ex="http://example.com/ns/ex#">xmlns:ex="http://example.com/ns/ex#">

  <prov:entity prov:id="ex:e1">prov:id="ex:e1">
    <prov:label>This is a human-readable label</prov:label>
  </prov:entity>

  <prov:entity prov:id="ex:car01">prov:id="ex:car01">
    <prov:label xml:lang="fr">Voiturexml:lang="fr">Voiture 01</prov:label>
    <prov:label xml:lang="en">Carxml:lang="en">Car 01</prov:label>
  </prov:entity>

</prov:document>
3.7.2.23.7.3.2 Location
A location can be an identifiable geographic place (ISO 19112), but it can also be a non-geographic place such as a directory, row, or column.

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"/>
Example 37: prov:location
Usage in XML:<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#">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:id="ex:MonaLisa">
    <prov:type xsi:type="xsd:QName">StillImage</prov:type>xsi:type="xsd:QName">StillImage</prov:type>
    <prov:location xsi:type="xsd:string">Lexsi:type="xsd:string">Le Louvre, Paris</prov:location>
  </prov:entity>

  <prov:entity prov:id="ex:cell">prov:id="ex:cell">
    <prov:location xsi:type="xsd:string">(5,5)</prov:location>xsi:type="xsd:string">(5,5)</prov:location>
    <prov:value xsi:type="xsd:integer">10</prov:value>xsi:type="xsd:integer">10</prov:value>
  </prov:entity>

</prov:document>
3.7.2.33.7.3.3 Role
A role is the function of an entity or agent with respect to an activity, in the context of a usage, generation, invalidation, association, start, and end.

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"/>
Example 38: prov:role
Usage in XML:<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#">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:ref="a"/>
    <prov:agent prov:ref="ag1"/>prov:ref="ag1"/>
    <prov:role xsi:type="xsd:QName">loggedInUser</prov:role>xsi:type="xsd:QName">loggedInUser</prov:role>
    <ex:how>webapp</ex:how>
  </prov:wasAssociatedWith>

  <prov:wasAssociatedWith>
    <prov:activity prov:ref="a"/>prov:ref="a"/>
    <prov:agent prov:ref="ag2"/>prov:ref="ag2"/>
    <prov:plan prov:ref="ex:wf"/>prov:ref="ex:wf"/>
    <prov:role xsi:type="xsd:QName">designer</prov:role>xsi:type="xsd:QName">designer</prov:role>
    <ex:content>project1</ex:content>
  </prov:wasAssociatedWith>

</prov:document>
3.7.2.43.7.3.4 Type
The attribute prov:type provides further typing information for any construct with an optional set of attribute-value pairs.

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"/>
Example 39: prov:type
Usage in XML:<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#">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:id="tr:WD-prov-dm-20111215">
    <prov:type xsi:type="xsd:QName">document</prov:type>xsi:type="xsd:QName">document</prov:type>
    <ex:version>2</ex:version>
  </prov:entity>

  <prov:agent prov:id="e1">prov:id="e1">
    <prov:type xsi:type="xsd:QName">prov:Person</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: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>xsi:type="xsd:QName">ex:edit</prov:type>
    <ex:host>server.example.org</ex:host>
  </prov:activity>

</prov:document>
3.7.2.53.7.3.5 Value
The attribute prov:value provides a value that is a direct representation of an entity as a PROV-DM Value.

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"/>
Example 40: prov:value
Usage in XML:<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#">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:id="ex:in">
    <prov:value xsi:type="xsd:string">abcd</prov:value>xsi:type="xsd:string">abcd</prov:value>
  </prov:entity>

  <prov:entity prov:id="ex:out">prov:id="ex:out">
    <prov:value xsi:type="xsd:integer">4</prov:value>xsi:type="xsd:integer">4</prov:value>
  </prov:entity>

</prov:document>

3.7.33.7.4 Value

A value is a constant such as a string, number, time, qualified name, IRI, and encoded binary data, whose interpretation is outside the scope of PROV.

Relations defined by the PROV-DM to have type Value have type xs:anySimpleType in PROV-XML unless otherwise specified.

3.8 Structural Elements of PROV-XML

3.8.1 Document

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

  • may contain prov:bundle elements (but not other prov:document elements)
  • does not support the prov:id attribute.

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"/>
Example 41: 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>

4. Media Type

Contact:
Ivan Herman
See also:
How to Register a Media Type for a W3C Specification
Internet Media Type registration, consistency of use
TAG Finding 3 June 2002 (Revised 4 September 2002)

The internet mediaInternet Media Type / MIME type / MIME type for PROV-XML is ""application/provenance+xml". ".

MIME type may not be registered yet. 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 MachintoshMacintosh HFS file systems be given a file type of "provxTEXT" (all lowercase). .

REVIEW QUESTION:The information that follows has been submitted to the IESG for review, approval, and registration with IANA.

Can Machintosh
Type name:
application
Subtype name:
provenance+xml
Required parameters:
none
Optional parameters:
Same as charset parameter of application/xml as specified in RFC3023 (Section 3.2).
Encoding considerations:
Same as encoding considerations of application/xml as specified in RFC 3023 (Section 3.2).
Security considerations:
PROV-XML is an XML language for describing the provenance of things; applications may evaluate given data to dereference URIs, invoking the security considerations of the scheme for that URI. Note in particular, the privacy issues in [RFC3023] section 10 for HTTP URIs. Data obtained from an inaccurate or malicious data source may lead to inaccurate or misleading conclusions, as well as the dereferencing of unintended URIs. Care must be taken to align the trust in consulted resources with the sensitivity of the intended use of the data.
PROV-XML can express data which is presented to the user, for example, by means of label attributes. Application rendering strings retrieved from untrusted PROV-N documents must ensure that malignant strings may not be used to mislead the reader. The security considerations in the media type registration for XML ([RFC3023] section 10) provide additional guidance around the expression of arbitrary data and markup.
PROV-XML is a language for describing the provenance of things, and therefore a PROV-XML document is metadata for other resources. Untrusted PROV-XML documents may mislead its consumers by indicating that a third-party resource has a reputable lineage, when it has not. Provenance of PROV-XML document should be sought.
PROV-XML uses QNames mappable to IRIs as term identifiers. Applications interpreting data expressed in PROV-XML should address the security issues of Internationalized Resource Identifiers (IRIs) [RFC3987] Section 8, as well as Uniform Resource Identifier (URI): Generic Syntax [RFC3986] Section 7.
Multiple IRIs may have the same appearance. Characters in different scripts may look similar (a Cyrillic "о" may appear similar to a Latin "o"). A character followed by combining characters may have the same visual representation as another character (LATIN SMALL LETTER E followed by COMBINING ACUTE ACCENT has the same visual representation as LATIN SMALL LETTER E WITH ACUTE). Any person or application that is writing or interpreting data in PROV-N must take care to use the IRI that matches the intended semantics, and avoid IRIs that make look similar. Further information about matching of similar characters can be found in Unicode Security Considerations [UNISEC] and Internationalized Resource Identifiers (IRIs) [RFC3987] Section 8.
Interoperability considerations:
There are no known interoperability issues.
Published specification:
PROV-XML: The PROV XML Schema, Hua, Tilmes, Zednik (eds), Moreau http://www.w3.org/TR/prov-xml/, 2013.
Applications which use this media type:
It may be used by any application for publishing provenance information. This format is designed to be an XML form of provenance.
Fragment identifier considerations:
N/A
Additional Information:
Magic number(s):
PROV-XML documents are XML documents and thus may have initial strings similar to any XML document.
File extension(s):
.provx
Macintosh file typestype code(s):
"TEXT"
Person & email address to contact for further information:
Ivan Herman, ivan@w3.org
Intended usage:
COMMON
Restrictions on usage:
none
Author:
The PROV-XML specification is the product of the World Wide Web Consortium's Provenance Working Group.
Change controller:
The W3C, and the W3C Provenance Working Group, have 5 characters? change control over this specification.

A. Full XML Schema

A.1 prov.xsd

<?xml version="1.0" encoding="utf-8"?>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>

A.2 prov-core.xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://www.w3.org/ns/prov#"targetNamespace="http://www.w3.org/ns/prov#"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:prov="http://www.w3.org/ns/prov#"xmlns:prov="http://www.w3.org/ns/prov#"
           xmlns:cu="http://www.w3.org/1999/xhtml/datatypes/"xmlns:cu="http://www.w3.org/1999/xhtml/datatypes/"
           xmlns:xml="http://www.w3.org/XML/1998/namespace"xmlns:xml="http://www.w3.org/XML/1998/namespace"
           elementFormDefault="qualified"elementFormDefault="qualified"
           attributeFormDefault="unqualified">attributeFormDefault="unqualified">



  <xs:import namespace="http://www.w3.org/1999/xhtml/datatypes/"namespace="http://www.w3.org/1999/xhtml/datatypes/" />
  <xs:import namespace="http://www.w3.org/XML/1998/namespace"namespace="http://www.w3.org/XML/1998/namespace" 
             schemaLocation="http://www.w3.org/2001/xml.xsd"/>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="Entity">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:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:location"/>
        <xs:element ref="prov:value"/>
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/><xs:element name="specificEntity" type="prov:IDRef"/>
      </xs:choice><xs:element name="generalEntity" type="prov:IDRef"/>
    </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"/> 
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:location"/>
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute ref="prov:id"/>
  </xs:complexType>

  <xs:complexType name="Generation">name="Alternate">
    <xs:sequence>
      <xs:element name="entity"   type="prov:EntityRef"/>name="alternate1" type="prov:IDRef"/>
      <xs:element name="activity" type="prov:ActivityRef" minOccurs="0"/>name="alternate2" type="prov:IDRef"/>
    </xs:sequence>
  </xs:complexType>
  
  <!-- Component 6 -->

  <xs:complexType name="Collection">
    <xs:complexContent>
      <xs:element name="time"     type="xs:dateTime" minOccurs="0"/><xs:extension base="prov:Entity">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:location"/>
        <xs:element ref="prov:role"/>
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute ref="prov:id"/></xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Usage">
    <xs:sequence>name="EmptyCollection">
    <xs:complexContent>
      <xs:element name="activity" type="prov:ActivityRef"/><xs:extension base="prov:Collection">
      <xs:element name="entity"   type="prov:EntityRef" minOccurs="0"/>
      <xs:element name="time"     type="xs:dateTime" minOccurs="0"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:location"/>
        <xs:element ref="prov:role"/>
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute ref="prov:id"/></xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="Communication">name="Membership">
    <xs:sequence>
      <xs:element name="informed"  type="prov:ActivityRef"/>name="collection" type="prov:IDRef"/>
      <xs:element name="informant" type="prov:ActivityRef"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/>
      </xs:choice>name="entity" type="prov:IDRef" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute ref="prov:id"/>
  </xs:complexType>

  <xs:complexType name="Start">
    <xs:sequence>name="Plan">
    <xs:complexContent>
      <xs:element name="activity" type="prov:ActivityRef"/><xs:extension base="prov:Entity">
      <xs:element name="trigger"  type="prov:EntityRef" minOccurs="0"/>
      <xs:element name="starter"  type="prov:ActivityRef" minOccurs="0"/>
      <xs:element name="time"     type="xs:dateTime" minOccurs="0"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:location"/>
        <xs:element ref="prov:role"/>
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute ref="prov:id"/></xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="End">
    <xs:sequence>
      <xs:element name="activity" type="prov:ActivityRef"/>
      <xs:element name="trigger"  type="prov:EntityRef"  minOccurs="0"/>
      <xs:element name="ender"    type="prov:ActivityRef" minOccurs="0"/>
      <xs:element name="time"     type="xs:dateTime" minOccurs="0"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:location"/>
        <xs:element ref="prov:role"/>
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute ref="prov:id"/>
  </xs:complexType>

  <xs:complexType name="Invalidation">
    <xs:sequence>
      <xs:element name="entity"   type="prov:EntityRef"/>
      <xs:element name="activity" type="prov:ActivityRef" minOccurs="0"/>
      <xs:element name="time"     type="xs:dateTime" minOccurs="0"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:location"/>
        <xs:element ref="prov:role"/>
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute ref="prov:id"/>
  </xs:complexType>

  <!-- Component 2 -->

  <xs:complexType name="Derivation">
    <xs:sequence>
      <xs:element name="generatedEntity"  type="prov:EntityRef"/>
      <xs:element name="usedEntity"       type="prov:EntityRef"/>
      <xs:element name="activity"         type="prov:ActivityRef" minOccurs="0"/>
      <xs:element name="generation"       type="prov:GenerationRef" minOccurs="0"/>
      <xs:element name="usage"            type="prov:UsageRef" minOccurs="0"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute ref="prov:id"/>
  </xs:complexType>

  <!-- Component 3 -->

  <xs:complexType name="Agent">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:location"/>
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute ref="prov:id"/>
  </xs:complexType>

  <xs:complexType name="Attribution">
    <xs:sequence>
      <xs:element name="entity" type="prov:EntityRef"/>
      <xs:element name="agent"    type="prov:AgentRef"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute ref="prov:id"/>
  </xs:complexType>

  <xs:complexType name="Association">
    <xs:sequence>
      <xs:element name="activity" type="prov:ActivityRef"/>
      <xs:element name="agent"    type="prov:AgentRef" minOccurs="0"/>
      <xs:element name="plan"     type="prov:EntityRef" minOccurs="0"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:role"/>
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute ref="prov:id"/>
  </xs:complexType>

  <xs:complexType name="Delegation">
    <xs:sequence>
      <xs:element name="delegate" type="prov:AgentRef"/>
      <xs:element name="responsible" type="prov:AgentRef"/>
      <xs:element name="activity"    type="prov:ActivityRef" minOccurs="0"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute ref="prov:id"/>
  </xs:complexType>

  <xs:complexType name="Influence">
    <xs:sequence>
      <xs:element name="influencee"     type="prov:AnyRef"/>
      <xs:element name="influencer"     type="prov:AnyRef"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:label"/>
        <xs:element ref="prov:type"/>
        <xs:any namespace="##other"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute ref="prov:id"/>
  </xs:complexType>

  <!-- Component 4 -->

  <!-- Component 5 -->

  <xs:complexType name="Specialization">
    <xs:sequence>
      <xs:element name="specificEntity"   type="prov:EntityRef"/>
      <xs:element name="generalEntity"   type="prov:EntityRef"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Alternate">
    <xs:sequence>
      <xs:element name="alternate1"   type="prov:EntityRef"/>
      <xs:element name="alternate2"   type="prov:EntityRef"/>
    </xs:sequence>
  </xs:complexType>

  <!-- Component 6 -->

  <xs:complexType name="Membership">
    <xs:sequence>
      <xs:element name="collection"          type="prov:EntityRef"/>
      <xs:element name="entity"          type="prov:EntityRef" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="InternationalizedString">name="InternationalizedString">
    <xs:simpleContent>
      <xs:extension base="xs:string">base="xs:string">
        <xs:attribute ref="xml:lang" use="optional"/>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"/>

  <!-- See comment in preamble.
       These should be prov:QualifiedName
       but instead are xsd:QName for tools to process them -->
  
  <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"/>name="id" type="xs:QName"/>
  <xs:attribute name="ref" type="xs:QName"/>name="ref" type="xs:QName"/>

  <xs:complexType name="ActivityRef">name="IDRef">
    <xs:attribute ref="prov:ref" use="required"ref="prov:ref" use="required" />
  </xs:complexType>
  <xs:complexType name="EntityRef">
    <xs:attribute ref="prov:ref" use="required"/>
  </xs:complexType>
  <xs:complexType name="AgentRef">
    <xs:attribute ref="prov:ref" use="required"/>
  </xs:complexType>
  <xs:complexType name="UsageRef">
    <xs:attribute ref="prov:ref" use="required"/>
  </xs:complexType>
  <xs:complexType name="GenerationRef">
    <xs:attribute ref="prov:ref" use="required"/>
  </xs:complexType>
  <xs:complexType name="AnyRef">
    <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"name="entity"               type="prov:Entity"/>
  <xs:element name="activity"type="prov:Entity"/>
  <xs:element name="activity"             type="prov:Activity"/>
  <xs:element name="wasGeneratedBy"type="prov:Activity"/>
  <xs:element name="wasGeneratedBy"       type="prov:Generation"/>
  <xs:element name="used"type="prov:Generation"/>
  <xs:element name="used"                 type="prov:Usage"/>
  <xs:element name="wasInformedBy"type="prov:Usage"/>
  <xs:element name="wasInformedBy"        type="prov:Communication"/>
  <xs:element name="wasStartedBy"type="prov:Communication"/>
  <xs:element name="wasStartedBy"         type="prov:Start"/>
  <xs:element name="wasEndedBy"type="prov:Start"/>
  <xs:element name="wasEndedBy"           type="prov:End"/>
  <xs:element name="wasInvalidatedBy"type="prov:End"/>
  <xs:element name="wasInvalidatedBy"     type="prov:Invalidation"/>type="prov:Invalidation"/>

  <!-- Component 2 elements -->

  <xs:element name="wasDerivedFrom"name="wasDerivedFrom"       type="prov:Derivation"/>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"name="agent"                type="prov:Agent"/>
  <xs:element name="wasAttributedTo"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:Attribution"/>
  <xs:element name="wasAssociatedWith"    type="prov:Association"/>
  <xs:element name="actedOnBehalfOf"type="prov:Association"/>
  <xs:element name="actedOnBehalfOf"      type="prov:Delegation"/>
  <xs:element name="wasInfluencedBy"type="prov:Delegation"/>
  <xs:element name="wasInfluencedBy"      type="prov:Influence"/>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 56 elements -->

  <xs:element name="specializationOf"     type="prov:Specialization"/>
  <xs:element name="alternateOf"          type="prov:Alternate"/>name="hadMember"            type="prov:Membership"/>
  <xs:element name="collection"           type="prov:Collection"/>
  <xs:element name="emptyCollection"      type="prov:EmptyCollection"/>

  <!-- Component 67 elements -->

  <xs:element name="hadMember"            type="prov:Membership"/>name="plan"                 type="prov:Plan"/>

  <!-- document elements -->

  <xs:group name="documentElements">name="documentElements">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="prov:entity"/>ref="prov:entity" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:activity"/>ref="prov:activity" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:wasGeneratedBy"/>ref="prov:wasGeneratedBy" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:used"/>ref="prov:used" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:wasInformedBy"/>ref="prov:wasInformedBy" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:wasStartedBy"/>ref="prov:wasStartedBy" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:wasEndedBy"/>ref="prov:wasEndedBy" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:wasInvalidatedBy"/>ref="prov:wasInvalidatedBy" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:wasDerivedFrom"/>ref="prov:wasDerivedFrom" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:agent"/>ref="prov:wasRevisionOf" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:wasAttributedTo"/>ref="prov:wasQuotedFrom" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:wasAssociatedWith"/>ref="prov:hadPrimarySource" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:actedOnBehalfOf"/>ref="prov:agent" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:wasInfluencedBy"/>ref="prov:person" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:specializationOf"/>ref="prov:organization" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:alternateOf"/>ref="prov:softwareAgent" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="prov:hadMember"/>
		<xs:any namespace="##other"/>
      </xs:choice>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"name="document" type="prov:Document" />
  <xs:complexType name="Document">
    <xs:sequence>
      <xs:choice maxOccurs="unbounded">
        <xs:group ref="prov:documentElements"/>
        <xs:element name="bundle" type="prov:Bundle"/>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Bundle">
    <xs:sequence>name="Document">
    <xs:sequence maxOccurs="unbounded">
      <xs:group ref="prov:documentElements"/>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:attribute ref="prov:id"/>
  </xs:complexType>


  <!-- abstract element used by extensions -->

  <xs:element name="internalElement" abstract="true" />

</xs:schema>

A.3 Extension Schemas

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>

B. Change Log

B.1 Changes since last version

C. Acknowledgements

This document has been produced by the PROV Working Group, and its contents reflect extensive discussion within the Working Group as a whole. The editors extend special thanks to Luc Moreau (University of Southampton), Paul Groth (Vrije Universiteit) and James Cheney (University of Edinburgh) for their thorough reviews.

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).

C.D. References

C.1 Normative references[PROV-CONSTRAINTS]James Cheney; Paolo Missier; Luc Moreau; eds. Constraints of the PROV Data Model. 11 December 2012, W3C Candidate Recommendation. URL: http://www.w3.org/TR/2012/CR-prov-constraints-20121211/ [PROV-N]Luc Moreau; Paolo Missier; eds. PROV-N: The Provenance Notation. 11 December 2012, W3C Candidate Recommendation. URL: http://www.w3.org/TR/2012/CR-prov-n-20121211/ [PROV-O]Timothy Lebo; Satya Sahoo; Deborah McGuinness; eds. PROV-O: The PROV Ontology. 11 December 2012, W3C Candidate Recommendation. URL: http://www.w3.org/TR/2012/CR-prov-o-20121211/ [RFC2119]S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Internet RFC 2119. URL: http://www.ietf.org/rfc/rfc2119.txt C.2D.1 Informative references

[Mappings]
Satya Sahoo and Paul Groth and Olaf Hartig and Simon Miles and Sam Coppens and James Myers and Yolanda Gil and Luc Moreau and Jun Zhao and Michael Panzer and Daniel Garijo Provenance Vocabulary Mappings. August 2010 URL: http://www.w3.org/2005/Incubator/prov/wiki/Provenance_Vocabulary_Mappings
[PROV-AQ]
Graham Klyne; Paul Groth; eds. Provenance Access and Query. 19 June 2012,12 March 2013, Working Draft. URL: http://www.w3.org/TR/2012/WD-prov-aq-20120619/http://www.w3.org/TR/2013/WD-prov-aq-20130312/
[PROV-CONSTRAINTS]
James Cheney; Paolo Missier; Luc Moreau; eds. Constraints of the PROV Data Model. 12 March 2013, W3C Proposed Recommendation. URL: http://www.w3.org/TR/2013/PR-prov-constraints-20130312/
[PROV-DC]
Daniel Garijo; Kai Eckert; eds. Dublin Core to PROV Mapping. 12 March 2013, Working Draft. URL: http://www.w3.org/TR/2013/WD-prov-dc-20130312/
[PROV-DICTIONARY]
Tom De Nies; Sam Coppens; eds. PROV Dictionary. 12 March 2013, Working Draft. URL: http://www.w3.org/TR/2013/WD-prov-dictionary-20130312/
[PROV-DM]
Luc Moreau; Paolo Missier; eds. PROV-DM: The PROV Data Model. 11 December 2012,12 March 2013, W3C CandidateProposed Recommendation. URL: http://www.w3.org/TR/2012/CR-prov-dm-20121211/http://www.w3.org/TR/2013/PR-prov-dm-20130312/
Luc Moreau; Timothy Lebo; eds. Linking Across Provenance Bundles. 12 March 2013, Working Draft. URL: http://www.w3.org/TR/2013/WD-prov-links-20130312/
[PROV-N]
Luc Moreau; Paolo Missier; eds. PROV-N: The Provenance Notation. 12 March 2013, W3C Proposed Recommendation. URL: http://www.w3.org/TR/2013/PR-prov-n-20130312/
[PROV-O]
Timothy Lebo; Satya Sahoo; Deborah McGuinness; eds. PROV-O: The PROV Ontology. 12 March 2013, W3C Proposed Recommendation. URL: http://www.w3.org/TR/2013/PR-prov-o-20130312/
[PROV-OVERVIEW]
Paul Groth; Luc Moreau; eds. PROV-OVERVIEW: An Overview of the PROV Family of Documents. 11 December 2012,12 March 2013, Working Draft. URL: http://www.w3.org/TR/2012/WD-prov-overview-20121211/http://www.w3.org/TR/2013/WD-prov-overview-20130312/
[PROV-PRIMER]
Yolanda Gil; Simon Miles; eds. PROV Model Primer. 11 December 2012,12 March 2013, Working Draft. URL: http://www.w3.org/TR/2012/WD-prov-primer-20121211/http://www.w3.org/TR/2013/WD-prov-primer-20130312/
[PROV-XML]
[PROV-SEM]
Hook Hua; Curt Tilmes; Stephan Zednik; eds. James Cheney; ed. PROV-XML: TheSemantics of the PROV Data Model. 12 March 2013, Working Draft. URL: http://www.w3.org/TR/2013/WD-prov-sem-20130312.
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Internet RFC 2119. URL: http://www.ietf.org/rfc/rfc2119.txt
[RFC3023]
M. Murata; S. St.Laurent; D. Kohn. XML SchemaMedia Types. 11 December 2012, Working Draft.January 2001. RFC 3023. URL: http://www.w3.org/TR/2012/WD-prov-xml-20121211/http://www.ietf.org/rfc/rfc3023.txt
[RFC3986]
T. Berners-Lee; R. Fielding; L. Masinter. Uniform Resource Identifier (URI): Generic Syntax. January 2005. RFC 3986. URL: http://www.ietf.org/rfc/rfc3986.txt
[RFC3987]
M. Dürst; M. Suignard. Internationalized Resource Identifiers (IRIs). January 2005. RFC 3987. URL: http://www.ietf.org/rfc/rfc3987.txt
[UNISEC]
Mark Davis; Michel Suignard. Unicode Security Considerations. 4 August 2010. URL: http://www.unicode.org/reports/tr36/