[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xerces-cvs
Subject:    svn commit: r1084840 - in
From:       mukulg () apache ! org
Date:       2011-03-24 4:22:54
Message-ID: 20110324042254.3039123889B2 () eris ! apache ! org
[Download RAW message or body]

Author: mukulg
Date: Thu Mar 24 04:22:53 2011
New Revision: 1084840

URL: http://svn.apache.org/viewvc?rev=1084840&view=rev
Log:
refactoring schema 1.1 assertions codebase a bit. also moved methods textually within \
a class, and miscellaneous comments & javadocs improvements. i did try to improve the \
readability and maintainibility of the code base involved in this commit.

Modified:
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java
  xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java
  xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java


Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java
                
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apac \
he/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java?rev=1084840&r1=1084839&r2=1084840&view=diff
 ==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java \
                (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java \
Thu Mar 24 04:22:53 2011 @@ -197,32 +197,14 @@ public class \
                XMLAssertPsychopathXPath2Im
             Augmentations attrAugs = attributes.getAugmentations(attrIdx);
             AttributePSVImpl attrPsvi = \
                (AttributePSVImpl)attrAugs.getItem(Constants.ATTRIBUTE_PSVI);
             XSSimpleTypeDefinition attrSimpleType = (XSSimpleTypeDefinition) \
                attrPsvi.getTypeDefinition();
-            final boolean isTypeDerivedFromList = ((XSSimpleType) \
                attrSimpleType.getBaseType()).getVariety() == \
                XSSimpleType.VARIETY_LIST;
-            final boolean isTypeDerivedFromUnion = ((XSSimpleType) \
                attrSimpleType.getBaseType()).getVariety() == \
                XSSimpleType.VARIETY_UNION;            
             List attrAssertList = \
                fXmlSchemaValidator.getAssertionValidator().getAssertsFromSimpleType(attrSimpleType);
                
-            if (attrAssertList != null) {                
+            if (attrAssertList != null) {
+                boolean isTypeDerivedFromList = ((XSSimpleType) \
attrSimpleType.getBaseType()).getVariety() == XSSimpleType.VARIETY_LIST; +            \
boolean isTypeDerivedFromUnion = ((XSSimpleType) \
attrSimpleType.getBaseType()).getVariety() == XSSimpleType.VARIETY_UNION;             \
                
                 for (int assertIdx = 0; assertIdx < attrAssertList.size(); \
                assertIdx++) {
                     XSAssertImpl assertImpl = \
(XSAssertImpl)attrAssertList.get(assertIdx);  \
                assertImpl.setAttrName(attrQname.localpart);
-                    if (attrSimpleType.getVariety() == \
                XSSimpleTypeDefinition.VARIETY_ATOMIC) {
-                        // evaluating assertions for "simpleType -> restriction" \
                (not derived by union)
-                        setTypedValueFor$value(attrValue, null, attrSimpleType, \
                false);
-                        AssertionError assertError = evaluateOneAssertion(element, \
                assertImpl, attrValue, false, false);
-                        if (assertError != null) {
-                            reportAssertionsError(assertError);    
-                        }                         
-                    }
-                    else if (attrSimpleType.getVariety() == \
                XSSimpleTypeDefinition.VARIETY_LIST) {
-                        // evaluating assertions for "simpleType -> list"            \
                
-                        evaluateAssertionOnSTListValue(element, attrValue, \
                assertImpl, false, attrSimpleType.getItemType(), \
                isTypeDerivedFromList); 
-                    }
-                    else if \
                (((Boolean)attrAugs.getItem("ASSERT_PROC_NEEDED_FOR_UNION")).booleanValue()) \
                {
-                        // evaluating assertions for "simpleType -> union" 
-                        boolean isAttrValidWithAssertions = \
evaluateAssertionOnSTUnion(element, attrSimpleType, isTypeDerivedFromUnion, \
                assertImpl, attrValue, attrAugs);
-                        if (!isAttrValidWithAssertions) {                            \
                
-                            fXmlSchemaValidator.reportSchemaError("cvc-attribute.3", \
new Object[] {element.rawname, attrQname.localpart, attrValue, \
                ((XSSimpleTypeDecl)attrSimpleType).getTypeName()});   
-                        }
-                    }
+                    evaluateOneAssertionFromSimpleType(element, attrValue, attrAugs, \
attrSimpleType, isTypeDerivedFromList, isTypeDerivedFromUnion, assertImpl, true, \
attrQname);  // evaluate assertions on itemType of xs:list
                     XSSimpleTypeDefinition attrItemType = \
attrSimpleType.getItemType();  if (isTypeDerivedFromList && attrItemType != null) {
@@ -295,199 +277,75 @@ public class XMLAssertPsychopathXPath2Im
          
     } // processAllAssertionsOnElement
 
-
-    /*
-     * Determine "string value" of XPath2 context variable $value.
-     */
-    private String getStringValueOf$value(ElementPSVI pElemPSVI) throws DOMException \
                {
-        
-        // there could be adjacent text nodes in a DOM tree. merge them to get the \
                value.
-        NodeList childList = fCurrentAssertDomNode.getChildNodes();
-        StringBuffer textValueContents = new StringBuffer();
-        final int childListLength = childList.getLength();
-        int textChildCount = 0;
-        // we are only interested in text & element nodes. store count of them in \
                this variable.
-        int effectiveChildNodeCount = 0;
-        for (int childNodeIndex = 0; childNodeIndex < childListLength; \
                childNodeIndex++) {
-            Node node = childList.item(childNodeIndex);
-            short nodeType = node.getNodeType();
-            if (nodeType == Node.TEXT_NODE) {
-                textChildCount++;
-                effectiveChildNodeCount++;
-                textValueContents.append(node.getNodeValue());
-            }
-            else if (nodeType == Node.ELEMENT_NODE) {
-                effectiveChildNodeCount++;  
-            }
-        }
-        
-        String strValueOf$value = "";
-        
-        if (textChildCount == effectiveChildNodeCount) {
-            // the DOM tree we are inspecting has simple content. therefore we can \
                find the desired string value. 
-            XSElementDeclaration elemDecl = pElemPSVI.getElementDeclaration();
-            if ((elemDecl.getTypeDefinition()).derivedFrom(SchemaSymbols.URI_SCHEMAFORSCHEMA, \
                SchemaSymbols.ATTVAL_STRING, XSConstants.DERIVATION_RESTRICTION)) {
-                // if element's schema type is derived by restriction from \
                xs:string, white-space normalization is not needed for the
-                // string value for context variable $value.
-                strValueOf$value = textValueContents.toString();  
-            }
-            else {
-                // white-space normalization is needed for the string value of \
                $value in case of derivation from non xs:string atomic types
-                strValueOf$value = XMLChar.trim(textValueContents.toString());
-            }    
-        }
-        else {
-            // the DOM tree we are inspecting has 'mixed/element only' content.
-            strValueOf$value = null; 
-        }
-        
-        return strValueOf$value;
-        
-    } // getStringValueOf$value
-
-
+    
     /*
-     * Evaluate assertions on a "complex type".
+     * Evaluate assertions on a "simple type" on elements.
      */
-    private void evaluateAssertionsFromAComplexType(QName element, List assertions, \
                String value, Augmentations augs) throws Exception {
-        
-        if (value != null) {
-            // complex type with simple content
-            setTypedValueFor$value(value, null, null, false);
-        } else {
-            // complex type with complex content. set xpath context variable $value \
                to an empty sequence.
-            fXpath2DynamicContext.set_variable(new \
org.eclipse.wst.xml.xpath2.processor.internal.types.QName("value"), \
                getXPath2ResultSequence(new ArrayList()));
-        }
+    private void evaluateAssertionsFromASimpleType(QName element, List assertions, \
String value, Augmentations augs) throws Exception {   +              
+        XSSimpleTypeDefinition simpleTypeDefn = (XSSimpleTypeDefinition) \
((ElementPSVI) augs.getItem(Constants.ELEMENT_PSVI)).getTypeDefinition(); +        \
boolean isTypeDerivedFromList = ((XSSimpleType) \
simpleTypeDefn.getBaseType()).getVariety() == XSSimpleType.VARIETY_LIST; +        \
boolean isTypeDerivedFromUnion = ((XSSimpleType) \
simpleTypeDefn.getBaseType()).getVariety() == XSSimpleType.VARIETY_UNION;  
-        XSObjectList assertList = (XSObjectList) assertions;
+        Vector assertList = (Vector) assertions;
         for (int assertIdx = 0; assertIdx < assertList.size(); assertIdx++) {
             XSAssertImpl assertImpl = (XSAssertImpl) assertList.get(assertIdx);
-            String xPathDefaultNamespace = assertImpl.getXPathDefaultNamespace();    \
 +            String xPathDefaultNamespace = assertImpl.getXPathDefaultNamespace(); 
             if (xPathDefaultNamespace != null) {
                 fXpath2DynamicContext.add_namespace(null, xPathDefaultNamespace);  
             }
-            // NOTE: asserts from attributes are not evaluated here. they are \
                evaluated in method startElement -> evaluateAssertsFromAttributes.  
-            if (assertImpl.getType() == XSConstants.ASSERTION) {
-                // is an xs:assert component
-                AssertionError assertError = evaluateOneAssertion(element, \
                assertImpl, value, true, false);
-                if (assertError != null) {
-                    reportAssertionsError(assertError);    
-                }   
-            } 
-            else if (assertImpl.getAttrName() == null) {
-                // complex type with simple content
-                XSSimpleTypeDefinition simpleTypeDefn = null;
-                XSTypeDefinition xsTypeDefn = assertImpl.getTypeDefinition();        \
                
-                if (xsTypeDefn instanceof XSComplexTypeDefinition) {
-                    simpleTypeDefn = ((XSComplexTypeDefinition) \
                xsTypeDefn).getSimpleType();   
-                }
-                else {
-                    simpleTypeDefn = (XSSimpleTypeDefinition) xsTypeDefn;  
-                }
-                ElementPSVI elemPSVI = (ElementPSVI) \
                augs.getItem(Constants.ELEMENT_PSVI);
-                XSComplexTypeDefinition complexTypeDef = \
                (XSComplexTypeDefinition)elemPSVI.getTypeDefinition();
-                if (XSTypeHelper.isComplexTypeDerivedFromSTListByExt(complexTypeDef)) \
                {
-                    // reassign value to simple type instance
-                    simpleTypeDefn = \
                (XSSimpleTypeDefinition)complexTypeDef.getBaseType(); 
-                }
-                final boolean isTypeDerivedFromList = ((XSSimpleType) \
                simpleTypeDefn.getBaseType()).getVariety() == \
                XSSimpleType.VARIETY_LIST;
-                final boolean isTypeDerivedFromUnion = ((XSSimpleType) \
                simpleTypeDefn.getBaseType()).getVariety() == \
                XSSimpleType.VARIETY_UNION;
-                if (simpleTypeDefn.getVariety() == \
                XSSimpleTypeDefinition.VARIETY_ATOMIC) {
-                    // evaluating assertions for "simpleType -> restriction" (not \
                derived by union)
-                    setTypedValueFor$value(value, null, simpleTypeDefn, false);
-                    AssertionError assertError = evaluateOneAssertion(element, \
                assertImpl, value, false, false);
-                    if (assertError != null) {
-                        reportAssertionsError(assertError);    
-                    }
-                }
-                else if (simpleTypeDefn.getVariety() == \
                XSSimpleTypeDefinition.VARIETY_LIST) {
-                    // evaluating assertions for "simpleType -> list"                \
                
-                    evaluateAssertionOnSTListValue(element, value, assertImpl, \
                false, simpleTypeDefn.getItemType(), isTypeDerivedFromList);
-                }
-                else if (((Boolean) \
                augs.getItem("ASSERT_PROC_NEEDED_FOR_UNION")).booleanValue()) {
-                    // evaluating assertions for "simpleType -> union" 
-                    boolean isElemValidWithAssertions = \
evaluateAssertionOnSTUnion(element, simpleTypeDefn, isTypeDerivedFromUnion, \
                assertImpl, value, augs);
-                    if (!isElemValidWithAssertions) {
-                        fXmlSchemaValidator.reportSchemaError("cvc-type.3.1.3", new \
                Object[] {element.rawname, value}); 
-                    }
-                }                
-                // evaluate assertions on itemType of xs:list
-                XSSimpleTypeDefinition listItemType = simpleTypeDefn.getItemType();
-                if (isTypeDerivedFromList && listItemType != null) {
-                    evaluateAssertsFromItemTypeOfSTList(element, listItemType, \
                value);
-                }
-            }            
+            evaluateOneAssertionFromSimpleType(element, value, augs, simpleTypeDefn, \
isTypeDerivedFromList, isTypeDerivedFromUnion, assertImpl, false, null);  }
-       
         
-    } // evaluateAssertionsFromAComplexType
-
+        // evaluate assertions on itemType of xs:list
+        if (isTypeDerivedFromList && simpleTypeDefn.getItemType() != null) {
+            evaluateAssertsFromItemTypeOfSTList(element, \
simpleTypeDefn.getItemType(), value);  +        }
+        
+    } // evaluateAssertionsFromASimpleType
+    
     
     /*
-     * Evaluate assertions on a "simple type" on elements.
+     * Evaluate one assertion instance for a simpleType (this assertion could be \
                from an attribute, simpleType on element or a complexType with simple \
                content).
      */
-    private Augmentations evaluateAssertionsFromASimpleType(QName element, List \
                assertions, String value, Augmentations augs) throws Exception {
-        
-        // initially PSVI object to be returned
-        ElementPSVI elemPSVI = (ElementPSVI) augs.getItem(Constants.ELEMENT_PSVI);
+    private void evaluateOneAssertionFromSimpleType(QName element, String value, \
Augmentations augs, XSSimpleTypeDefinition simpleTypeDefn, boolean \
isTypeDerivedFromList, boolean isTypeDerivedFromUnion, +                              \
XSAssertImpl assertImpl, boolean isAttribute, QName attrQname) throws Exception {  
-        // find the itemType and memberTypes of xs:list and xs:union respectively \
                (only one of these will be applicable)        
-        XSSimpleTypeDefinition itemType = null;               
-        XSObjectList memberTypes = null;
-        XSSimpleTypeDefinition simpleTypeDefn = null;
-        if (elemPSVI.getTypeDefinition().getTypeCategory() == \
                XSTypeDefinition.SIMPLE_TYPE) {
-            simpleTypeDefn = (XSSimpleTypeDefinition) elemPSVI.getTypeDefinition();
-            itemType = simpleTypeDefn.getItemType();
-            if (itemType == null) {
-                memberTypes = simpleTypeDefn.getMemberTypes();    
-            }
-        }
-        
-        final boolean isTypeDerivedFromList = ((XSSimpleType) \
elemPSVI.getTypeDefinition().getBaseType()).getVariety() == \
                XSSimpleType.VARIETY_LIST;
-        final boolean isTypeDerivedFromUnion = ((XSSimpleType) \
elemPSVI.getTypeDefinition().getBaseType()).getVariety() == \
                XSSimpleType.VARIETY_UNION;
-        // process assertions from a simple type definition           
-        Vector assertList = (Vector) assertions;
-        final int assertListLength = assertList.size();
-        for (int assertIdx = 0; assertIdx < assertListLength; assertIdx++) {
-            XSAssertImpl assertImpl = (XSAssertImpl) assertList.get(assertIdx);
-            String xPathDefaultNamespace = assertImpl.getXPathDefaultNamespace(); 
-            if (xPathDefaultNamespace != null) {
-                fXpath2DynamicContext.add_namespace(null, xPathDefaultNamespace);  
-            }
-            if (memberTypes != null && memberTypes.getLength() == 0) {
-                // evaluating assertions for "simpleType -> restriction" (not \
                derived by union)
-                setTypedValueFor$value(value, null, null, false);
-                AssertionError assertError = evaluateOneAssertion(element, \
                assertImpl, value, false, false);
-                if (assertError != null) {
-                    reportAssertionsError(assertError);    
-                }    
+        if (simpleTypeDefn.getVariety() == XSSimpleTypeDefinition.VARIETY_ATOMIC) {
+            // evaluating assertions for "simpleType -> restriction" (not derived by \
union) +            if (isAttribute) {
+               setTypedValueFor$value(value, null, simpleTypeDefn, false);
             }
-            else if (itemType != null) {
-               // evaluating assertions for "simpleType -> list"               
-               evaluateAssertionOnSTListValue(element, value, assertImpl, false, \
                itemType, isTypeDerivedFromList);
-            }            
-            else if (((Boolean) \
                augs.getItem("ASSERT_PROC_NEEDED_FOR_UNION")).booleanValue()) {
-               // evaluating assertions for "simpleType -> union"               
-               boolean isElemValidWithAssertions = \
evaluateAssertionOnSTUnion(element, simpleTypeDefn, isTypeDerivedFromUnion, \
                assertImpl, value, augs);
-               if (!isElemValidWithAssertions) {
-                   fXmlSchemaValidator.reportSchemaError("cvc-type.3.1.3", new \
                Object[] {element.rawname, value}); 
-               }
+            else {
+               setTypedValueFor$value(value, null, null, false);
             }
+            AssertionError assertError = evaluateOneAssertion(element, assertImpl, \
value, false, false); +            if (assertError != null) {
+                reportAssertionsError(assertError);    
+            }                         
         }
-        
-        // evaluate assertions on itemType of xs:list
-        if (isTypeDerivedFromList && itemType != null) {
-            evaluateAssertsFromItemTypeOfSTList(element, itemType, value); 
+        else if (simpleTypeDefn.getVariety() == XSSimpleTypeDefinition.VARIETY_LIST) \
{ +            // evaluating assertions for "simpleType -> list"                    
+            evaluateAssertionOnSTListValue(element, value, assertImpl, false, \
simpleTypeDefn.getItemType(), isTypeDerivedFromList);  +        }
+        else if (((Boolean)augs.getItem("ASSERT_PROC_NEEDED_FOR_UNION")).booleanValue()) \
{ +            // evaluating assertions for "simpleType -> union" 
+            boolean isValueValidWithSTUnion = evaluateAssertionOnSTUnion(element, \
simpleTypeDefn, isTypeDerivedFromUnion, assertImpl, value, augs); +            if \
(!isValueValidWithSTUnion) {  +                if (isAttribute) {
+                   fXmlSchemaValidator.reportSchemaError("cvc-attribute.3", new \
Object[] {element.rawname, attrQname.localpart, value, \
((XSSimpleTypeDecl)simpleTypeDefn).getTypeName()}); +                }
+                else {
+                    fXmlSchemaValidator.reportSchemaError("cvc-type.3.1.3", new \
Object[] {element.rawname, value});  +                }
+            }
         }
         
-        return augs;
-        
-    } // evaluateAssertionsFromASimpleType
+    } // evaluateOneAssertionFromSimpleType
     
     
     /*
-     * Evaluate assertions from itemType (having variety 'atomic') of xs:list. This \
                method is used to evaluate assertions from elements
-     * with simple content, and simpleType definitions from attributes.
+     * Evaluate assertions from itemType with variety 'atomic' on a \
                simpleType->list.
      */
     private void evaluateAssertsFromItemTypeOfSTList(QName element, \
XSSimpleTypeDefinition listItemType, String value) throws Exception {  
@@ -581,6 +439,110 @@ public class XMLAssertPsychopathXPath2Im
     
     
     /*
+     * Evaluate assertions on a "complex type".
+     */
+    private void evaluateAssertionsFromAComplexType(QName element, List assertions, \
String value, Augmentations augs) throws Exception { +        
+        if (value != null) {
+            // complex type with simple content
+            setTypedValueFor$value(value, null, null, false);
+        } else {
+            // complex type with complex content. set xpath context variable $value \
to an empty sequence. +            fXpath2DynamicContext.set_variable(new \
org.eclipse.wst.xml.xpath2.processor.internal.types.QName("value"), \
getXPath2ResultSequence(new ArrayList())); +        }
+        
+        XSObjectList assertList = (XSObjectList) assertions;
+        for (int assertIdx = 0; assertIdx < assertList.size(); assertIdx++) {
+            XSAssertImpl assertImpl = (XSAssertImpl) assertList.get(assertIdx);
+            String xPathDefaultNamespace = assertImpl.getXPathDefaultNamespace();    \
 +            if (xPathDefaultNamespace != null) {
+                fXpath2DynamicContext.add_namespace(null, xPathDefaultNamespace);  
+            }
+            // NOTE: asserts from attributes are not evaluated here. they are \
evaluated in method startElement -> evaluateAssertsFromAttributes.   +            if \
(assertImpl.getType() == XSConstants.ASSERTION) { +                // is an xs:assert \
component +                AssertionError assertError = evaluateOneAssertion(element, \
assertImpl, value, true, false); +                if (assertError != null) {
+                    reportAssertionsError(assertError);    
+                }   
+            } 
+            else if (assertImpl.getAttrName() == null) {
+                // complex type with simple content
+                XSSimpleTypeDefinition simpleTypeDefn = null;
+                XSTypeDefinition xsTypeDefn = assertImpl.getTypeDefinition();        \
 +                if (xsTypeDefn instanceof XSComplexTypeDefinition) {
+                    simpleTypeDefn = ((XSComplexTypeDefinition) \
xsTypeDefn).getSimpleType();    +                }
+                else {
+                    simpleTypeDefn = (XSSimpleTypeDefinition) xsTypeDefn;  
+                }
+                ElementPSVI elemPSVI = (ElementPSVI) \
augs.getItem(Constants.ELEMENT_PSVI); +                XSComplexTypeDefinition \
complexTypeDef = (XSComplexTypeDefinition)elemPSVI.getTypeDefinition(); +             \
if (XSTypeHelper.isComplexTypeDerivedFromSTList(complexTypeDef, \
XSConstants.DERIVATION_EXTENSION)) { +                    // reassign value to simple \
type instance +                    simpleTypeDefn = \
(XSSimpleTypeDefinition)complexTypeDef.getBaseType();  +                }
+                boolean isTypeDerivedFromList = ((XSSimpleType) \
simpleTypeDefn.getBaseType()).getVariety() == XSSimpleType.VARIETY_LIST; +            \
boolean isTypeDerivedFromUnion = ((XSSimpleType) \
simpleTypeDefn.getBaseType()).getVariety() == XSSimpleType.VARIETY_UNION; +           \
evaluateOneAssertionFromSimpleType(element, value, augs, simpleTypeDefn, \
isTypeDerivedFromList, isTypeDerivedFromUnion, assertImpl, false, null);              \
 +                // evaluate assertions on itemType of xs:list
+                XSSimpleTypeDefinition listItemType = simpleTypeDefn.getItemType();
+                if (isTypeDerivedFromList && listItemType != null) {
+                    evaluateAssertsFromItemTypeOfSTList(element, listItemType, \
value); +                }
+            }            
+        }       
+        
+    } // evaluateAssertionsFromAComplexType
+    
+    
+    /*
+     * Method to evaluate an assertion. Returns the evaluation error details in an \
AssertionError object. +     */
+    private AssertionError evaluateOneAssertion(QName element, XSAssertImpl \
assertImpl, String value, boolean xPathContextExists, boolean isList) { +        
+        AssertionError assertionError = null;
+        
+        try {  
+            XPath xp = assertImpl.getCompiledXPath();
+            
+            boolean result;            
+            if ((value == null) ||
+                (xPathContextExists == true)) {
+                result = fAbstrPsychopathImpl.evaluateXPathExpr(xp, \
fCurrentAssertDomNode);   +            } 
+            else {
+                // XPath context is "undefined"
+                result = fAbstrPsychopathImpl.evaluateXPathExpr(xp, null); 
+            }
+            
+            if (!result) {
+               // assertion evaluation is false
+               assertionError = new AssertionError("cvc-assertion.3.13.4.1", \
element, assertImpl, value, isList);  +            }
+        }
+        catch (DynamicError ex) {
+            if (ex.code().equals("XPDY0002")) {
+               // ref: http://www.w3.org/TR/xpath20/#eval_context
+               assertionError = new AssertionError("cvc-assertions-valid-context", \
element, assertImpl, value, isList); +            }
+            else {
+               assertionError = new AssertionError("cvc-assertion.3.13.4.1", \
element, assertImpl, value, isList); +            }
+        }
+        catch (StaticError ex) {
+            assertionError = new AssertionError("cvc-assertion.3.13.4.1", element, \
assertImpl, value, isList); +        }
+        catch(Exception ex) {
+            assertionError = new AssertionError("cvc-assertion.3.13.4.1", element, \
assertImpl, value, isList);    +        }
+        
+        return assertionError;
+        
+    } // evaluateOneAssertion
+    
+    
+    /*
      * Determine if an validation episode must fail due to assertions evaluation for \
                "simpleType -> union" member types.
      */
     private boolean isValidationFailedForSTUnion(XSObjectList memberTypes, QName \
element, String value, boolean isAttribute, Augmentations augs) { @@ -592,7 +554,7 @@ \
                public class XMLAssertPsychopathXPath2Im
             XSSimpleTypeDefinition memType = (XSSimpleTypeDefinition) \
memberTypes.item(memberTypeIdx);  
             // check for assertions on types in an non-schema namespace
-            if (!SchemaSymbols.URI_SCHEMAFORSCHEMA.equals(memType.getNamespace()) && \
simpleTypeHasAsserts(memType)) { +            if \
(!SchemaSymbols.URI_SCHEMAFORSCHEMA.equals(memType.getNamespace()) && \
                XSTypeHelper.simpleTypeHasAsserts(memType)) {
                 XSObjectList memberTypeFacets = memType.getMultiValueFacets();
                 final int memberTypeFacetsLength = memberTypeFacets.getLength();
                 for (int memberTypeFacetIdx = 0; memberTypeFacetIdx < \
memberTypeFacetsLength; memberTypeFacetIdx++) { @@ -641,25 +603,26 @@ public class \
XMLAssertPsychopathXPath2Im  
     
     /*
-     * Check if a simple type has assertion facets.
+     * Find the actual schema type of "list item" instance if the "item type" of \
                list has variety union. 
      */
-    private boolean simpleTypeHasAsserts(XSSimpleTypeDefinition simpleType) {
-        
-        boolean simpleTypehasAsserts = false;
+    private XSSimpleTypeDefinition getActualListItemTypeForVarietyUnion(XSObjectList \
memberTypes, String listItemStrValue) { +
+        XSSimpleTypeDefinition listItemType = null;
         
-        XSObjectList simpleTypeFacets = simpleType.getMultiValueFacets();
-        final int simpleTypeFacetsLength = simpleTypeFacets.getLength();
-        for (int facetIdx = 0; facetIdx < simpleTypeFacetsLength; facetIdx++) {
-            XSMultiValueFacet facet = (XSMultiValueFacet) \
                simpleTypeFacets.item(facetIdx);
-            if (facet.getFacetKind() == XSSimpleTypeDefinition.FACET_ASSERT && \
                facet.getAsserts().size() > 0) {
-                simpleTypehasAsserts = true;
-                break;
-            }
+        // iterate the member types of union in order, to find that which schema \
type can successfully validate an atomic value first +        final int \
memberTypesLength = memberTypes.getLength(); +        for (int memTypeIdx = 0; \
memTypeIdx < memberTypesLength; memTypeIdx++) { +           XSSimpleType \
memSimpleType = (XSSimpleType) memberTypes.item(memTypeIdx); +           if \
(XSTypeHelper.isValueValidForASimpleType(listItemStrValue, memSimpleType)) { +        \
// no more memberTypes need to be checked +              listItemType = \
memSimpleType;  +              break; 
+           }
         }
         
-        return simpleTypehasAsserts;
-
-    } // simpleTypeHasAsserts
+        return listItemType;
+        
+    } // getActualListItemTypeForVarietyUnion
     
 
     /*
@@ -673,52 +636,56 @@ public class XMLAssertPsychopathXPath2Im
             fCurrentAssertDomNode.appendChild(fAssertDocument.createTextNode(new \
String(text.ch, text.offset, text.length)));  }        
     }
+        
     
-
     /*
-     * Method to evaluate an assertion. Returns the evaluation error details in an \
AssertionError object. +     * Determine "string value" of XPath2 context variable \
                $value.
      */
-    private AssertionError evaluateOneAssertion(QName element, XSAssertImpl \
                assertImpl, String value, boolean xPathContextExists, boolean isList) \
                {
-        
-        AssertionError assertionError = null;
+    private String getStringValueOf$value(ElementPSVI pElemPSVI) throws DOMException \
{  
-        try {  
-            XPath xp = assertImpl.getCompiledXPath();
-            
-            boolean result;            
-            if ((value == null) ||
-                (xPathContextExists == true)) {
-                result = fAbstrPsychopathImpl.evaluateXPathExpr(xp, \
                fCurrentAssertDomNode);  
-            } 
-            else {
-                // XPath context is "undefined"
-                result = fAbstrPsychopathImpl.evaluateXPathExpr(xp, null); 
+        // there could be adjacent text nodes in a DOM tree. merge them to get the \
value. +        NodeList childList = fCurrentAssertDomNode.getChildNodes();
+        StringBuffer textValueContents = new StringBuffer();
+        final int childListLength = childList.getLength();
+        int textChildCount = 0;
+        // we are only interested in text & element nodes. store count of them in \
this variable. +        int effectiveChildNodeCount = 0;
+        for (int childNodeIndex = 0; childNodeIndex < childListLength; \
childNodeIndex++) { +            Node node = childList.item(childNodeIndex);
+            short nodeType = node.getNodeType();
+            if (nodeType == Node.TEXT_NODE) {
+                textChildCount++;
+                effectiveChildNodeCount++;
+                textValueContents.append(node.getNodeValue());
             }
-            
-            if (!result) {
-               // assertion evaluation is false
-               assertionError = new AssertionError("cvc-assertion.3.13.4.1", \
element, assertImpl, value, isList);  +            else if (nodeType == \
Node.ELEMENT_NODE) { +                effectiveChildNodeCount++;  
             }
         }
-        catch (DynamicError ex) {
-            if (ex.code().equals("XPDY0002")) {
-               // ref: http://www.w3.org/TR/xpath20/#eval_context
-               assertionError = new AssertionError("cvc-assertions-valid-context", \
element, assertImpl, value, isList); +        
+        String strValueOf$value = "";
+        
+        if (textChildCount == effectiveChildNodeCount) {
+            // the DOM tree we are inspecting has simple content. therefore we can \
find the desired string value.  +            XSElementDeclaration elemDecl = \
pElemPSVI.getElementDeclaration(); +            if \
((elemDecl.getTypeDefinition()).derivedFrom(SchemaSymbols.URI_SCHEMAFORSCHEMA, \
SchemaSymbols.ATTVAL_STRING, XSConstants.DERIVATION_RESTRICTION)) { +                \
// if element's schema type is derived by restriction from xs:string, white-space \
normalization is not needed for the +                // string value for context \
variable $value. +                strValueOf$value = textValueContents.toString();  
             }
             else {
-               assertionError = new AssertionError("cvc-assertion.3.13.4.1", \
                element, assertImpl, value, isList);
-            }
-        }
-        catch (StaticError ex) {
-            assertionError = new AssertionError("cvc-assertion.3.13.4.1", element, \
assertImpl, value, isList); +                // white-space normalization is needed \
for the string value of $value in case of derivation from non xs:string atomic types \
+                strValueOf$value = XMLChar.trim(textValueContents.toString()); +     \
}      }
-        catch(Exception ex) {
-            assertionError = new AssertionError("cvc-assertion.3.13.4.1", element, \
assertImpl, value, isList);    +        else {
+            // the DOM tree we are inspecting has 'mixed/element only' content.
+            strValueOf$value = null; 
         }
         
-        return assertionError;
+        return strValueOf$value;
         
-    } // evaluateOneAssertion
+    } // getStringValueOf$value
     
     
     /*
@@ -913,29 +880,6 @@ public class XMLAssertPsychopathXPath2Im
         return xpath2Seq;
         
     } // getXPath2ResultSequence
-
-    
-    /*
-     * Find the actual schema type of "list item" instance if the "item type" of \
                list has variety union. 
-     */
-    private XSSimpleTypeDefinition getActualListItemTypeForVarietyUnion(XSObjectList \
                memberTypes, String listItemStrValue) {
-
-        XSSimpleTypeDefinition listItemType = null;
-        
-        // iterate the member types of union in order, to find that which schema \
                type can successfully validate an atomic value first
-        final int memberTypesLength = memberTypes.getLength();
-        for (int memTypeIdx = 0; memTypeIdx < memberTypesLength; memTypeIdx++) {
-           XSSimpleType memSimpleType = (XSSimpleType) memberTypes.item(memTypeIdx);
-           if (XSTypeHelper.isValueValidForASimpleType(listItemStrValue, \
                memSimpleType)) {
-              // no more memberTypes need to be checked
-              listItemType = memSimpleType; 
-              break; 
-           }
-        }
-        
-        return listItemType;
-        
-    } // getActualListItemTypeForVarietyUnion
     
     
     /*

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java
                
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apac \
he/xerces/impl/xs/XSDAssertionValidator.java?rev=1084840&r1=1084839&r2=1084840&view=diff
 ==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java \
                (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java \
Thu Mar 24 04:22:53 2011 @@ -174,7 +174,7 @@ public class XSDAssertionValidator {
         
         XSObjectListImpl complexTypeAsserts = new XSObjectListImpl();
 
-        XSObjectList primaryAssertions = complexTypeDef.getAssertions();
+        XSObjectList primaryAssertions = complexTypeDef.getAssertions(); // \
assertions stored in the traverser layer  
         if (primaryAssertions.getLength() > 0) {
             for (int assertIdx = 0; assertIdx < primaryAssertions.getLength(); \
assertIdx++) { @@ -193,7 +193,7 @@ public class XSDAssertionValidator {
                     complexTypeAsserts.addXSObject((XSAssert) \
simpleContentAsserts.get(assertIdx));  }
             }
-            else if \
(XSTypeHelper.isComplexTypeDerivedFromSTListByExt(complexTypeDef)) { +            \
else if (XSTypeHelper.isComplexTypeDerivedFromSTList(complexTypeDef, \
                XSConstants.DERIVATION_EXTENSION)) {
                 // add assertions from the list->itemType of base schema simple type
                 Vector baseItemTypeAsserts = \
XSTypeHelper.getAssertsFromSimpleType(((XSSimpleTypeDefinition)complexTypeDef.getBaseType()).getItemType());
                
                 for (int assertIdx = 0; assertIdx < baseItemTypeAsserts.size(); \
assertIdx++) { @@ -202,10 +202,9 @@ public class XSDAssertionValidator {
             }
         }
         
-
         // find assertions from attributes of a complex type, and add them to the \
                parent assertions list
         XSObjectListImpl attrAsserts = getAssertsFromAttributes(attributes);
-        final int attrAssertCount = attrAsserts.getLength(); 
+        int attrAssertCount = attrAsserts.getLength(); 
         for (int attrAssertIdx = 0; attrAssertIdx < attrAssertCount; \
                attrAssertIdx++) {
             complexTypeAsserts.addXSObject(attrAsserts.item(attrAssertIdx)); 
         }

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/apac \
he/xerces/impl/xs/util/XSTypeHelper.java?rev=1084840&r1=1084839&r2=1084840&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 \
Thu Mar 24 04:22:53 2011 @@ -34,7 +34,6 @@ import org.apache.xerces.impl.xs.XSMessa
 import org.apache.xerces.util.XMLChar;
 import org.apache.xerces.xni.NamespaceContext;
 import org.apache.xerces.xs.XSComplexTypeDefinition;
-import org.apache.xerces.xs.XSConstants;
 import org.apache.xerces.xs.XSMultiValueFacet;
 import org.apache.xerces.xs.XSObjectList;
 import org.apache.xerces.xs.XSSimpleTypeDefinition;
@@ -50,8 +49,7 @@ import org.apache.xerces.xs.XSTypeDefini
  */
 public class XSTypeHelper {
     
-    private static final String EMPTY_STRING = "".intern();
-    
+    private static final String EMPTY_STRING = "".intern();    
     
     /*
      * Checks if the two schema type components are identical.
@@ -195,6 +193,28 @@ public class XSTypeHelper {
     
     
     /*
+     * Check if a simple type has assertion facets.
+     */
+    public static boolean simpleTypeHasAsserts(XSSimpleTypeDefinition simpleType) {
+        
+        boolean simpleTypehasAsserts = false;
+        
+        XSObjectList simpleTypeFacets = simpleType.getMultiValueFacets();
+        final int simpleTypeFacetsLength = simpleTypeFacets.getLength();
+        for (int facetIdx = 0; facetIdx < simpleTypeFacetsLength; facetIdx++) {
+            XSMultiValueFacet facet = (XSMultiValueFacet) \
simpleTypeFacets.item(facetIdx); +            if (facet.getFacetKind() == \
XSSimpleTypeDefinition.FACET_ASSERT && facet.getAsserts().size() > 0) { +             \
simpleTypehasAsserts = true; +                break;
+            }
+        }
+        
+        return simpleTypehasAsserts;
+
+    } // simpleTypeHasAsserts
+    
+    
+    /*
      * Find if a list contains a specified schema type.
      */
     public static boolean isListContainsType(List typeList, XSTypeDefinition \
targetType) { @@ -212,15 +232,14 @@ public class XSTypeHelper {
     
     
     /*
-     * Find if a complexType is derived by extension from a simpleType->list \
component. +     * Find if a complexType is derived from a simpleType->list \
                component.
      */
-    public static boolean \
isComplexTypeDerivedFromSTListByExt(XSComplexTypeDefinition complexTypeDef) { +    \
public static boolean isComplexTypeDerivedFromSTList(XSComplexTypeDefinition \
complexTypeDef, short derivationMethod) {  
-        return complexTypeDef.getDerivationMethod() == \
                XSConstants.DERIVATION_EXTENSION &&
-               complexTypeDef.getBaseType() instanceof XSSimpleTypeDefinition &&
+        return complexTypeDef.getDerivationMethod() == derivationMethod && \
                complexTypeDef.getBaseType() instanceof XSSimpleTypeDefinition &&
                ((XSSimpleTypeDefinition)complexTypeDef.getBaseType()).getVariety() \
== XSSimpleTypeDefinition.VARIETY_LIST;  
-    } // isComplexTypeDerivedFromSTListByExt
+    } // isComplexTypeDerivedFromSTList
     
     
     /*



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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic