Author: mukulg
Date: Sat Oct  8 07:51:08 2011
New Revision: 1180333

URL: http://svn.apache.org/viewvc?rev=1180333&view=rev
Log:
starting with need to improve schema 1.1 implementation, as per requirements of 
XSD 1.1 CTA test "cta0006.n01" (contributed by Saxonica), have made following 
improvements in this commit,
- adding in-scope namespaces to XDM tree for type alternatives (for full XPath 
mode evaluation)
- improved implementation of XPath2 "resolve-QName" function and xs:QName type 
implementation. a new PsychoPath XPath 2.0 jar is provided with these 
improvements.

have also done minor refactoring.

Modified:
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/SchemaSymbols.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDTypeAlternativeValidator.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/assertion/XSAssertionXPath2ValueImpl.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.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/xs/SchemaSymbols.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/SchemaSymbols.java?rev=1180333&r1=1180332&r2=1180333&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/SchemaSymbols.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/SchemaSymbols.java
 Sat Oct  8 07:51:08 2011
@@ -41,6 +41,7 @@ public final class SchemaSymbols {
     public static final String XSI_NONAMESPACESCHEMALOCATION = 
"noNamespaceSchemaLocation".intern();
     public static final String XSI_TYPE                      = "type".intern();
     public static final String XSI_NIL                       = "nil".intern();
+    public static final String EMPTY_STRING                  = "".intern(); 
 
     // schema namespace
     public static final String URI_SCHEMAFORSCHEMA           = 
"http://www.w3.org/2001/XMLSchema".intern();

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java?rev=1180333&r1=1180332&r2=1180333&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
 Sat Oct  8 07:51:08 2011
@@ -422,6 +422,8 @@ public class XMLSchemaValidator
     private IDContext fIDContext = null;
     
     private String fDatatypeXMLVersion = null;
+    
+    private NamespaceContext fNamespaceContext = null;
 
     /**
      * A wrapper of the standard error reporter. We'll store all schema errors
@@ -774,6 +776,8 @@ public class XMLSchemaValidator
         if (fDocumentHandler != null) {
             fDocumentHandler.startDocument(locator, encoding, 
namespaceContext, augs);
         }
+        
+        fNamespaceContext = namespaceContext;
 
     } // startDocument(XMLLocator,String)
 
@@ -2246,7 +2250,7 @@ public class XMLSchemaValidator
 
         //process type alternatives
         if (fTypeAlternativesChecking && fCurrentElemDecl != null) {
-           fTypeAlternative = 
fTypeAlternativeValidator.getTypeAlternative(fCurrentElemDecl, element, 
attributes, fInheritableAttrList);           
+           fTypeAlternative = 
fTypeAlternativeValidator.getTypeAlternative(fCurrentElemDecl, element, 
attributes, fInheritableAttrList, fNamespaceContext);           
            if (fTypeAlternative != null) {
                fCurrentType = fTypeAlternative.getTypeDefinition();
            }

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDTypeAlternativeValidator.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDTypeAlternativeValidator.java?rev=1180333&r1=1180332&r2=1180333&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDTypeAlternativeValidator.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDTypeAlternativeValidator.java
 Sat Oct  8 07:51:08 2011
@@ -23,6 +23,7 @@ import org.apache.xerces.impl.xs.alterna
 import org.apache.xerces.impl.xs.alternative.XSTypeAlternativeImpl;
 import org.apache.xerces.impl.xs.util.XSTypeHelper;
 import org.apache.xerces.util.XMLAttributesImpl;
+import org.apache.xerces.xni.NamespaceContext;
 import org.apache.xerces.xni.QName;
 import org.apache.xerces.xni.XMLAttributes;
 import org.apache.xerces.xs.AttributePSVI;
@@ -52,7 +53,7 @@ public class XSDTypeAlternativeValidator
     /*
      * Determine the schema type applicable (represented as XSTypeAlternative 
component) for an element declaration, using type alternative information.
      */
-    public XSTypeAlternative getTypeAlternative(XSElementDecl currentElemDecl, 
QName element, XMLAttributes attributes, Vector inheritableAttrList) {
+    public XSTypeAlternative getTypeAlternative(XSElementDecl currentElemDecl, 
QName element, XMLAttributes attributes, Vector inheritableAttrList, 
NamespaceContext instanceNamespaceContext) {
         
         XSTypeAlternative selectedTypeAlternative = null; 
         
@@ -62,7 +63,7 @@ public class XSDTypeAlternativeValidator
             XMLAttributes ctaAttributes = getAttributesForCTA(attributes, 
inheritableAttrList);
             for (int typeAltIdx = 0; typeAltIdx < typeAlternatives.length; 
typeAltIdx++) {
                 Test ctaTest = typeAlternatives[typeAltIdx].getTest();
-                if (ctaTest != null && ctaTest.evaluateTest(element, 
ctaAttributes)) {
+                if (ctaTest != null && ctaTest.evaluateTest(element, 
ctaAttributes, instanceNamespaceContext)) {
                     selectedTypeAlternative = typeAlternatives[typeAltIdx]; 
                     break;
                 }

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=1180333&r1=1180332&r2=1180333&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  8 07:51:08 2011
@@ -17,14 +17,19 @@
 
 package org.apache.xerces.impl.xs.alternative;
 
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.xml.XMLConstants;
+
 import org.apache.xerces.dom.PSVIAttrNSImpl;
 import org.apache.xerces.dom.PSVIDocumentImpl;
 import org.apache.xerces.impl.xpath.XPath20;
 import org.apache.xerces.impl.xs.AbstractPsychoPathXPath2Impl;
+import org.apache.xerces.impl.xs.SchemaSymbols;
 import org.apache.xerces.util.NamespaceSupport;
+import org.apache.xerces.xni.NamespaceContext;
 import org.apache.xerces.xni.QName;
 import org.apache.xerces.xni.XMLAttributes;
 import org.eclipse.wst.xml.xpath2.processor.ast.XPath;
@@ -102,11 +107,11 @@ public class Test extends AbstractPsycho
     }
     
     /** Evaluate the test expression with respect to the specified element and 
its attributes */
-    public boolean evaluateTest(QName element, XMLAttributes attributes) {     
   
+    public boolean evaluateTest(QName element, XMLAttributes attributes, 
NamespaceContext instanceNamespaceContext) {        
         if (fXPath != null) {
             return fXPath.evaluateTest(element, attributes);
         } else if (fXPathPsychoPath != null) {
-            return evaluateTestWithPsychoPathXPathEngine(element, attributes); 
 
+            return evaluateTestWithPsychoPathXPathEngine(element, attributes, 
instanceNamespaceContext);  
         }
         else {
             return false;
@@ -120,7 +125,7 @@ public class Test extends AbstractPsycho
     /*
      * Evaluate the XPath "test" expression on an XDM instance, for CTA 
evaluation. Uses PsychoPath XPath 2.0 engine for the evaluation. 
      */
-    private boolean evaluateTestWithPsychoPathXPathEngine(QName element, 
XMLAttributes attributes) {
+    private boolean evaluateTestWithPsychoPathXPathEngine(QName element, 
XMLAttributes attributes, NamespaceContext instanceNamespaceContext) {
         
         boolean evaluationResult = false;
 
@@ -134,6 +139,18 @@ public class Test extends AbstractPsycho
                 attrNode.setNodeValue(attributes.getValue(attrIndx));
                 elem.setAttributeNode(attrNode);
             }
+
+            // add in-scope namespaces on the document tree
+            Enumeration currPrefixes = 
instanceNamespaceContext.getAllPrefixes();
+            while (currPrefixes.hasMoreElements()) {
+                String prefix = (String)currPrefixes.nextElement();
+                String nsUri = instanceNamespaceContext.getURI(prefix);
+                if (!(XMLConstants.XML_NS_PREFIX.equals(prefix) || 
XMLConstants.XMLNS_ATTRIBUTE.equals(prefix))) {
+                   String attrName = (prefix!=null && 
!SchemaSymbols.EMPTY_STRING.equals(prefix)) ? 
XMLConstants.XMLNS_ATTRIBUTE+":"+prefix : XMLConstants.XMLNS_ATTRIBUTE;  
+                   elem.setAttribute(attrName, nsUri);  
+                }
+            } 
+            
             document.appendChild(elem);
 
             // construct parameter values for psychopath xpath processor

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/assertion/XSAssertionXPath2ValueImpl.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/assertion/XSAssertionXPath2ValueImpl.java?rev=1180333&r1=1180332&r2=1180333&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/assertion/XSAssertionXPath2ValueImpl.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/assertion/XSAssertionXPath2ValueImpl.java
 Sat Oct  8 07:51:08 2011
@@ -35,7 +35,7 @@ import org.apache.xerces.xs.XSObjectList
 import org.apache.xerces.xs.XSSimpleTypeDefinition;
 import org.apache.xerces.xs.XSTypeDefinition;
 import org.eclipse.wst.xml.xpath2.processor.DynamicContext;
-import org.eclipse.wst.xml.xpath2.processor.PsychoPathTypeHelper;
+import org.eclipse.wst.xml.xpath2.processor.PsychoPathXPathTypeHelper;
 import org.eclipse.wst.xml.xpath2.processor.internal.types.AnyAtomicType;
 import org.eclipse.wst.xml.xpath2.processor.internal.types.AnyType;
 import 
org.eclipse.wst.xml.xpath2.processor.internal.types.SchemaTypeValueFactory;
@@ -263,11 +263,11 @@ public class XSAssertionXPath2ValueImpl 
             // the below 'if else' clauses are written to process few special 
cases handling few of schema types within PsychoPath XPath engine
             final String elementTypeName = elementType.getName();
             if ("dayTimeDuration".equals(elementTypeName)) {
-                typeCode = PsychoPathTypeHelper.DAYTIMEDURATION_DT;
+                typeCode = PsychoPathXPathTypeHelper.DAYTIMEDURATION_DT;
                 isxsd11Type = true;
             }
             else if ("yearMonthDuration".equals(elementTypeName)) {
-                typeCode = PsychoPathTypeHelper.YEARMONTHDURATION_DT;
+                typeCode = PsychoPathXPathTypeHelper.YEARMONTHDURATION_DT;
                 isxsd11Type = true;
             }
 

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java?rev=1180333&r1=1180332&r2=1180333&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java
 Sat Oct  8 07:51:08 2011
@@ -51,9 +51,7 @@ import org.eclipse.wst.xml.xpath2.proces
  * @author Mukul Gandhi, IBM
  * @version $Id$
  */
-public class XSTypeHelper {
-    
-    private static final String EMPTY_STRING = "".intern();    
+public class XSTypeHelper { 
     
     /*
      * Checks if the two schema type components are identical.
@@ -141,43 +139,57 @@ public class XSTypeHelper {
     
     
     /*
-     * Validate a QName value (it should be in correct lexical form, and it's 
prefix must be declared), and report
-     * errors as found.
+     * Validate a QName value (check correct lexical form, and if the prefix 
is declared), and report errors if there.
      */
     public static void validateQNameValue(String qNameStr, NamespaceContext 
namespaceContext, XMLErrorReporter errorReporter) {
         
-        String prefix, localpart;
-        int colonptr = qNameStr.indexOf(':');
-        if (colonptr > 0) {
-            prefix = qNameStr.substring(0, colonptr);
-            localpart = qNameStr.substring(colonptr + 1);
-        } else {
-            prefix = EMPTY_STRING;
-            localpart = qNameStr;
-        }
+        String[] parsedQname = parseQnameString(qNameStr);
+        String prefix = parsedQname[0]; 
+        String localpart = parsedQname[1];
         
         // both prefix (if any) and localpart must be valid NCName
         if (prefix.length() > 0 && !XMLChar.isValidNCName(prefix)) {
-            errorReporter.reportError(XSMessageFormatter.SCHEMA_DOMAIN, 
"cvc-datatype-valid.1.2.1",
-                                      new Object[] {qNameStr, "QName"}, 
XMLErrorReporter.SEVERITY_ERROR);
+            errorReporter.reportError(XSMessageFormatter.SCHEMA_DOMAIN, 
"cvc-datatype-valid.1.2.1", new Object[] {qNameStr, "QName"}, 
XMLErrorReporter.SEVERITY_ERROR);
         }
 
         if(!XMLChar.isValidNCName(localpart)) {
-            errorReporter.reportError(XSMessageFormatter.SCHEMA_DOMAIN, 
"cvc-datatype-valid.1.2.1",
-                                      new Object[] {qNameStr, "QName"}, 
XMLErrorReporter.SEVERITY_ERROR);
+            errorReporter.reportError(XSMessageFormatter.SCHEMA_DOMAIN, 
"cvc-datatype-valid.1.2.1", new Object[] {qNameStr, "QName"}, 
XMLErrorReporter.SEVERITY_ERROR);
         }
 
         // resove prefix to a uri, report an error if failed
         String uri = namespaceContext.getURI(prefix.intern());
         if (prefix.length() > 0 && uri == null) {
-            errorReporter.reportError(XSMessageFormatter.SCHEMA_DOMAIN, 
"UndeclaredPrefix",
-                                      new Object[] {qNameStr, prefix}, 
XMLErrorReporter.SEVERITY_ERROR);
+            errorReporter.reportError(XSMessageFormatter.SCHEMA_DOMAIN, 
"UndeclaredPrefix", new Object[] {qNameStr, prefix}, 
XMLErrorReporter.SEVERITY_ERROR);
         }
         
     } // validateQNameValue
     
     
     /*
+     * Parse QName string value into prefix and local-name pairs.
+     */
+    private static String[] parseQnameString(String qNameStr) {
+        
+        String[] parsedQName = new String[2];
+        
+        String prefix, localpart;
+        int colonptr = qNameStr.indexOf(':');
+        if (colonptr > 0) {
+            prefix = qNameStr.substring(0, colonptr);
+            localpart = qNameStr.substring(colonptr + 1);
+        } else {
+            prefix = SchemaSymbols.EMPTY_STRING;
+            localpart = qNameStr;
+        }
+        parsedQName[0] = prefix;
+        parsedQName[1] = localpart;
+        
+        return parsedQName; 
+        
+    } // parseQnameString 
+    
+    
+    /*
      * Get assertions list of a simpleType definition.
      */
     public static Vector getAssertsFromSimpleType(XSSimpleTypeDefinition 
simplType) {

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=1180333&r1=1180332&r2=1180333&view=diff
==============================================================================
Binary files - no diff available.



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to