You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mu...@apache.org on 2025/08/06 12:14:47 UTC

(xalan-java) branch xalan-j_xslt3.0_mvn updated: committing implementation of xpath 3.1 URIQualifiedName and few other code changes

This is an automated email from the ASF dual-hosted git repository.

mukulg pushed a commit to branch xalan-j_xslt3.0_mvn
in repository https://gitbox.apache.org/repos/asf/xalan-java.git


The following commit(s) were added to refs/heads/xalan-j_xslt3.0_mvn by this push:
     new e8f1a45fe committing implementation of xpath 3.1 URIQualifiedName and few other code changes
e8f1a45fe is described below

commit e8f1a45fe282da38e505f576d15550fabe954ce2
Author: Mukul Gandhi <ga...@gmail.com>
AuthorDate: Wed Aug 6 17:44:21 2025 +0530

    committing implementation of xpath 3.1 URIQualifiedName and few other code changes
---
 README                                             |   8 +-
 .../apache/xalan/processor/XSLTAttributeDef.java   |  82 ++++++++++++++-
 .../org/apache/xalan/res/XSLTErrorResources.java   |   4 +
 src/main/java/org/apache/xalan/templates/AVT.java  |   2 +-
 .../org/apache/xalan/templates/ElemFunction.java   | 102 ++++++++++---------
 .../apache/xalan/transformer/TransformerImpl.java  |   9 +-
 .../xml/serializer/utils/SystemIDResolver.java     |   2 +-
 src/main/java/org/apache/xml/utils/QName.java      |   2 +-
 .../org/apache/xml/utils/SystemIDResolver.java     |   2 +-
 .../org/apache/xpath/compiler/FunctionTable.java   |   8 +-
 .../java/org/apache/xpath/compiler/Keywords.java   |   4 +-
 .../org/apache/xpath/compiler/XPathParser.java     |   2 +-
 .../xpath/composite/SequenceTypeSupport.java       |  15 +--
 .../apache/xpath/functions/FuncElemAvailable.java  | 111 +++++++++++++++++++++
 .../xpath/functions/FuncExtElementAvailable.java   |  95 ------------------
 .../xalan/tests/main/XalanXsl3TestSuite2.java      |   3 +-
 .../w3c/xslt3/result/attr/_as-test-set_result.xml  |   2 +-
 .../w3c/xslt3/result/attr/_avt-test-set_result.xml |   2 +-
 .../result/attr/_expand-text-test-set_result.xml   |   5 +-
 .../xslt3/result/attr/_match-test-set_result.xml   |   2 +-
 .../xslt3/result/attr/_select-test-set_result.xml  |   2 +-
 .../_xpath-default-namespace-test-set_result.xml   |   2 +-
 .../result/decl/_attribute-set-test-set_result.xml |   2 +-
 .../result/decl/_character-map-test-set_result.xml |   2 +-
 .../result/decl/_function-test-set_result.xml      |  24 ++---
 .../result/decl/_variable-test-set_result.xml      |   2 +-
 .../xslt3/result/expr/_axes-test-set_result.xml    |   2 +-
 .../result/expr/_castable-test-set_result.xml      |   2 +-
 .../result/expr/_expression-test-set_result.xml    |   2 +-
 .../w3c/xslt3/result/expr/_for-test-set_result.xml |   2 +-
 .../_higher-order-functions-test-set_result.xml    |   2 +-
 .../xslt3/result/expr/_math-test-set_result.xml    |   2 +-
 .../result/expr/_nodetest-test-set_result.xml      |   2 +-
 .../xslt3/result/expr/_path-test-set_result.xml    |   2 +-
 .../result/expr/_predicate-test-set_result.xml     |   2 +-
 .../result/fn/_deep-equal-test-set_result.xml      |   2 +-
 .../result/fn/_format-number-test-set_result.xml   |   2 +-
 .../w3c/xslt3/result/fn/_key-test-set_result.xml   |   2 +-
 .../xslt3/result/fn/_position-test-set_result.xml  |   2 +-
 .../w3c/xslt3/result/fn/_root-test-set_result.xml  |   2 +-
 .../insn/_analyze-string-test-set_result.xml       |   2 +-
 .../insn/_apply-templates-test-set_result.xml      |   2 +-
 .../result/insn/_attribute-test-set_result.xml     |   3 +-
 .../result/insn/_call-template-test-set_result.xml |   2 +-
 .../xslt3/result/insn/_choose-test-set_result.xml  |   2 +-
 .../xslt3/result/insn/_copy-test-set_result.xml    |   6 +-
 .../xslt3/result/insn/_element-test-set_result.xml |   2 +-
 .../insn/_for-each-group-test-set_result.xml       |   2 +-
 .../xslt3/result/insn/_iterate-test-set_result.xml |   2 +-
 .../result/insn/_sequence-test-set_result.xml      |   2 +-
 .../xslt3/result/insn/_sort-test-set_result.xml    |   2 +-
 .../w3c/xslt3/result/insn/_try-test-set_result.xml |   2 +-
 .../result/insn/_xsl-document-test-set_result.xml  |   6 +-
 .../xslt3/result/misc/_regex-test-set_result.xml   |   2 +-
 .../xslt3/result/type/_boolean-test-set_result.xml |   2 +-
 .../xslt3/result/type/_date-test-set_result.xml    |   2 +-
 .../xslt3/result/type/_node-test-set_result.xml    |   2 +-
 .../xslt3/result/type/_string-test-set_result.xml  |   2 +-
 .../result/w3c_xslt3_testsuite_xalan-j_result.xml  |   4 +-
 .../tests/xpath3/XPathUriQualifiedNameTests.java   |  90 +++++++++++++++++
 .../xpath_uri_qualified_name/gold/test1.out        |   6 ++
 .../xpath_uri_qualified_name/gold/test2.out        |   4 +
 .../xpath_uri_qualified_name/gold/test3.out        |   4 +
 .../xpath_uri_qualified_name/gold/test4.out        |   1 +
 .../resources/xpath_uri_qualified_name/test1.xml   |   6 ++
 .../resources/xpath_uri_qualified_name/test1.xsl   |  44 ++++++++
 .../resources/xpath_uri_qualified_name/test2.xsl   |  39 ++++++++
 .../resources/xpath_uri_qualified_name/test3.xsl   |  39 ++++++++
 .../resources/xpath_uri_qualified_name/test4.xsl   |  42 ++++++++
 69 files changed, 616 insertions(+), 232 deletions(-)

diff --git a/README b/README
index d882d681c..e240ce5c5 100644
--- a/README
+++ b/README
@@ -17,7 +17,7 @@
 
 Copyright 1999-2025 The Apache Software Foundation
 
-Document last modified : 2025-08-05
+Document last modified : 2025-08-06
 
 Authors:
    Gary Gregory <gg...@apache.org>
@@ -49,11 +49,11 @@ The Maven build results like following shall be produced:
 [INFO]  T E S T S
 [INFO] -------------------------------------------------------
 [INFO] Running org.apache.xalan.tests.main.AllXalanXSLT3Tests
-[INFO] Tests run: 1229, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 85.214 s - in org.apache.xalan.tests.main.AllXalanXSLT3Tests
+[INFO] Tests run: 1233, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 45.414 s - in org.apache.xalan.tests.main.AllXalanXSLT3Tests
 [INFO]
 [INFO] Results:
 [INFO]
-[INFO] Tests run: 1229, Failures: 0, Errors: 0, Skipped: 0
+[INFO] Tests run: 1233, Failures: 0, Errors: 0, Skipped: 0
 [INFO]
 [INFO]
 [INFO] --- jar:3.3.0:jar (default-jar) @ xalan-java ---
@@ -62,7 +62,7 @@ The Maven build results like following shall be produced:
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------
-[INFO] Total time:  03:29 min
+[INFO] Total time:  01:54 min
 
 
 If the user needs to run Xalan-J's XSLT 3.0 implementation via Java application code, the value of JVM's system property 
diff --git a/src/main/java/org/apache/xalan/processor/XSLTAttributeDef.java b/src/main/java/org/apache/xalan/processor/XSLTAttributeDef.java
index 87ac73eab..050a225cb 100644
--- a/src/main/java/org/apache/xalan/processor/XSLTAttributeDef.java
+++ b/src/main/java/org/apache/xalan/processor/XSLTAttributeDef.java
@@ -36,6 +36,7 @@ import org.apache.xalan.templates.Constants;
 import org.apache.xalan.templates.ElemForEachGroup;
 import org.apache.xalan.templates.ElemTemplateElement;
 import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
+import org.apache.xml.utils.NamespaceSupport2;
 import org.apache.xml.utils.QName;
 import org.apache.xml.utils.StringToIntTable;
 import org.apache.xml.utils.StringVector;
@@ -834,6 +835,8 @@ public class XSLTAttributeDef
     		}
     	 }
       }
+                  
+      value = processUriQualifiedName(handler, value);
       
       expr = handler.createXPath(value, owner);  
 
@@ -923,6 +926,8 @@ public class XSLTAttributeDef
      	 		                                                             + "An erroneous pattern string used within the stylesheet is " + value + ".");   
       }
       
+      value = processUriQualifiedName(handler, value);
+      
       XPath pattern = handler.createMatchPatternXPath(value, owner);
 
       return pattern;
@@ -1018,8 +1023,27 @@ public class XSLTAttributeDef
   {
 
      try 
-        {	
-   	      QName qname = new QName(value, handler, true);
+        {
+    	  QName qname = null;    	  
+    	  if (value.startsWith("Q{")) {
+    		 // Support for XPath 3.1 URI qualified names    
+    		 int i = value.indexOf('}');
+    		 if (i > 2) {
+    		    String nsUri = value.substring(2, i);
+    		    String localName = value.substring(i + 1);
+    		    qname = new QName(nsUri, localName, true);
+    		 }
+    		 
+    		 if (qname == null) {
+    			handleError(handler,XSLTErrorResources.ER_ABSENT_NAMESPACE_URI, new Object[] {owner.getNodeName()}, null);
+    			
+    			return null; 
+        	 }
+    	  }
+    	  else {
+   	         qname = new QName(value, handler, true);
+    	  }    	      	  
+   	      
           return qname;
         }
         catch (IllegalArgumentException ie)
@@ -1824,4 +1848,58 @@ public class XSLTAttributeDef
 	  return result;
   }
   
+  /**
+   * Method definition, to do transformation of the supplied string value,
+   * to support XPath 3.1 URI qualified names.
+   * 
+   * URIQualifiedName	   ::=   	BracedURILiteral NCName
+   * BracedURILiteral	   ::=   	"Q" "{" [^{}]* "}"
+   * 
+   * @param handler							Xalan-J StylesheetHandler object						
+   * @param strValue					    Supplied string value, that is either
+   *                                        an XPath expression string or an XPath 
+   *                                        match pattern.
+   * @return								String value after applying URIQualifiedName 
+   * 										transformation. 
+   */
+  private String processUriQualifiedName(StylesheetHandler handler, String strValue) {
+	  
+	  String result = strValue;
+	  
+	  NamespaceSupport2 nsSupport = (NamespaceSupport2)(handler.getNamespaceSupport());
+	  /**
+	   * The following code, replaces each occurrence of substring like Q{uri}abc 
+	   * within the supplied string with replacement text prefix:abc (the prefix value 
+	   * is a random string), and registers the prefix & uri mapping within Xalan-J 
+	   * NamespaceSupport2 object if the relevant namespace binding is not already 
+	   * available within NamespaceSupport2 object.  
+	   */
+	  int i = result.indexOf("Q{");      
+	  while (i > -1) {
+		  int j = result.indexOf('}');
+		  if (i < j) {
+			  String nsUri = result.substring(i + 2, j);
+			  String str1 = String.valueOf(Math.random());
+			  int idx = str1.indexOf('.');
+			  String nsPrefix = "a1_" + str1.substring(idx + 1, idx + 5);
+			  if (nsSupport.getPrefix(nsUri) == null) {    		    
+				  nsSupport.declarePrefix(nsPrefix, nsUri);
+			  }
+			  else {
+				  nsPrefix = nsSupport.getPrefix(nsUri);  
+			  }
+			  String strPrefix1 = "";
+			  if (i > 0) {
+				  strPrefix1 = result.substring(0, i);
+			  }
+			  String substStr1 = nsPrefix + ":";
+			  result = strPrefix1 + substStr1 + result.substring(j + 1);
+
+			  i = result.indexOf("Q{");
+		  }
+	  }
+	  
+	  return result;
+  }
+  
 }
diff --git a/src/main/java/org/apache/xalan/res/XSLTErrorResources.java b/src/main/java/org/apache/xalan/res/XSLTErrorResources.java
index 6c0bdaeea..f7a036a5a 100644
--- a/src/main/java/org/apache/xalan/res/XSLTErrorResources.java
+++ b/src/main/java/org/apache/xalan/res/XSLTErrorResources.java
@@ -347,6 +347,7 @@ public class XSLTErrorResources extends ListResourceBundle
   public static final String ER_ATTRIB_VALUE_NOT_RECOGNIZED = 
 	 "ER_ATTRIB_VALUE_NOT_RECOGNIZED";
   public static final String ER_NULL_URI_NAMESPACE = "ER_NULL_URI_NAMESPACE";
+  public static final String ER_ABSENT_NAMESPACE_URI = "ER_ABSENT_NAMESPACE_URI";
   public static final String ER_NUMBER_TOO_BIG = "ER_NUMBER_TOO_BIG";
   public static final String  ER_CANNOT_FIND_SAX1_DRIVER = 
 	 "ER_CANNOT_FIND_SAX1_DRIVER";
@@ -1007,6 +1008,9 @@ public class XSLTErrorResources extends ListResourceBundle
 
     { ER_NULL_URI_NAMESPACE,
      "Attempting to generate a namespace prefix with a null URI"},
+    
+    { ER_ABSENT_NAMESPACE_URI,
+     "XTSE0740 : An XSL {0}''s name attribute doesn''t have a URI reference"},
 
     { ER_NUMBER_TOO_BIG,
      "Attempting to format a number bigger than the largest Long integer"},
diff --git a/src/main/java/org/apache/xalan/templates/AVT.java b/src/main/java/org/apache/xalan/templates/AVT.java
index ce732ffd9..b25319ce9 100644
--- a/src/main/java/org/apache/xalan/templates/AVT.java
+++ b/src/main/java/org/apache/xalan/templates/AVT.java
@@ -292,7 +292,7 @@ public class AVT implements java.io.Serializable, XSLTVisitable
 
                           // What's another curly doing here?
                           error = XSLMessages.createMessage(
-                                                            XSLTErrorResources.ER_NO_CURLYBRACE, null);  //"Error: Can not have \"{\" within expression.";
+                                                            XSLTErrorResources.ER_NO_CURLYBRACE, null);  //"Error: Can not have \"{\" within expression";
                           
                           lookahead = null;  // breaks out of inner while loop
 
diff --git a/src/main/java/org/apache/xalan/templates/ElemFunction.java b/src/main/java/org/apache/xalan/templates/ElemFunction.java
index 03e7e482d..aee24bb5a 100644
--- a/src/main/java/org/apache/xalan/templates/ElemFunction.java
+++ b/src/main/java/org/apache/xalan/templates/ElemFunction.java
@@ -428,54 +428,60 @@ public class ElemFunction extends ElemTemplate
     	 }    	 
       }
       
-      if (xslParamMap.size() > 0) {
-    	  /**
-    	   * Add all of the xsl:function parameter value mappings to xpath context's
-    	   * variable stack, after which the XSL instructions after xsl:param declarations
-    	   * can dereference those parameters.
-    	   */
-          
-    	  VariableStack varStack = xctxt.getVarStack();
-    	  
-          varStack.unlink();
-          int argsFrame = varStack.link(xslParamMap.size());            
-                    
-          int paramIdx = 0;
-          for (ElemTemplateElement elem = getFirstChildElem(); elem != null; 
-                                                                  elem = elem.getNextSiblingElem()) {
-              if (elem.getXSLToken() == Constants.ELEMNAME_PARAMVARIABLE) {
-                 XObject argValue = argSequence.item(paramIdx);                 
-                 XObject argConvertedVal = null;
-                 String paramAsAttrStrVal = ((ElemParam)elem).getAs();
-                 
-                 if (paramAsAttrStrVal != null) {
-                	List prefixTable = elem.getPrefixTable();
-                    argConvertedVal = getParamValueAsAttributeProcessing(argValue, funcLocalName, funcNameSpaceUri, paramIdx, 
-                    		                                             prefixTable, paramAsAttrStrVal, transformer, xctxt);
-                 }
-                 else {
-                	argConvertedVal = argValue;  
-                 }
-                 
-                 if (argConvertedVal instanceof ResultSequence) {                
-                    XMLNodeCursorImpl nodeSet = XslTransformEvaluationHelper.getXNodeSetFromResultSequence((ResultSequence)argConvertedVal, 
-                                                                                                                                xctxt);
-                    if (nodeSet != null) {
-                       argConvertedVal = nodeSet;  
-                    }
-                 }
-                 
-                 varStack.setLocalVariable(paramIdx, argConvertedVal, argsFrame);
-                 paramIdx++;
-              }
-              else {
-                 break; 
-              }
-          }                    
-      }            
+      VariableStack varStack = xctxt.getVarStack();            
+      int argsFrame = 0;
       
-      // Get xsl:function's result, before processing with "as" attribute
-      result = getXslFunctionResult(transformer, xctxt);
+      try {
+    	  if (xslParamMap.size() > 0) {
+    		  /**
+    		   * Add all of the xsl:function parameter value mappings to XPath context's
+    		   * variable stack, after which the XSL instructions following xsl:param 
+    		   * declarations can dereference those parameters.
+    		   */
+    		  argsFrame = varStack.link(xslParamMap.size());
+
+    		  int paramIdx = 0;
+    		  for (ElemTemplateElement elem = getFirstChildElem(); elem != null; 
+    				                                                  elem = elem.getNextSiblingElem()) {
+    			  if (elem.getXSLToken() == Constants.ELEMNAME_PARAMVARIABLE) {
+    				  XObject argValue = argSequence.item(paramIdx);                 
+    				  XObject argConvertedVal = null;
+    				  String paramAsAttrStrVal = ((ElemParam)elem).getAs();
+
+    				  if (paramAsAttrStrVal != null) {
+    					  List prefixTable = elem.getPrefixTable();
+    					  argConvertedVal = getParamValueAsAttributeProcessing(argValue, funcLocalName, funcNameSpaceUri, paramIdx, 
+    							                                               prefixTable, paramAsAttrStrVal, transformer, xctxt);
+    				  }
+    				  else {
+    					  argConvertedVal = argValue;  
+    				  }
+
+    				  if (argConvertedVal instanceof ResultSequence) {                
+    					  XMLNodeCursorImpl nodeSet = XslTransformEvaluationHelper.getXNodeSetFromResultSequence(
+    							                                                                              (ResultSequence)argConvertedVal, xctxt);
+    					  if (nodeSet != null) {
+    						  argConvertedVal = nodeSet;  
+    					  }
+    				  }
+
+    				  varStack.setLocalVariable(paramIdx, argConvertedVal, argsFrame);
+    				  paramIdx++;
+    			  }
+    			  else {
+    				  break; 
+    			  }
+    		  }                    
+    	  }            
+
+    	  // Get xsl:function's result, before processing with "as" attribute
+    	  result = getXslFunctionResult(transformer, xctxt);
+      }
+      finally {
+    	  if (xslParamMap.size() > 0) {
+    		  varStack.unlink(); 
+    	  }    	  
+      }
                         
       XObject funcResultConvertedVal = result;
       
@@ -1155,7 +1161,7 @@ public class ElemFunction extends ElemTemplate
 			  throw new TransformerException("XPTY0004 : An xsl:function call argument at position " + (paramIdx + 1) + " for "
 																					  + "function {" + funcNameSpaceUri + "}" + funcLocalName + ", doesn't "
 																					  + "match the declared parameter type " + paramAsAttrStrVal + ".", srcLocator); 
-		  }
+		  }		  
 	  }
 	  catch (TransformerException ex) {
 		  if ((SequenceTypeSupport.INLINE_FUNCTION_PARAM_TYPECHECK_COUNT_ERROR).equals(ex.getMessage())) {
diff --git a/src/main/java/org/apache/xalan/transformer/TransformerImpl.java b/src/main/java/org/apache/xalan/transformer/TransformerImpl.java
index e7d204cf0..0a1257dbf 100644
--- a/src/main/java/org/apache/xalan/transformer/TransformerImpl.java
+++ b/src/main/java/org/apache/xalan/transformer/TransformerImpl.java
@@ -548,7 +548,14 @@ public class TransformerImpl extends Transformer
   public boolean elementAvailable(String ns, String elemName)
           throws javax.xml.transform.TransformerException
   {
-    return getExtensionsTable().elementAvailable(ns, elemName);   
+	  boolean result = false;
+	  
+	  ExtensionsTable extTable = getExtensionsTable();
+	  if (extTable != null) {
+		 result = extTable.elementAvailable(ns, elemName);
+	  }
+	  
+      return result;   
   }
    
   public Object extFunction(String ns, String funcName, 
diff --git a/src/main/java/org/apache/xml/serializer/utils/SystemIDResolver.java b/src/main/java/org/apache/xml/serializer/utils/SystemIDResolver.java
index 43dd88216..c967cac91 100644
--- a/src/main/java/org/apache/xml/serializer/utils/SystemIDResolver.java
+++ b/src/main/java/org/apache/xml/serializer/utils/SystemIDResolver.java
@@ -171,7 +171,7 @@ public final class SystemIDResolver
   {
     if(!isAbsolutePath(systemId))
       return false;
-    // On Windows, an absolute path starts with "[drive_letter]:\".
+    // On Windows, an absolute path starts with "[drive_letter]:\"
     if (systemId.length() > 2 
         && systemId.charAt(1) == ':'
         && Character.isLetter(systemId.charAt(0))
diff --git a/src/main/java/org/apache/xml/utils/QName.java b/src/main/java/org/apache/xml/utils/QName.java
index 47cbd4785..372cbc7a2 100644
--- a/src/main/java/org/apache/xml/utils/QName.java
+++ b/src/main/java/org/apache/xml/utils/QName.java
@@ -42,7 +42,7 @@ import org.w3c.dom.Element;
  */
 public class QName implements java.io.Serializable
 {
-    static final long serialVersionUID = 467434581652829920L;
+  static final long serialVersionUID = 467434581652829920L;
 
   /**
    * The local name.
diff --git a/src/main/java/org/apache/xml/utils/SystemIDResolver.java b/src/main/java/org/apache/xml/utils/SystemIDResolver.java
index 4668cb00b..b1c7dcd35 100644
--- a/src/main/java/org/apache/xml/utils/SystemIDResolver.java
+++ b/src/main/java/org/apache/xml/utils/SystemIDResolver.java
@@ -164,7 +164,7 @@ public class SystemIDResolver
   {
     if(!isAbsolutePath(systemId))
       return false;
-    // On Windows, an absolute path starts with "[drive_letter]:\".
+    // On Windows, an absolute path starts with "[drive_letter]:\"
     if (systemId.length() > 2 
         && systemId.charAt(1) == ':'
         && Character.isLetter(systemId.charAt(0))
diff --git a/src/main/java/org/apache/xpath/compiler/FunctionTable.java b/src/main/java/org/apache/xpath/compiler/FunctionTable.java
index 72ae6d746..d08f01dfc 100644
--- a/src/main/java/org/apache/xpath/compiler/FunctionTable.java
+++ b/src/main/java/org/apache/xpath/compiler/FunctionTable.java
@@ -30,13 +30,13 @@ import org.apache.xpath.functions.FuncDoc;
 import org.apache.xpath.functions.Function;
 
 /**
- * The function table for XPath 3.1.
+ * The function table for XPath 3.1 and XSLT 3.0.
  * 
  * @author Scott Boag <sc...@us.ibm.com>
  * @author Christine Li <jy...@apache.org>
  * 
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XPath 3.1 specific changes, to this class)
+ *         (XPath 3.1 and XSLT 3.0 specific changes, to this class)
  */
 public class FunctionTable
 {
@@ -710,7 +710,7 @@ public class FunctionTable
 	  m_functions[FUNC_CONCAT] = org.apache.xpath.functions.string.FuncConcat.class;
 	  m_functions[FUNC_SYSTEM_PROPERTY] = org.apache.xpath.functions.FuncSystemProperty.class;
 	  m_functions[FUNC_EXT_FUNCTION_AVAILABLE] = org.apache.xpath.functions.FuncExtFunctionAvailable.class;
-	  m_functions[FUNC_EXT_ELEM_AVAILABLE] = org.apache.xpath.functions.FuncExtElementAvailable.class;
+	  m_functions[FUNC_EXT_ELEM_AVAILABLE] = org.apache.xpath.functions.FuncElemAvailable.class;
 	  m_functions[FUNC_SUBSTRING] = org.apache.xpath.functions.string.FuncSubstring.class;
 	  m_functions[FUNC_STRING_LENGTH] = org.apache.xpath.functions.string.FuncStringLength.class;
 	  m_functions[FUNC_DOCLOCATION] = org.apache.xpath.functions.FuncDoclocation.class;
@@ -912,7 +912,7 @@ public class FunctionTable
 	  m_functionId.put(Keywords.FUNC_CONCAT_STRING, new Integer(FunctionTable.FUNC_CONCAT));
 	  m_functionId.put(Keywords.FUNC_SYSTEM_PROPERTY_STRING, new Integer(FunctionTable.FUNC_SYSTEM_PROPERTY));
 	  m_functionId.put(Keywords.FUNC_EXT_FUNCTION_AVAILABLE_STRING, new Integer(FunctionTable.FUNC_EXT_FUNCTION_AVAILABLE));
-	  m_functionId.put(Keywords.FUNC_EXT_ELEM_AVAILABLE_STRING, new Integer(FunctionTable.FUNC_EXT_ELEM_AVAILABLE));
+	  m_functionId.put(Keywords.FUNC_ELEM_AVAILABLE_STRING, new Integer(FunctionTable.FUNC_EXT_ELEM_AVAILABLE));
 	  m_functionId.put(Keywords.FUNC_SUBSTRING_STRING, new Integer(FunctionTable.FUNC_SUBSTRING));
 	  m_functionId.put(Keywords.FUNC_STRING_LENGTH_STRING, new Integer(FunctionTable.FUNC_STRING_LENGTH));
 	  m_functionId.put(Keywords.FUNC_UNPARSED_ENTITY_URI_STRING, new Integer(FunctionTable.FUNC_UNPARSED_ENTITY_URI));
diff --git a/src/main/java/org/apache/xpath/compiler/Keywords.java b/src/main/java/org/apache/xpath/compiler/Keywords.java
index 3069a16bf..a477e9f17 100644
--- a/src/main/java/org/apache/xpath/compiler/Keywords.java
+++ b/src/main/java/org/apache/xpath/compiler/Keywords.java
@@ -24,7 +24,7 @@ import java.util.Hashtable;
 
 /**
  * Table of strings to operation code lookups
- * to support implementation of XPath.
+ * to support implementation of XSLT and XPath.
  * 
  * @author Scott Boag <sc...@us.ibm.com>
  * @author Gary L Peskin <ga...@apache.org>
@@ -216,7 +216,7 @@ public class Keywords
   public static final String FUNC_EXT_FUNCTION_AVAILABLE_STRING = "function-available";
 
   /** element-available function string (XSLT). */
-  public static final String FUNC_EXT_ELEM_AVAILABLE_STRING = "element-available";
+  public static final String FUNC_ELEM_AVAILABLE_STRING = "element-available";
 
   /** substring function string. */
   public static final String FUNC_SUBSTRING_STRING = "substring";
diff --git a/src/main/java/org/apache/xpath/compiler/XPathParser.java b/src/main/java/org/apache/xpath/compiler/XPathParser.java
index 4429ae86e..b07d5f20d 100644
--- a/src/main/java/org/apache/xpath/compiler/XPathParser.java
+++ b/src/main/java/org/apache/xpath/compiler/XPathParser.java
@@ -4356,7 +4356,7 @@ public class XPathParser
        matchFound = true;
     }
     else if ((m_tokenChar == '$') && (lookahead('?', 2))) {
-       // XPath parse for unary lookup operation on map & array references.       
+       // XPath parse for unary lookup operator on map & array references       
        
        // e.g, $map1?a (get xdm map's entry value, for key named 'a'), 
        // $array1?3 (get xdm item for array index 3).
diff --git a/src/main/java/org/apache/xpath/composite/SequenceTypeSupport.java b/src/main/java/org/apache/xpath/composite/SequenceTypeSupport.java
index 5842cf10d..3a32f1822 100644
--- a/src/main/java/org/apache/xpath/composite/SequenceTypeSupport.java
+++ b/src/main/java/org/apache/xpath/composite/SequenceTypeSupport.java
@@ -689,12 +689,14 @@ public class SequenceTypeSupport {
 	            	   if (srcValue instanceof XMLNodeCursorImpl) {
 	            		  XMLNodeCursorImpl nodeSet1 = (XMLNodeCursorImpl)srcValue;
 	            		  DTMManager dtmMgr = nodeSet1.getDTMManager();
-	            		  int nodeHandle = nodeSet1.nextNode();
-	            		  DTM dtm = dtmMgr.getDTM(nodeHandle);
-	            		  if (dtm.getNodeType(nodeHandle) == DTM.DOCUMENT_NODE) {
-	            			 result = srcValue;
-	            			 
-	            			 return result;
+	            		  int nodeHandle = nodeSet1.getCurrentNode();
+	            		  if (nodeHandle != DTM.NULL) {
+	            			  DTM dtm = dtmMgr.getDTM(nodeHandle);
+	            			  if (dtm.getNodeType(nodeHandle) == DTM.DOCUMENT_NODE) {  
+	            				  result = srcValue;
+
+	            				  return result;
+	            			  }
 	            		  }
 	            	   }
 	            	}	            	
@@ -1239,7 +1241,6 @@ public class SequenceTypeSupport {
              			 SequenceTypeData keySeqTypeData = sequenceTypeMapTest.getKeySequenceTypeData();
              			 SequenceTypeData valueSeqTypeData = sequenceTypeMapTest.getValueSequenceTypeData();
              			 XObject mapKeyValTypeCheckResult = SequenceTypeSupport.castXdmValueToAnotherType(mapKey, null, keySeqTypeData, xctxt);
-             			 String mapSequenceTypeStr = (sequenceTypeXPathExprStr != null) ? sequenceTypeXPathExprStr : "";
              			 if (mapKeyValTypeCheckResult == null) {             				
              				throw new TransformerException("XPTY0004 : An XPath map entry with key '" + keyStrVal + "', doesn't have a value of specified XPath sequence type."); 
              			 }
diff --git a/src/main/java/org/apache/xpath/functions/FuncElemAvailable.java b/src/main/java/org/apache/xpath/functions/FuncElemAvailable.java
new file mode 100644
index 000000000..e582482c8
--- /dev/null
+++ b/src/main/java/org/apache/xpath/functions/FuncElemAvailable.java
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*
+ * $Id$
+ */
+package org.apache.xpath.functions;
+
+import org.apache.xalan.templates.Constants;
+import org.apache.xalan.transformer.TransformerImpl;
+import org.apache.xml.utils.QName;
+import org.apache.xpath.ExtensionsProvider;
+import org.apache.xpath.XPathContext;
+import org.apache.xpath.objects.XBoolean;
+import org.apache.xpath.objects.XObject;
+
+/**
+ * Implementation of XSLT 3.0 function fn:element-available.
+ * 
+ * An fn:element-available function can check for, both
+ * stylesheet elements in XSLT namespace or in other extension 
+ * namespaces.
+ * 
+ * @xsl.usage advanced
+ */
+public class FuncElemAvailable extends FunctionOneArg
+{
+   static final long serialVersionUID = -472533699257968546L;
+
+  /**
+   * Implementation of the function. The function must return
+   * a valid object.
+   * 
+   * @param xctxt The current execution context.
+   * @return A valid XObject.
+   *
+   * @throws javax.xml.transform.TransformerException
+   */
+  public XObject execute(XPathContext xctxt) throws javax.xml.transform.TransformerException
+  {
+    
+    String namespace = null;
+    String methName = null;
+
+    String fullName = m_arg0.execute(xctxt).str();
+    
+    if (fullName.startsWith("Q{")) {
+    	 // Support for XPath 3.1 URI qualified names 
+		 int i = fullName.indexOf('}');
+		 if (i > 2) {
+		    namespace = fullName.substring(2, i);
+		    methName = fullName.substring(i + 1);
+		 }		 		 
+	}
+    else {
+    	int indexOfNSSep = fullName.indexOf(':');
+    	String prefix = null;    	
+    	if (indexOfNSSep < 0)
+    	{
+    		prefix = "";
+    		namespace = Constants.S_XSLNAMESPACEURL;
+    		methName = fullName;
+    	}
+    	else
+    	{
+    		prefix = fullName.substring(0, indexOfNSSep);
+    		namespace = xctxt.getNamespaceContext().getNamespaceForPrefix(prefix);
+    		if (null == namespace)
+    		   return XBoolean.S_FALSE;
+    		methName = fullName.substring(indexOfNSSep + 1);
+    	}
+    }
+
+    if ((Constants.S_XSLNAMESPACEURL).equals(namespace) || 
+    	(Constants.S_BUILTIN_EXTENSIONS_URL).equals(namespace))
+    {
+    	try
+    	{
+    		TransformerImpl transformer = (TransformerImpl) xctxt.getOwnerObject();
+    		return transformer.getStylesheet().getAvailableElements().containsKey(
+															    				new QName(namespace, methName))
+															    				? XBoolean.S_TRUE : XBoolean.S_FALSE;
+    	}
+    	catch (Exception e)
+    	{
+    		return XBoolean.S_FALSE;
+    	}
+    }
+    else
+    {
+    	//dml
+    	ExtensionsProvider extProvider = (ExtensionsProvider)xctxt.getOwnerObject();
+
+    	return extProvider.elementAvailable(namespace, methName) ? XBoolean.S_TRUE : XBoolean.S_FALSE;
+    }
+  }
+}
diff --git a/src/main/java/org/apache/xpath/functions/FuncExtElementAvailable.java b/src/main/java/org/apache/xpath/functions/FuncExtElementAvailable.java
deleted file mode 100644
index 82380aa4b..000000000
--- a/src/main/java/org/apache/xpath/functions/FuncExtElementAvailable.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id$
- */
-package org.apache.xpath.functions;
-
-import org.apache.xalan.templates.Constants;
-import org.apache.xalan.transformer.TransformerImpl;
-import org.apache.xml.utils.QName;
-import org.apache.xpath.ExtensionsProvider;
-import org.apache.xpath.XPathContext;
-import org.apache.xpath.objects.XBoolean;
-import org.apache.xpath.objects.XObject;
-
-/**
- * Execute the ExtElementAvailable() function.
- * @xsl.usage advanced
- */
-public class FuncExtElementAvailable extends FunctionOneArg
-{
-    static final long serialVersionUID = -472533699257968546L;
-
-  /**
-   * Execute the function.  The function must return
-   * a valid object.
-   * @param xctxt The current execution context.
-   * @return A valid XObject.
-   *
-   * @throws javax.xml.transform.TransformerException
-   */
-  public XObject execute(XPathContext xctxt) throws javax.xml.transform.TransformerException
-  {
-
-    String prefix;
-    String namespace;
-    String methName;
-
-    String fullName = m_arg0.execute(xctxt).str();
-    int indexOfNSSep = fullName.indexOf(':');
-
-    if (indexOfNSSep < 0)
-    {
-      prefix = "";
-      namespace = Constants.S_XSLNAMESPACEURL;
-      methName = fullName;
-    }
-    else
-    {
-      prefix = fullName.substring(0, indexOfNSSep);
-      namespace = xctxt.getNamespaceContext().getNamespaceForPrefix(prefix);
-      if (null == namespace)
-        return XBoolean.S_FALSE;
-      methName= fullName.substring(indexOfNSSep + 1);
-    }
-
-    if (namespace.equals(Constants.S_XSLNAMESPACEURL)
-    ||  namespace.equals(Constants.S_BUILTIN_EXTENSIONS_URL))
-    {
-      try
-      {
-        TransformerImpl transformer = (TransformerImpl) xctxt.getOwnerObject();
-        return transformer.getStylesheet().getAvailableElements().containsKey(
-                                                            new QName(namespace, methName))
-               ? XBoolean.S_TRUE : XBoolean.S_FALSE;
-      }
-      catch (Exception e)
-      {
-        return XBoolean.S_FALSE;
-      }
-    }
-    else
-    {
-      //dml
-      ExtensionsProvider extProvider = (ExtensionsProvider)xctxt.getOwnerObject();
-      return extProvider.elementAvailable(namespace, methName)
-             ? XBoolean.S_TRUE : XBoolean.S_FALSE;
-    }
-  }
-}
diff --git a/src/test/java/org/apache/xalan/tests/main/XalanXsl3TestSuite2.java b/src/test/java/org/apache/xalan/tests/main/XalanXsl3TestSuite2.java
index 8ec8ff414..de9d5277f 100644
--- a/src/test/java/org/apache/xalan/tests/main/XalanXsl3TestSuite2.java
+++ b/src/test/java/org/apache/xalan/tests/main/XalanXsl3TestSuite2.java
@@ -70,6 +70,7 @@ import org.apache.xalan.tests.xpath3.XPathSequenceFunctionTests;
 import org.apache.xalan.tests.xpath3.XPathSequenceTraversalTests;
 import org.apache.xalan.tests.xpath3.XPathSimpleMapOperatorTests;
 import org.apache.xalan.tests.xpath3.XPathStringConcatExprTests;
+import org.apache.xalan.tests.xpath3.XPathUriQualifiedNameTests;
 import org.apache.xalan.tests.xpath3.XsDurationComponentExtractionFunctionTests;
 import org.apache.xalan.tests.xpath3.XsGregorianTypeTests;
 import org.apache.xalan.tests.xslt3.XslAnalyzeStringTests;
@@ -136,7 +137,7 @@ import org.junit.runners.Suite.SuiteClasses;
                 FnEmptyTests.class, FnFunctionNameTests.class, FnFunctionArityTests.class, XPathDefaultNamespaceTests.class,
                 XPathDefaultNamespaceMiscTests.class, XslFunctionMiscTests.class, XslIncludeTests.class, 
                 XslIncludeMiscTests.class, FnNormalizeUnicodeTests.class, XslExpandTextTests.class,
-                XslJsonValidationTests.class })
+                XslJsonValidationTests.class, XPathUriQualifiedNameTests.class })
 public class XalanXsl3TestSuite2 {
 
 }
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
index a2829dd7a..e52f7cfa6 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:44:52Z" fail="51" name="as" pass="53" skipped="4" statusUnknown="1" totalRun="105">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:08Z" fail="51" name="as" pass="53" skipped="4" statusUnknown="1" totalRun="105">
    <testResult status="pass" testName="as-0101"/>
    <testResult status="pass" testName="as-0102"/>
    <testResult status="pass" testName="as-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
index 573dadb3c..e731859fd 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:44:54Z" fail="14" name="avt" pass="21" skipped="0" statusUnknown="0" totalRun="35">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:08Z" fail="14" name="avt" pass="21" skipped="0" statusUnknown="0" totalRun="35">
    <testResult status="pass" testName="avt-0101"/>
    <testResult status="fail" testName="avt-0201"/>
    <testResult status="pass" testName="avt-0202"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_expand-text-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_expand-text-test-set_result.xml
index 30f06cd20..e81c5014d 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_expand-text-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_expand-text-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:47:17Z" fail="36" name="expand-text" pass="26" skipped="0" statusUnknown="0" totalRun="62">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:09:27Z" fail="36" name="expand-text" pass="26" skipped="0" statusUnknown="0" totalRun="62">
    <testResult status="pass" testName="cvt-001"/>
    <testResult status="pass" testName="cvt-002"/>
    <testResult status="pass" testName="cvt-003"/>
@@ -44,8 +44,7 @@
    <testResult status="fail" testName="cvt-026"/>
    <testResult status="fail" testName="cvt-027">
       <outResult>
-         <errTrace>Illegal value: Q{http://www.example.com/foo}var used for QNAME attribute: name</errTrace>
-         <errTrace>java.lang.NullPointerException</errTrace>
+         <errTrace>org.apache.xml.utils.WrappedRuntimeException: XPST0008 : Could not find variable with the name of $</errTrace>
       </outResult>
    </testResult>
    <testResult status="fail" testName="cvt-028">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
index e82cf66da..f2f30859a 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:44:55Z" fail="61" name="match" pass="67" skipped="8" statusUnknown="1" totalRun="129">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:09Z" fail="61" name="match" pass="67" skipped="8" statusUnknown="1" totalRun="129">
    <testResult status="pass" testName="match-001"/>
    <testResult status="pass" testName="match-002"/>
    <testResult status="pass" testName="match-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
index 1596bb50f..7d3476045 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:44:58Z" fail="5" name="select" pass="19" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:09Z" fail="5" name="select" pass="19" skipped="0" statusUnknown="1" totalRun="25">
    <testResult status="pass" testName="select-0101"/>
    <testResult status="pass" testName="select-0102"/>
    <testResult status="pass" testName="select-0201"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
index 12870ec79..a44b3d8e9 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:47:16Z" fail="15" name="xpath-default-namespace" pass="11" skipped="0" statusUnknown="0" totalRun="26">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:09:26Z" fail="15" name="xpath-default-namespace" pass="11" skipped="0" statusUnknown="0" totalRun="26">
    <testResult status="pass" testName="xpath-default-namespace-0101"/>
    <testResult status="pass" testName="xpath-default-namespace-0102"/>
    <testResult status="pass" testName="xpath-default-namespace-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
index 82ef34107..3ef06685b 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:14Z" fail="8" name="attribute-set" pass="41" skipped="1" statusUnknown="0" totalRun="49">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:24Z" fail="8" name="attribute-set" pass="41" skipped="1" statusUnknown="0" totalRun="49">
    <testResult status="pass" testName="attribute-set-0101"/>
    <testResult status="fail" testName="attribute-set-0102">
       <outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
index e3ce5f49d..0a7f17ea9 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:14Z" fail="12" name="character-map" pass="15" skipped="1" statusUnknown="1" totalRun="28">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:24Z" fail="12" name="character-map" pass="15" skipped="1" statusUnknown="1" totalRun="28">
    <testResult status="pass" testName="character-map-001"/>
    <testResult status="pass" testName="character-map-002"/>
    <testResult status="pass" testName="character-map-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
index a5b0abcd2..90ed8e463 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:13Z" fail="25" name="function" pass="40" skipped="4" statusUnknown="1" totalRun="66">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:15Z" fail="21" name="function" pass="47" skipped="4" statusUnknown="1" totalRun="69">
    <testResult status="fail" testName="function-0001">
       <outResult/>
    </testResult>
@@ -27,24 +27,17 @@
    <testResult status="pass" testName="function-0119b"/>
    <testResult status="skipped" testName="function-0120a" xsltVersion="xslt 2.0 only"/>
    <testResult status="pass" testName="function-0120b"/>
-   <testResult status="fail" testName="function-0121">
-      <outResult/>
-   </testResult>
-   <testResult status="fail" testName="function-0122">
-      <outResult>
-         <errTrace>Illegal value: Q{}count-elements used for QNAME attribute: name</errTrace>
-         <errTrace>java.lang.RuntimeException: ElemTemplateElement error: xsl:function must have a name attribute.</errTrace>
-      </outResult>
-   </testResult>
+   <testResult status="pass" testName="function-0121"/>
+   <testResult status="pass" testName="function-0122"/>
    <testResult status="pass" testName="function-0201"/>
    <testResult status="pass" testName="function-0202"/>
    <testResult status="pass" testName="function-0203"/>
    <testResult status="pass" testName="function-0205"/>
    <testResult status="pass" testName="function-0301"/>
    <testResult status="skipped" testName="function-0302" xsltVersion="xslt 2.0 only"/>
-   <testResult status="fail" testName="function-0302b"/>
-   <testResult status="fail" testName="function-0303"/>
-   <testResult status="fail" testName="function-0401"/>
+   <testResult status="pass" testName="function-0302b"/>
+   <testResult status="pass" testName="function-0303"/>
+   <testResult status="pass" testName="function-0401"/>
    <testResult status="fail" testName="function-0501">
       <outResult>
          <errTrace>XPST0003 : An XPath expression /out/section[1]/actor[1][@name="User"][children/child="Administrator"][empty(parents/node())] has syntax error. Unknown op code : 0.</errTrace>
@@ -110,5 +103,8 @@
       <outResult/>
    </testResult>
    <testResult status="pass" testName="function-1030"/>
-   <testResult testName="function-1031"/>
+   <testResult status="fail" testName="function-1031"/>
+   <testResult status="pass" testName="function-1032"/>
+   <testResult status="pass" testName="function-1033"/>
+   <testResult testName="function-1034"/>
 </testrun>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
index 62dfd4343..c2636915c 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:44:50Z" fail="3" name="variable" pass="16" skipped="0" statusUnknown="1" totalRun="20">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:06Z" fail="3" name="variable" pass="16" skipped="0" statusUnknown="1" totalRun="20">
    <testResult status="pass" testName="variable-0101"/>
    <testResult status="pass" testName="variable-0102"/>
    <testResult status="pass" testName="variable-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
index 4dd0cea91..3b6d757e0 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:15Z" fail="20" name="axes" pass="181" skipped="0" statusUnknown="0" totalRun="201">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:25Z" fail="20" name="axes" pass="181" skipped="0" statusUnknown="0" totalRun="201">
    <testResult status="pass" testName="axes-001"/>
    <testResult status="pass" testName="axes-002"/>
    <testResult status="pass" testName="axes-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
index 61fbd3ad7..10efabe37 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:20Z" fail="5" name="castable" pass="4" skipped="0" statusUnknown="0" totalRun="9">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:25Z" fail="5" name="castable" pass="4" skipped="0" statusUnknown="0" totalRun="9">
    <testResult status="pass" testName="castable-001"/>
    <testResult status="pass" testName="castable-002"/>
    <testResult status="pass" testName="castable-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
index d5dfa16a2..f94960386 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:20Z" fail="0" name="expression" pass="9" skipped="0" statusUnknown="1" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:25Z" fail="0" name="expression" pass="9" skipped="0" statusUnknown="1" totalRun="10">
    <testResult status="pass" testName="expression-0101"/>
    <testResult status="pass" testName="expression-0301"/>
    <testResult status="pass" testName="expression-0302"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
index 1b7848c5b..defef0377 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:21Z" fail="2" name="for" pass="1" skipped="0" statusUnknown="1" totalRun="4">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:25Z" fail="2" name="for" pass="1" skipped="0" statusUnknown="1" totalRun="4">
    <testResult status="fail" testName="for-001"/>
    <testResult status="fail" testName="for-002"/>
    <testResult status="pass" testName="for-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
index 035365de9..1333b6c4c 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:26Z" fail="6" name="higher-order-functions" pass="18" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:28Z" fail="6" name="higher-order-functions" pass="18" skipped="0" statusUnknown="1" totalRun="25">
    <testResult status="pass" testName="higher-order-functions-001"/>
    <testResult status="pass" testName="higher-order-functions-002"/>
    <testResult status="pass" testName="higher-order-functions-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
index 4cb5a39c0..951c03f7a 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:22Z" fail="39" name="math" pass="108" skipped="0" statusUnknown="1" totalRun="148">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:27Z" fail="39" name="math" pass="108" skipped="0" statusUnknown="1" totalRun="148">
    <testResult status="pass" testName="math-0101"/>
    <testResult status="fail" testName="math-0102">
       <outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
index 1e0fb8af8..566c1da85 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:25Z" fail="36" name="nodetest" pass="2" skipped="0" statusUnknown="0" totalRun="38">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:28Z" fail="36" name="nodetest" pass="2" skipped="0" statusUnknown="0" totalRun="38">
    <testResult status="pass" testName="nodetest-001"/>
    <testResult status="pass" testName="nodetest-002"/>
    <testResult status="fail" testName="nodetest-003">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
index 9e6c144be..6ebb087b6 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:26Z" fail="3" name="path" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:28Z" fail="3" name="path" pass="7" skipped="0" statusUnknown="0" totalRun="10">
    <testResult status="pass" testName="path-001"/>
    <testResult status="pass" testName="path-002"/>
    <testResult status="pass" testName="path-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
index 58285bb2c..5695fe83d 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:27Z" fail="7" name="predicate" pass="50" skipped="0" statusUnknown="0" totalRun="57">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:29Z" fail="7" name="predicate" pass="50" skipped="0" statusUnknown="0" totalRun="57">
    <testResult status="fail" testName="predicate-001"/>
    <testResult status="fail" testName="predicate-002"/>
    <testResult status="fail" testName="predicate-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
index d24361289..7ed7fbcf1 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:47:09Z" fail="0" name="deep-equal" pass="2" skipped="0" statusUnknown="0" totalRun="2">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:09:16Z" fail="0" name="deep-equal" pass="2" skipped="0" statusUnknown="0" totalRun="2">
    <testResult status="pass" testName="deep-equal-001"/>
    <testResult status="pass" testName="deep-equal-002"/>
 </testrun>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
index 59eb446ac..dbf6a2d2a 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:47:14Z" fail="32" name="format-number" pass="38" skipped="4" statusUnknown="0" totalRun="70">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:09:23Z" fail="32" name="format-number" pass="38" skipped="4" statusUnknown="0" totalRun="70">
    <testResult status="fail" testName="format-number-001"/>
    <testResult status="fail" testName="format-number-002"/>
    <testResult status="fail" testName="format-number-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
index ecc2130e8..74fa7011c 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:47:13Z" fail="3" name="key" pass="21" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:09:21Z" fail="3" name="key" pass="21" skipped="0" statusUnknown="1" totalRun="25">
    <testResult status="pass" testName="key-001"/>
    <testResult status="fail" testName="key-002"/>
    <testResult status="pass" testName="key-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
index 4c02fa997..f79978204 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:47:09Z" fail="11" name="position" pass="126" skipped="0" statusUnknown="1" totalRun="138">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:09:16Z" fail="11" name="position" pass="126" skipped="0" statusUnknown="1" totalRun="138">
    <testResult status="pass" testName="position-0101"/>
    <testResult status="fail" testName="position-0102"/>
    <testResult status="fail" testName="position-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
index 74c3fafd3..364301fe3 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:47:13Z" fail="3" name="root" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:09:21Z" fail="3" name="root" pass="7" skipped="0" statusUnknown="0" totalRun="10">
    <testResult status="pass" testName="root-0101"/>
    <testResult status="fail" testName="root-0102"/>
    <testResult status="pass" testName="root-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
index d9fe13d95..eb0e41d29 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:47:11Z" fail="16" name="analyze-string" pass="37" skipped="5" statusUnknown="0" totalRun="53">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:09:19Z" fail="16" name="analyze-string" pass="37" skipped="5" statusUnknown="0" totalRun="53">
    <testResult status="pass" testName="analyze-string-001"/>
    <testResult status="pass" testName="analyze-string-002"/>
    <testResult status="pass" testName="analyze-string-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
index 72c96010d..ca12d6fcc 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:44:59Z" fail="25" name="apply-templates" pass="21" skipped="4" statusUnknown="0" totalRun="46">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:09Z" fail="25" name="apply-templates" pass="21" skipped="4" statusUnknown="0" totalRun="46">
    <testResult status="fail" testName="apply-templates-001">
       <outResult>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&#13;
 &#13;
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
index aee5bf0cf..ad1697ca1 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:03Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:10Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
    <testResult status="fail" testName="attribute-0001"/>
    <testResult status="fail" testName="attribute-0002"/>
    <testResult status="fail" testName="attribute-0003"/>
@@ -12,6 +12,7 @@
    <testResult status="fail" testName="attribute-0601">
       <outResult>
          <errTrace>Attempting to generate a namespace prefix with a null URI</errTrace>
+         <errTrace>A node test that matches either NCName:* or QName was expected.</errTrace>
       </outResult>
    </testResult>
    <testResult testName="attribute-0701"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
index 963d5b1d7..f6ef571f9 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:04Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="41">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:11Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="41">
    <testResult status="fail" testName="call-template-0001">
       <outResult>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;out/&gt;</outResult>
    </testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
index 51c535b4c..09d0fae79 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:05Z" fail="6" name="choose" pass="17" skipped="0" statusUnknown="1" totalRun="24">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:11Z" fail="6" name="choose" pass="17" skipped="0" statusUnknown="1" totalRun="24">
    <testResult status="pass" testName="choose-0101"/>
    <testResult status="pass" testName="choose-0102"/>
    <testResult status="fail" testName="choose-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
index b4b1f7869..eea3dbd05 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:06Z" fail="43" name="copy" pass="16" skipped="0" statusUnknown="1" totalRun="60">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:12Z" fail="43" name="copy" pass="16" skipped="0" statusUnknown="1" totalRun="60">
    <testResult status="fail" testName="copy-0101"/>
    <testResult status="pass" testName="copy-0102"/>
    <testResult status="fail" testName="copy-0103"/>
@@ -95,7 +95,7 @@
       <outResult>
          <errTrace>XTSE0010 : an instruction xsl:where-populated is not known to the XSLT processor.</errTrace>
          <errTrace>XPST0003 : An XPath expression /out/comment() = "Boo!" has syntax error. Unknown op code : 0.</errTrace>
-         <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
+         <errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
       </outResult>
    </testResult>
    <testResult status="fail" testName="copy-1214">
@@ -107,7 +107,7 @@
       <outResult>
          <errTrace>XTTE0570 : The xs:string value 'Boo!' cannot be cast to a type node().</errTrace>
          <errTrace>XPST0003 : An XPath expression /out/text() = "Boo!" has syntax error. Unknown op code : 0.</errTrace>
-         <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
+         <errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
       </outResult>
    </testResult>
    <testResult testName="copy-1216"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
index 21fdafe44..58b67be34 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:10Z" fail="18" name="element" pass="11" skipped="0" statusUnknown="0" totalRun="29">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:15Z" fail="18" name="element" pass="11" skipped="0" statusUnknown="0" totalRun="29">
    <testResult status="fail" testName="element-0001">
       <outResult/>
    </testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
index 4e170fe76..4ac940bee 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:00Z" fail="26" name="for-each-group" pass="47" skipped="4" statusUnknown="1" totalRun="74">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:09Z" fail="26" name="for-each-group" pass="47" skipped="4" statusUnknown="1" totalRun="74">
    <testResult status="pass" testName="for-each-group-001"/>
    <testResult status="skipped" testName="for-each-group-002a" xsltVersion="xslt 2.0 only"/>
    <testResult status="pass" testName="for-each-group-002"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
index acfcb03ef..be05ce0b2 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:08Z" fail="28" name="iterate" pass="16" skipped="0" statusUnknown="0" totalRun="44">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:13Z" fail="28" name="iterate" pass="16" skipped="0" statusUnknown="0" totalRun="44">
    <testResult status="pass" testName="iterate-001"/>
    <testResult status="pass" testName="iterate-002"/>
    <testResult status="pass" testName="iterate-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
index a8e96ebea..7235ca2b6 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:09Z" fail="18" name="sequence" pass="7" skipped="1" statusUnknown="1" totalRun="26">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:14Z" fail="18" name="sequence" pass="7" skipped="1" statusUnknown="1" totalRun="26">
    <testResult status="fail" testName="sequence-0101"/>
    <testResult status="fail" testName="sequence-0102"/>
    <testResult status="pass" testName="sequence-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
index e1eaa396a..f38931109 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:11Z" fail="44" name="sort" pass="36" skipped="0" statusUnknown="0" totalRun="80">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:15Z" fail="44" name="sort" pass="36" skipped="0" statusUnknown="0" totalRun="80">
    <testResult status="pass" testName="sort-001"/>
    <testResult status="pass" testName="sort-002"/>
    <testResult status="fail" testName="sort-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
index bb6ed09cb..8782e2fb5 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:02Z" fail="26" name="try" pass="11" skipped="5" statusUnknown="0" totalRun="37">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:10Z" fail="26" name="try" pass="11" skipped="5" statusUnknown="0" totalRun="37">
    <testResult status="pass" testName="try-001"/>
    <testResult status="fail" testName="try-002">
       <outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
index 47484bdb5..e2c54fbd8 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:47:16Z" fail="13" name="xsl-document" pass="12" skipped="0" statusUnknown="0" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:09:25Z" fail="13" name="xsl-document" pass="12" skipped="0" statusUnknown="0" totalRun="25">
    <testResult status="pass" testName="xsl-document-0101"/>
    <testResult status="fail" testName="xsl-document-0102">
       <outResult>
          <errTrace>XPST0003 : An XPath expression /out/node()[1][self::comment()][.="Valuable comment"] has syntax error. Unknown op code : 0.</errTrace>
-         <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
+         <errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
       </outResult>
    </testResult>
    <testResult status="pass" testName="xsl-document-0103"/>
@@ -17,7 +17,7 @@
    <testResult status="fail" testName="xsl-document-0301">
       <outResult>
          <errTrace>XPST0003 : An XPath expression /out/node()[1][self::*:e1][namespace-uri()="http://www.example.org/foo"][@t1="1"][@t2="2"][@t3="3"] has syntax error. Unknown op code : 0.</errTrace>
-         <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
+         <errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
       </outResult>
    </testResult>
    <testResult status="pass" testName="xsl-document-0302"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
index 1840fb4f8..ded1143e7 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:47:15Z" fail="12" name="regex" pass="32" skipped="1" statusUnknown="0" totalRun="44">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:09:24Z" fail="12" name="regex" pass="32" skipped="1" statusUnknown="0" totalRun="44">
    <testResult status="pass" testName="regex-001"/>
    <testResult status="fail" testName="regex-002"/>
    <testResult status="pass" testName="regex-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
index 671cf9e85..305d6f1f5 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:28Z" fail="24" name="boolean" pass="88" skipped="0" statusUnknown="0" totalRun="112">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:31Z" fail="24" name="boolean" pass="88" skipped="0" statusUnknown="0" totalRun="112">
    <testResult status="pass" testName="boolean-001"/>
    <testResult status="pass" testName="boolean-002"/>
    <testResult status="pass" testName="boolean-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
index 266a69ae6..6c24b5666 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:34Z" fail="47" name="date" pass="37" skipped="0" statusUnknown="1" totalRun="85">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:37Z" fail="47" name="date" pass="37" skipped="0" statusUnknown="1" totalRun="85">
    <testResult status="pass" testName="date-001"/>
    <testResult status="pass" testName="date-002"/>
    <testResult status="pass" testName="date-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
index 299618fb3..3a03ca063 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:30Z" fail="17" name="node" pass="15" skipped="0" statusUnknown="0" totalRun="32">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:33Z" fail="17" name="node" pass="15" skipped="0" statusUnknown="0" totalRun="32">
    <testResult status="pass" testName="node-0101"/>
    <testResult status="pass" testName="node-0201"/>
    <testResult status="fail" testName="node-0301">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
index 74807b0cb..cd7007224 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-05T11:45:31Z" fail="8" name="string" pass="128" skipped="0" statusUnknown="0" totalRun="136">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-06T12:07:34Z" fail="8" name="string" pass="128" skipped="0" statusUnknown="0" totalRun="136">
    <testResult status="pass" testName="string-001"/>
    <testResult status="pass" testName="string-002"/>
    <testResult status="pass" testName="string-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
index 7b3474ef8..2a49a3536 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<testResult dateTime="2025-08-05T11:47:28Z" desc="W3C XSLT 3.0 test suite results" fail="803" pass="1449" skipped="43" success="63.83%" totalRun="2270" xslt_processor="Xalan-J XSLT 3.0 development code">
+<testResult dateTime="2025-08-06T12:09:43Z" desc="W3C XSLT 3.0 test suite results" fail="799" pass="1456" skipped="43" success="64.06%" totalRun="2273" xslt_processor="Xalan-J XSLT 3.0 development code">
   <attr>
     <as fail="51" pass="53" skipped="4" success="50.48%" totalRun="105"/>
     <avt fail="14" pass="21" skipped="0" success="60.0%" totalRun="35"/>
@@ -11,7 +11,7 @@
   <decl>
     <attribute-set fail="8" pass="41" skipped="1" success="83.67%" totalRun="49"/>
     <character-map fail="12" pass="15" skipped="1" success="53.57%" totalRun="28"/>
-    <function fail="25" pass="40" skipped="4" success="60.61%" totalRun="66"/>
+    <function fail="21" pass="47" skipped="4" success="68.12%" totalRun="69"/>
     <variable fail="3" pass="16" skipped="0" success="80.0%" totalRun="20"/>
   </decl>
   <expr>
diff --git a/src/test/java/org/apache/xalan/tests/xpath3/XPathUriQualifiedNameTests.java b/src/test/java/org/apache/xalan/tests/xpath3/XPathUriQualifiedNameTests.java
new file mode 100644
index 000000000..12aef80f0
--- /dev/null
+++ b/src/test/java/org/apache/xalan/tests/xpath3/XPathUriQualifiedNameTests.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.xalan.tests.xpath3;
+
+import org.apache.xalan.tests.util.XSLTestConstants;
+import org.apache.xalan.tests.util.XslTransformTestsUtil;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * XPath 3.1 test cases, to test XPath URIQualifiedName. 
+ * 
+ * @author Mukul Gandhi <mu...@apache.org>
+ * 
+ * @xsl.usage advanced
+ */
+public class XPathUriQualifiedNameTests extends XslTransformTestsUtil {        
+    
+    private static final String XSL_TRANSFORM_INPUT_DIRPATH = XSLTestConstants.XSL_TRANSFORM_INPUT_DIRPATH_PREFIX + "xpath_uri_qualified_name/";
+    
+    private static final String XSL_TRANSFORM_GOLD_DIRPATH = XSLTestConstants.XSL_TRANSFORM_GOLD_DIRPATH_PREFIX + "xpath_uri_qualified_name/gold/";
+
+    @BeforeClass
+    public static void setUpBeforeClass() throws Exception {
+        // no op
+    }
+
+    @AfterClass
+    public static void tearDownAfterClass() throws Exception {        
+        m_xmlDocumentBuilderFactory = null;
+        m_xmlDocumentBuilder = null;
+        m_xslTransformerFactory = null;
+    }
+
+    @Test
+    public void xPathUriQualifiedNameTest1() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1.xsl"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test1.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+    
+    @Test
+    public void xPathUriQualifiedNameTest2() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1.xml"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test2.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test2.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+    
+    @Test
+    public void xPathUriQualifiedNameTest3() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1.xml"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test3.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test3.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+    
+    @Test
+    public void xPathUriQualifiedNameTest4() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1.xml"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test4.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test4.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+
+}
diff --git a/src/test/resources/xpath_uri_qualified_name/gold/test1.out b/src/test/resources/xpath_uri_qualified_name/gold/test1.out
new file mode 100644
index 000000000..0cb43483d
--- /dev/null
+++ b/src/test/resources/xpath_uri_qualified_name/gold/test1.out
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+  <a>9</a>
+  <b>19</b>
+  <c>19</c>
+  <d>32</d>
+</result>
diff --git a/src/test/resources/xpath_uri_qualified_name/gold/test2.out b/src/test/resources/xpath_uri_qualified_name/gold/test2.out
new file mode 100644
index 000000000..788afa567
--- /dev/null
+++ b/src/test/resources/xpath_uri_qualified_name/gold/test2.out
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+  <one>1</one>
+  <two>6</two>
+</result>
diff --git a/src/test/resources/xpath_uri_qualified_name/gold/test3.out b/src/test/resources/xpath_uri_qualified_name/gold/test3.out
new file mode 100644
index 000000000..788afa567
--- /dev/null
+++ b/src/test/resources/xpath_uri_qualified_name/gold/test3.out
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+  <one>1</one>
+  <two>6</two>
+</result>
diff --git a/src/test/resources/xpath_uri_qualified_name/gold/test4.out b/src/test/resources/xpath_uri_qualified_name/gold/test4.out
new file mode 100644
index 000000000..d98903c45
--- /dev/null
+++ b/src/test/resources/xpath_uri_qualified_name/gold/test4.out
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><result>1,8,45</result>
diff --git a/src/test/resources/xpath_uri_qualified_name/test1.xml b/src/test/resources/xpath_uri_qualified_name/test1.xml
new file mode 100644
index 000000000..24b772736
--- /dev/null
+++ b/src/test/resources/xpath_uri_qualified_name/test1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?> 
+<info xmlns="http://ns0">
+   <a>1</a>
+   <b>2</b>
+   <c>3</c>
+</info>
diff --git a/src/test/resources/xpath_uri_qualified_name/test1.xsl b/src/test/resources/xpath_uri_qualified_name/test1.xsl
new file mode 100644
index 000000000..337ba9350
--- /dev/null
+++ b/src/test/resources/xpath_uri_qualified_name/test1.xsl
@@ -0,0 +1,44 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"                 
+				version="3.0">
+				
+  <!-- Author: mukulg@apache.org -->
+  
+  <!-- An XSL stylesheet test case, to test XPath 3.1 
+       URIQualifiedName. -->				
+  
+  <xsl:output method="xml" indent="yes"/>
+  
+  <xsl:template match="/">
+     <result>
+        <a><xsl:value-of select="Q{http://ns0/}incr(5)"/></a>
+	    <b><xsl:value-of select="Q{http://ns0/}incr(5) + 10"/></b>
+	    <c><xsl:value-of select="10 + Q{http://ns0/}incr(5)"/></c>
+	    <d><xsl:value-of select="(2 * Q{http://ns0/}incr(5)) + Q{http://ns0/}incr(10)"/></d>
+     </result>
+  </xsl:template>
+
+  <xsl:function name="Q{http://ns0/}incr">
+    <xsl:param name="x"/>
+    <xsl:sequence select="$x + 4"/>
+  </xsl:function>
+  
+  <!--
+      * Licensed to the Apache Software Foundation (ASF) under one
+      * or more contributor license agreements. See the NOTICE file
+      * distributed with this work for additional information
+      * regarding copyright ownership. The ASF licenses this file
+      * to you under the Apache License, Version 2.0 (the "License");
+      * you may not use this file except in compliance with the License.
+      * You may obtain a copy of the License at
+      *
+      *     http://www.apache.org/licenses/LICENSE-2.0
+      *
+      * Unless required by applicable law or agreed to in writing, software
+      * distributed under the License is distributed on an "AS IS" BASIS,
+      * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      * See the License for the specific language governing permissions and
+      * limitations under the License.
+   -->
+
+</xsl:stylesheet>
diff --git a/src/test/resources/xpath_uri_qualified_name/test2.xsl b/src/test/resources/xpath_uri_qualified_name/test2.xsl
new file mode 100644
index 000000000..f03f54aee
--- /dev/null
+++ b/src/test/resources/xpath_uri_qualified_name/test2.xsl
@@ -0,0 +1,39 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"                 
+				version="3.0">		
+  
+  <!-- Author: mukulg@apache.org -->
+  
+  <!-- use with test1.xml -->
+  
+  <!-- An XSL stylesheet test case, to test XPath 3.1 
+       URIQualifiedName. -->				
+  
+  <xsl:output method="xml" indent="yes"/>
+  
+  <xsl:template match="/">
+     <result>
+        <one><xsl:value-of select="Q{http://ns0}info/Q{http://ns0}a"/></one>
+	    <two><xsl:value-of select="Q{http://ns0}info/Q{http://ns0}a + Q{http://ns0}info/Q{http://ns0}b + Q{http://ns0}info/Q{http://ns0}c"/></two>
+     </result>
+  </xsl:template>
+  
+  <!--
+      * Licensed to the Apache Software Foundation (ASF) under one
+      * or more contributor license agreements. See the NOTICE file
+      * distributed with this work for additional information
+      * regarding copyright ownership. The ASF licenses this file
+      * to you under the Apache License, Version 2.0 (the "License");
+      * you may not use this file except in compliance with the License.
+      * You may obtain a copy of the License at
+      *
+      *     http://www.apache.org/licenses/LICENSE-2.0
+      *
+      * Unless required by applicable law or agreed to in writing, software
+      * distributed under the License is distributed on an "AS IS" BASIS,
+      * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      * See the License for the specific language governing permissions and
+      * limitations under the License.
+   -->
+
+</xsl:stylesheet>
diff --git a/src/test/resources/xpath_uri_qualified_name/test3.xsl b/src/test/resources/xpath_uri_qualified_name/test3.xsl
new file mode 100644
index 000000000..809c9c208
--- /dev/null
+++ b/src/test/resources/xpath_uri_qualified_name/test3.xsl
@@ -0,0 +1,39 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"                 
+				version="3.0">
+				
+  <!-- Author: mukulg@apache.org -->
+  
+  <!-- use with test1.xml -->
+  
+  <!-- An XSL stylesheet test case, to test XPath 3.1 
+       URIQualifiedName. -->				
+  
+  <xsl:output method="xml" indent="yes"/>
+  
+  <xsl:template match="/Q{http://ns0}info">
+     <result>
+        <one><xsl:value-of select="Q{http://ns0}a"/></one>
+	    <two><xsl:value-of select="Q{http://ns0}a + Q{http://ns0}b + Q{http://ns0}c"/></two>
+     </result>
+  </xsl:template>
+  
+  <!--
+      * Licensed to the Apache Software Foundation (ASF) under one
+      * or more contributor license agreements. See the NOTICE file
+      * distributed with this work for additional information
+      * regarding copyright ownership. The ASF licenses this file
+      * to you under the Apache License, Version 2.0 (the "License");
+      * you may not use this file except in compliance with the License.
+      * You may obtain a copy of the License at
+      *
+      *     http://www.apache.org/licenses/LICENSE-2.0
+      *
+      * Unless required by applicable law or agreed to in writing, software
+      * distributed under the License is distributed on an "AS IS" BASIS,
+      * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      * See the License for the specific language governing permissions and
+      * limitations under the License.
+   -->
+
+</xsl:stylesheet>
diff --git a/src/test/resources/xpath_uri_qualified_name/test4.xsl b/src/test/resources/xpath_uri_qualified_name/test4.xsl
new file mode 100644
index 000000000..4a5d97a64
--- /dev/null
+++ b/src/test/resources/xpath_uri_qualified_name/test4.xsl
@@ -0,0 +1,42 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"                 
+				version="3.0">
+				
+  <!-- Author: mukulg@apache.org -->
+  
+  <!-- use with test1.xml -->
+  
+  <!-- An XSL stylesheet test case, to test XPath 3.1 
+       URIQualifiedName. -->				
+  
+  <xsl:output method="xml" indent="yes"/>
+  
+  <xsl:template match="/Q{http://ns0}info">
+     <result>
+	    <xsl:value-of select="Q{http://www.w3.org/2005/xpath-functions/math}pow(Q{http://ns0}a, 2)"/>
+	    <xsl:text>,</xsl:text>
+        <xsl:value-of select="2 * Q{http://www.w3.org/2005/xpath-functions/math}pow(Q{http://ns0}b, 2)"/>
+	    <xsl:text>,</xsl:text>
+	    <xsl:value-of select="Q{http://www.w3.org/2005/xpath-functions/math}pow(Q{http://ns0}c, 2) * 5"/>
+     </result>
+  </xsl:template>
+  
+  <!--
+      * Licensed to the Apache Software Foundation (ASF) under one
+      * or more contributor license agreements. See the NOTICE file
+      * distributed with this work for additional information
+      * regarding copyright ownership. The ASF licenses this file
+      * to you under the Apache License, Version 2.0 (the "License");
+      * you may not use this file except in compliance with the License.
+      * You may obtain a copy of the License at
+      *
+      *     http://www.apache.org/licenses/LICENSE-2.0
+      *
+      * Unless required by applicable law or agreed to in writing, software
+      * distributed under the License is distributed on an "AS IS" BASIS,
+      * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      * See the License for the specific language governing permissions and
+      * limitations under the License.
+   -->
+
+</xsl:stylesheet>


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xalan.apache.org
For additional commands, e-mail: commits-help@xalan.apache.org