Added experimental XSD extension example
authorStian Soiland-Reyes <soiland-reyes@cs.manchester.ac.uk>
Thu, 06 Dec 2012 16:44:32 +0000
changeset 5309 60d1dbc7145e
parent 5308 c1859363f613
child 5310 6113b10ac714
Added experimental XSD extension example
xml/experimental/extensions/all.xsd
xml/experimental/extensions/allExample.xml
xml/experimental/extensions/dictionary.xsd
xml/experimental/extensions/dictionaryExample.xml
xml/experimental/extensions/links.xsd
xml/experimental/extensions/linksExample.xml
xml/experimental/extensions/prov.xsd
xml/experimental/extensions/provExample.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/experimental/extensions/all.xsd	Thu Dec 06 16:44:32 2012 +0000
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+	targetNamespace="http://www.w3.org/ns/prov#" xmlns:prov="http://www.w3.org/ns/prov#"
+	elementFormDefault="qualified">
+	<xsd:include schemaLocation="prov.xsd" />
+	<xsd:include schemaLocation="links.xsd" />
+	<xsd:include schemaLocation="dictionary.xsd" />
+</xsd:schema>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/experimental/extensions/allExample.xml	Thu Dec 06 16:44:32 2012 +0000
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<prov:container prov:id="QName" xmlns:prov="http://www.w3.org/ns/prov#"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://www.w3.org/ns/prov# all.xsd ">
+	<prov:records prov:id="QName">
+		<prov:entity prov:id="member">
+			<prov:label>The member</prov:label>
+		</prov:entity>
+		<prov:entity prov:id="general">
+			<prov:label>General entity</prov:label>
+		</prov:entity>
+		<prov:entity prov:id="specific">
+			<prov:label>Specific entity</prov:label>
+		</prov:entity>
+		<prov:dependencies>
+			<prov:wasGeneratedBy>
+				<prov:time>2001-12-31T12:00:00</prov:time>
+				<prov:entity prov:ref="dictionary" />
+			</prov:wasGeneratedBy>
+			<prov:hasMember>
+				<prov:collection prov:ref="dictionary" />
+				<prov:member prov:ref="member" />
+				<prov:key>key</prov:key>
+			</prov:hasMember>
+			<prov:mentionOf>
+				<prov:specificEntity prov:ref="specific" />
+				<prov:generalEntity prov:ref="general" />
+				<prov:bundle prov:ref="bundle" />
+			</prov:mentionOf>
+		</prov:dependencies>
+		<prov:dictionary prov:id="dictionary">
+			<prov:label>The dictionary</prov:label>
+		</prov:dictionary>
+	</prov:records>
+</prov:container>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/experimental/extensions/dictionary.xsd	Thu Dec 06 16:44:32 2012 +0000
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+	targetNamespace="http://www.w3.org/ns/prov#" xmlns:prov="http://www.w3.org/ns/prov#"
+	elementFormDefault="qualified">
+	<xsd:include schemaLocation="prov.xsd" />
+
+	<!-- 
+	Note: This is only an *example* of how dictionary membership could be expressed
+	as an extension of prov.xsd	
+	 -->
+
+	<xsd:complexType name="Membership">
+		<xsd:sequence>
+			<xsd:element name="collection" type="prov:EntityRef" />
+			<xsd:element name="member" type="prov:EntityRef" />
+			<xsd:element name="key" type="xsd:string" minOccurs="0"/>
+		</xsd:sequence>
+	</xsd:complexType>
+	
+	<xsd:element name="dictionary" type="prov:Entity" substitutionGroup="prov:extraRecord" />
+	<xsd:element name="hasMember" type="prov:Membership" substitutionGroup="prov:extraDependency" />
+	
+	
+</xsd:schema>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/experimental/extensions/dictionaryExample.xml	Thu Dec 06 16:44:32 2012 +0000
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<prov:container prov:id="QName" xmlns:prov="http://www.w3.org/ns/prov#"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://www.w3.org/ns/prov# dictionary.xsd ">
+	<prov:records prov:id="QName">
+		<prov:entity prov:id="member">
+			<prov:label>The member</prov:label>
+		</prov:entity>		
+		<prov:dependencies>
+			<prov:hasMember>
+				<prov:collection prov:ref="dictionary" />
+				<prov:member prov:ref="member" />
+				<prov:key>key</prov:key>				
+			</prov:hasMember>
+		</prov:dependencies>
+		<prov:dictionary prov:id="dictionary">
+			<prov:label>The dictionary</prov:label>
+		</prov:dictionary>
+	</prov:records>
+</prov:container>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/experimental/extensions/links.xsd	Thu Dec 06 16:44:32 2012 +0000
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+	targetNamespace="http://www.w3.org/ns/prov#" xmlns:prov="http://www.w3.org/ns/prov#"
+	elementFormDefault="qualified">
+	<xsd:include schemaLocation="prov.xsd" />
+
+<!-- 
+	Note: This is only an *example* of how mentionOf  could be expressed
+	as an extension of prov.xsd	
+	 -->
+
+	<xsd:complexType name="Mention">
+		<xsd:sequence>
+			<xsd:element name="specificEntity" type="prov:EntityRef" />
+			<xsd:element name="generalEntity" type="prov:EntityRef" />
+			<xsd:element name="bundle" type="prov:EntityRef" />
+		</xsd:sequence>
+	</xsd:complexType>
+	
+	<xsd:element name="mentionOf" type="prov:Mention" substitutionGroup="prov:extraDependency" />
+	
+	
+	
+</xsd:schema>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/experimental/extensions/linksExample.xml	Thu Dec 06 16:44:32 2012 +0000
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<prov:container prov:id="QName" xmlns:prov="http://www.w3.org/ns/prov#"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://www.w3.org/ns/prov# links.xsd ">
+	<prov:records prov:id="QName">
+		<prov:entity prov:id="specific">
+			<prov:label>Specific entity</prov:label>
+		</prov:entity>
+		<prov:entity prov:id="general">
+			<prov:label>General entity</prov:label>
+		</prov:entity>
+		<prov:dependencies>
+			<prov:mentionOf>
+				<prov:specificEntity prov:ref="specific" />
+				<prov:generalEntity prov:ref="general" />
+				<prov:bundle prov:ref="bundle" />
+			</prov:mentionOf>
+		</prov:dependencies>
+	</prov:records>	
+</prov:container>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/experimental/extensions/prov.xsd	Thu Dec 06 16:44:32 2012 +0000
@@ -0,0 +1,389 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- work in progress.
+
+     In this schema, all ids are encoded as QNames. 
+
+     Instead, a more permissive definition should be used such as CURIEs.
+
+     Note that typical implementations won't recognize CURIEs :-(
+
+  -->
+
+
+<xs:schema targetNamespace="http://www.w3.org/ns/prov#"
+           xmlns:xs="http://www.w3.org/2001/XMLSchema"
+           xmlns:prov="http://www.w3.org/ns/prov#"
+           xmlns:cu="http://www.w3.org/1999/xhtml/datatypes/"
+           elementFormDefault="qualified"
+           attributeFormDefault="unqualified">
+
+
+
+<!-- CURIEs  <xs:import namespace="http://www.w3.org/1999/xhtml/datatypes/" />  -->
+
+
+  <!-- Component 1 -->
+  
+  <xs:element name="entity" type="prov:Entity"/>
+  <xs:complexType name="Entity">
+    <xs:sequence>
+      <xs:element ref="prov:label" minOccurs="0"/> 
+      <xs:element ref="prov:type"  minOccurs="0" maxOccurs="unbounded"/>
+ 
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>  
+
+  <xs:element name="activity" type="prov:Activity"/>
+  <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:element ref="prov:label" minOccurs="0"/> 
+      <xs:element ref="prov:type"  minOccurs="0" maxOccurs="unbounded"/> 
+      
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+  
+
+  <xs:complexType name="Used">
+    <xs:sequence>
+      <xs:element name="time"     type="xs:dateTime" minOccurs="0"/>
+      <xs:element name="activity" type="prov:ActivityRef"/>
+      <xs:element name="entity"   type="prov:EntityRef"/>
+      <xs:element ref="prov:type"  minOccurs="0" maxOccurs="unbounded"/>
+
+      <xs:element ref="prov:role"  minOccurs="0" maxOccurs="unbounded"/> 
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+  
+  <xs:complexType name="WasGeneratedBy">
+    <xs:sequence>
+      <xs:element name="time"     type="xs:dateTime" minOccurs="0"/>
+      <xs:element name="entity"   type="prov:EntityRef"/>
+      <xs:element name="activity" type="prov:ActivityRef" minOccurs="0"/>
+      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:role"  minOccurs="0" maxOccurs="unbounded"/> 
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+  <xs:complexType name="WasStartedBy">
+    <xs:sequence>
+      <xs:element name="time"     type="xs:dateTime" minOccurs="0"/>
+      <xs:element name="activity" type="prov:ActivityRef"/>
+      <xs:element name="trigger"  type="prov:EntityRef"  minOccurs="0"/>
+      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:role"  minOccurs="0" maxOccurs="unbounded"/> 
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+  <xs:complexType name="WasEndedBy">
+    <xs:sequence>
+      <xs:element name="time"     type="xs:dateTime" minOccurs="0"/>
+      <xs:element name="activity" type="prov:ActivityRef"/>
+      <xs:element name="trigger"  type="prov:EntityRef"  minOccurs="0"/>
+      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:role"  minOccurs="0" maxOccurs="unbounded"/> 
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+  <xs:complexType name="WasInformedBy">
+    <xs:sequence>
+      <xs:element name="time"    type="xs:dateTime" minOccurs="0"/>
+      <xs:element name="effect"  type="prov:ActivityRef"/>
+      <xs:element name="cause"   type="prov:ActivityRef"/>
+      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> 
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+  <xs:complexType name="WasStartedByActivity">
+    <xs:sequence>
+      <xs:element name="started" type="prov:ActivityRef"/>
+      <xs:element name="starter" type="prov:ActivityRef"/>
+      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:role"  minOccurs="0" maxOccurs="unbounded"/> 
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+
+  <!-- Component 2 -->
+  
+  <xs:element name="agent" type="prov:Agent"/>
+  <xs:complexType name="Agent">
+    <xs:sequence>
+      <xs:element ref="prov:label" minOccurs="0"/> 
+      <xs:element ref="prov:type"  minOccurs="0" maxOccurs="unbounded"/>
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+  <xs:complexType name="WasAssociatedWith">
+    <xs:sequence>
+      <xs:element name="activity" type="prov:ActivityRef"/>
+      <xs:element name="agent"    type="prov:AgentRef"/>
+      <xs:element name="plan"     type="prov:EntityRef" minOccurs="0"/>
+      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:role"  minOccurs="0" maxOccurs="unbounded"/> 
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+
+  <xs:complexType name="WasAttributedTo">
+    <xs:sequence>
+      <xs:element name="entity" type="prov:EntityRef"/>
+      <xs:element name="agent"    type="prov:AgentRef"/>
+      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:role"  minOccurs="0" maxOccurs="unbounded"/> 
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+  <xs:complexType name="ActedOnBehalfOf">
+    <xs:sequence>
+      <xs:element name="subordinate" type="prov:AgentRef"/>
+      <xs:element name="responsible" type="prov:AgentRef"/>
+      <xs:element name="activity"    type="prov:ActivityRef"/>
+      <xs:element ref="prov:type"   minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:role"   minOccurs="0" maxOccurs="unbounded"/> 
+      <xs:any namespace="##other"   minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+
+  <!-- Component 3 -->
+
+  
+  <xs:complexType name="WasDerivedFrom">
+    <xs:sequence>
+      <xs:element name="generation"       type="prov:DependencyRef" minOccurs="0"/>
+      <xs:element name="usage"            type="prov:DependencyRef" minOccurs="0"/>
+      <xs:element name="activity"         type="prov:ActivityRef" minOccurs="0"/>
+      <xs:element name="generatedEntity"  type="prov:EntityRef"/>
+      <xs:element name="usedEntity"       type="prov:EntityRef"/>
+      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:role" minOccurs="0" maxOccurs="unbounded"/> 
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+  <xs:complexType name="WasRevisionOf">
+    <xs:sequence>
+      <xs:element name="newer"           type="prov:EntityRef"/>
+      <xs:element name="older"           type="prov:EntityRef"/>
+      <xs:element name="responsibility"  type="prov:AgentRef" minOccurs="0"/>
+      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+  <xs:complexType name="WasQuotedFrom">
+    <xs:sequence>
+      <xs:element name="quote"        type="prov:EntityRef"/>
+      <xs:element name="original"     type="prov:EntityRef"/>
+      <xs:element name="quoterAgent"  type="prov:AgentRef" minOccurs="0"/>
+      <xs:element name="quotedAgent"  type="prov:AgentRef" minOccurs="0"/>
+      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+  <xs:complexType name="HadOriginalSource">
+    <xs:sequence>
+      <xs:element name="derived"     type="prov:EntityRef"/>
+      <xs:element name="source"      type="prov:EntityRef"/>
+      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+  <xs:complexType name="TracedTo">
+    <xs:sequence>
+      <xs:element name="entity"      type="prov:EntityRef"/>
+      <xs:element name="ancestor"    type="prov:EntityRef"/>
+      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+  <!-- Component 4 -->
+
+  <xs:complexType name="AlternateOf">
+    <xs:sequence>
+      <xs:element name="entity2"   type="prov:EntityRef"/>
+      <xs:element name="entity1"   type="prov:EntityRef"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="SpecializationOf">
+    <xs:sequence>
+      <xs:element name="specializedEntity"   type="prov:EntityRef"/>
+      <xs:element name="generalEntity"   type="prov:EntityRef"/>
+    </xs:sequence>
+  </xs:complexType>
+  
+  <!-- Component 5 -->
+
+
+  <!-- Component 6 -->
+  
+  <xs:element name="note" type="prov:Note"/>
+  <xs:complexType name="Note">
+    <xs:sequence>
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+  
+  <xs:complexType name="HasAnnotation">
+    <xs:sequence>
+      <xs:element name="thing"   type="prov:NoteRef" minOccurs="1"/> <!-- note, just a ref to anything, really -->
+      <xs:element name="note"    type="prov:NoteRef" minOccurs="1"/>
+      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+
+   <!--
+       Typed literals are encoded by means
+       of xsi:type that represent the prov:datatype.
+
+       -->
+  
+  <xs:element name="label" type="xs:string"/>
+  <xs:element name="role"  type="xs:anySimpleType"/>
+  <xs:element name="type"  type="xs:anySimpleType"/>
+
+  <xs:attribute name="id"  type="xs:QName"/>
+  <xs:attribute name="ref" type="xs:QName"/>
+
+  <xs:complexType name="ActivityRef">
+    <xs:attribute ref="prov:ref"/>
+  </xs:complexType>
+  <xs:complexType name="EntityRef">
+    <xs:attribute ref="prov:ref"/>
+  </xs:complexType>
+  <xs:complexType name="AgentRef">
+    <xs:attribute ref="prov:ref"/>
+  </xs:complexType>
+  
+  <xs:complexType name="DependencyRef">
+    <xs:attribute ref="prov:ref"/>
+  </xs:complexType>
+  
+  <xs:complexType name="NoteRef">
+    <xs:attribute ref="prov:ref"/>
+  </xs:complexType>
+  
+  <xs:complexType name="Dependencies">
+    <xs:sequence>
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+
+            <xs:element name="used"                 type="prov:Used"/>
+            <xs:element name="wasGeneratedBy"       type="prov:WasGeneratedBy"/>
+            <xs:element name="wasStartedBy"         type="prov:WasStartedBy"/>
+            <xs:element name="wasEndedBy"           type="prov:WasEndedBy"/>
+            <xs:element name="wasInformedBy"        type="prov:WasInformedBy"/>
+            <xs:element name="wasStartedByActivity" type="prov:WasStartedByActivity"/>
+
+            <xs:element name="wasAttributedTo"      type="prov:WasAttributedTo"/>
+            <xs:element name="wasAssociatedWith"    type="prov:WasAssociatedWith"/>
+            <xs:element name="actedOnBehalfOf"      type="prov:ActedOnBehalfOf"/>
+
+            <xs:element name="wasDerivedFrom"       type="prov:WasDerivedFrom"/>
+            <xs:element name="wasRevisionOf"        type="prov:WasRevisionOf"/>
+            <xs:element name="wasQuotedFrom"        type="prov:WasQuotedFrom"/>
+            <xs:element name="hadOriginalSource"    type="prov:HadOriginalSource"/>
+            <xs:element name="tracedTo"             type="prov:TracedTo"/>
+
+            <xs:element name="alternateOf"          type="prov:AlternateOf"/>
+            <xs:element name="specializationOf"     type="prov:SpecializationOf"/>
+
+            <xs:element name="hasAnnotation"        type="prov:HasAnnotation"/>
+      </xs:choice>
+      <xs:element ref="prov:extraDependency" minOccurs="0" maxOccurs="unbounded" />
+      
+    </xs:sequence>
+  </xs:complexType>
+  
+  <xs:element name="extraDependency" abstract="true" />
+  <xs:element name="extraRecord" abstract="true" />
+  
+  <!-- BUNDLES -->
+  
+  <xs:element name="account" type="prov:Account"/>
+  <xs:complexType name="Account">
+    <xs:sequence>
+      <xs:element name="asserter" type="prov:AgentRef"  minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:records"  minOccurs="1" maxOccurs="1"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+  
+  <xs:element name="container" type="prov:Container">
+    <xs:annotation>
+      <xs:documentation>A set of assertions about the provenance of things</xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  
+  <!-- a wrapper element for all records, used in Container or Account -->
+  <xs:element name="records" type="prov:Records"/>
+  <xs:complexType name="Records">
+    <xs:sequence>
+      <xs:element ref="prov:account"  minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:activity" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:entity"   minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:agent"    minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element ref="prov:note"     minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="dependencies" type="prov:Dependencies" minOccurs="0"/>
+      <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" />
+      <!--        
+       <xs:element ref="prov:extraRecord" minOccurs="0" maxOccurs="unbounded"/>
+       -->
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+  </xs:complexType>
+  
+  <xs:complexType name="Container">
+    <xs:sequence>
+      <xs:element ref="prov:records"  minOccurs="1" maxOccurs="1"/>
+    </xs:sequence>
+    <xs:attribute ref="prov:id"/>
+    <!-- tentative, this could allow us to annotate containers ... -->
+  </xs:complexType>
+  
+  
+  
+  
+  
+  
+  
+  
+  
+</xs:schema>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/experimental/extensions/provExample.xml	Thu Dec 06 16:44:32 2012 +0000
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<prov:container prov:id="QName" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/ns/prov# prov.xsd ">
+  <prov:records>
+    <prov:activity prov:id="QName">
+      <prov:startTime>2001-12-31T12:00:00</prov:startTime>
+      <prov:endTime>2001-12-31T12:00:00</prov:endTime>
+      <prov:label>prov:label</prov:label>
+      <prov:type>prov:type</prov:type>
+    </prov:activity>
+    <prov:entity prov:id="QName">
+      <prov:label>prov:label</prov:label>
+      <prov:type>prov:type</prov:type>
+    </prov:entity>
+    <prov:agent prov:id="QName">
+      <prov:label>prov:label</prov:label>
+      <prov:type>prov:type</prov:type>
+    </prov:agent>
+    <prov:note prov:id="QName"/>
+    <prov:dependencies>
+      <prov:used prov:id="QName">
+        <prov:time>2001-12-31T12:00:00</prov:time>
+        <prov:activity prov:ref="QName"/>        
+        <prov:entity prov:ref="QName"/>
+        <prov:type>prov:type</prov:type>
+        <prov:role>prov:role</prov:role>
+      </prov:used>
+    </prov:dependencies>
+  </prov:records>
+</prov:container>