renamed abstractElement, changed xs:any to processContents='lax', and added bundleContent element to separate bundle entities and bundle sets of provenance statements.
authorStephan Zednik <zednis@rpi.edu>
Wed, 13 Feb 2013 17:12:45 -0700
changeset 5570 25eddbc45195
parent 5569 6520c5c1b6f4
child 5571 b1cdc1a2d00c
renamed abstractElement, changed xs:any to processContents='lax', and added bundleContent element to separate bundle entities and bundle sets of provenance statements.
examples/eg-40-xml-examples-by-term/xml/Bundle.xml
xml/schema/extensions/prov-dictionary.xsd
xml/schema/extensions/prov-links.xsd
xml/schema/prov-core.xsd
--- a/examples/eg-40-xml-examples-by-term/xml/Bundle.xml	Tue Feb 12 20:58:47 2013 +0000
+++ b/examples/eg-40-xml-examples-by-term/xml/Bundle.xml	Wed Feb 13 17:12:45 2013 -0700
@@ -1,175 +1,175 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!-- based on PROV-DM's Example 39 from http://www.w3.org/TR/prov-dm/#anexample-provenance-of-provenance 
-     see also http://www.w3.org/TR/prov-dm/#element_bundle -->
+see also http://www.w3.org/TR/prov-dm/#element_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#">
-
-  <!-- Let us consider two entities ex:report1 and ex:report2. -->
-
-  <prov:entity prov:id="ex:report1">
-    <prov:type xsi:type="xsd:QName">report</prov:type>
-    <ex:version>1</ex:version>
-  </prov:entity>
-
-  <prov:wasGeneratedBy>
-    <prov:entity prov:ref="ex:report1" />
-    <prov:time>2012-05-24T10:00:01</prov:time>
-  </prov:wasGeneratedBy>
-
-  <prov:entity prov:id="ex:report2">
-    <prov:type xsi:type="xsd:QName">report</prov:type>
-    <ex:version>2</ex:version>
-  </prov:entity>
-
-  <prov:wasGeneratedBy>
-    <prov:entity prov:ref="ex:report2" />
-    <prov:time>2012-05-25T11:00:01</prov:time>
-  </prov:wasGeneratedBy>
-
-  <prov:wasDerivedFrom>
-    <prov:generatedEntity prov:ref="ex:report2" />
-    <prov:usedEntity prov:ref="ex:report1" />
-  </prov:wasDerivedFrom>
-
-  <!-- Let us assume that Bob observed the creation of ex:report1. A
-       first bundle can be expressed. -->
-
-  <prov:bundle prov:id="bob:bundle1">
-	
-    <prov:entity prov:id="ex:report1">
-      <prov:type xsi:type="xsd:QName">report</prov:type>
-      <ex:version>1</ex:version>
-    </prov:entity>
-
-    <prov:wasGeneratedBy>
-      <prov:entity prov:ref="ex:report1"/>
-      <prov:time>2012-05-24T10:00:01</prov:time>
-    </prov:wasGeneratedBy>
-
-  </prov:bundle>
-
-  <!-- In contrast, Alice observed the creation of ex:report2 and
-       its derivation from ex:report1. A separate bundle can also be
-       expressed. -->
-  
-  <prov:bundle prov:id="alice:bundle2">
-	
-	<prov:entity prov:id="ex:report1"/>
-	
-    <prov:entity prov:id="ex:report2">
-      <prov:type xsi:type="xsd:QName">report</prov:type>
-      <ex:version>2</ex:version>
-    </prov:entity>
-
-    <prov:wasGeneratedBy>
-      <prov:entity prov:ref="ex:report2"/>
-      <prov:time>2012-05-25T11:00:01</prov:time>
-    </prov:wasGeneratedBy>
-
-    <prov:wasDerivedFrom>
-      <prov:generatedEntity prov:ref="ex:report2"/>
-      <prov:usedEntity prov:ref="ex:report1"/>
-    </prov:wasDerivedFrom>
-
-  </prov:bundle>
-  
-  <!-- The first
-       bundle contains the descriptions corresponding to Bob observing
-       the creation of ex:report1. Its provenance can be described as
-       follows. -->
+	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: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>
-
-  <!-- In contrast, the second bundle is attributed to Alice
-       who observed the derivation of ex:report2 from ex:report1. -->
-
-  <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>
-
-  <!-- Example 40 from http://www.w3.org/TR/prov-dm/#anexample-provenance-aggregation -->
-
-  <!-- A provenance aggregator could merge two bundles, resulting in a
-       novel bundle, whose provenance is described as follows. -->
-
-  <prov:bundle prov:id="agg:bundle3">
-	
-    <prov:entity prov:id="ex:report1">
-      <prov:type xsi:type="xsd:QName">report</prov:type>
-      <ex:version>1</ex:version>
-    </prov:entity>
-
-    <prov:wasGeneratedBy>
-      <prov:entity prov:ref="ex:report1"/>
-      <prov:time>2012-05-24T10:00:01</prov:time>
-    </prov:wasGeneratedBy>
+	<!-- Let us consider two entities ex:report1 and ex:report2. -->
 
-    <prov:entity prov:id="ex:report2">
-      <prov:type xsi:type="xsd:QName">report</prov:type>
-      <ex:version>2</ex:version>
-    </prov:entity>
-
-    <prov:wasGeneratedBy>
-      <prov:entity prov:ref="ex:report2"/>
-      <prov:time>2012-05-25T11:00:01</prov:time>
-    </prov:wasGeneratedBy>
-
-    <prov:wasDerivedFrom>
-      <prov:generatedEntity prov:ref="ex:report2"/>
-      <prov:usedEntity prov:ref="ex:report1"/>
-    </prov:wasDerivedFrom>
-
-  </prov:bundle>
+	<prov:entity prov:id="ex:report1">
+		<prov:type xsi:type="xsd:QName">report</prov:type>
+		<ex:version>1</ex:version>
+	</prov:entity>
 
-  <!-- defining the bundle entity inside the bundle entity?
-  <prov:entity prov:id="agg:bundle3">
-    <prov:type xsi:type="xsd:QName">prov:Bundle</prov:type>
-  </prov:entity>
- -->
-
-  <prov:agent prov:id="ex:aggregator01">
-    <prov:type xsi:type="xsd:QName">ex:Aggregator</prov:type>
-  </prov:agent>
+	<prov:wasGeneratedBy>
+		<prov:entity prov:ref="ex:report1" />
+		<prov:time>2012-05-24T10:00:01</prov:time>
+	</prov:wasGeneratedBy>
 
-  <prov:wasAttributedTo>
-    <prov:entity prov:ref="agg:bundle3"/>
-    <prov:agent prov:ref="ex:aggregator01"/>
-  </prov:wasAttributedTo>
+	<prov:entity prov:id="ex:report2">
+		<prov:type xsi:type="xsd:QName">report</prov:type>
+		<ex:version>2</ex:version>
+	</prov:entity>
 
-  <prov:wasDerivedFrom>
-    <prov:generatedEntity prov:ref="agg:bundle3"/>
-    <prov:usedEntity prov:ref="bob:bundle1"/>
-  </prov:wasDerivedFrom>
+	<prov:wasGeneratedBy>
+		<prov:entity prov:ref="ex:report2" />
+		<prov:time>2012-05-25T11:00:01</prov:time>
+	</prov:wasGeneratedBy>
 
-  <prov:wasDerivedFrom>
-    <prov:generatedEntity prov:ref="agg:bundle3"/>
-    <prov:usedEntity prov:ref="alice:bundle2"/>
-  </prov:wasDerivedFrom>
+	<prov:wasDerivedFrom>
+		<prov:generatedEntity prov:ref="ex:report2" />
+		<prov:usedEntity prov:ref="ex:report1" />
+	</prov:wasDerivedFrom>
 
-  <!-- The new bundle is given a new identifier agg:bundle3 and is
-       attributed to the ex:aggregator01 agent. -->
+	<!-- Let us assume that Bob observed the creation of ex:report1. A
+	first bundle can be expressed. -->
+
+	<prov:bundle prov:id="bob:bundle1"/>
+
+	<prov:bundleContent prov:id="bob:bundle1">
+
+		<prov:entity prov:id="ex:report1">
+			<prov:type xsi:type="xsd:QName">report</prov:type>
+			<ex:version>1</ex:version>
+		</prov:entity>
+
+		<prov:wasGeneratedBy>
+			<prov:entity prov:ref="ex:report1"/>
+			<prov:time>2012-05-24T10:00:01</prov:time>
+		</prov:wasGeneratedBy>
+
+	</prov:bundleContent>
+
+	<!-- In contrast, Alice observed the creation of ex:report2 and
+	its derivation from ex:report1. A separate bundle can also be
+	expressed. -->
+
+	<prov:bundle prov:id="alice:bundle2"/>
+
+	<prov:bundleContent prov:id="alice:bundle2">
+
+		<prov:entity prov:id="ex:report1"/>
+
+		<prov:entity prov:id="ex:report2">
+			<prov:type xsi:type="xsd:QName">report</prov:type>
+			<ex:version>2</ex:version>
+		</prov:entity>
+
+		<prov:wasGeneratedBy>
+			<prov:entity prov:ref="ex:report2"/>
+			<prov:time>2012-05-25T11:00:01</prov:time>
+		</prov:wasGeneratedBy>
+
+		<prov:wasDerivedFrom>
+			<prov:generatedEntity prov:ref="ex:report2"/>
+			<prov:usedEntity prov:ref="ex:report1"/>
+		</prov:wasDerivedFrom>
+
+	</prov:bundleContent>
+
+	<!-- The first
+	bundle contains the descriptions corresponding to Bob observing
+	the creation of ex:report1. Its provenance can be described as
+	follows. -->
+
+	<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>
+
+	<!-- In contrast, the second bundle is attributed to Alice
+	who observed the derivation of ex:report2 from ex:report1. -->
+
+	<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>
+
+	<!-- Example 40 from http://www.w3.org/TR/prov-dm/#anexample-provenance-aggregation -->
+
+	<!-- A provenance aggregator could merge two bundles, resulting in a
+	novel bundle, whose provenance is described as follows. -->
+
+	<prov:bundle prov:id="agg:bundle3"/>
+
+	<prov:bundleContent prov:id="agg:bundle3">
+
+		<prov:entity prov:id="ex:report1">
+			<prov:type xsi:type="xsd:QName">report</prov:type>
+			<ex:version>1</ex:version>
+		</prov:entity>
+
+		<prov:wasGeneratedBy>
+			<prov:entity prov:ref="ex:report1"/>
+			<prov:time>2012-05-24T10:00:01</prov:time>
+		</prov:wasGeneratedBy>
+
+		<prov:entity prov:id="ex:report2">
+			<prov:type xsi:type="xsd:QName">report</prov:type>
+			<ex:version>2</ex:version>
+		</prov:entity>
+
+		<prov:wasGeneratedBy>
+			<prov:entity prov:ref="ex:report2"/>
+			<prov:time>2012-05-25T11:00:01</prov:time>
+		</prov:wasGeneratedBy>
+
+		<prov:wasDerivedFrom>
+			<prov:generatedEntity prov:ref="ex:report2"/>
+			<prov:usedEntity prov:ref="ex:report1"/>
+		</prov:wasDerivedFrom>
+
+	</prov:bundleContent>
+
+	<prov:agent prov:id="ex:aggregator01">
+		<prov:type xsi:type="xsd:QName">ex:Aggregator</prov:type>
+	</prov:agent>
+
+	<prov:wasAttributedTo>
+		<prov:entity prov:ref="agg:bundle3"/>
+		<prov:agent prov:ref="ex:aggregator01"/>
+	</prov:wasAttributedTo>
+
+	<prov:wasDerivedFrom>
+		<prov:generatedEntity prov:ref="agg:bundle3"/>
+		<prov:usedEntity prov:ref="bob:bundle1"/>
+	</prov:wasDerivedFrom>
+
+	<prov:wasDerivedFrom>
+		<prov:generatedEntity prov:ref="agg:bundle3"/>
+		<prov:usedEntity prov:ref="alice:bundle2"/>
+	</prov:wasDerivedFrom>
+
+	<!-- The new bundle is given a new identifier agg:bundle3 and is
+	attributed to the ex:aggregator01 agent. -->
 
 </prov:document>
 
--- a/xml/schema/extensions/prov-dictionary.xsd	Tue Feb 12 20:58:47 2013 +0000
+++ b/xml/schema/extensions/prov-dictionary.xsd	Wed Feb 13 17:12:45 2013 -0700
@@ -13,7 +13,7 @@
 		</xs:complexContent>
 	</xs:complexType>
 	
-	<xs:element name="dictionary" type="prov:Dictionary" substitutionGroup="prov:abstractElement" />
+	<xs:element name="dictionary" type="prov:Dictionary" substitutionGroup="prov:internalElement" />
 	
 	<!-- Empty Dictionary -->
 	<xs:complexType name="EmptyDictionary">
@@ -23,7 +23,7 @@
 		</xs:complexContent>
 	</xs:complexType>
 	
-	<xs:element name="emptyDictionary" type="prov:EmptyDictionary" substitutionGroup="prov:abstractElement" />
+	<xs:element name="emptyDictionary" type="prov:EmptyDictionary" substitutionGroup="prov:internalElement" />
 		
 	<!-- Key-Value Pair -->
 	<xs:complexType name="KeyValuePair">
@@ -34,7 +34,7 @@
 	</xs:complexType>
 	
 	<!-- do we need to have this use the substitutionGroup? -->
-	<xs:element name="keyValuePair" type="prov:KeyValuePair" substitutionGroup="prov:abstractElement"/>
+	<xs:element name="keyValuePair" type="prov:KeyValuePair" substitutionGroup="prov:internalElement"/>
 
 	<!-- Dictionary Membership -->
 	<xs:complexType name="DictionaryMembership">
@@ -44,7 +44,7 @@
 	  </xs:sequence>
 	</xs:complexType>
 	
-	<xs:element name="hadDictionaryMember" type="prov:DictionaryMembership" substitutionGroup="prov:abstractElement"/>
+	<xs:element name="hadDictionaryMember" type="prov:DictionaryMembership" substitutionGroup="prov:internalElement"/>
 
 	<!-- Insertion -->
 	<xs:complexType name="Insertion">
@@ -55,7 +55,7 @@
 	  </xs:sequence>
 	</xs:complexType>
 	
-	<xs:element name="derivedByInsertionFrom" type="prov:Insertion" substitutionGroup="prov:abstractElement"/>
+	<xs:element name="derivedByInsertionFrom" type="prov:Insertion" substitutionGroup="prov:internalElement"/>
 
 	<!-- Removal -->
 	<xs:complexType name="Removal">
@@ -66,6 +66,6 @@
 	  </xs:sequence>
 	</xs:complexType>
 	
-	<xs:element name="derivedByRemovalFrom" type="prov:Removal" substitutionGroup="prov:abstractElement"/>
+	<xs:element name="derivedByRemovalFrom" type="prov:Removal" substitutionGroup="prov:internalElement"/>
 
 </xs:schema>
--- a/xml/schema/extensions/prov-links.xsd	Tue Feb 12 20:58:47 2013 +0000
+++ b/xml/schema/extensions/prov-links.xsd	Wed Feb 13 17:12:45 2013 -0700
@@ -13,6 +13,6 @@
 		</xs:sequence>
 	</xs:complexType>
 	
-	<xs:element name="mentionOf" type="prov:Mention" substitutionGroup="prov:abstractElement" />
+	<xs:element name="mentionOf" type="prov:Mention" substitutionGroup="prov:internalElement" />
 	
 </xs:schema>
\ No newline at end of file
--- a/xml/schema/prov-core.xsd	Tue Feb 12 20:58:47 2013 +0000
+++ b/xml/schema/prov-core.xsd	Wed Feb 13 17:12:45 2013 -0700
@@ -29,7 +29,7 @@
         <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" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>  
@@ -42,7 +42,7 @@
         <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" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -57,7 +57,7 @@
         <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" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -72,7 +72,7 @@
         <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" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -84,7 +84,7 @@
         <!-- prov attributes -->
         <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:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -100,7 +100,7 @@
         <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" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -116,7 +116,7 @@
         <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" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -131,7 +131,7 @@
         <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" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -148,7 +148,7 @@
         <!-- prov attributes -->
         <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:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -182,7 +182,7 @@
         <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" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -215,7 +215,7 @@
         <!-- prov attributes -->
         <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:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -229,7 +229,7 @@
         <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" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -242,7 +242,7 @@
         <!-- prov attributes -->
         <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:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -254,7 +254,7 @@
         <!-- prov attributes -->
         <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:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
     </xs:sequence>
     <xs:attribute ref="prov:id"/>
   </xs:complexType>
@@ -266,14 +266,18 @@
   <xs:complexType name="Bundle">
     <xs:complexContent>
       <xs:extension base="prov:Entity">
-        <xs:sequence maxOccurs="unbounded">
-            <xs:group ref="prov:documentElements"/>
-			<!--><xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>-->
-        </xs:sequence>
       </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">
@@ -428,7 +432,7 @@
         <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:abstractElement" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element ref="prov:internalElement" minOccurs="0" maxOccurs="unbounded" />
     </xs:sequence>
   </xs:group>
 
@@ -436,12 +440,13 @@
   <xs:complexType name="Document">
     <xs:sequence maxOccurs="unbounded">
         <xs:group ref="prov:documentElements" minOccurs="0"/>
-        <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+		<xs:element name="bundleContent" type="prov:BundleConstructor" minOccurs="0"/>
+        <xs:any namespace="##other" processContents="lax" minOccurs="0" />
     </xs:sequence>
   </xs:complexType>
 
   <!-- abstract element used by extensions -->
 
-  <xs:element name="abstractElement" abstract="true" />
+  <xs:element name="internalElement" abstract="true" />
 
 </xs:schema>