diff --git a/tests/src/xinclude/harness.pl b/tests/src/xinclude/harness.pl
new file mode 100644
index 0000000000000000000000000000000000000000..47df625966c8fa4060e41ea6d52f658283ff608e
--- /dev/null
+++ b/tests/src/xinclude/harness.pl
@@ -0,0 +1,223 @@
+#use strict;
+
+# usage perl harness.pl [testNum]
+#   where testNum is an integer from 1 to 41
+#   testNum may also be a list of integers denoting tests to be run
+#   ommitting testNum will lead to all tests being run
+#
+#  this harness outputs the results to the file results.html as well 
+#   as reporting them to stderr.
+#
+#  note that the XInclude sample application must be discoverable on 
+#   the current PATH.
+
+#
+# Find out the platform from 'uname -s'
+#
+open(PLATFORM, "uname -s|");
+$platform = <PLATFORM>;
+chomp($platform);
+close (PLATFORM);
+
+if ($platform =~ m/Windows/i  || $platform =~ m/CYGWIN/i) {
+    $pathsep = "\\";
+}
+else {
+    $pathsep = "/";
+}
+
+@CORRECT_TEST_RESULTS = (
+        -3,
+	1, 1, 1, 1, 1, 1, 0, 1, 0, 1,
+	0, 0, 0, 0, 1, 1, 1, 0, 1, 1,
+	1, 0, 1, 0, 0, 0, 1, 1, 0, 1,
+	1, 0, 1, 1, 1, 1, 1, 1, 0, 0,
+       	1
+);
+
+#    private static boolean[] TEST_RESULTS = new boolean[] {
+#        // one value for each test
+#        true, true, true, true, true, true, false, true, false, true, // 10
+#        false, false, false, false, true, true, true, false, true, true, // 20
+#        true, false, true, false, false, false, true, true, false, true, // 30
+#        true, false, true, true, true, true, true, true, false, false, // 40
+#        true, };
+
+#no need to add one to this value since there is a dummy value in the tables
+$NUM_TESTS = $#CORRECT_TEST_RESULTS;
+
+@ACTUAL_TEST_RESULTS = (
+        -3,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+        -1
+);
+
+print "Running XInclude Tests\n";
+
+$dateAndTime = localtime();
+
+open(outfile, ">results.html");
+print outfile "<html><head><title>XInclude results generated at $dateAndTime </title>";
+print outfile "</head><body bgcolor=\"black\" text=\"white\"><center>";
+
+print outfile "<table border cellspacing=\"0\" cellpadding=\"5\"><caption align=\"bottom\">Results of XI Test Run</caption>";
+print outfile "<tr><th>Test Number</th><th>Test Input File</th><th>Generated Output File</th>";
+print outfile "<th>Reference Result File</th><th>Result</th><th>Expected Result</th><th>Test Status</th></tr>";
+
+$successes = 0;
+$correct = 0;
+$numTestsToRun = $#ARGV + 1;
+while (<@ARGV>){
+   $i = $_;
+   if ($i < 10) {
+      $testNum = "0$i";
+   } else {
+      $testNum = "$i";
+   }
+   $input_file =  "tests".$pathsep."xinclude".$pathsep."tests".$pathsep."test$testNum.xml";
+   if ($CORRECT_TEST_RESULTS[$i] == 1) {
+      $output_file = "tests".$pathsep."xinclude".$pathsep."written".$pathsep."test$testNum.xml";
+      $expected_result_file = "tests".$pathsep."xinclude".$pathsep."cppoutput".$pathsep."test$testNum.xml";
+   } else {
+      $output_file = "tests".$pathsep."xinclude".$pathsep."written".$pathsep."test$testNum.txt";
+      $expected_result_file = "tests".$pathsep."xinclude".$pathsep."cppoutput".$pathsep."test$testNum.txt";
+   }
+
+   # run the tests and apture the output
+   $command = "XInclude $input_file $output_file";
+   print "R[$command]\n";
+   system("$command");
+
+   $ACTUAL_TEST_RESULTS[$i] = &compareFiles($expected_result_file, $output_file);
+
+   print outfile "<tr bgcolor=";
+   if ($ACTUAL_TEST_RESULTS[$i] eq $CORRECT_TEST_RESULTS[$i]) {
+      print outfile "green";
+   } else {
+      print outfile "red";
+   }
+
+   print outfile ">";
+   #test number
+   print outfile "<td>$testNum</td>";
+   print outfile "<td>";
+   $anchor = &createHTMLAnchor("$input_file");
+   print outfile "$anchor";
+   print outfile "</td><td>";
+   $anchor = &createHTMLAnchor("$output_file");
+   print outfile "$anchor";
+   print outfile "</td><td>";
+   $anchor = &createHTMLAnchor("$expected_result_file");
+   print outfile "$anchor";
+   print outfile "</td>";
+   # actual result
+   $result = (($ACTUAL_TEST_RESULTS[$i])?"true":"false");
+   print outfile "<td>$result</td>";
+   if($ACTUAL_TEST_RESULTS[$i]) {
+      $successes++;
+   }
+
+   # correct result
+   $result = (($CORRECT_TEST_RESULTS[$i])?"true":"false");
+   print outfile "<td>$result</td>";
+
+   if ($ACTUAL_TEST_RESULTS[$i] eq $CORRECT_TEST_RESULTS[$i]) {
+      $result = "Passed";
+      print "[test $testNum PASSED]\n";
+      $correct++;
+   } else {
+      $result = "Failed";
+      print "[test $testNum FAILED]\n";      
+   }
+   print outfile "<td>$result</td></tr>";
+}
+
+print outfile "</table>";
+
+print "Tests Passed: $correct\n";
+$percentSucceeding = $correct / $numTestsToRun * 100.0;
+print outfile "<hr/><h2>$percentSucceeding% of tests that were run passed ($correct out of $numTestsToRun).</h2>";
+
+$shPass = 0;
+$shFail = 0;
+for ($i = 1; $i < $NUM_TESTS+1; $i++){
+   if ($CORRECT_TEST_RESULTS[$i]){
+       $shPass++;
+   } else {
+       $shFail++;
+   }
+}
+
+print outfile "<h2>$shPass should pass ($successes) did</h2>";
+$failures = $NUM_TESTS - $successes;
+print outfile "<h2>$shFail should fail ($failures) did</h2>";
+
+$percentSucceeding = $correct / $NUM_TESTS * 100.0; 
+print outfile "<h2>$percentSucceeding% of all available tests passed ($correct out of $NUM_TESTS).</h2>";
+
+$percentSucceeding = $numTestsToRun / $NUM_TESTS * 100.0;
+print outfile "<h2>$percentSucceeding% of all available tests were run ($numTestsToRun out of $NUM_TESTS).</h2>";
+
+print outfile "</center><hr/></body></html>";
+close(outfile);
+
+# quick and dirty but functional
+sub compareFiles 
+{
+   $result = 1;
+   print "C[$_[0]]:[$_[1]]\n";
+
+   if (! -e $_[0]) {
+      print "No such file as $_[0] - cannot compare\n";
+      return 0;
+   }
+
+   if (! -e $_[1]) {
+      print "No such file as $_[1] - cannot compare\n";
+      return 0;
+   }
+
+   open(expected, "<$_[0]");
+   open(actual, "<$_[1]");
+
+   #compare the files
+   @expectedData = <expected>;
+   @actualData = <actual>;
+
+   close(expected);
+   close(actual);
+
+   for ($x = 0, $a = 0; $x < $#expectedData && $a < $#actualData; $x++, $a++){
+      $dataLineEx = $expectedData[$x];
+      $dataLineAc = $actualData[$a];
+      chomp($dataLineEx);
+      chomp($dataLineAc);
+      if ($dataLineEx ne $dataLineAc) {
+         # check if its a warning and can be ignored at this stage
+         if ($dataLineEx =~ /Warning/) {
+            print "probably just a warning line:\n";
+            print "[$dataLineEx]\n";
+            $a--
+         } elsif ( $dataLineEx =~ m/^\s*$/ && $dataLineAc =~ m/^\s*$/ ) {
+            $line_num = $x + 1;
+            print "Line $line_num ws difference: \n[$dataLineEx] != \n[$dataLineAc]\n";
+            print "probably just white space on both lines\n";
+            $a--
+         } else {
+            $line_num = $x + 1;
+            print "Line $line_num difference: \n[$dataLineEx] != \n[$dataLineAc]\n";
+            print "From files: $_[0] $_[1]\n";
+            return 0;
+         }
+      }
+   }
+
+   return 1;
+}
+
+sub createHTMLAnchor {
+   "<a target=\"_blank\" href=\"$_[0]\">$_[0]</a>";
+}
diff --git a/tests/src/xinclude/run.bat b/tests/src/xinclude/run.bat
new file mode 100644
index 0000000000000000000000000000000000000000..524e02c1671723273f63ba5c1a8a4b40b2a480a5
--- /dev/null
+++ b/tests/src/xinclude/run.bat
@@ -0,0 +1,14 @@
+set PATH=../../../samples;%PATH%
+
+rem not running / current failures 
+rem 1 7 9 11 12 13 14 18 19 21 22 23 29 32 34 35 36 37 38 39 40 41
+del /Q tests\xinclude\written\*
+
+if %1. NEQ . goto USEARGS
+
+perl harness.pl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
+
+goto END
+:USEARGS
+perl harness.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
+:END
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/readme.txt b/tests/src/xinclude/tests/xinclude/cppoutput/readme.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1071a89255f489df5d0dcf16a3983cb1d2c2df1e
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/readme.txt
@@ -0,0 +1,14 @@
+The following changes are made to the java xinclude test output files;
+
+1) [ standalone="no" ] is added to the XML Declaration in each file.
+
+2) Attributes on the included top level include element are reordered
+alphabetically as this is the xerces c++ behaviour!
+
+3) Removed a space from after the xml declaration and before the first
+document element (thats a single space btw).
+
+4) xerces c++ parser's don't expand quotation entities to &quot. Java does. Investigate!
+
+5) added xmlns:xml="http://www.w3.org/XML/1998/namespace" attribute to appropriate top level elements
+
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test01.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test01.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ff1e7edf44d4dbcfa4d0babbd135bba5d5fb577b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test01.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><!-- This test doesn't test anything in particular.  But it is an example of a
+     somewhat complicated setup. --><xit:myRoot xmlns:xit="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+	[Warning] test01.xml:8:87
+
+			[Warning] test01.xml:11:47
+
+					<child1 name="kid1" xmlns:test01="http://www.test.org/test02" xmlns:test02="http://www.test.org/TEST02"><desc>Text1</desc></child1>
+				
+		
+	[Warning] test01.xml:22:45
+
+			<child2 name="kid2"><desc>Text2</desc></child2>
+		
+	
+	<!-- this tests a valid include -->
+	<!-- tests that files included from other directories work -->[Warning] include09.xml:3:69
+<child3 xmlns="" name="kid3" xml:base="../included/dir/include09.xml"><desc>Text3</desc></child3>
+	
+	<!-- this tests that idrefs still work when an ID from an included file is used -->
+	<select name="kid3"/>
+	
+	<!-- this tests when an included file has a DTD, but the base file doesn't -->
+	<view sun="image" xml:base="../included/unparsed.xml"/>
+</xit:myRoot>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test02.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test02.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1a926adc28afe0ec78f9079a5ed5ed645fc4a962
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test02.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that attributes from other namespaces on xi:include elements are ignored -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test03.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test03.xml
new file mode 100644
index 0000000000000000000000000000000000000000..06bd4c6aa7fb69b1ec8f5d0549b612217915116c
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test03.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that attributes from the XInclude namespace are ignored -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test04.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test04.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b3de003c9d77049ac98cbb587364c121b34643fb
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test04.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- thats that parse="xml" works -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test05.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test05.xml
new file mode 100644
index 0000000000000000000000000000000000000000..034b8c9565f2124445997a481fdb40caf138b9f6
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test05.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that parse="text" works -->
+   blah blah blah
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test06.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test06.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9e08751c91f6075e972c1e1a84933afc862b86ec
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test06.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that parse="xml" is the default -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test07.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test07.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6310cd9a461c80076bda7fdac2cc6ec8c63621e1
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test07.txt
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that values for parse other than "xml" or "text" are invalid -->
+   <!-- EXPECT FAILURE -->
+   [Fatal Error] test07.xml:9:45
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test08.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test08.xml
new file mode 100644
index 0000000000000000000000000000000000000000..87100f59b26c5350881dadfa65583b924061adcc
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test08.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 0 fallbacks is not a failure when the include is successful -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test09.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test09.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5a0982be4c10674d0909a5f786d7a9cecd1a922a
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test09.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 0 fallbacks is a failure when the include is unsuccessful -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test09.xml:9:48
+[Fatal Error] test09.xml:9:48
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test10.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test10.xml
new file mode 100644
index 0000000000000000000000000000000000000000..411b5482c006cc7a89916daa7f91b6c36d514d7a
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test10.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that a fallback is used when the include is unsuccessful -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test11.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test11.txt
new file mode 100644
index 0000000000000000000000000000000000000000..89c9d410b902c4620850c639948e39972bda9f27
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test11.txt
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 2 fallbacks cause a failure when the include is successful -->
+   <!-- EXPECT FAILURE -->
+   <elem xmlns="http://www.schemaTest.org/xinclude-test" xml:base="../included/elem.xml"/>[Fatal Error] test11.xml:11:22
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test12.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test12.txt
new file mode 100644
index 0000000000000000000000000000000000000000..34ed37524d56a854735ec8badbcc29d25a2511f4
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test12.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 2 fallbacks cause a failure when the include is unsuccessful -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test12.xml:9:47
+[Fatal Error] test12.xml:11:22
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test13.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test13.txt
new file mode 100644
index 0000000000000000000000000000000000000000..145d37a59084d0d409d89bf8f7cf039028350cc7
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test13.txt
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that other elements from xi namespace are not allowed when include is successful -->
+   <!-- EXPECT FAILURE -->
+   <elem xmlns="http://www.schemaTest.org/xinclude-test" xml:base="../included/elem.xml"/>[Fatal Error] test13.xml:10:19
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test14.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test14.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f582a37f09a2bf7dcf6e9cf348a2010ab4181982
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test14.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that other elements from xi namespace are not allowed when include is not successful -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test14.xml:9:47
+[Fatal Error] test14.xml:10:19
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test15.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test15.xml
new file mode 100644
index 0000000000000000000000000000000000000000..374d267c4246898ffd0f775052b14ad78089837f
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test15.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test that parser can be reused -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test16.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test16.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f9946f12af29b15cea529f8f8cf18d01961bb119
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test16.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- included file includes another file -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test17.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test17.xml
new file mode 100644
index 0000000000000000000000000000000000000000..07bb59beac995f0f4a9db45748b120fa586b0991
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test17.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test that empty fallback is valid -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test18.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test18.txt
new file mode 100644
index 0000000000000000000000000000000000000000..341262392142bcb745529a7e2631ac2332b5d751
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test18.txt
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that fallback must be child of include -->
+   <!-- EXPECT FAILURE -->
+   [Fatal Error] test18.xml:8:18
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test19.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test19.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2710e35e86b4b529f2ee2f31f7172bbc3de1e6f6
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test19.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including XML as text -->
+   &lt;?xml version="1.0"?&gt;
+&lt;elem xmlns="http://www.schemaTest.org/xinclude-test"/&gt;
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test20.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test20.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c133c4555e68906aa94c08327e15a68b59ff1e29
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test20.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including file with different MIME-type as XML -->
+   <elem xml:base="../included/elem.jpg" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test21.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test21.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5ef01d161f97ec08a2a0561cbe4affcd6535ba53
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test21.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including file with different MIME-type as text -->
+   &lt;?xml version="1.0"?&gt;
+&lt;elem xmlns="http://www.schemaTest.org/xinclude-test"/&gt;
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test22.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test22.txt
new file mode 100644
index 0000000000000000000000000000000000000000..854e7f9d8034869aaa1b6dd684e664203038b598
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test22.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- include not well formed XML -->
+   <!-- EXPECT FAILURE -->
+   [Fatal Error] not-well-formed.xml:1:10
+[Fatal Error] test22.xml:9:56
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test23.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test23.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6bc629cf2579ec2042fc903a7e228b0f3c3acd13
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test23.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including the same document, but as text -->
+   &lt;?xml version="1.0"?&gt;
+&lt;x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd"&gt;
+   &lt;!-- test that including the same document fails --&gt;
+   &lt;!-- EXPECT FAILURE --&gt;
+   &lt;xi:include parse="xml"
+               href="test24.xml"/&gt;
+&lt;/x&gt;
+
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test24.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test24.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9b6b8ed5d541b69c805abb549935c410b4dbe4ae
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test24.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test that including the same document fails -->
+   <!-- EXPECT FAILURE -->
+   [Fatal Error] test24.xml:1:1
+[Fatal Error] test24.xml:9:35
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test25.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test25.txt
new file mode 100644
index 0000000000000000000000000000000000000000..aff93aaa3d73a0e0f687df205709856f7650df62
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test25.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including a resource that isn't there, when parse="xml" -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test25.xml:9:48
+[Fatal Error] test25.xml:9:48
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test26.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test26.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a4e9a542b5d9ff9e3decdd434f75f61fbe27dd10
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test26.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including a resource that isn't there, when parse="text" -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test26.xml:9:48
+[Fatal Error] test26.xml:9:48
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test27.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test27.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0d33f170b79a60949c80d57d757e0e77fb779c86
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test27.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <elem bar="xjpg"/>
+   <!-- test including a document with a non-conflicting notation -->
+   <elem bar="jpg" xml:base="../included/not.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test28.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test28.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5b93b1300cc81b38a0495777bab95cfe75034a60
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test28.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <elem bar="jpg"/>
+   <!-- test including a document with a duplicate notation -->
+   <elem bar="jpg" xml:base="../included/not.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test29.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test29.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d966f29dea51bab98b8f179a7ca71761e9eb2bcc
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test29.txt
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <elem bar="jpg"/>
+   <!-- test including a document with a conflicting notation -->
+   <!-- EXPECT FAILURE -->
+   [Fatal Error] not2.xml:12:56
+[Fatal Error] test29.xml:11:45
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test30.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test30.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3cb6b389dff066c3937bd87ca87e994085eaab4a
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test30.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including document with non-conflicting unparsed entity -->
+   <elem foo="ximage"/>
+   <elem foo="image" xml:base="../included/ue.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test31.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test31.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bd28c69c8c104e7adf3b16aa5fcb526307c37b43
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test31.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including document with duplicate unparsed entity -->
+   <elem foo="image"/>
+   <elem foo="image" xml:base="../included/ue.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test32.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test32.txt
new file mode 100644
index 0000000000000000000000000000000000000000..315b97d1589bde98430c1ab5648e4f25ad897bdb
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test32.txt
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including document with conflicting unparsed entity -->
+   <!-- Note: this actually fails because of the conflicting notation; I'm not
+        sure how to make a conflicting unparsed entity without having a conflicting
+        notation -->
+   <!-- EXPECT FAILURE -->
+   <elem foo="image"/>
+   [Fatal Error] ue2.xml:12:56
+[Fatal Error] test32.xml:14:44
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test33.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test33.xml
new file mode 100644
index 0000000000000000000000000000000000000000..99a6a2d80903f149a4837d29a4f2da290171a055
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test33.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including document with a DTD, and unparsed entities and notations,
+        when the root document doesn't have one -->
+   <elem foo="image" xml:base="../included/ue.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test34.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test34.xml
new file mode 100644
index 0000000000000000000000000000000000000000..73081c7fdb93ac5bf987e6cb989cbcc2bbe458b5
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test34.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xml:base="../" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on parent element to move back a directory -->
+   <elem xml:base="included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test35.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test35.xml
new file mode 100644
index 0000000000000000000000000000000000000000..af162891bd80389c2bc0a6ec3e86cc5edf7123c1
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test35.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on include element to move back a directory -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test36.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test36.xml
new file mode 100644
index 0000000000000000000000000000000000000000..eb03db505f5515642ec85f31cc15f52eb4888c98
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test36.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xml:base="../included/" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test ../tests/tests.xsd">
+   <!-- using xml:base on parent element to move to the included directory -->
+   <elem xml:base="elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test37.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test37.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3be0f2f1c3bae22a666ffb32c57fb91f25bb15af
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test37.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on include element to move to the included directory -->
+   <elem xml:base="../included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test38.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test38.xml
new file mode 100644
index 0000000000000000000000000000000000000000..933ab8a92270b425df3a401f5a781a16c43db846
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test38.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xml:base="../" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on both parent element and include element -->
+   <elem xml:base="included/elem.xml" xmlns="http://www.schemaTest.org/xinclude-test"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test39.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test39.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b84bd78bdc6a57fd2006d1f3343296a83be6630
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test39.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd" xml:base="../">
+   <!-- using xml:base on both parent element to move to wrong directory -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test39.xml:10:45
+[Fatal Error] test39.xml:10:45
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test40.txt b/tests/src/xinclude/tests/xinclude/cppoutput/test40.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d0d6a9c41b45dbe9fc15d973d49533fd01728067
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test40.txt
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on include element to move to wrong directory -->
+   <!-- EXPECT FAILURE -->
+   [Warning] test40.xml:10:45
+[Fatal Error] test40.xml:10:45
diff --git a/tests/src/xinclude/tests/xinclude/cppoutput/test41.xml b/tests/src/xinclude/tests/xinclude/cppoutput/test41.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1ba2d481686e0d33bbf9395e934b6a158fde603a
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/cppoutput/test41.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?><x xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- final included element specifies an xml:base attribute, which will be
+        overwritten by the new xml:base attribute -->
+   <!-- redundant path structure --><elem xml:base="../included/dir/" xmlns="http://www.schemaTest.org/xinclude-test" xmlns:xml="http://www.w3.org/XML/1998/namespace"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/included/base.xml b/tests/src/xinclude/tests/xinclude/included/base.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1151769d2bd1e56329cfd26a1e64341abcc99fd4
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/base.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!-- redundant path structure -->
+<include xml:base="../included/" xmlns="http://www.w3.org/2001/XInclude"
+         href="../included/elem_base.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/dir/include09.xml b/tests/src/xinclude/tests/xinclude/included/dir/include09.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4b2f6a08edad8a7dc6cfa38e6b67cf8d653a1cfb
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/dir/include09.xml
@@ -0,0 +1,18 @@
+<?xml version='1.0'?>
+<!-- tests that files included from other directories work -->
+<include xmlns="http://www.w3.org/2001/XInclude" href="invalid.xml">
+	<fallback>
+        <child3 xmlns="" name="kid3">
+            <desc>
+                <include xmlns="http://www.w3.org/2001/XInclude" href="../include10.txt" parse="text">
+                    <fallback>
+                        <!-- this fallback won't be used -->
+                        <child4 xmlns="" name="kid4">
+                            <desc>Text4</desc>
+                        </child4>
+                    </fallback>
+                </include>
+            </desc>
+        </child3>
+    </fallback>
+</include>
diff --git a/tests/src/xinclude/tests/xinclude/included/elem.jpg b/tests/src/xinclude/tests/xinclude/included/elem.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f4e0a7269bc6eaa79a5c12f0ec7e5ce06950d06e
Binary files /dev/null and b/tests/src/xinclude/tests/xinclude/included/elem.jpg differ
diff --git a/tests/src/xinclude/tests/xinclude/included/elem.xml b/tests/src/xinclude/tests/xinclude/included/elem.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f4e0a7269bc6eaa79a5c12f0ec7e5ce06950d06e
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/elem.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<elem xmlns="http://www.schemaTest.org/xinclude-test"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/elem_base.xml b/tests/src/xinclude/tests/xinclude/included/elem_base.xml
new file mode 100644
index 0000000000000000000000000000000000000000..25da39d15a2f3bfffdeccd67581d3d7eb55b4295
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/elem_base.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<elem xmlns="http://www.schemaTest.org/xinclude-test"
+      xml:base="dir/"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include.xml b/tests/src/xinclude/tests/xinclude/included/include.xml
new file mode 100644
index 0000000000000000000000000000000000000000..25171d86bd96f7cd87c49add816c0c0971a6f0f7
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<include xml:base="../included/" xmlns="http://www.w3.org/2001/XInclude"
+         href="elem.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include01.xml b/tests/src/xinclude/tests/xinclude/included/include01.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9bb5b773b436379db1d886da04de762ae193ab05
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include01.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<xi1:include xmlns:xi1="http://www.w3.org/2001/XInclude"
+			 xmlns:abc="asdfasdfasdf"
+            href="include02.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include02.xml b/tests/src/xinclude/tests/xinclude/included/include02.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c84b31dbd3872c06f7fc29c98c1a170105409299
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include02.xml
@@ -0,0 +1,3 @@
+<?xml version='1.0'?>
+<xi2:include xmlns:xi2="http://www.w3.org/2001/XInclude"
+			 xmlns:abc="asdfasdfasdf" href="include03.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include03.xml b/tests/src/xinclude/tests/xinclude/included/include03.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4fb94c24615c1d00c58cad7a7763853559edfe10
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include03.xml
@@ -0,0 +1,3 @@
+<?xml version='1.0'?>
+<xi3:include xmlns:xi3="http://www.w3.org/2001/XInclude"
+			 xmlns:abc="asdfasdfasdf" href="include04.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include04.xml b/tests/src/xinclude/tests/xinclude/included/include04.xml
new file mode 100644
index 0000000000000000000000000000000000000000..079fb4ff0c0d0d7546b34523f33eba33d31ca075
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include04.xml
@@ -0,0 +1,3 @@
+<?xml version='1.0'?>
+<xi4:include xmlns:xi4="http://www.w3.org/2001/XInclude"
+			 xmlns:abc="asdfasdfasdf" href="include05.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include05.xml b/tests/src/xinclude/tests/xinclude/included/include05.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f4a7fa7d203fef84c2732c1dd74750256b2ea46a
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include05.xml
@@ -0,0 +1,3 @@
+<?xml version='1.0'?>
+<xi5:include xmlns:xi5="http://www.w3.org/2001/XInclude"
+			 xmlns:abc="asdfasdfasdf" href="include06.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include06.xml b/tests/src/xinclude/tests/xinclude/included/include06.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6af71d46cc0b92baaf6ddd016b152ef464e9f3a3
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include06.xml
@@ -0,0 +1,2 @@
+<?xml version='1.0'?>
+<xi6:include xmlns:xi6="http://www.w3.org/2001/XInclude" href="include07.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include07.xml b/tests/src/xinclude/tests/xinclude/included/include07.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cb1f4306004706100aed95cf03a64e82cfdd17cc
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include07.xml
@@ -0,0 +1,2 @@
+<?xml version='1.0'?>
+<xi7:include xmlns:xi7="http://www.w3.org/2001/XInclude" href="include08.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include08.xml b/tests/src/xinclude/tests/xinclude/included/include08.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6d574e6dbb9e00749ed15130c1d899f7b399c6ce
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include08.xml
@@ -0,0 +1,2 @@
+<?xml version='1.0'?>
+<xi8:include xmlns:xi8="http://www.w3.org/2001/XInclude" href="dir/include09.xml"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/include10.txt b/tests/src/xinclude/tests/xinclude/included/include10.txt
new file mode 100644
index 0000000000000000000000000000000000000000..35fa189198e5eda2dde678466e45deb52caf8b8a
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/include10.txt
@@ -0,0 +1 @@
+Text3
diff --git a/tests/src/xinclude/tests/xinclude/included/not-well-formed.xml b/tests/src/xinclude/tests/xinclude/included/not-well-formed.xml
new file mode 100644
index 0000000000000000000000000000000000000000..956f390cb4f9ced0671c3809562fb18c9bc09705
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/not-well-formed.xml
@@ -0,0 +1 @@
+<this is not XML>
diff --git a/tests/src/xinclude/tests/xinclude/included/not.xml b/tests/src/xinclude/tests/xinclude/included/not.xml
new file mode 100644
index 0000000000000000000000000000000000000000..64a22db3302c8467b51607fde255fc4d1ef708da
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/not.xml
@@ -0,0 +1,4 @@
+<?xml version='1.0'?>
+<!DOCTYPE elem SYSTEM "../tests/tests.dtd">
+<elem bar="jpg"
+      xmlns="http://www.schemaTest.org/xinclude-test"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/not2.xml b/tests/src/xinclude/tests/xinclude/included/not2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2ed4a0788ec7e9907f286b979ec2d8f7b7c0973f
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/not2.xml
@@ -0,0 +1,12 @@
+<?xml version='1.0'?>
+<!DOCTYPE elem [
+<!ELEMENT elem EMPTY>
+<!ATTLIST elem
+	xmlns    CDATA          #FIXED "http://www.schemaTest.org/xinclude-test"
+	xml:base CDATA          #IMPLIED
+	foo      ENTITY         #IMPLIED
+	bar      NOTATION (jpg) #IMPLIED>
+<!NOTATION jpg SYSTEM "jpg">
+]>
+<elem bar="jpg"
+      xmlns="http://www.schemaTest.org/xinclude-test"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/text.txt b/tests/src/xinclude/tests/xinclude/included/text.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c1a7bd5f160289036fb22e98c9ffc240a1582d67
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/text.txt
@@ -0,0 +1 @@
+blah blah blah
diff --git a/tests/src/xinclude/tests/xinclude/included/ue.xml b/tests/src/xinclude/tests/xinclude/included/ue.xml
new file mode 100644
index 0000000000000000000000000000000000000000..08d5883e2cf748697f91776db6867d43ae0060af
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/ue.xml
@@ -0,0 +1,4 @@
+<?xml version='1.0'?>
+<!DOCTYPE elem SYSTEM "../tests/tests.dtd">
+<elem foo="image"
+      xmlns="http://www.schemaTest.org/xinclude-test"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/ue2.xml b/tests/src/xinclude/tests/xinclude/included/ue2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e90c6d77817396557829700605774cd003d6e7ec
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/ue2.xml
@@ -0,0 +1,12 @@
+<?xml version='1.0'?>
+<!DOCTYPE elem [
+<!ELEMENT elem EMPTY>
+<!ATTLIST elem
+	xmlns     CDATA          #FIXED "http://www.schemaTest.org/xinclude-test"
+	foo       ENTITY         #IMPLIED
+	bar       NOTATION (jpg) #IMPLIED>
+<!NOTATION jpg SYSTEM "jpg">
+<!ENTITY image SYSTEM "foobar.jpg" NDATA jpg>
+]>
+<elem foo="image"
+      xmlns="http://www.schemaTest.org/xinclude-test"/>
diff --git a/tests/src/xinclude/tests/xinclude/included/unparsed.xml b/tests/src/xinclude/tests/xinclude/included/unparsed.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cb701436b555402ed2b2fa959d2f3c99ed2b0529
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/included/unparsed.xml
@@ -0,0 +1,7 @@
+<?xml version='1.0'?>
+<!DOCTYPE view [
+ <!ELEMENT view EMPTY>
+ <!NOTATION xjpg SYSTEM "jpg">
+ <!ENTITY image SYSTEM "gris.jpg" NDATA xjpg>
+ <!ATTLIST view sun ENTITY #IMPLIED>]>
+<view sun="image"/>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test01.xml b/tests/src/xinclude/tests/xinclude/tests/test01.xml
new file mode 100644
index 0000000000000000000000000000000000000000..543d2c163ba02d6e0e9ecc60f5f8f20a8315c295
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test01.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- This test doesn't test anything in particular.  But it is an example of a
+     somewhat complicated setup. -->
+<xit:myRoot	xmlns:xit="http://www.schemaTest.org/xinclude-test"
+            xmlns:xi="http://www.w3.org/2001/XInclude"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+	<xi:include xmlns:test01="http://www.test.org/test02" href="../included/invalid.xml">
+		<!-- comment -->
+		<xi:fallback xmlns:test02="http://www.test.org/test02">
+			<xi:include href="../included/invalid.xml">
+				<invalid1 xmlns:test03="http://www.test.org/test03">
+					<invalid2>				
+					</invalid2>
+				</invalid1>
+				<xi:fallback xmlns:test02="http://www.test.org/TEST02">
+					<child1 name="kid1"><desc>Text1</desc></child1>
+				</xi:fallback>
+			</xi:include>
+		</xi:fallback>
+	</xi:include>
+	<xi:include href="../included/invalid.xml">
+		<xi:fallback>
+			<child2 name="kid2"><desc>Text2</desc></child2>
+		</xi:fallback>
+	</xi:include>
+	
+	<!-- this tests a valid include -->
+	<xi:include href="../included/include01.xml" parse="xml">
+		<xi:fallback>
+			<!-- this should be ignored -->
+			<child2>Text2</child2>
+		</xi:fallback>	
+	</xi:include>
+	
+	<!-- this tests that idrefs still work when an ID from an included file is used -->
+	<select name="kid3"/>
+	
+	<!-- this tests when an included file has a DTD, but the base file doesn't -->
+	<xi:include href="../included/unparsed.xml"><xi:fallback/></xi:include>
+</xit:myRoot>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test02.xml b/tests/src/xinclude/tests/xinclude/tests/test02.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7c5aab384643eed516e428d10081cd8b71ae80d9
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test02.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that attributes from other namespaces on xi:include elements are ignored -->
+   <xi:include foo="bar"
+               parse="xml"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test03.xml b/tests/src/xinclude/tests/xinclude/tests/test03.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9a886db17b74a17faf645867d2751657cc814ffe
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test03.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that attributes from the XInclude namespace are ignored -->
+   <xi:include parse="xml"
+               href="../included/elem.xml"
+               xi:foo="bar"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test04.xml b/tests/src/xinclude/tests/xinclude/tests/test04.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f34792243ceadbe0d8db420e2fe4797a8e037c56
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test04.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- thats that parse="xml" works -->
+   <xi:include parse="xml"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test05.xml b/tests/src/xinclude/tests/xinclude/tests/test05.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f0f2e2e4dd81ce1ac78e0247dc62cc680e4560ea
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test05.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that parse="text" works -->
+   <xi:include parse="text"
+               href="../included/text.txt"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test06.xml b/tests/src/xinclude/tests/xinclude/tests/test06.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0261ba40a47753b8b82008315a22cf671a1fb5f5
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test06.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that parse="xml" is the default -->
+   <xi:include href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test07.xml b/tests/src/xinclude/tests/xinclude/tests/test07.xml
new file mode 100644
index 0000000000000000000000000000000000000000..98db57034d0ad9e637831c614445fe18451ba993
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test07.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that values for parse other than "xml" or "text" are invalid -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xxx"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test08.xml b/tests/src/xinclude/tests/xinclude/tests/test08.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d41c6419179558f68fcec0714bfad89e6fb911d4
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test08.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 0 fallbacks is not a failure when the include is successful -->
+   <xi:include parse="xml"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test09.xml b/tests/src/xinclude/tests/xinclude/tests/test09.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4e1d464ab40635c50605e468b5b56d2e87ef47ec
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test09.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 0 fallbacks is a failure when the include is unsuccessful -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/invalid.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test10.xml b/tests/src/xinclude/tests/xinclude/tests/test10.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a35af0650dd071b8740b0e530e6562f0ea010fc8
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test10.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that a fallback is used when the include is unsuccessful -->
+   <xi:include parse="xml"
+               href="../included/elem.xml">
+       <xi:fallback>
+           <elem/>
+       </xi:fallback>
+   </xi:include>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test11.xml b/tests/src/xinclude/tests/xinclude/tests/test11.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fc0c855791b47f1f042fc7d0cb16ba156f5d08e1
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test11.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 2 fallbacks cause a failure when the include is successful -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/elem.xml">
+       <xi:fallback/>
+       <xi:fallback/>
+   </xi:include>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test12.xml b/tests/src/xinclude/tests/xinclude/tests/test12.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bbbf8de774e770c92e16f3217fce16217e5f17eb
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test12.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that 2 fallbacks cause a failure when the include is unsuccessful -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/invalid.xml">
+       <xi:fallback/>
+       <xi:fallback/>
+   </xi:include>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test13.xml b/tests/src/xinclude/tests/xinclude/tests/test13.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8bc480dbee879c207d99eb65d20c826f7a5a2ff0
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test13.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that other elements from xi namespace are not allowed when include is successful -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/elem.xml">
+       <xi:other/>
+   </xi:include>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test14.xml b/tests/src/xinclude/tests/xinclude/tests/test14.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1bb790c2b853c821ef35912f5d2ffd0ac1b1eef4
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test14.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that other elements from xi namespace are not allowed when include is not successful -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/invalid.xml">
+       <xi:other/>
+   </xi:include>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test15.xml b/tests/src/xinclude/tests/xinclude/tests/test15.xml
new file mode 100644
index 0000000000000000000000000000000000000000..64bdeaeac62ecd67bd8ee3693da4dde081a9c4f3
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test15.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test that parser can be reused -->
+   <xi:include href="../included/elem.xml"/>
+   <xi:include href="../included/elem.xml"/>
+   <xi:include href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test16.xml b/tests/src/xinclude/tests/xinclude/tests/test16.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6313a2839341dc540fc284aaeaae0c2c802599e8
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test16.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- included file includes another file -->
+   <xi:include parse="xml"
+               href="../included/include.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test17.xml b/tests/src/xinclude/tests/xinclude/tests/test17.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cbb72763238df97f22499a4fef1823c66466ca61
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test17.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test that empty fallback is valid -->
+   <xi:include parse="xml"
+               href="../included/elem.xml">
+       <xi:fallback/>
+   </xi:include>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test18.xml b/tests/src/xinclude/tests/xinclude/tests/test18.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5994be05041485a03cb6003c617285ca065482d0
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test18.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- tests that fallback must be child of include -->
+   <!-- EXPECT FAILURE -->
+   <xi:fallback/>
+   <xi:include parse="xml"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test19.xml b/tests/src/xinclude/tests/xinclude/tests/test19.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e1e23b46a2cb8c90dd182af0a17090a84a77f5d4
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test19.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including XML as text -->
+   <xi:include parse="text"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test20.xml b/tests/src/xinclude/tests/xinclude/tests/test20.xml
new file mode 100644
index 0000000000000000000000000000000000000000..63e05f6ed408c9b13d9ab48cd662b680442521cb
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test20.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including file with different MIME-type as XML -->
+   <xi:include parse="xml"
+               href="../included/elem.jpg"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test21.xml b/tests/src/xinclude/tests/xinclude/tests/test21.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2a3c8b004be08b76373824564de51897d3d7914f
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test21.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including file with different MIME-type as text -->
+   <xi:include parse="text"
+               href="../included/elem.jpg"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test22.xml b/tests/src/xinclude/tests/xinclude/tests/test22.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ec58a326bdfe2eeccab8e3ec7f90f2b0eb5c544c
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test22.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- include not well formed XML -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/not-well-formed.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test23.xml b/tests/src/xinclude/tests/xinclude/tests/test23.xml
new file mode 100644
index 0000000000000000000000000000000000000000..afe8a04cbc0f50914f2c53fad1550b65a72ba5ab
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test23.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including the same document, but as text -->
+   <xi:include parse="text"
+               href="test24.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test24.xml b/tests/src/xinclude/tests/xinclude/tests/test24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2c6cb8865c8a6221efa130932624ee6717228c2b
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test24.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test that including the same document fails -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="test24.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test25.xml b/tests/src/xinclude/tests/xinclude/tests/test25.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d5c73d7f5188b048b54914b1308b98589e32060e
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test25.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including a resource that isn't there, when parse="xml" -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/invalid.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test26.xml b/tests/src/xinclude/tests/xinclude/tests/test26.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2c6407ea5110c2b00165d3ed2fb2255e721802be
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test26.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including a resource that isn't there, when parse="text" -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="text"
+               href="../included/invalid.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test27.xml b/tests/src/xinclude/tests/xinclude/tests/test27.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9d68f1058f4b3ee658ffd0d0af0e79fbacdbec4f
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test27.xml
@@ -0,0 +1,11 @@
+<?xml version='1.0'?>
+<!DOCTYPE x SYSTEM "tests.dtd">
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <elem bar="xjpg"/>
+   <!-- test including a document with a non-conflicting notation -->
+   <xi:include parse="xml"
+               href="../included/not.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test28.xml b/tests/src/xinclude/tests/xinclude/tests/test28.xml
new file mode 100644
index 0000000000000000000000000000000000000000..33eead08cf0c7338fc2d3528c252885077a811f9
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test28.xml
@@ -0,0 +1,11 @@
+<?xml version='1.0'?>
+<!DOCTYPE x SYSTEM "tests.dtd">
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <elem bar="jpg"/>
+   <!-- test including a document with a duplicate notation -->
+   <xi:include parse="xml"
+               href="../included/not.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test29.xml b/tests/src/xinclude/tests/xinclude/tests/test29.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2a6f1939bb7eabbc6d695239f21e1571c91f588d
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test29.xml
@@ -0,0 +1,12 @@
+<?xml version='1.0'?>
+<!DOCTYPE x SYSTEM "tests.dtd">
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <elem bar="jpg"/>
+   <!-- test including a document with a conflicting notation -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/not2.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test30.xml b/tests/src/xinclude/tests/xinclude/tests/test30.xml
new file mode 100644
index 0000000000000000000000000000000000000000..11912059e7015c90d0ad6aa4206018b842f52844
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test30.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE x SYSTEM "tests.dtd">
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including document with non-conflicting unparsed entity -->
+   <elem foo="ximage"/>
+   <xi:include parse="xml"
+               href="../included/ue.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test31.xml b/tests/src/xinclude/tests/xinclude/tests/test31.xml
new file mode 100644
index 0000000000000000000000000000000000000000..39a5fe38d660914fb16ff083da5fbe966e754061
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test31.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE x SYSTEM "tests.dtd">
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including document with duplicate unparsed entity -->
+   <elem foo="image"/>
+   <xi:include parse="xml"
+               href="../included/ue.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test32.xml b/tests/src/xinclude/tests/xinclude/tests/test32.xml
new file mode 100644
index 0000000000000000000000000000000000000000..466f069af23062a3d70c77f07695b62fafe1a06d
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test32.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE x SYSTEM "tests.dtd">
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- test including document with conflicting unparsed entity -->
+   <!-- Note: this actually fails because of the conflicting notation; I'm not
+        sure how to make a conflicting unparsed entity without having a conflicting
+        notation -->
+   <!-- EXPECT FAILURE -->
+   <elem foo="image"/>
+   <xi:include parse="xml"
+               href="../included/ue2.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test33.xml b/tests/src/xinclude/tests/xinclude/tests/test33.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1b78fcd53691d5c9df56c95cc1f0882791503df4
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test33.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- including document with a DTD, and unparsed entities and notations,
+        when the root document doesn't have one -->
+   <xi:include parse="xml"
+               href="../included/ue.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test34.xml b/tests/src/xinclude/tests/xinclude/tests/test34.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7584ca2dfff2bb475301b9d46ffec67eae5b9cbe
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test34.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd"
+   xml:base="../">
+   <!-- using xml:base on parent element to move back a directory -->
+   <xi:include parse="xml"
+               href="included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test35.xml b/tests/src/xinclude/tests/xinclude/tests/test35.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3efd5904ae8a1a5397da75d2bd195aa2856d4383
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test35.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on include element to move back a directory -->
+   <xi:include xml:base="../"
+               parse="xml"
+               href="included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test36.xml b/tests/src/xinclude/tests/xinclude/tests/test36.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8cf564cf9749c429838b202b97352c27a93322af
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test36.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test ../tests/tests.xsd"
+   xml:base="../included/">
+   <!-- using xml:base on parent element to move to the included directory -->
+   <xi:include parse="xml"
+               href="elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test37.xml b/tests/src/xinclude/tests/xinclude/tests/test37.xml
new file mode 100644
index 0000000000000000000000000000000000000000..95fd24010192d425959dca77a6ebffb9026ce74a
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test37.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on include element to move to the included directory -->
+   <xi:include xml:base="../included/"
+               parse="xml"
+               href="elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test38.xml b/tests/src/xinclude/tests/xinclude/tests/test38.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1c7d462b42ee6644daf1eeaf184e8c05101ecf94
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test38.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd"
+   xml:base="../">
+   <!-- using xml:base on both parent element and include element -->
+   <xi:include xml:base="included/"
+               parse="xml"
+               href="elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test39.xml b/tests/src/xinclude/tests/xinclude/tests/test39.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3d194a6fc41c64c7361efe27243e6436a4ae71bf
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test39.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd"
+   xml:base="../">
+   <!-- using xml:base on both parent element to move to wrong directory -->
+   <!-- EXPECT FAILURE -->
+   <xi:include parse="xml"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test40.xml b/tests/src/xinclude/tests/xinclude/tests/test40.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c7c35e8d26956d6bd8584f6b9054e38d22aa669f
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test40.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- using xml:base on include element to move to wrong directory -->
+   <!-- EXPECT FAILURE -->
+   <xi:include xml:base="../"
+               parse="xml"
+               href="../included/elem.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/test41.xml b/tests/src/xinclude/tests/xinclude/tests/test41.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7d379c75f0253493c7317c2d8e9330f835909385
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/test41.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<x xmlns="http://www.schemaTest.org/xinclude-test"
+   xmlns:xi="http://www.w3.org/2001/XInclude"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.schemaTest.org/xinclude-test tests.xsd">
+   <!-- final included element specifies an xml:base attribute, which will be
+        overwritten by the new xml:base attribute -->
+   <xi:include parse="xml"
+               href="../included/base.xml"/>
+</x>
diff --git a/tests/src/xinclude/tests/xinclude/tests/tests.dtd b/tests/src/xinclude/tests/xinclude/tests/tests.dtd
new file mode 100644
index 0000000000000000000000000000000000000000..aeb39e43e026cb7f869cd2c225ad717c74fbb720
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/tests.dtd
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding="UTF-8"?>
+<!NOTATION jpg SYSTEM "jpg">
+<!NOTATION xjpg SYSTEM "jpg">
+<!ENTITY image SYSTEM "foobar.jpg" NDATA jpg>
+<!ENTITY ximage SYSTEM "foobar.jpg" NDATA xjpg>
diff --git a/tests/src/xinclude/tests/xinclude/tests/tests.xsd b/tests/src/xinclude/tests/xinclude/tests/tests.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..61dbfe80ddf809cdf1cdb9541b83ce7233190d22
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/tests.xsd
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+	xmlns:xml="http://www.w3.org/XML/1998/namespace"
+	targetNamespace="http://www.schemaTest.org/xinclude-test"
+	xmlns:xit="http://www.schemaTest.org/xinclude-test">
+
+<import namespace="http://www.w3.org/XML/1998/namespace"
+        schemaLocation="./xmlbase.xsd"/>
+
+<!-- used for test01.xml -->
+<complexType name="childType" mixed="true">
+	<sequence>
+		<element name="desc">
+			<simpleType>
+				<restriction base="string">
+					<pattern value="Text\d"/>
+				</restriction>
+			</simpleType>
+		</element>
+	</sequence>
+	<attribute name="name" type="ID"/>
+	<attribute ref="xml:base"/>
+</complexType>
+
+<!-- used for test01.xml -->
+<complexType name="selectType">
+	<attribute name="name" type="IDREF"/>
+</complexType>
+
+<!-- used for test01.xml -->
+<element name="myRoot">
+	<complexType>
+		<sequence>
+			<element name="child1" type="xit:childType"/>
+			<element name="child2" type="xit:childType"/>		
+			<element name="child3" type="xit:childType"/>
+			<element name="select" type="xit:selectType"/>
+			<element name="view">
+				<complexType>
+					<attribute ref="xml:base"/>
+					<attribute name="sun" type="string"/>
+				</complexType>
+			</element>
+		</sequence>
+	</complexType>
+</element>
+
+<attribute name="foo" type="string"/>
+
+<attribute name="bar" type="string"/>
+
+<element name="elem">
+	<complexType>
+		<attribute name="foo" type="string"/>
+		<attribute name="bar" type="string"/>
+		<attribute ref="xml:base"/>
+	</complexType>
+</element>
+
+<element name="x">
+	<complexType mixed="true">
+		<sequence>
+			<element ref="xit:elem" minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+	</complexType>
+</element>
+
+</schema>
diff --git a/tests/src/xinclude/tests/xinclude/tests/xmlbase.xsd b/tests/src/xinclude/tests/xinclude/tests/xmlbase.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..1bd0e346c99927b81497162f737e3ce4dfa39722
--- /dev/null
+++ b/tests/src/xinclude/tests/xinclude/tests/xmlbase.xsd
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            xmlns:xml="http://www.w3.org/XML/1998/namespace"
+            targetNamespace="http://www.w3.org/XML/1998/namespace">
+
+<xsd:attribute name="base" type="xsd:anyURI">
+   <xsd:annotation>
+      <xsd:documentation>A definition for xml:base.</xsd:documentation>
+   </xsd:annotation>
+</xsd:attribute>
+
+</xsd:schema>