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/07/25 11:38:08 UTC

(xalan-java) branch xalan-j_xslt3.0_mvn updated: committing implementation improvements for xpath 3.1 sequence type expressions

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 24da96ae2 committing implementation improvements for xpath 3.1 sequence type expressions
24da96ae2 is described below

commit 24da96ae2bacb13152011185651aba193214da17
Author: Mukul Gandhi <ga...@gmail.com>
AuthorDate: Fri Jul 25 17:07:44 2025 +0530

    committing implementation improvements for xpath 3.1 sequence type expressions
---
 README                                             |  8 +--
 .../apache/xalan/templates/ElemApplyTemplates.java |  2 +-
 .../org/apache/xalan/templates/ElemFunction.java   | 53 +++++++++++---
 .../org/apache/xalan/templates/ElemSequence.java   | 28 ++++++--
 .../org/apache/xalan/templates/ElemVariable.java   | 60 ++++++++--------
 .../xslt/util/XslTransformSharedDatastore.java     |  9 ++-
 .../org/apache/xpath/compiler/XPathParser.java     | 44 ++++++++----
 .../xpath/composite/SequenceTypeSupport.java       | 10 ++-
 .../xpath/functions/XSL3FunctionService.java       | 25 ++++---
 .../java/org/apache/xpath/operations/Variable.java |  2 +-
 .../w3c/xslt3/result/attr/_as-test-set_result.xml  |  2 +-
 .../w3c/xslt3/result/attr/_avt-test-set_result.xml |  2 +-
 .../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      | 20 ++----
 .../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     |  2 +-
 .../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    |  2 +-
 .../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 |  6 +-
 .../result/insn/_xsl-document-test-set_result.xml  |  4 +-
 .../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 +-
 .../xalan/tests/xpath3/FnParseJsonTests.java       | 40 +++++++++++
 .../apache/xalan/tests/xpath3/XPathArrayTests.java | 20 ++++++
 src/test/resources/fn_parse_json/gold/test4.out    |  1 +
 src/test/resources/fn_parse_json/gold/test5.out    |  1 +
 src/test/resources/fn_parse_json/gold/test6.out    |  1 +
 src/test/resources/fn_parse_json/gold/test7.out    |  1 +
 src/test/resources/fn_parse_json/test2.json        |  5 ++
 src/test/resources/fn_parse_json/test3.json        | 17 +++++
 src/test/resources/fn_parse_json/test4.json        | 19 +++++
 src/test/resources/fn_parse_json/test4.xsl         | 42 +++++++++++
 src/test/resources/fn_parse_json/test5.xsl         | 42 +++++++++++
 src/test/resources/fn_parse_json/test6.xsl         | 42 +++++++++++
 src/test/resources/fn_parse_json/test7.xsl         | 42 +++++++++++
 src/test/resources/xpath_array/gold/test29.out     |  5 ++
 src/test/resources/xpath_array/gold/test30.out     | 10 +++
 src/test/resources/xpath_array/test2.json          |  5 ++
 src/test/resources/xpath_array/test29.xsl          | 60 ++++++++++++++++
 src/test/resources/xpath_array/test30.xsl          | 81 ++++++++++++++++++++++
 70 files changed, 632 insertions(+), 153 deletions(-)

diff --git a/README b/README
index e2ee933ba..3394807ca 100644
--- a/README
+++ b/README
@@ -17,7 +17,7 @@
 
 Copyright 1999-2025 The Apache Software Foundation
 
-Document last modified : 2025-07-24
+Document last modified : 2025-07-25
 
 Authors:
    Gary Gregory <gg...@apache.org>
@@ -59,16 +59,16 @@ 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: 1175, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 17.134 s - in org.apache.xalan.tests.main.AllXalanXSLT3Tests
+[INFO] Tests run: 1181, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 42.059 s - in org.apache.xalan.tests.main.AllXalanXSLT3Tests
 [INFO]
 [INFO] Results:
 [INFO]
-[INFO] Tests run: 1175, Failures: 0, Errors: 0, Skipped: 0
+[INFO] Tests run: 1181, Failures: 0, Errors: 0, Skipped: 0
 [INFO]
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------
-[INFO] Total time:  01:54 min
+[INFO] Total time:  01:35 min
 
 
 If the user needs to run Xalan-J's XSLT 3.0 implementation via Java code, the value of JVM's system property 
diff --git a/src/main/java/org/apache/xalan/templates/ElemApplyTemplates.java b/src/main/java/org/apache/xalan/templates/ElemApplyTemplates.java
index e94179c8e..376966bfa 100644
--- a/src/main/java/org/apache/xalan/templates/ElemApplyTemplates.java
+++ b/src/main/java/org/apache/xalan/templates/ElemApplyTemplates.java
@@ -770,7 +770,7 @@ public class ElemApplyTemplates extends ElemCallTemplate
 		  }
 
 		  if (argConvertedVal == null) {
-			  argConvertedVal = SequenceTypeSupport.castXDMValueToAnotherType(srcValue, paramAsAttrStrVal, null, xctxt, prefixTable);
+			  argConvertedVal = SequenceTypeSupport.castXdmValueToAnotherType(srcValue, paramAsAttrStrVal, null, xctxt, prefixTable);
 		  }
 
 		  if (argConvertedVal == null) {
diff --git a/src/main/java/org/apache/xalan/templates/ElemFunction.java b/src/main/java/org/apache/xalan/templates/ElemFunction.java
index 64fcc7d64..b058d1351 100644
--- a/src/main/java/org/apache/xalan/templates/ElemFunction.java
+++ b/src/main/java/org/apache/xalan/templates/ElemFunction.java
@@ -41,6 +41,7 @@ import org.apache.xpath.XPath;
 import org.apache.xpath.XPathContext;
 import org.apache.xpath.compiler.FunctionTable;
 import org.apache.xpath.compiler.Keywords;
+import org.apache.xpath.composite.SequenceTypeArrayTest;
 import org.apache.xpath.composite.SequenceTypeData;
 import org.apache.xpath.composite.SequenceTypeFunctionTest;
 import org.apache.xpath.composite.SequenceTypeKindTest;
@@ -431,9 +432,11 @@ public class ElemFunction extends ElemTemplate
       
       if (funcAsAttrStrVal != null) {
     	 // Process xsl:function's evaluation result with "as" attribute
-         try {        	 
+    	  
+         try {
+        	 SequenceTypeData seqExpectedTypeData = getSequenceTypeDataFromSeqTypeStr(funcAsAttrStrVal, xctxt, srcLocator);
+        	 
              if (funcResultConvertedVal instanceof XPathInlineFunction) {            	
-            	SequenceTypeData seqExpectedTypeData = getSequenceTypeDataFromSeqTypeStr(funcAsAttrStrVal, xctxt, srcLocator);
             	if (seqExpectedTypeData.getSequenceTypeFunctionTest() != null) {
             	   return funcResultConvertedVal;
             	}
@@ -444,7 +447,6 @@ public class ElemFunction extends ElemTemplate
             	}
              }
              else if (funcResultConvertedVal instanceof XPathMap) {            	
-             	SequenceTypeData seqExpectedTypeData = getSequenceTypeDataFromSeqTypeStr(funcAsAttrStrVal, xctxt, srcLocator);
              	if (seqExpectedTypeData.getSequenceTypeMapTest() != null) {
              	   return funcResultConvertedVal;
              	}
@@ -454,10 +456,40 @@ public class ElemFunction extends ElemTemplate
 										                                                                         funcAsAttrStrVal + ".", srcLocator); 
              	}
              }
-             else if (funcResultConvertedVal instanceof XPathArray) {            	
-              	SequenceTypeData seqExpectedTypeData = getSequenceTypeDataFromSeqTypeStr(funcAsAttrStrVal, xctxt, srcLocator);
-              	if (seqExpectedTypeData.getSequenceTypeArrayTest() != null) {
-              	   return funcResultConvertedVal;
+             else if (funcResultConvertedVal instanceof XPathArray) {
+            	SequenceTypeArrayTest seqTypeArrayTest = seqExpectedTypeData.getSequenceTypeArrayTest(); 
+              	if (seqTypeArrayTest != null) {
+              	   if (seqTypeArrayTest.isAnyArrayTest()) {
+              		  // XPath sequence type is array(*), that matches any xdm array
+              		  return funcResultConvertedVal; 
+              	   }
+              	   else {
+              		  /**
+              		   * Verify that, all the xdm array items match array test's item type.
+              		   * For e.g, for XPath sequence type array(xs:integer), all xdm array 
+              		   * items should conform to schema type xs:integer.
+              		   */
+              		  SequenceTypeData arrItemType = seqTypeArrayTest.getArrayItemTypeInfo();              		  
+              		  XPathArray xpathArr = (XPathArray)funcResultConvertedVal;
+              		  for (int i = 0; i < xpathArr.size(); i++) {
+              			 XObject xObj = xpathArr.get(i);
+              			 try {
+              				 XObject xObjResult = SequenceTypeSupport.castXdmValueToAnotherType(xObj, null, arrItemType, xctxt);
+              				 if (xObjResult == null) {
+              					 throw new TransformerException("XPTY0004 : An xsl:function call result for function {" + funcNameSpaceUri + "}" + funcLocalName + 
+                                                                                                             ", doesn't match the declared function result type " + 
+                                                                                                             funcAsAttrStrVal + ".", srcLocator);
+              				 }
+              			 }
+              			 catch (TransformerException ex) {
+              				 throw new TransformerException("XPTY0004 : An xsl:function call result for function {" + funcNameSpaceUri + "}" + funcLocalName + 
+                                                                                                             ", doesn't match the declared function result type " + 
+                                                                                                             funcAsAttrStrVal + ".", srcLocator);
+              			 }
+              		  }
+              		  
+              		  return funcResultConvertedVal;
+              	   }
               	}
               	else {
               	   throw new TransformerException("XPTY0004 : An xsl:function call result for function {" + funcNameSpaceUri + "}" + funcLocalName + 
@@ -465,9 +497,8 @@ public class ElemFunction extends ElemTemplate
 									                                                                            funcAsAttrStrVal + ".", srcLocator); 
               	}
              }
-             else if (((XslTransformSharedDatastore.m_xpathNamedFunctionRefSequence).size() > 0) && !ElemVariable.m_isXPathNamedFunctionRefSequenceVar) {
-            	SequenceTypeData seqExpectedTypeData = getSequenceTypeDataFromSeqTypeStr(funcAsAttrStrVal, xctxt, srcLocator);
-            	
+             else if (((XslTransformSharedDatastore.m_xpathNamedFunctionRefSequence).size() > 0) && 
+            		                                                                      !ElemVariable.m_isXPathNamedFunctionRefSequenceVar) {            	
             	int funcItemSeqSize = (XslTransformSharedDatastore.m_xpathNamedFunctionRefSequence).size();
         		
         		SequenceTypeFunctionTest sequenceTypeFunctionTest = seqExpectedTypeData.getSequenceTypeFunctionTest();
@@ -1095,7 +1126,7 @@ public class ElemFunction extends ElemTemplate
 		  }
 
 		  if (argConvertedVal == null) {
-			  argConvertedVal = SequenceTypeSupport.castXDMValueToAnotherType(srcValue, paramAsAttrStrVal, null, xctxt, prefixTable);
+			  argConvertedVal = SequenceTypeSupport.castXdmValueToAnotherType(srcValue, paramAsAttrStrVal, null, xctxt, prefixTable);
 		  }
 
 		  if (argConvertedVal == null) {
diff --git a/src/main/java/org/apache/xalan/templates/ElemSequence.java b/src/main/java/org/apache/xalan/templates/ElemSequence.java
index a6a97bd41..d6996144c 100644
--- a/src/main/java/org/apache/xalan/templates/ElemSequence.java
+++ b/src/main/java/org/apache/xalan/templates/ElemSequence.java
@@ -38,9 +38,11 @@ import org.apache.xpath.axes.LocPathIterator;
 import org.apache.xpath.axes.SelfIteratorNoPredicate;
 import org.apache.xpath.compiler.XPathParser;
 import org.apache.xpath.composite.SequenceTypeData;
+import org.apache.xpath.composite.XPathArrayConstructor;
 import org.apache.xpath.composite.XPathNamedFunctionReference;
 import org.apache.xpath.composite.XPathSequenceConstructor;
 import org.apache.xpath.functions.Function;
+import org.apache.xpath.functions.XPathDynamicFunctionCall;
 import org.apache.xpath.functions.XSL3ConstructorOrExtensionFunction;
 import org.apache.xpath.functions.XSL3FunctionService;
 import org.apache.xpath.objects.ResultSequence;
@@ -49,6 +51,7 @@ import org.apache.xpath.objects.XMLNodeCursorImpl;
 import org.apache.xpath.objects.XNodeSetForDOM;
 import org.apache.xpath.objects.XNumber;
 import org.apache.xpath.objects.XObject;
+import org.apache.xpath.objects.XPathArray;
 import org.apache.xpath.objects.XPathInlineFunction;
 import org.apache.xpath.objects.XPathMap;
 import org.apache.xpath.objects.XRTreeFrag;
@@ -290,7 +293,7 @@ public class ElemSequence extends ElemTemplateElement
 						  Expression xpathExpr = xpathObj.getExpression();
 						  if (xpathExpr instanceof NodeTest) {
 							  ElemFunction elemFunction = XslTransformEvaluationHelper.getElemFunctionFromNodeTestExpression(
-									  (NodeTest)xpathExpr, transformer, srcLocator);
+									                                                                                    (NodeTest)xpathExpr, transformer, srcLocator);
 							  if (elemFunction != null) {
 								  XPathNamedFunctionReference xpathNamedFunctionReference = new XPathNamedFunctionReference();
 								  xpathNamedFunctionReference.setXslStylesheetFunction(elemFunction, getStylesheetRoot());
@@ -309,6 +312,12 @@ public class ElemSequence extends ElemTemplateElement
 					  }
 			      }
 			  }
+			  else if (selectExpression instanceof XPathArrayConstructor) {
+				  XPathArrayConstructor xpathArrayCons = (XPathArrayConstructor)selectExpression;
+				  XslTransformSharedDatastore.m_xpathArray = (XPathArray)(xpathArrayCons.execute(xctxt));
+				  
+				  return;
+			  }
 
 			  if (selectExpression instanceof XSL3ConstructorOrExtensionFunction) {
 				  XSL3ConstructorOrExtensionFunction xpathFunc = (XSL3ConstructorOrExtensionFunction)selectExpression;
@@ -322,9 +331,15 @@ public class ElemSequence extends ElemTemplateElement
 				  }            
 			  }
 			  else if ((selectExpression instanceof Function) || (selectExpression instanceof SimpleMapOperator) || 
-					                                              (selectExpression instanceof Range)) {
-				  xslSequenceVal = selectExpression.execute(xctxt);
-			  }
+					                                             (selectExpression instanceof Range) ||
+					                                             (selectExpression instanceof XPathDynamicFunctionCall)) {
+				  xslSequenceVal = m_selectPattern.execute(xctxt, sourceNode, this);
+				  if (xslSequenceVal instanceof XPathArray) {
+					 XslTransformSharedDatastore.m_xpathArray = (XPathArray)xslSequenceVal;
+					 
+					 return;
+				  }
+			  }			  
 			  else if (selectExpression instanceof Operation) {
 				  Operation xpathOperation = (Operation)selectExpression;            
 				  XObject leftOperand = (xpathOperation.getLeftOperand()).execute(xctxt);
@@ -383,8 +398,7 @@ public class ElemSequence extends ElemTemplateElement
 							  xpathIndexExprStr = XslTransformEvaluationHelper.replaceNsUrisWithPrefixesOnXPathStr(xpathIndexExprStr, prefixTable);
 						  }
 
-						  XPath xpathIndexObj = new XPath(xpathIndexExprStr, srcLocator, xctxt.getNamespaceContext(), 
-								  XPath.SELECT, null);
+						  XPath xpathIndexObj = new XPath(xpathIndexExprStr, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null);
 
 						  if (m_vars != null) {
 							  xpathIndexObj.fixupVariables(m_vars, m_globals_size);  
@@ -545,7 +559,7 @@ public class ElemSequence extends ElemTemplateElement
    * values that may be based on some other property that
    * depends on recomposition.
    */
-  public void compose(StylesheetRoot sroot) throws TransformerException {    
+  public void compose(StylesheetRoot sroot) throws TransformerException {	  
      StylesheetRoot.ComposeState cstate = sroot.getComposeState();
     
      java.util.Vector vnames = cstate.getVariableNames();
diff --git a/src/main/java/org/apache/xalan/templates/ElemVariable.java b/src/main/java/org/apache/xalan/templates/ElemVariable.java
index 3b9670107..0024dab4b 100644
--- a/src/main/java/org/apache/xalan/templates/ElemVariable.java
+++ b/src/main/java/org/apache/xalan/templates/ElemVariable.java
@@ -429,7 +429,7 @@ public class ElemVariable extends ElemTemplateElement
                    if (evalResult == null) {
                 	  String xpathPatternStr = m_selectPattern.getPatternString();
                 	  throw new TransformerException("XTTE0570 : The supplied value " + xpathPatternStr + ", doesn't "
-                	  		                                               + "match the expected sequence type " + m_asAttr + ".", srcLocator); 
+                	  		                                               + "match an expected XPath sequence type " + m_asAttr + ".", srcLocator); 
                    }
                 }
             	else if (m_asAttr != null && (XSL3FunctionService.XS_VALID_TRUE).equals(evalResultStrValue)) {
@@ -442,7 +442,7 @@ public class ElemVariable extends ElemTemplateElement
             	   else {
             		  String xpathPatternStr = m_selectPattern.getPatternString();
                  	  throw new TransformerException("XTTE0570 : The supplied value " + xpathPatternStr + ", doesn't "
-                 	  		                                               + "match the expected sequence type " + m_asAttr + ".", srcLocator); 
+                 	  		                                               + "match an expected XPath sequence type " + m_asAttr + ".", srcLocator); 
             	   }
             	}
             	else if (m_asAttr == null && (XSL3FunctionService.XS_VALID_TRUE).equals(evalResultStrValue)) {
@@ -463,11 +463,11 @@ public class ElemVariable extends ElemTemplateElement
                                                           (evalResult instanceof XSAnyType) ||
                                                           (evalResult instanceof XMLNodeCursorImpl)) {
                 if (m_asAttr != null) {
-                   evalResult = SequenceTypeSupport.castXdmValueToAnotherType(evalResult, m_asAttr, null, xctxt);
-                   if (evalResult == null) {
-                 	  throw new javax.xml.transform.TransformerException("XTTE0570 : variable's computed value is not of "
-                 	  		                                                        + "an expected type " + m_asAttr +".", srcLocator); 
-                   }
+                	evalResult = SequenceTypeSupport.castXdmValueToAnotherType(evalResult, m_asAttr, null, xctxt);
+                	if (evalResult == null) {
+                	   throw new javax.xml.transform.TransformerException("XTTE0570 : An xsl:variable's value is not of an expected "
+                	   		                                                                           + "XPath sequence type " + m_asAttr +".", srcLocator); 
+                	}                	                      
                 }
                 
                 return evalResult; 
@@ -479,8 +479,8 @@ public class ElemVariable extends ElemTemplateElement
             if (m_asAttr != null) {
                evalResult = SequenceTypeSupport.castXdmValueToAnotherType(evalResult, m_asAttr, null, xctxt);
                if (evalResult == null) {
-             	  throw new javax.xml.transform.TransformerException("XTTE0570 : variable's computed value is not of "
-             	  		                                                         + "an expected type " + m_asAttr +".", srcLocator); 
+            	   throw new javax.xml.transform.TransformerException("XTTE0570 : An xsl:variable's value is not of an expected "
+            	   		                                                                           + "XPath sequence type " + m_asAttr +".", srcLocator); 
                }
             }
              
@@ -492,8 +492,8 @@ public class ElemVariable extends ElemTemplateElement
             if (m_asAttr != null) {
                evalResult = SequenceTypeSupport.castXdmValueToAnotherType(evalResult, m_asAttr, null, xctxt);
                if (evalResult == null) {
-              	  throw new javax.xml.transform.TransformerException("XTTE0570 : variable's computed value is not of "
-              	  		                                                         + "an expected type " + m_asAttr +".", srcLocator); 
+            	   throw new javax.xml.transform.TransformerException("XTTE0570 : An xsl:variable's value is not of an expected "
+            	   		                                                                           + "XPath sequence type " + m_asAttr +".", srcLocator); 
                }
             }
              
@@ -515,8 +515,7 @@ public class ElemVariable extends ElemTemplateElement
             if (m_asAttr != null) {
                evalResult = SequenceTypeSupport.castXdmValueToAnotherType(evalResult, m_asAttr, null, xctxt);
                if (evalResult == null) {
-            	  throw new javax.xml.transform.TransformerException("XTTE0570 : variable's computed value is not of "
-            	  		                                                         + "an expected type " + m_asAttr +".", srcLocator); 
+            	  throw new javax.xml.transform.TransformerException("XTTE0570 : An xsl:variable's value is not of an expected XPath sequence type " + m_asAttr +".", srcLocator); 
                }
             }
              
@@ -648,9 +647,8 @@ public class ElemVariable extends ElemTemplateElement
                                resultSeq.add(evalResult);
                            }
                            else {
-                               throw new javax.xml.transform.TransformerException("XPTY0004 : an index value used with an xdm "
-                                                                                       + "sequence reference, is not an integer.", 
-                                                                                                        srcLocator); 
+                               throw new javax.xml.transform.TransformerException("XPTY0004 : An index value used with an xdm "
+                               		                                                                              + "sequence reference, is not an integer.", srcLocator); 
                            }
                        }
                        else if (seqIndexEvalResult instanceof XSNumericType) {
@@ -661,15 +659,13 @@ public class ElemVariable extends ElemTemplateElement
                                resultSeq.add(evalResult);
                            }
                            else {
-                               throw new javax.xml.transform.TransformerException("XPTY0004 : an index value used with an xdm "
-                                                                                       + "sequence reference, is not an integer.", 
-                                                                                                        srcLocator);  
+                               throw new javax.xml.transform.TransformerException("XPTY0004 : An index value used with an xdm "
+                               		                                                                              + "sequence reference, is not an integer.", srcLocator);  
                            }
                        }
                        else {
-                           throw new javax.xml.transform.TransformerException("XPTY0004 : an index value used with an xdm sequence "
-                                                                                                + "reference, is not numeric.", 
-                                                                                                        srcLocator);   
+                           throw new javax.xml.transform.TransformerException("XPTY0004 : An index value used with an xdm "
+                           		                                                                                  + "sequence reference, is not numeric.", srcLocator);   
                        }
                    }
                }
@@ -852,7 +848,7 @@ public class ElemVariable extends ElemTemplateElement
     			XslTransformSharedDatastore.m_xpathInlineFunction = null;
     		}
     		else {
-    			throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
+    			throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
     		}
     	}
     	else if (XslTransformSharedDatastore.m_xpathArray != null) {
@@ -861,7 +857,7 @@ public class ElemVariable extends ElemTemplateElement
     			XslTransformSharedDatastore.m_xpathArray = null;
     		}
     		else {
-    			throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
+    			throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
     		}
     	}
     	else if (XslTransformSharedDatastore.m_xpathMap != null) {
@@ -870,7 +866,7 @@ public class ElemVariable extends ElemTemplateElement
     			XslTransformSharedDatastore.m_xpathMap = null;
     		}
     		else {
-    			throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
+    			throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
     		}
     	}
     	else if (XslTransformSharedDatastore.m_xslDocumentEvaluationResult != null) {
@@ -879,7 +875,7 @@ public class ElemVariable extends ElemTemplateElement
     			XslTransformSharedDatastore.m_xslDocumentEvaluationResult = null;
     		}
     		else {
-    			throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
+    			throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
     		}
     	}
     	else if ((XslTransformSharedDatastore.m_xpathNamedFunctionRefSequence).size() > 0) {
@@ -924,7 +920,7 @@ public class ElemVariable extends ElemTemplateElement
     		   m_isXPathNamedFunctionRefSequenceVar = true;
     		}
     		else {
-    			throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
+    			throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
     		}
     	}
     	else if (var instanceof XNodeSetForDOM) {
@@ -972,7 +968,7 @@ public class ElemVariable extends ElemTemplateElement
     			boolean bool1 = errMesg.contains("value"); 
     			boolean bool2 = errMesg.contains("cannot be cast to a type");
     			if (bool1 && bool2) {
-    				errMesg = errMesg + " An error occured, while evaluating an XDM map's key or value. The corresponding "
+    				errMesg = errMesg + " An error occured, while evaluating an xdm map's key or value. The corresponding "
     						                                                                         + "XPath sequence type is specified as " + m_asAttr + ".";
     				throw new TransformerException(errMesg, srcLocator);
     			}
@@ -990,7 +986,7 @@ public class ElemVariable extends ElemTemplateElement
     			boolean bool1 = errMesg.contains("value"); 
     			boolean bool2 = errMesg.contains("cannot be cast to a type");
     			if (bool1 && bool2) {
-    				errMesg = errMesg + " An error occured, while evaluating an XDM array item. The corresponding "
+    				errMesg = errMesg + " An error occured, while evaluating an xdm array item. The corresponding "
     						                                                                        + "XPath sequence type is specified as " + m_asAttr + ".";
     				throw new TransformerException(errMesg, srcLocator);
     			}
@@ -1006,7 +1002,7 @@ public class ElemVariable extends ElemTemplateElement
     		else {
     			var = SequenceTypeSupport.castXdmValueToAnotherType(var, m_asAttr, null, xctxt);
     			if (var == null) {
-    				throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
+    				throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
     			}
     		}
     	}
@@ -1021,14 +1017,14 @@ public class ElemVariable extends ElemTemplateElement
     		   }
     		}
     		else {
-    			throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
+    			throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
   		    }
     	}
     	else {
     		try {
     			var = SequenceTypeSupport.castXdmValueToAnotherType(var, m_asAttr, null, xctxt);
     			if (var == null) {
-    				throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
+    				throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator); 
     			}
     		}
     		catch (TransformerException ex) {
diff --git a/src/main/java/org/apache/xalan/xslt/util/XslTransformSharedDatastore.java b/src/main/java/org/apache/xalan/xslt/util/XslTransformSharedDatastore.java
index 660e23af6..8333ff9a3 100644
--- a/src/main/java/org/apache/xalan/xslt/util/XslTransformSharedDatastore.java
+++ b/src/main/java/org/apache/xalan/xslt/util/XslTransformSharedDatastore.java
@@ -41,20 +41,19 @@ public class XslTransformSharedDatastore {
     public static String m_xslSystemId;
     
     /**
-     * This class field represents, XDM function items that 
+     * This class field represents, xdm function items that 
      * are returned from XSL stylesheet xsl:function calls.
      */
     public static XPathInlineFunction m_xpathInlineFunction;
     
     /**
-     * This class field represents, XDM array values
-     * returned from evaluation of xsl:evaluate 
-     * instruction.
+     * This class field represents, xdm array values returned from 
+     * evaluation of xsl:sequence & xsl:evaluate instruction.
      */
     public static XPathArray m_xpathArray;
     
     /**
-     * This class field represents, XDM map values
+     * This class field represents, xdm map values
      * returned from evaluation of xsl:evaluate 
      * instruction.
      */
diff --git a/src/main/java/org/apache/xpath/compiler/XPathParser.java b/src/main/java/org/apache/xpath/compiler/XPathParser.java
index a5ffb078f..4be126c7d 100644
--- a/src/main/java/org/apache/xpath/compiler/XPathParser.java
+++ b/src/main/java/org/apache/xpath/compiler/XPathParser.java
@@ -6238,8 +6238,9 @@ public class XPathParser
     * XPath parse of sequence type expressions.
     */
    private XPathSequenceTypeExpr SequenceTypeExpr(boolean isXPathInlineFunctionParse) 
- 		                                                                 throws javax.xml.transform.TransformerException {
-       int opPos = 0;
+		                                                                         throws javax.xml.transform.TransformerException {
+       
+	   int opPos = 0;
        
        if (!isXPathInlineFunctionParse) {
           opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);                  
@@ -6317,10 +6318,10 @@ public class XPathParser
            }
        }
        else if (tokenIs("map")) {
-     	   parseXdmMapSequenceType(xpathSequenceTypeExpr);    	  
+     	   parseXdmMapSequenceType(xpathSequenceTypeExpr, false);
        }
        else if (tokenIs("array")) {
-           parseXdmArraySequenceType(xpathSequenceTypeExpr);
+           parseXdmArraySequenceType(xpathSequenceTypeExpr, false);
        }
        else if (tokenIs(XMLConstants.W3C_XML_SCHEMA_NS_URI)) {
            parseXdmBuiltInXmlSchemaSequenceType(xpathSequenceTypeExpr, isXPathInlineFunctionParse);         
@@ -6830,7 +6831,7 @@ public class XPathParser
    /**
     * XPath parse of map sequence type expressions.
     */
-   private void parseXdmMapSequenceType(XPathSequenceTypeExpr xpathSequenceTypeExpr) throws TransformerException {
+   private void parseXdmMapSequenceType(XPathSequenceTypeExpr xpathSequenceTypeExpr, boolean isNested) throws TransformerException {
  	  
  	  SequenceTypeMapTest sequenceTypeMapTest = null;
  	  
@@ -6856,10 +6857,8 @@ public class XPathParser
  		  while ((m_token != null) && !tokenIs(',')) {
  			 if (tokenIs(XMLConstants.W3C_XML_SCHEMA_NS_URI)) {
  			    consumeExpected(XMLConstants.W3C_XML_SCHEMA_NS_URI);
- 			    consumeExpected(':');
- 			    
- 			    populateSequenceTypeData(keySequenceTypeData);
- 			 
+ 			    consumeExpected(':'); 			    
+ 			    populateSequenceTypeData(keySequenceTypeData); 			 
  			    nextToken();
  		     }
  		  }
@@ -6870,13 +6869,27 @@ public class XPathParser
  			  if (tokenIs(XMLConstants.W3C_XML_SCHEMA_NS_URI)) {
  				  consumeExpected(XMLConstants.W3C_XML_SCHEMA_NS_URI);
  				  consumeExpected(':');
-
  				  populateSequenceTypeData(valueSequenceTypeData);    	             	         
-
  				  nextToken();     	         
  				  consumeExpected(')');
- 			  }     			      		   
+ 			  }
+ 			  else if (tokenIs("map")) {
+ 				  XPathSequenceTypeExpr xpathSequenceTypeExpr2 = new XPathSequenceTypeExpr();  
+ 				  parseXdmMapSequenceType(xpathSequenceTypeExpr2, true);
+ 				  SequenceTypeMapTest seqTypeMapTest2 = xpathSequenceTypeExpr2.getSequenceTypeMapTest();
+ 				  valueSequenceTypeData.setSequenceTypeMapTest(seqTypeMapTest2);
+ 			  }
+ 			  else if (tokenIs("array")) {
+ 				  XPathSequenceTypeExpr xpathSequenceTypeExpr2 = new XPathSequenceTypeExpr();  
+ 				  parseXdmArraySequenceType(xpathSequenceTypeExpr2, true);
+ 				  SequenceTypeArrayTest seqTypeArrayTest2 = xpathSequenceTypeExpr2.getSequenceTypeArrayTest();
+ 				  valueSequenceTypeData.setSequenceTypeArrayTest(seqTypeArrayTest2);
+ 			  }
  		  }
+ 		  
+ 		  if (isNested) {
+ 		      consumeExpected(')');  
+ 	      } 		  		  
  		
  		  sequenceTypeMapTest.setKeySequenceTypeData(keySequenceTypeData);
  		  sequenceTypeMapTest.setValueSequenceTypeData(valueSequenceTypeData);
@@ -6888,7 +6901,7 @@ public class XPathParser
    /**
     * XPath parse of array sequence type expressions.
     */
-   private void parseXdmArraySequenceType(XPathSequenceTypeExpr xpathSequenceTypeExpr) throws TransformerException {
+   private void parseXdmArraySequenceType(XPathSequenceTypeExpr xpathSequenceTypeExpr, boolean isNested) throws TransformerException {
  	  
  	  SequenceTypeArrayTest sequenceTypeArrayTest = null;
  	  
@@ -6920,7 +6933,10 @@ public class XPathParser
  		     }
  		  }
  		  
- 		  consumeExpected(')');
+ 		  consumeExpected(')'); 		  
+ 		  if (isNested) {
+ 			 consumeExpected(')');  
+ 		  }
  		  
  		  sequenceTypeArrayTest.setArrayItemTypeInfo(arrayItemSequenceType);  	    	  
  		  xpathSequenceTypeExpr.setSequenceTypeArrayTest(sequenceTypeArrayTest); 
diff --git a/src/main/java/org/apache/xpath/composite/SequenceTypeSupport.java b/src/main/java/org/apache/xpath/composite/SequenceTypeSupport.java
index c3f945fae..cba6735e1 100644
--- a/src/main/java/org/apache/xpath/composite/SequenceTypeSupport.java
+++ b/src/main/java/org/apache/xpath/composite/SequenceTypeSupport.java
@@ -369,7 +369,7 @@ public class SequenceTypeSupport {
      * 
      * @throws TransformerException
      */
-    public static XObject castXDMValueToAnotherType(XObject srcValue, String sequenceTypeXPathExprStr, 
+    public static XObject castXdmValueToAnotherType(XObject srcValue, String sequenceTypeXPathExprStr, 
                                                     SequenceTypeData seqExpectedTypeDataInp,  
                                                     XPathContext xctxt, List prefixTable) throws TransformerException {
     	XObject result = null;
@@ -1240,13 +1240,11 @@ public class SequenceTypeSupport {
              			 XObject mapKeyValTypeCheckResult = SequenceTypeSupport.castXdmValueToAnotherType(mapKey, null, keySeqTypeData, xctxt);
              			 String mapSequenceTypeStr = (sequenceTypeXPathExprStr != null) ? sequenceTypeXPathExprStr : "";
              			 if (mapKeyValTypeCheckResult == null) {             				
-             				throw new TransformerException("XPTY0004 : XPath map entry key's [entry's key name: '" + keyStrVal + "'] value doesn't conform to the key's expected "
-             						                                            + "type [map's sequenceType is '" + mapSequenceTypeStr + "']."); 
+             				throw new TransformerException("XPTY0004 : An XPath map entry with key '" + keyStrVal + "', doesn't have a value of specified XPath sequence type."); 
              			 }
              			 XObject mapEntryValTypeCheckResult = SequenceTypeSupport.castXdmValueToAnotherType(mapEntry, null, valueSeqTypeData, xctxt);
              			 if (mapEntryValTypeCheckResult == null) {
-             				throw new TransformerException("XPTY0004 : XPath map entry's [entry's key name: '" + keyStrVal + "'] value doesn't conform to the map entry value's expected "
-             						                                            + "type [map's sequenceType is '" + mapSequenceTypeStr + "'].");  
+             				throw new TransformerException("XPTY0004 : An XPath map entry with key '" + keyStrVal + "', doesn't have a value of specified XPath sequence type.");  
              			 }           			 
              		  }
              		  
@@ -1275,7 +1273,7 @@ public class SequenceTypeSupport {
              			 String arrayItemSequenceTypeStr = (sequenceTypeXPathExprStr != null) ? sequenceTypeXPathExprStr : "";
              			 if (arrayItemTypeCheckResult == null) {             				
              				throw new TransformerException("XPTY0004 : One or more, of XPath array's item doesn't conform to array item's expected "
-             						                                                             + "type '" + arrayItemSequenceTypeStr + "'."); 
+             						                                                                                       + "type '" + arrayItemSequenceTypeStr + "'."); 
              			 }           			 
              		  }
              		  
diff --git a/src/main/java/org/apache/xpath/functions/XSL3FunctionService.java b/src/main/java/org/apache/xpath/functions/XSL3FunctionService.java
index dda2f25a9..1182181d8 100644
--- a/src/main/java/org/apache/xpath/functions/XSL3FunctionService.java
+++ b/src/main/java/org/apache/xpath/functions/XSL3FunctionService.java
@@ -214,20 +214,23 @@ public class XSL3FunctionService {
     				List<String> funcExtArgStrList = null;
     				for (int idx = 0; idx < argVector.size(); idx++) {
     					Expression argExpr = (Expression)(argVector.elementAt(idx));
-    					if (!(argExpr instanceof XPathExprFuncCallExtendedArg)) {
+    					if (argExpr instanceof XPathExprFuncCallExtendedArg) {    						    						
+    						XPathExprFuncCallExtendedArg xpathExprFuncCallExtendedArg = (XPathExprFuncCallExtendedArg)argExpr;
+    						funcExtArgStrList = xpathExprFuncCallExtendedArg.getFunctionArgXPathExprStrList();
+    					}
+    					else {    						    						
     						XObject xslFuncArgVal = null;
-    						if (!(argExpr instanceof XPathNamedFunctionReference)) { 
-    							xslFuncArgVal = argExpr.execute(xctxt);
+    						if (argExpr instanceof XPathNamedFunctionReference) {     							
+    							xslFuncArgVal = (XPathNamedFunctionReference)argExpr;
+    						}
+    						else if ((argExpr instanceof SelfIteratorNoPredicate) && (xctxt.getXPath3ContextItem() != null)) {
+    							xslFuncArgVal = xctxt.getXPath3ContextItem(); 
     						}
     						else {
-    							xslFuncArgVal = (XPathNamedFunctionReference)argExpr; 	
+    							xslFuncArgVal = argExpr.execute(xctxt); 	
     						}
     						xslFuncArgSequence.add(xslFuncArgVal);
-    						xslFuncArgCount++;	
-    					}
-    					else {    						    						
-    						XPathExprFuncCallExtendedArg xpathExprFuncCallExtendedArg = (XPathExprFuncCallExtendedArg)argExpr;
-    						funcExtArgStrList = xpathExprFuncCallExtendedArg.getFunctionArgXPathExprStrList();
+    						xslFuncArgCount++;
     					}
     				}
 
@@ -318,8 +321,8 @@ public class XSL3FunctionService {
     						}
 
     						evalResult = evaluateXPathInlineFunction(xpathInlineFunction, xpathInlineFuncArgList, 
-    								xctxt, prefixTable, null, 0, 
-    								((Expression)xpathExpr).getXPathVarList(), null);    						
+    								                                                      xctxt, prefixTable, null, 0, 
+    								                                                      ((Expression)xpathExpr).getXPathVarList(), null);    						
     					}
 
     					return evalResult;
diff --git a/src/main/java/org/apache/xpath/operations/Variable.java b/src/main/java/org/apache/xpath/operations/Variable.java
index 8450c0cec..00a02b4e3 100644
--- a/src/main/java/org/apache/xpath/operations/Variable.java
+++ b/src/main/java/org/apache/xpath/operations/Variable.java
@@ -271,7 +271,7 @@ public class Variable extends Expression implements PathComponent
         }
         catch (javax.xml.transform.TransformerException ex) {
            java.lang.String exceptionMesg = ex.getMessage();
-           if ((m_qname == null) || ((exceptionMesg != null) && exceptionMesg.startsWith("XTDE0050 : No value supplied"))) {
+           if ((m_qname == null) || ((exceptionMesg != null) && (exceptionMesg.startsWith("XTDE0050") || exceptionMesg.startsWith("XPTY")))) {
               throw ex;   
            }
            else if (XslTransformSharedDatastore.m_xpathNodeCombiningExprRhsStrBuff != null) {
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 47ae99ccd..bf2524355 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-07-24T11:40:48Z" fail="53" name="as" pass="51" skipped="4" statusUnknown="1" totalRun="105">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:33Z" fail="53" name="as" pass="51" 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 14a9688d9..a8c9c0431 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-07-24T11:40:52Z" fail="14" name="avt" pass="21" skipped="0" statusUnknown="0" totalRun="35">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:34Z" 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/_match-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
index 03ddfc719..26e9b7c06 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-07-24T11:40:53Z" fail="61" name="match" pass="67" skipped="8" statusUnknown="1" totalRun="129">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:34Z" 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 641470437..6114b8ee3 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-07-24T11:40:56Z" fail="5" name="select" pass="19" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:34Z" 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 c527386de..49eba1ca2 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-07-24T11:43:13Z" fail="17" name="xpath-default-namespace" pass="9" skipped="0" statusUnknown="0" totalRun="26">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:25Z" fail="17" name="xpath-default-namespace" pass="9" skipped="0" statusUnknown="0" totalRun="26">
    <testResult status="pass" testName="xpath-default-namespace-0101"/>
    <testResult status="fail" 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 4dc455274..398852375 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-07-24T11:41:15Z" fail="8" name="attribute-set" pass="41" skipped="1" statusUnknown="0" totalRun="49">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:41Z" 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 54259f2f3..223f5b6fe 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-07-24T11:41:15Z" fail="12" name="character-map" pass="15" skipped="1" statusUnknown="1" totalRun="28">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:41Z" 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 4fb8682be..236fef776 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-07-24T11:41:13Z" fail="27" name="function" pass="38" skipped="4" statusUnknown="1" totalRun="66">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:41Z" fail="25" name="function" pass="40" skipped="4" statusUnknown="1" totalRun="66">
    <testResult status="fail" testName="function-0001">
       <outResult/>
    </testResult>
@@ -105,26 +105,14 @@
    <testResult status="fail" testName="function-1025">
       <outResult/>
    </testResult>
-   <testResult status="fail" testName="function-1026">
-      <outResult>
-         <errTrace>XPTY0004 : An xsl:function call argument at position 1 for function {http://xxx.com/}test, doesn't match the declared parameter type xs:integer.</errTrace>
-      </outResult>
-   </testResult>
+   <testResult status="fail" testName="function-1026"/>
    <testResult status="fail" testName="function-1027">
       <outResult/>
    </testResult>
-   <testResult status="fail" testName="function-1028">
-      <outResult>
-         <errTrace>XPTY0004 : An xsl:function call argument at position 1 for function {http://xxx.com/}test, doesn't match the declared parameter type xs:integer.</errTrace>
-      </outResult>
-   </testResult>
+   <testResult status="pass" testName="function-1028"/>
    <testResult status="fail" testName="function-1029">
       <outResult/>
    </testResult>
-   <testResult status="fail" testName="function-1030">
-      <outResult>
-         <errTrace>XPTY0004 : An xsl:function call argument at position 1 for function {http://xxx.com/}test, doesn't match the declared parameter type xs:integer.</errTrace>
-      </outResult>
-   </testResult>
+   <testResult status="pass" testName="function-1030"/>
    <testResult testName="function-1031"/>
 </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 fac0f8427..8b688aa4b 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-07-24T11:40:47Z" fail="3" name="variable" pass="16" skipped="0" statusUnknown="1" totalRun="20">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:32Z" 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 b79972132..d487c0ec6 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-07-24T11:41:17Z" fail="20" name="axes" pass="181" skipped="0" statusUnknown="0" totalRun="201">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:42Z" 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 dbe817d38..08e48bb08 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-07-24T11:41:22Z" fail="5" name="castable" pass="4" skipped="0" statusUnknown="0" totalRun="9">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:42Z" 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 9ffe76776..3e4714f36 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-07-24T11:41:22Z" fail="0" name="expression" pass="9" skipped="0" statusUnknown="1" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:42Z" 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 4ff809019..faf907f72 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-07-24T11:41:23Z" fail="2" name="for" pass="1" skipped="0" statusUnknown="1" totalRun="4">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:42Z" 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 13cb3de06..6138130d5 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-07-24T11:41:29Z" fail="6" name="higher-order-functions" pass="18" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:45Z" 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 21351f1ab..e64361aac 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-07-24T11:41:24Z" fail="39" name="math" pass="108" skipped="0" statusUnknown="1" totalRun="148">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:44Z" 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 cee7f3190..2078af1fd 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-07-24T11:41:28Z" fail="36" name="nodetest" pass="2" skipped="0" statusUnknown="0" totalRun="38">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:45Z" 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 cc738deb7..42253057e 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-07-24T11:41:29Z" fail="3" name="path" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:45Z" 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 2f24bd403..a4ffbfbe4 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-07-24T11:41:30Z" fail="7" name="predicate" pass="50" skipped="0" statusUnknown="0" totalRun="57">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:46Z" 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 5a813a224..5c75c8187 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-07-24T11:43:04Z" fail="0" name="deep-equal" pass="2" skipped="0" statusUnknown="0" totalRun="2">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:24Z" 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 780631343..144220b5f 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-07-24T11:43:10Z" fail="32" name="format-number" pass="38" skipped="4" statusUnknown="0" totalRun="70">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:25Z" 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 2e63e8227..52f777f8c 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-07-24T11:43:09Z" fail="3" name="key" pass="21" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:24Z" 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 dba946fa1..2fe07331a 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-07-24T11:43:04Z" fail="11" name="position" pass="126" skipped="0" statusUnknown="1" totalRun="138">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:24Z" 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 a4054277f..9f33c4be1 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-07-24T11:43:09Z" fail="3" name="root" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:24Z" 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 107e4b04d..914bc92cd 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-07-24T11:43:07Z" fail="17" name="analyze-string" pass="36" skipped="5" statusUnknown="0" totalRun="53">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:24Z" fail="17" name="analyze-string" pass="36" 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 3d6d663df..60e249047 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-07-24T11:40:57Z" fail="25" name="apply-templates" pass="21" skipped="2" statusUnknown="0" totalRun="46">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:35Z" fail="25" name="apply-templates" pass="21" skipped="2" 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 3fe2d1bb4..a7661003e 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-07-24T11:41:01Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:36Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
    <testResult status="fail" testName="attribute-0001"/>
    <testResult status="fail" testName="attribute-0002">
       <outResult/>
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 3d5da25e8..2e7b61499 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-07-24T11:41:02Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="41">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:36Z" 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 7adbd1fff..388691134 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-07-24T11:41:03Z" fail="6" name="choose" pass="17" skipped="0" statusUnknown="1" totalRun="24">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:36Z" 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 7c72cfc98..ea98adfc3 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-07-24T11:41:05Z" fail="43" name="copy" pass="16" skipped="0" statusUnknown="1" totalRun="60">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:37Z" 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"/>
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 1b7183d49..110ef4a40 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-07-24T11:41:10Z" fail="18" name="element" pass="11" skipped="0" statusUnknown="0" totalRun="29">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:41Z" 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 f1413f43e..2c1a802d5 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-07-24T11:40:58Z" fail="26" name="for-each-group" pass="47" skipped="4" statusUnknown="1" totalRun="74">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:35Z" 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 a4c7079b2..2e8089124 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-07-24T11:41:07Z" fail="29" name="iterate" pass="15" skipped="0" statusUnknown="0" totalRun="44">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:39Z" fail="29" name="iterate" pass="15" 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 7bbb5c657..3fdad2674 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-07-24T11:41:08Z" fail="18" name="sequence" pass="8" skipped="0" statusUnknown="1" totalRun="27">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:39Z" fail="18" name="sequence" pass="8" skipped="0" statusUnknown="1" totalRun="27">
    <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 d4334b116..babc92982 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-07-24T11:41:11Z" fail="44" name="sort" pass="36" skipped="0" statusUnknown="0" totalRun="80">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:41Z" 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 8e540c947..ad58ee1c1 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-07-24T11:41:01Z" fail="26" name="try" pass="11" skipped="5" statusUnknown="0" totalRun="37">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:35Z" 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/>
@@ -39,8 +39,8 @@
    </testResult>
    <testResult status="fail" testName="try-019">
       <outResult>
-         <errTrace>XPST0008 : Could not find variable with the name of {http://www.w3.org/2005/xqt-errors}value</errTrace>
-         <errTrace>java.lang.NullPointerException</errTrace>
+         <errTrace>FODC0002 : The data from uri 'rubbish.xml' cannot be retrieved.</errTrace>
+         <errTrace>FODC0002 : The data from uri 'rubbish.xml' cannot be retrieved.</errTrace>
       </outResult>
    </testResult>
    <testResult status="pass" testName="try-020"/>
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 f71b72fa8..13f89adc6 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,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:43:13Z" fail="13" name="xsl-document" pass="12" skipped="0" statusUnknown="0" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33: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>
@@ -26,7 +26,7 @@
    <testResult status="pass" testName="xsl-document-0403"/>
    <testResult status="fail" testName="xsl-document-0404">
       <outResult>
-         <errTrace>XTTE0570 : The supplied XDM item doesn't match an XPath sequence type node().</errTrace>
+         <errTrace>XTTE0570 : The supplied xdm item doesn't match an XPath sequence type node().</errTrace>
       </outResult>
    </testResult>
    <testResult status="fail" testName="xsl-document-0501">
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 8c22c7ed1..f69995e8f 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-07-24T11:43:12Z" fail="12" name="regex" pass="33" skipped="0" statusUnknown="0" totalRun="45">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:25Z" fail="12" name="regex" pass="33" skipped="0" statusUnknown="0" totalRun="45">
    <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 1d20f4bf7..f2171b089 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-07-24T11:41:31Z" fail="24" name="boolean" pass="88" skipped="0" statusUnknown="0" totalRun="112">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:46Z" 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 a0e2f63d6..4b92d3613 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-07-24T11:41:37Z" fail="47" name="date" pass="37" skipped="0" statusUnknown="1" totalRun="85">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:46Z" 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 ef71f6d03..d1debc736 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-07-24T11:41:33Z" fail="17" name="node" pass="15" skipped="0" statusUnknown="0" totalRun="32">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:46Z" 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 bfe6265c8..0a33a56b0 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-07-24T11:41:34Z" fail="8" name="string" pass="128" skipped="0" statusUnknown="0" totalRun="136">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:46Z" 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 fdbccd9a2..97f9b3796 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-07-24T11:43:28Z" desc="W3C XSLT 3.0 test suite results" fail="775" pass="1417" skipped="39" success="64.12%" totalRun="2210" xslt_processor="Xalan-J XSLT 3.0 development code">
+<testResult dateTime="2025-07-25T11:34:10Z" desc="W3C XSLT 3.0 test suite results" fail="773" pass="1419" skipped="39" success="64.21%" totalRun="2210" xslt_processor="Xalan-J XSLT 3.0 development code">
   <attr>
     <as fail="53" pass="51" skipped="4" success="48.57%" totalRun="105"/>
     <avt fail="14" pass="21" skipped="0" success="60.0%" totalRun="35"/>
@@ -10,7 +10,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="27" pass="38" skipped="4" success="57.58%" totalRun="66"/>
+    <function fail="25" pass="40" skipped="4" success="60.61%" totalRun="66"/>
     <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/FnParseJsonTests.java b/src/test/java/org/apache/xalan/tests/xpath3/FnParseJsonTests.java
index 1aaeaf45f..d0c0b9d52 100644
--- a/src/test/java/org/apache/xalan/tests/xpath3/FnParseJsonTests.java
+++ b/src/test/java/org/apache/xalan/tests/xpath3/FnParseJsonTests.java
@@ -96,5 +96,45 @@ public class FnParseJsonTests extends XslTransformTestsUtil {
         
         runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
     }
+    
+    @Test
+    public void xslFnParseJsonTest6() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test4.xsl"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test4.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test4.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+    
+    @Test
+    public void xslFnParseJsonTest7() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test5.xsl"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test5.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test5.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+    
+    @Test
+    public void xslFnParseJsonTest8() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test6.xsl"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test6.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test6.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+    
+    @Test
+    public void xslFnParseJsonTest9() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test7.xsl"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test7.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test7.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
 
 }
diff --git a/src/test/java/org/apache/xalan/tests/xpath3/XPathArrayTests.java b/src/test/java/org/apache/xalan/tests/xpath3/XPathArrayTests.java
index fd6422674..7ec42087c 100644
--- a/src/test/java/org/apache/xalan/tests/xpath3/XPathArrayTests.java
+++ b/src/test/java/org/apache/xalan/tests/xpath3/XPathArrayTests.java
@@ -327,5 +327,25 @@ public class XPathArrayTests extends XslTransformTestsUtil {
         
         runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
     }
+    
+    @Test
+    public void xslArrayTest29() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test29.xsl"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test29.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test29.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+    
+    @Test
+    public void xslArrayTest30() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test30.xsl"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test30.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test30.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
 
 }
diff --git a/src/test/resources/fn_parse_json/gold/test4.out b/src/test/resources/fn_parse_json/gold/test4.out
new file mode 100644
index 000000000..8dea126cc
--- /dev/null
+++ b/src/test/resources/fn_parse_json/gold/test4.out
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><result>a1 a2 a3</result>
diff --git a/src/test/resources/fn_parse_json/gold/test5.out b/src/test/resources/fn_parse_json/gold/test5.out
new file mode 100644
index 000000000..8dea126cc
--- /dev/null
+++ b/src/test/resources/fn_parse_json/gold/test5.out
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><result>a1 a2 a3</result>
diff --git a/src/test/resources/fn_parse_json/gold/test6.out b/src/test/resources/fn_parse_json/gold/test6.out
new file mode 100644
index 000000000..8dea126cc
--- /dev/null
+++ b/src/test/resources/fn_parse_json/gold/test6.out
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><result>a1 a2 a3</result>
diff --git a/src/test/resources/fn_parse_json/gold/test7.out b/src/test/resources/fn_parse_json/gold/test7.out
new file mode 100644
index 000000000..8dea126cc
--- /dev/null
+++ b/src/test/resources/fn_parse_json/gold/test7.out
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><result>a1 a2 a3</result>
diff --git a/src/test/resources/fn_parse_json/test2.json b/src/test/resources/fn_parse_json/test2.json
new file mode 100644
index 000000000..9a747c750
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test2.json
@@ -0,0 +1,5 @@
+{
+   "a1" : [1, 2, 3],
+   "a2" : [4, 5, 6],
+   "a3" : [7, 8, 9]
+}
diff --git a/src/test/resources/fn_parse_json/test3.json b/src/test/resources/fn_parse_json/test3.json
new file mode 100644
index 000000000..34b7fa60c
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test3.json
@@ -0,0 +1,17 @@
+{
+   "a1" : {
+      "p" : 1,
+	  "q" : 2,
+	  "r" : 3
+   },
+   "a2" : {
+      "p" : 4,
+	  "q" : 5,
+	  "r" : 6
+   },
+   "a3" : {
+      "p" : 7,
+	  "q" : 8,
+	  "r" : 9
+   }
+}
diff --git a/src/test/resources/fn_parse_json/test4.json b/src/test/resources/fn_parse_json/test4.json
new file mode 100644
index 000000000..70ca09768
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test4.json
@@ -0,0 +1,19 @@
+{
+   "a1" : {
+      "p" : 1,
+	  "q" : 2,
+	  "r" : 3
+   },
+   "a2" : {
+      "p" : [1,2,3],
+	  "q" : 5,
+	  "r" : 6
+   },
+   "a3" : {
+      "p" : 7,
+	  "q" : {
+		 "a" : "hello" 
+	  },
+	  "r" : 9
+   }
+}
diff --git a/src/test/resources/fn_parse_json/test4.xsl b/src/test/resources/fn_parse_json/test4.xsl
new file mode 100644
index 000000000..0f1f33556
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test4.xsl
@@ -0,0 +1,42 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+				xmlns:xs="http://www.w3.org/2001/XMLSchema"
+				xmlns:map="http://www.w3.org/2005/xpath-functions/map"
+				exclude-result-prefixes="#all"
+                version="3.0">
+                
+    <!-- Author: mukulg@apache.org -->
+    
+    <!-- An XSL stylesheet test case, to test XPath 3.1 fn:parse-json 
+         function call. Also testing a relatively complex XPath sequence 
+         type expression used as value of xsl:variable's "as" attribute. -->                 				
+				
+    <xsl:output method="xml" indent="yes"/>
+
+    <xsl:variable name="m1" select="parse-json(unparsed-text('test2.json'))" as="map(xs:string, array(*))"/>	
+
+	<xsl:template match="/">
+	   <result>
+		  <xsl:value-of select="map:keys($m1)"/>	  
+	   </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/fn_parse_json/test5.xsl b/src/test/resources/fn_parse_json/test5.xsl
new file mode 100644
index 000000000..61198d190
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test5.xsl
@@ -0,0 +1,42 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+				xmlns:xs="http://www.w3.org/2001/XMLSchema"
+				xmlns:map="http://www.w3.org/2005/xpath-functions/map"
+				exclude-result-prefixes="#all"
+                version="3.0">
+                
+    <!-- Author: mukulg@apache.org -->
+    
+    <!-- An XSL stylesheet test case, to test XPath 3.1 fn:parse-json 
+         function call. Also testing a relatively complex XPath sequence 
+         type expression used as value of xsl:variable's "as" attribute. -->                  				
+				
+    <xsl:output method="xml" indent="yes"/>
+
+    <xsl:variable name="m1" select="parse-json(unparsed-text('test2.json'))" as="map(xs:string, array(xs:double))"/>	
+
+	<xsl:template match="/">
+	   <result>
+		  <xsl:value-of select="map:keys($m1)"/>	  
+	   </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/fn_parse_json/test6.xsl b/src/test/resources/fn_parse_json/test6.xsl
new file mode 100644
index 000000000..41bfee682
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test6.xsl
@@ -0,0 +1,42 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+				xmlns:xs="http://www.w3.org/2001/XMLSchema"
+				xmlns:map="http://www.w3.org/2005/xpath-functions/map"
+				exclude-result-prefixes="#all"
+                version="3.0">
+                
+    <!-- Author: mukulg@apache.org -->
+    
+    <!-- An XSL stylesheet test case, to test XPath 3.1 fn:parse-json 
+         function call. Also testing a relatively complex XPath sequence 
+         type expression used as value of xsl:variable's "as" attribute. -->                  				
+				
+    <xsl:output method="xml" indent="yes"/>
+
+    <xsl:variable name="m1" select="parse-json(unparsed-text('test3.json'))" as="map(xs:string, map(xs:string, xs:double))"/>	
+
+	<xsl:template match="/">
+	   <result>
+		  <xsl:value-of select="map:keys($m1)"/>	  
+	   </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/fn_parse_json/test7.xsl b/src/test/resources/fn_parse_json/test7.xsl
new file mode 100644
index 000000000..43dd21377
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test7.xsl
@@ -0,0 +1,42 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+				xmlns:xs="http://www.w3.org/2001/XMLSchema"
+				xmlns:map="http://www.w3.org/2005/xpath-functions/map"
+				exclude-result-prefixes="#all"
+                version="3.0">
+                
+    <!-- Author: mukulg@apache.org -->
+    
+    <!-- An XSL stylesheet test case, to test XPath 3.1 fn:parse-json 
+         function call. Also testing a relatively complex XPath sequence 
+         type expression used as value of xsl:variable's "as" attribute. -->                  				
+				
+    <xsl:output method="xml" indent="yes"/>
+
+    <xsl:variable name="m1" select="parse-json(unparsed-text('test4.json'))" as="map(xs:string, map(*))"/>	
+
+	<xsl:template match="/">
+	   <result>
+		  <xsl:value-of select="map:keys($m1)"/>	  
+	   </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_array/gold/test29.out b/src/test/resources/xpath_array/gold/test29.out
new file mode 100644
index 000000000..60f234274
--- /dev/null
+++ b/src/test/resources/xpath_array/gold/test29.out
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+  <one>a b c</one>
+  <two>1 2 3</two>
+  <three>a 1 1.5</three>
+</result>
diff --git a/src/test/resources/xpath_array/gold/test30.out b/src/test/resources/xpath_array/gold/test30.out
new file mode 100644
index 000000000..b46f262ec
--- /dev/null
+++ b/src/test/resources/xpath_array/gold/test30.out
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+  <one>a b c</one>
+  <two>1 2 3</two>
+  <three>a 1 1.5</three>
+  <four>
+    <array>a b c</array>
+    <array>1 2 3</array>
+    <array>a 1 1.5</array>
+  </four>
+</result>
diff --git a/src/test/resources/xpath_array/test2.json b/src/test/resources/xpath_array/test2.json
new file mode 100644
index 000000000..2292c2119
--- /dev/null
+++ b/src/test/resources/xpath_array/test2.json
@@ -0,0 +1,5 @@
+{
+   "a1" : ["a", "b", "c"],
+   "a2" : [1, 2, 3],
+   "a3" : ["a", 1, 1.5]
+}
diff --git a/src/test/resources/xpath_array/test29.xsl b/src/test/resources/xpath_array/test29.xsl
new file mode 100644
index 000000000..55d744b70
--- /dev/null
+++ b/src/test/resources/xpath_array/test29.xsl
@@ -0,0 +1,60 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+				xmlns:xs="http://www.w3.org/2001/XMLSchema"
+				xmlns:fn0="http://fn0"
+				exclude-result-prefixes="#all"
+                version="3.0">
+                
+    <!-- Author: mukulg@apache.org -->
+    
+    <!-- An XSL 3 stylesheet test case, to test XSL function 
+         returning xdm arrays and verifying function's return 
+         value with xsl:function's 'as' attribute. -->                				
+				
+    <xsl:output method="xml" indent="yes"/>				
+
+	<xsl:template match="/">
+	   <result>
+		  <one>
+		    <xsl:value-of select="fn0:func1()"/>
+		  </one>
+		  <two>
+		    <xsl:value-of select="fn0:func2()"/>
+		  </two>
+		  <three>
+		    <xsl:value-of select="fn0:func3()"/>
+		  </three>
+	   </result>
+	</xsl:template>
+
+    <xsl:function name="fn0:func1" as="array(xs:string)">
+       <xsl:sequence select="['a','b','c']"/>
+    </xsl:function>
+
+    <xsl:function name="fn0:func2" as="array(xs:integer)">
+       <xsl:sequence select="[1,2,3]"/>
+    </xsl:function>
+
+    <xsl:function name="fn0:func3" as="array(*)">
+       <xsl:sequence select="['a',1,1.5]"/>
+    </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_array/test30.xsl b/src/test/resources/xpath_array/test30.xsl
new file mode 100644
index 000000000..c79d8a2b3
--- /dev/null
+++ b/src/test/resources/xpath_array/test30.xsl
@@ -0,0 +1,81 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+				xmlns:xs="http://www.w3.org/2001/XMLSchema"
+				xmlns:map="http://www.w3.org/2005/xpath-functions/map"
+				xmlns:fn0="http://fn0"
+				exclude-result-prefixes="#all"
+                version="3.0">
+                
+    <!-- Author: mukulg@apache.org -->
+    
+    <!-- An XSL 3 stylesheet test case, to test XSL function 
+         returning xdm arrays and verifying function's return 
+         value with xsl:function's 'as' attribute.
+          
+         This XSL stylesheet also reads information, from an 
+         external JSON document using fn:unparsed-text and 
+         fn:parse-json functions. 
+    -->                 				
+				
+    <xsl:output method="xml" indent="yes"/>
+
+    <xsl:variable name="m1" select="parse-json(unparsed-text('test2.json'))" as="map(*)"/>	
+
+	<xsl:template match="/">
+	   <result>
+		  <one>
+		    <xsl:value-of select="fn0:func1($m1,'a1')"/>
+		  </one>
+		  <two>
+		    <xsl:value-of select="fn0:func2($m1,'a2')"/>
+		  </two>
+		  <three>
+		    <xsl:value-of select="fn0:func3($m1,'a3')"/>
+		  </three>
+		  <four>
+		     <xsl:for-each select="map:keys($m1)">
+			    <array>
+				   <xsl:value-of select="fn0:func3($m1,.)"/>
+				</array>
+			 </xsl:for-each>
+		  </four>
+	   </result>
+	</xsl:template>
+
+    <xsl:function name="fn0:func1" as="array(xs:string)">
+	   <xsl:param name="m1" as="map(*)"/>
+	   <xsl:param name="k1" as="xs:string"/>
+       <xsl:sequence select="map:get($m1,$k1)"/>
+    </xsl:function>
+
+    <xsl:function name="fn0:func2" as="array(xs:double)">
+       <xsl:param name="m1" as="map(*)"/>
+	   <xsl:param name="k1" as="xs:string"/>
+       <xsl:sequence select="map:get($m1,$k1)"/>
+    </xsl:function>
+
+    <xsl:function name="fn0:func3" as="array(*)">
+       <xsl:param name="m1" as="map(*)"/>
+	   <xsl:param name="k1" as="xs:string"/>
+       <xsl:sequence select="map:get($m1,$k1)"/>
+    </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>


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