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