Author: mukulg Date: Sat Oct 22 08:42:24 2011 New Revision: 1187673 URL: http://svn.apache.org/viewvc?rev=1187673&view=rev Log: schema 1.1 commit: made some fixes to XPath2 function fn:namespace-uri-from-QName (which is now able to look into the XPath2 dynamic context as well, to resolve namespace prefixes). ref Eclipse bug, https://bugs.eclipse.org/bugs/show_bug.cgi?id=361721. this behavior is needed by one of XSD 1.1 test suite tests. committing related Xerces code base changes as well.
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/AbstractPsychoPathXPath2Impl.java xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/NamespaceSupport.java xerces/java/branches/xml-schema-1.1-dev/tools/org.eclipse.wst.xml.xpath2.processor_1.2.0.jar Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java?rev=1187673&r1=1187672&r2=1187673&view=diff ============================================================================== --- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java (original) +++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java Sat Oct 22 08:42:24 2011 @@ -499,6 +499,7 @@ public final class Constants { // Constants to support PsychoPath XPath engine uses public final static String XPATH2_NAMESPACE_CONTEXT = "XPATH2_NS_CONTEXT"; + public final static String IS_CTA_EVALUATOR = "CTA-EVALUATOR"; // private Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/AbstractPsychoPathXPath2Impl.java URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/AbstractPsychoPathXPath2Impl.java?rev=1187673&r1=1187672&r2=1187673&view=diff ============================================================================== --- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/AbstractPsychoPathXPath2Impl.java (original) +++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/AbstractPsychoPathXPath2Impl.java Sat Oct 22 08:42:24 2011 @@ -17,7 +17,9 @@ package org.apache.xerces.impl.xs; +import java.util.ArrayList; import java.util.Enumeration; +import java.util.List; import java.util.Map; import javax.xml.XMLConstants; @@ -62,6 +64,7 @@ public class AbstractPsychoPathXPath2Imp private DynamicContext fXpath2DynamicContext = null; private Document fDomDoc = null; + /* * Initialize the PsychoPath engine XPath 2.0 dynamic context. This also initializes the XPath engine's static * context, since dynamic context is inherited from the static context. @@ -72,12 +75,24 @@ public class AbstractPsychoPathXPath2Imp // populate the 'PsychoPath XPath 2' static context, with namespace bindings derived from the XML Schema document NamespaceSupport xpath2NamespaceContext = (NamespaceSupport) psychoPathParams.get(Constants.XPATH2_NAMESPACE_CONTEXT); - Enumeration currPrefixes = xpath2NamespaceContext.getAllPrefixes(); - while (currPrefixes.hasMoreElements()) { - String prefix = (String)currPrefixes.nextElement(); - addNamespaceBindingToXPath2DynamicContext(prefix, xpath2NamespaceContext.getURI(prefix)); + Boolean isCtaAvaluator = (Boolean)psychoPathParams.get(Constants.IS_CTA_EVALUATOR); + if (isCtaAvaluator != null && isCtaAvaluator.booleanValue()) { + // check if the call to this method came from CTA evaluator. needs special treatment for handling namespace context. + String[] namespaceBindingInfo = xpath2NamespaceContext.getNamespaceBindingInfo(); + List prefixes = getPrefixesXS11CTA(namespaceBindingInfo); + for (int prfxIdx = 0; prfxIdx < prefixes.size(); prfxIdx++) { + String prefix = (String)prefixes.get(prfxIdx); + addNamespaceBindingToXPath2DynamicContext(prefix, getURIXS11CTA(prefix, namespaceBindingInfo)); + } + } + else { + Enumeration currPrefixes = xpath2NamespaceContext.getAllPrefixes(); + while (currPrefixes.hasMoreElements()) { + String prefix = (String)currPrefixes.nextElement(); + addNamespaceBindingToXPath2DynamicContext(prefix, xpath2NamespaceContext.getURI(prefix)); + } + addNamespaceBindingToXPath2DynamicContext(XMLConstants.XML_NS_PREFIX, XMLConstants.XML_NS_URI); } - addNamespaceBindingToXPath2DynamicContext(XMLConstants.XML_NS_PREFIX, XMLConstants.XML_NS_URI); fXpath2DynamicContext.add_function_library(new FnFunctionLibrary()); fXpath2DynamicContext.add_function_library(new XSCtrLibrary()); fDomDoc = document; @@ -160,4 +175,31 @@ public class AbstractPsychoPathXPath2Imp } // compileXPathStr + + /* + * Get in-scope namespace prefixes. special handling for CTA. + */ + private List getPrefixesXS11CTA(String[] namespaceBindingInfo) { + List prefixes = new ArrayList(); + for (int prefixIdx = 0; prefixIdx < namespaceBindingInfo.length && namespaceBindingInfo[prefixIdx] != null; prefixIdx += 2) { + prefixes.add(namespaceBindingInfo[prefixIdx]); + } + return prefixes; + } // getPrefixesXS11CTA + + + /* + * Get an URI for a particular in-scope namespace prefix. special handling for CTA. + */ + private String getURIXS11CTA(String prefix, String[] namespaceBindingInfo) { + String uri = null; + for (int prefixIdx = 0; prefixIdx < namespaceBindingInfo.length && namespaceBindingInfo[prefixIdx] != null; prefixIdx += 2) { + if (prefix.equals(namespaceBindingInfo[prefixIdx])) { + uri = namespaceBindingInfo[prefixIdx + 1]; + break; + } + } + return uri; + } // getURIXS11CTA + } // class AbstractPsychoPathXPath2Impl Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java?rev=1187673&r1=1187672&r2=1187673&view=diff ============================================================================== --- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java (original) +++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java Sat Oct 22 08:42:24 2011 @@ -159,6 +159,7 @@ public class Test extends AbstractPsycho // construct parameter values for psychopath xpath processor Map psychoPathParams = new HashMap(); psychoPathParams.put(Constants.XPATH2_NAMESPACE_CONTEXT, fXPath2NamespaceContext); + psychoPathParams.put(Constants.IS_CTA_EVALUATOR, Boolean.TRUE); DynamicContext xpath2DynamicContext = initXPath2DynamicContext(null, document, psychoPathParams); xpath2DynamicContext.set_base_uri(fTypeAlternative.getBaseURI()); // set base-uri property in XPath2 static context, to the URI of XSD document if (fTypeAlternative.fXPathDefaultNamespace != null) { Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java?rev=1187673&r1=1187672&r2=1187673&view=diff ============================================================================== --- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java (original) +++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java Sat Oct 22 08:42:24 2011 @@ -72,7 +72,6 @@ class XSDTypeAlternativeTraverser extend private static final XSSimpleType fErrorType; private boolean fIsFullXPathModeForCTA; private String[] fctaXPathModes = {"cta-subset", "cta-full"}; - private AbstractPsychoPathXPath2Impl abstractPsychoPathInst = new AbstractPsychoPathXPath2Impl(); static { SchemaGrammar grammar = SchemaGrammar.getS4SGrammar(Constants.SCHEMA_VERSION_1_1); @@ -207,6 +206,7 @@ class XSDTypeAlternativeTraverser extend XPath xp = xpp.parse("boolean(" + testStr + ")"); Map psychoPathParams = new HashMap(); psychoPathParams.put(Constants.XPATH2_NAMESPACE_CONTEXT, schemaDoc.fNamespaceSupport); + AbstractPsychoPathXPath2Impl abstractPsychoPathInst = new AbstractPsychoPathXPath2Impl(); StaticChecker name_check = new StaticNameResolver(abstractPsychoPathInst.initXPath2DynamicContext(null, null, psychoPathParams)); name_check.check(xp); testExpr = new Test(xp, testStr, typeAlternative, schemaDoc.fNamespaceSupport); Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/NamespaceSupport.java URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/NamespaceSupport.java?rev=1187673&r1=1187672&r2=1187673&view=diff ============================================================================== --- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/NamespaceSupport.java (original) +++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/NamespaceSupport.java Sat Oct 22 08:42:24 2011 @@ -286,6 +286,10 @@ public class NamespaceSupport implements return false; } + public String[] getNamespaceBindingInfo() { + return fNamespace; + } + protected final class Prefixes implements Enumeration { private String[] prefixes; private int counter = 0; Modified: xerces/java/branches/xml-schema-1.1-dev/tools/org.eclipse.wst.xml.xpath2.processor_1.2.0.jar URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/tools/org.eclipse.wst.xml.xpath2.processor_1.2.0.jar?rev=1187673&r1=1187672&r2=1187673&view=diff ============================================================================== Binary files - no diff available. --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@xerces.apache.org For additional commands, e-mail: commits-h...@xerces.apache.org