Use SAXParserFactory to support XInclude.
diff --git a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/DispatchDriver.java b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/DispatchDriver.java
index 1ce5a10..feb340a 100644
--- a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/DispatchDriver.java
+++ b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/DispatchDriver.java
@@ -18,6 +18,8 @@
 import java.io.UnsupportedEncodingException;
 import java.util.Locale;
 
+import javax.xml.parsers.SAXParser;
+
 import org.eclipse.actf.ai.xmlstore.nvdl.dispatcher.NVDLSAXDispatcher;
 import org.eclipse.actf.ai.xmlstore.nvdl.model.Location;
 import org.eclipse.actf.ai.xmlstore.nvdl.model.NVDLAction;
@@ -32,14 +34,13 @@
 import org.xml.sax.ErrorHandler;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
 
 
 /**
  * The <code>DispatchDriver</code> is a driver for validation.
  */
 public class DispatchDriver implements NVDLSAXDispatcher.DebugHandlerFactory {
-    private XMLReader reader;
+    private SAXParser parser;
     private NVDLSAXReader nvdlReader;
     private ErrorHandler eh;
     private String targetDirectory;
@@ -105,9 +106,9 @@
     }
 
     private void setupReader() throws Exception {
-        reader = NVDLSAXReader.newXMLReader();
-        reader.setErrorHandler(eh);
-        nvdlReader = new NVDLSAXReader(reader, eh);
+        parser = NVDLSAXReader.newSAXParser();
+        parser.getXMLReader().setErrorHandler(eh);
+        nvdlReader = new NVDLSAXReader(parser, eh);
     }
 
     void dispatch(String nvdlFile, String instanceFilename, String targetDirectory)
diff --git a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/ReconstructionDriver.java b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/ReconstructionDriver.java
index 1a0f54f..372dd22 100644
--- a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/ReconstructionDriver.java
+++ b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/ReconstructionDriver.java
@@ -17,6 +17,8 @@
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 
+import javax.xml.parsers.SAXParser;
+
 import org.eclipse.actf.ai.xmlstore.nvdl.model.NVDLRules;
 import org.eclipse.actf.ai.xmlstore.nvdl.reader.NVDLSAXReader;
 import org.eclipse.actf.ai.xmlstore.nvdl.rec.SAXReconstructor;
@@ -34,7 +36,7 @@
  * The <code>ReconstructionDriver</code> is a driver for reconstruction.
  */
 public class ReconstructionDriver {
-    private XMLReader reader;
+    private SAXParser parser;
     private NVDLSAXReader nvdlReader;
     private ErrorHandler eh;
     // private boolean debug;
@@ -103,9 +105,9 @@
     }
 
     private void setupReader() throws Exception {
-        reader = NVDLSAXReader.newXMLReader();
-        reader.setErrorHandler(eh);
-        nvdlReader = new NVDLSAXReader(reader, eh);
+        parser = NVDLSAXReader.newSAXParser();
+        parser.getXMLReader().setErrorHandler(eh);
+        nvdlReader = new NVDLSAXReader(parser, eh);
     }
 
     ReconstructionDriver(ErrorHandler eh,
diff --git a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/TestDriver.java b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/TestDriver.java
index 3ae02d0..e2d3bd4 100644
--- a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/TestDriver.java
+++ b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/TestDriver.java
@@ -14,13 +14,9 @@
 import java.io.File;
 import java.io.FilenameFilter;
 
+import javax.xml.parsers.SAXParser;
 import javax.xml.validation.ValidatorHandler;
 
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.XMLReaderFactory;
-
 import org.eclipse.actf.ai.xmlstore.nvdl.NVDLException;
 import org.eclipse.actf.ai.xmlstore.nvdl.dispatcher.NVDLSAXDispatcher;
 import org.eclipse.actf.ai.xmlstore.nvdl.model.NVDLRules;
@@ -28,15 +24,19 @@
 import org.eclipse.actf.ai.xmlstore.nvdl.util.DefaultErrorHandler;
 import org.eclipse.actf.ai.xmlstore.nvdl.util.IRIUtil;
 import org.eclipse.actf.ai.xmlstore.nvdl.util.Log;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
 
 public class TestDriver {
-    XMLReader xmlReader;
+    SAXParser parser;
     NVDLSAXReader r;
 
     TestDriver() throws SAXException {
-        this.xmlReader = NVDLSAXReader.newXMLReader();
-        xmlReader.setErrorHandler(DefaultErrorHandler.getErrorHandler());
-        this.r = new NVDLSAXReader(xmlReader);
+        this.parser = NVDLSAXReader.newSAXParser();
+        parser.getXMLReader().setErrorHandler(DefaultErrorHandler.getErrorHandler());
+        this.r = new NVDLSAXReader(parser);
     }
 
     static public class TestSet {
diff --git a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/ValidationDriver.java b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/ValidationDriver.java
index ea0c694..778ea21 100644
--- a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/ValidationDriver.java
+++ b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/driver/ValidationDriver.java
@@ -13,6 +13,8 @@
 
 import java.util.Locale;
 
+import javax.xml.parsers.SAXParser;
+
 import org.eclipse.actf.ai.xmlstore.nvdl.dispatcher.NVDLSAXDispatcher;
 import org.eclipse.actf.ai.xmlstore.nvdl.model.Location;
 import org.eclipse.actf.ai.xmlstore.nvdl.model.NVDLAction;
@@ -26,14 +28,13 @@
 import org.xml.sax.ContentHandler;
 import org.xml.sax.ErrorHandler;
 import org.xml.sax.Locator;
-import org.xml.sax.XMLReader;
 
 
 /**
  * The <code>ValidationDriver</code> is a driver for validation.
  */
 public class ValidationDriver implements NVDLSAXDispatcher.DebugHandlerFactory {
-    private XMLReader reader;
+    private SAXParser parser;
     private NVDLSAXReader nvdlReader;
     private ErrorHandler eh;
     private boolean debug;
@@ -62,9 +63,9 @@
     }
 
     private void setupReader() throws Exception {
-        reader = NVDLSAXReader.newXMLReader();
-        reader.setErrorHandler(eh);
-        nvdlReader = new NVDLSAXReader(reader, eh);
+        parser = NVDLSAXReader.newSAXParser();
+        parser.getXMLReader().setErrorHandler(eh);
+        nvdlReader = new NVDLSAXReader(parser, eh);
     }
 
     void validate(String nvdlFile, String instanceFile)
diff --git a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/reader/NVDLSAXReader.java b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/reader/NVDLSAXReader.java
index 32d5a84..bf2addd 100644
--- a/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/reader/NVDLSAXReader.java
+++ b/plugins/org.eclipse.actf.ai.xmlstore/src/org/eclipse/actf/ai/xmlstore/nvdl/reader/NVDLSAXReader.java
@@ -13,6 +13,9 @@
 
 import java.io.IOException;
 
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
 import javax.xml.validation.SchemaFactory;
 
 import org.eclipse.actf.ai.xmlstore.nvdl.NVDLException;
@@ -37,10 +40,11 @@
 import org.xml.sax.InputSource;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;
 import org.xml.sax.SAXParseException;
 import org.xml.sax.XMLReader;
 import org.xml.sax.helpers.DefaultHandler;
-import org.xml.sax.helpers.XMLReaderFactory;
 
 
 /**
@@ -1138,19 +1142,29 @@
         return rules;
     }
 
-    public static XMLReader newXMLReader() throws SAXException {
-        XMLReader reader = XMLReaderFactory.createXMLReader();
-        reader.setFeature("http://xml.org/sax/features/namespaces", true);
-        reader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
-        return reader;
+    public static SAXParser newSAXParser() throws SAXException {
+        SAXParserFactory pf = SAXParserFactory.newInstance();
+        try {
+			pf.setFeature("http://xml.org/sax/features/namespaces", true);
+	        pf.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
+	        pf.setXIncludeAware(true);
+	        return pf.newSAXParser();
+		} catch (ParserConfigurationException e) {
+			e.printStackTrace();
+			return null;
+		}
     }
 
-    public NVDLSAXReader(XMLReader reader) {
-        this(reader, null);
+    public NVDLSAXReader(SAXParser parser) throws SAXException {
+        this(parser, null);
+    }
+
+    public NVDLSAXReader(ErrorHandler eh) throws SAXException {
+        this(newSAXParser(), eh);
     }
 	
-    public NVDLSAXReader(XMLReader reader, ErrorHandler eh) {
-        this.reader = reader;
+    public NVDLSAXReader(SAXParser parser, ErrorHandler eh) throws SAXException {
+        this.reader = parser.getXMLReader();
         if (eh != null) {
             this.eh = eh;
         } else {