Flattened structure
authorCurt Tilmes <Curt.Tilmes@nasa.gov>
Tue, 18 Sep 2012 09:59:50 -0400
changeset 4472 b88f0f02344f
parent 4471 42dcd57459d4
child 4473 e9b0cfa5d835
Flattened structure

- 'Flattened' removing dependencies and records per ISSUE 551:
http://www.w3.org/2011/prov/track/issues/551

- Renamed bundle/namedbundle to document and bundle per ISSUE 549,550
http://www.w3.org/2011/prov/track/issues/549
http://www.w3.org/2011/prov/track/issues/550

- You can now specify any number of any element in any order
http://www.w3.org/2011/prov/track/issues/547

- Made all the *Ref complexTypes require the prov:ref field
http://www.w3.org/2011/prov/track/issues/494
xml/schema/prov.xsd
--- a/xml/schema/prov.xsd	Tue Sep 18 11:03:46 2012 +0100
+++ b/xml/schema/prov.xsd	Tue Sep 18 09:59:50 2012 -0400
@@ -31,174 +31,124 @@
   <xs:import namespace="http://www.w3.org/XML/1998/namespace" 
              schemaLocation="http://www.w3.org/2001/xml.xsd"/>
 
+  <xs:group name="commonAttributes">
+    <xs:sequence>
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="prov:label"/>
+        <xs:element ref="prov:type"/>
+        <xs:element ref="prov:location"/>
+        <xs:element ref="prov:value"/>
+        <xs:element ref="prov:role"/>
+        <xs:any namespace="##other"/>
+      </xs:choice>
+    </xs:sequence>
+  </xs:group>
+
   <!-- Component 1 -->
   
-  <xs:element name="entity" type="prov:Entity"/>
   <xs:complexType name="Entity">
-    <xs:sequence>
-      <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type"  minOccurs="0" maxOccurs="unbounded"/>
-      <xs:element ref="prov:location"  minOccurs="0" maxOccurs="unbounded"/>
-	  <xs:element ref="prov:value" minOccurs="0" maxOccurs="1"/>
-	
-      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
-    </xs:sequence>
+    <xs:group ref="prov:commonAttributes"/>
     <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" maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type"  minOccurs="0" maxOccurs="unbounded"/> 
-      <xs:element ref="prov:location"  minOccurs="0" maxOccurs="unbounded"/>
-      
-      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:group ref="prov:commonAttributes"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
-  
+
+  <xs:complexType name="WasGeneratedBy">
+    <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:group ref="prov:commonAttributes"/>
+    </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:label" minOccurs="0" maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type"  minOccurs="0" maxOccurs="unbounded"/>
-      <xs:element ref="prov:location"  minOccurs="0" maxOccurs="unbounded"/>
-      <xs:element ref="prov:role"  minOccurs="0" maxOccurs="unbounded"/> 
-      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="entity"   type="prov:EntityRef" minOccurs="0"/>
+      <xs:element name="time"     type="xs:dateTime" minOccurs="0"/>
+      <xs:group ref="prov:commonAttributes"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
-  
-  <xs:complexType name="WasGeneratedBy">
+
+  <xs:complexType name="WasInformedBy">
     <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:label" minOccurs="0" maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
-      <xs:element ref="prov:location"  minOccurs="0" maxOccurs="unbounded"/>
-      <xs:element ref="prov:role"  minOccurs="0" maxOccurs="unbounded"/> 
-
-      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="informed"  type="prov:ActivityRef"/>
+      <xs:element name="informant" type="prov:ActivityRef"/>
+      <xs:group ref="prov:commonAttributes"/>
     </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 name="starter"  type="prov:ActivityRef" minOccurs="0"/>
-      <xs:element ref="prov:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
-      <xs:element ref="prov:location"  minOccurs="0" maxOccurs="unbounded"/>
-      <xs:element ref="prov:role"  minOccurs="0" maxOccurs="unbounded"/> 
-      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="time"     type="xs:dateTime" minOccurs="0"/>
+      <xs:group ref="prov:commonAttributes"/>
     </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 name="ender"    type="prov:ActivityRef" minOccurs="0"/>
-      <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
-      <xs:element ref="prov:location"  minOccurs="0" maxOccurs="unbounded"/>
-      <xs:element ref="prov:role"  minOccurs="0" maxOccurs="unbounded"/> 
-      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="time"     type="xs:dateTime" minOccurs="0"/>
+      <xs:group ref="prov:commonAttributes"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
 
   <xs:complexType name="WasInvalidatedBy">
     <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:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type"  minOccurs="0" maxOccurs="unbounded"/>
-      <xs:element ref="prov:location"  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="informed"  type="prov:ActivityRef"/>
-      <xs:element name="informant" type="prov:ActivityRef"/>
-      <xs:element ref="prov:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
-      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="time"     type="xs:dateTime" minOccurs="0"/>
+      <xs:group ref="prov:commonAttributes"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
 
   <!-- Component 2 -->
-
   
   <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:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <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="WasRevisionOf">
-    <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="newer"      type="prov:EntityRef"/>
-      <xs:element name="older"      type="prov:EntityRef"/>
-      <xs:element ref="prov:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <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="HadPrimarySource">
-    <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="derived"    type="prov:EntityRef"/>
-      <xs:element name="source"     type="prov:EntityRef"/>
-      <xs:element ref="prov:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type"  minOccurs="0" maxOccurs="unbounded"/>
-      <xs:any namespace="##other"  minOccurs="0" maxOccurs="unbounded"/>
+      <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:group ref="prov:commonAttributes"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
 
   <!-- Component 3 -->
   
-  <xs:element name="agent" type="prov:Agent"/>
   <xs:complexType name="Agent">
     <xs:sequence>
-      <xs:element ref="prov:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type"  minOccurs="0" maxOccurs="unbounded"/>
-      <xs:any namespace="##other"  minOccurs="0" maxOccurs="unbounded"/>
+      <xs:group ref="prov:commonAttributes"/>
+    </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:group ref="prov:commonAttributes"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -206,24 +156,9 @@
   <xs:complexType name="WasAssociatedWith">
     <xs:sequence>
       <xs:element name="activity" type="prov:ActivityRef"/>
-      <xs:element name="agent"    type="prov:AgentRef"/>
+      <xs:element name="agent"    type="prov:AgentRef" minOccurs="0"/>
       <xs:element name="plan"     type="prov:EntityRef" minOccurs="0"/>
-      <xs:element ref="prov:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <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:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type"  minOccurs="0" maxOccurs="unbounded"/>
-      <xs:any namespace="##other"  minOccurs="0" maxOccurs="unbounded"/>
+      <xs:group ref="prov:commonAttributes"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -233,21 +168,16 @@
       <xs:element name="delegate" type="prov:AgentRef"/>
       <xs:element name="responsible" type="prov:AgentRef"/>
       <xs:element name="activity"    type="prov:ActivityRef" minOccurs="0"/>
-      <xs:element ref="prov:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type"  minOccurs="0" maxOccurs="unbounded"/>
-      <xs:any namespace="##other"  minOccurs="0" maxOccurs="unbounded"/>
+      <xs:group ref="prov:commonAttributes"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
 
-
   <xs:complexType name="WasInfluencedBy">
     <xs:sequence>
       <xs:element name="influencee"     type="prov:AnyRef"/>
       <xs:element name="influencer"     type="prov:AnyRef"/>
-      <xs:element ref="prov:label" minOccurs="0" maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type" minOccurs="0" maxOccurs="unbounded"/>
-      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:group ref="prov:commonAttributes"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -256,13 +186,6 @@
 
   <!-- Component 5 -->
 
-  <xs:complexType name="AlternateOf">
-    <xs:sequence>
-      <xs:element name="alternate1"   type="prov:EntityRef"/>
-      <xs:element name="alternate2"   type="prov:EntityRef"/>
-    </xs:sequence>
-  </xs:complexType>
-
   <xs:complexType name="SpecializationOf">
     <xs:sequence>
       <xs:element name="specificEntity"   type="prov:EntityRef"/>
@@ -270,79 +193,33 @@
     </xs:sequence>
   </xs:complexType>
 
+  <xs:complexType name="AlternateOf">
+    <xs:sequence>
+      <xs:element name="alternate1"   type="prov:EntityRef"/>
+      <xs:element name="alternate2"   type="prov:EntityRef"/>
+    </xs:sequence>
+  </xs:complexType>
+
   <xs:complexType name="MentionOf">
     <xs:sequence>
       <xs:element name="specificEntity"   type="prov:EntityRef"/>
       <xs:element name="generalEntity"     type="prov:EntityRef"/>
-      <xs:element name="bundle"            type="prov:EntityRef" minOccurs="1"/>
+      <xs:element name="bundle"            type="prov:EntityRef"/>
     </xs:sequence>
   </xs:complexType>
 
   
   <!-- Component 6 -->
 
-<!--
-  <xs:complexType name="DerivedByInsertionFrom">
-    <xs:sequence>
-      <xs:element name="after"           type="prov:EntityRef"/>
-      <xs:element name="before"          type="prov:EntityRef"/>
-      <xs:element name="entry"           type="prov:Entry" minOccurs="1" maxOccurs="unbounded"/>
-      <xs:element ref="prov:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <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="DerivedByRemovalFrom">
-    <xs:sequence>
-      <xs:element name="after"    type="prov:EntityRef"/>
-      <xs:element name="before"   type="prov:EntityRef"/>
-      <xs:element name="key"      type="xs:anySimpleType" minOccurs="1" maxOccurs="unbounded"/>
-      <xs:element ref="prov:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <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="CollectionMemberOf">
     <xs:sequence>
       <xs:element name="collection"          type="prov:EntityRef"/>
-      <xs:element name="complete"        type="xs:boolean" minOccurs="0" maxOccurs="1"/>
-      <xs:element name="member"          type="prov:EntityRef" minOccurs="1" maxOccurs="unbounded"/>
-      <xs:element ref="prov:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <xs:element ref="prov:type"  minOccurs="0" maxOccurs="unbounded"/>
-      <xs:any namespace="##other"  minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="complete"        type="xs:boolean" minOccurs="0"/>
+      <xs:element name="member"          type="prov:EntityRef" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
 
-<!--
-  <xs:complexType name="DictionaryMemberOf">
-    <xs:sequence>
-      <xs:element name="entity"          type="prov:EntityRef"/>
-      <xs:element name="complete"        type="xs:boolean"/>
-      <xs:element name="entry"           type="prov:Entry" minOccurs="1" maxOccurs="unbounded"/>
-      <xs:element ref="prov:label" minOccurs="0"  maxOccurs="unbounded"/> 
-      <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="key"  type="xs:anySimpleType"/>
-
-  <xs:complexType name="Entry">
-    <xs:sequence>
-      <xs:element ref="prov:key"  minOccurs="1" maxOccurs="1"/>
-      <xs:element name="entity"   type="prov:EntityRef" minOccurs="1" maxOccurs="1"/>
-    </xs:sequence>
-  </xs:complexType>
--->
-
-
   <xs:complexType name="InternationalizedString">
     <xs:simpleContent>
       <xs:extension base="xs:string">
@@ -372,95 +249,68 @@
   <xs:attribute name="ref" type="xs:QName"/>
 
   <xs:complexType name="ActivityRef">
-    <xs:attribute ref="prov:ref"/>
+    <xs:attribute ref="prov:ref" use="required" />
   </xs:complexType>
   <xs:complexType name="EntityRef">
-    <xs:attribute ref="prov:ref"/>
+    <xs:attribute ref="prov:ref" use="required"/>
   </xs:complexType>
   <xs:complexType name="AgentRef">
-    <xs:attribute ref="prov:ref"/>
+    <xs:attribute ref="prov:ref" use="required"/>
   </xs:complexType>
-  
-  <xs:complexType name="DependencyRef">
-    <xs:attribute ref="prov:ref"/>
+  <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"/>
+    <xs:attribute ref="prov:ref" use="required"/>
   </xs:complexType>
 
-  <xs:complexType name="Dependencies">
+  <xs:group name="documentElements">
     <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="wasInvalidatedBy"     type="prov:WasInvalidatedBy"/>
-            <xs:element name="wasInformedBy"        type="prov:WasInformedBy"/>
-
-
-            <xs:element name="wasDerivedFrom"       type="prov:WasDerivedFrom"/>
-            <xs:element name="wasRevisionOf"        type="prov:WasRevisionOf"/>
-            <xs:element name="hadPrimarySource"     type="prov:HadPrimarySource"/>
+        <xs:element name="entity"               type="prov:Entity"/>
+        <xs:element name="activity"             type="prov:Activity"/>
+        <xs:element name="wasGeneratedBy"       type="prov:WasGeneratedBy"/>
+        <xs:element name="used"                 type="prov:Used"/>
+        <xs:element name="wasInformedBy"        type="prov:WasInformedBy"/>
+        <xs:element name="wasStartedBy"         type="prov:WasStartedBy"/>
+        <xs:element name="wasEndedBy"           type="prov:WasEndedBy"/>
+        <xs:element name="wasInvalidatedBy"     type="prov:WasInvalidatedBy"/>
 
-            <xs:element name="wasAttributedTo"      type="prov:WasAttributedTo"/>
-            <xs:element name="wasAssociatedWith"    type="prov:WasAssociatedWith"/>
-            <xs:element name="actedOnBehalfOf"      type="prov:ActedOnBehalfOf"/>
-            <xs:element name="wasInfluencedBy"      type="prov:WasInfluencedBy"/>
-
-            <xs:element name="alternateOf"          type="prov:AlternateOf"/>
-            <xs:element name="specializationOf"     type="prov:SpecializationOf"/>
-            <xs:element name="mentionOf"            type="prov:MentionOf"/>
+        <xs:element name="wasDerivedFrom"       type="prov:WasDerivedFrom"/>
 
-			<!--
-            <xs:element name="derivedByInsertionFrom" type="prov:DerivedByInsertionFrom"/>
-            <xs:element name="derivedByRemovalFrom"   type="prov:DerivedByRemovalFrom"/>
-			-->
+        <xs:element name="agent"                type="prov:Agent"/>
+        <xs:element name="wasAttributedTo"      type="prov:WasAttributedTo"/>
+        <xs:element name="wasAssociatedWith"    type="prov:WasAssociatedWith"/>
+        <xs:element name="actedOnBehalfOf"      type="prov:ActedOnBehalfOf"/>
+        <xs:element name="wasInfluencedBy"      type="prov:WasInfluencedBy"/>
+        
+        <xs:element name="specializationOf"     type="prov:SpecializationOf"/>
+        <xs:element name="alternateOf"          type="prov:AlternateOf"/>
+        <xs:element name="mentionOf"            type="prov:MentionOf"/>
 
-            <xs:element name="collectionMemberOf"     type="prov:CollectionMemberOf"/>
-
-			<!--
-            <xs:element name="dictionaryMemberOf"     type="prov:DictionaryMemberOf"/>
-			-->
-
+        <xs:element name="collectionMemberOf"   type="prov:CollectionMemberOf"/>
       </xs:choice>
     </xs:sequence>
-  </xs:complexType>
-  
-  
-  <!-- BUNDLES -->
-  
-  <xs:element name="bundle" type="prov:Bundle">
-    <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 Bundle or NamedBundle -->
-  <xs:element name="records" type="prov:Records"/>
-  <xs:complexType name="Records">
+  </xs:group>
+
+  <xs:element name="document" type="prov:Document" />
+  <xs:complexType name="Document">
     <xs:sequence>
-      <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 name="dependencies" type="prov:Dependencies" minOccurs="0"/>
+      <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>
-      <xs:element ref="prov:records"/>
-      <xs:element name="bundle" type="prov:NamedBundle" minOccurs="0" maxOccurs="unbounded"/>
-    </xs:sequence>
-  </xs:complexType>
-
-  <xs:complexType name="NamedBundle">
-    <xs:sequence>
-      <xs:element ref="prov:records"/>
+      <xs:group ref="prov:documentElements"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
-  
+
 </xs:schema>