You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by kn...@apache.org on 2009/11/26 15:30:02 UTC

svn commit: r884566 [1/3] - in /xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces: impl/xs/models/ impl/xs/traversers/ impl/xs/util/ parsers/

Author: knoaman
Date: Thu Nov 26 14:30:01 2009
New Revision: 884566

URL: http://svn.apache.org/viewvc?rev=884566&view=rev
Log:
Synchronize the 1.1 branch with Xerces-J trunk- Part 2

Added:
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XCMValidatorHelper.java   (with props)
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/ObjectListImpl.java   (with props)
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSInputSource.java   (with props)
Modified:
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11AllCM.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSAllCM.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSCMValidator.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSDFACM.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSEmptyCM.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAttributeGroupTraverser.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAttributeTraverser.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDGroupTraverser.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDKeyrefTraverser.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDNotationTraverser.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDSimpleTypeTraverser.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDUniqueOrKeyTraverser.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/DOMParserImpl.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/StandardParserConfiguration.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/XML11Configuration.java

Added: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XCMValidatorHelper.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XCMValidatorHelper.java?rev=884566&view=auto
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XCMValidatorHelper.java (added)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XCMValidatorHelper.java Thu Nov 26 14:30:01 2009
@@ -0,0 +1,29 @@
+/*
+ * 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.xerces.impl.xs.models;
+
+import org.apache.xerces.impl.xs.XSElementDecl;
+import org.apache.xerces.xni.QName;
+
+/**
+ * @version $Id$
+ */
+public interface XCMValidatorHelper {
+
+    public XSElementDecl getGlobalElementDecl(QName element);
+}

Propchange: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XCMValidatorHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XCMValidatorHelper.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11AllCM.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11AllCM.java?rev=884566&r1=884565&r2=884566&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11AllCM.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11AllCM.java Thu Nov 26 14:30:01 2009
@@ -20,7 +20,6 @@
 import java.util.Vector;
 
 import org.apache.xerces.impl.Constants;
-import org.apache.xerces.impl.xs.SchemaGrammar;
 import org.apache.xerces.impl.xs.SubstitutionGroupHandler;
 import org.apache.xerces.impl.xs.XMLSchemaException;
 import org.apache.xerces.impl.xs.XSConstraints;
@@ -151,12 +150,12 @@
     private boolean allowExpandedName(XSWildcardDecl wildcard,
                                       QName curElem,
                                       SubstitutionGroupHandler subGroupHandler,
-                                      SchemaGrammar grammar) {
+                                      XCMValidatorHelper xcmHelper) {
         if (wildcard.allowQName(curElem)) {
             if (wildcard.fDisallowedSibling && findMatchingElemDecl(curElem, subGroupHandler) != null) {
                 return false;
             }
-            if (wildcard.fDisallowedDefined && grammar.getElementDeclaration(curElem.localpart) != null) {
+            if (wildcard.fDisallowedDefined && xcmHelper.getGlobalElementDecl(curElem) != null) {
                 return false;
             }
             return true;
@@ -171,7 +170,8 @@
      * @param currentState  Current state
      * @return an element decl object
      */
-    public Object oneTransition (QName elementName, int[] currentState, SubstitutionGroupHandler subGroupHandler, SchemaGrammar grammar) {
+    public Object oneTransition (QName elementName, int[] currentState,
+            SubstitutionGroupHandler subGroupHandler, XCMValidatorHelper xcmHelper) {
         // error state
         if (currentState[0] < 0) {
             currentState[0] = XSCMValidator.SUBSEQUENT_ERROR;
@@ -180,7 +180,7 @@
 
         // open content - suffix mode
         if (currentState[0] == STATE_SUFFIX) {
-            if (allowExpandedName(fOpenContent.fWildcard, elementName, subGroupHandler, grammar)) {
+            if (allowExpandedName(fOpenContent.fWildcard, elementName, subGroupHandler, xcmHelper)) {
                 return fOpenContent;
             }
             else { // error
@@ -210,7 +210,7 @@
             if (currentState[i + 1] == fDeclsOccurs[declMaxOccurs]) {
                 continue;
             }
-            if (allowExpandedName((XSWildcardDecl)fAllDecls[i], elementName, subGroupHandler, grammar)) {
+            if (allowExpandedName((XSWildcardDecl)fAllDecls[i], elementName, subGroupHandler, xcmHelper)) {
                 // found the decl, mark this element as "seen".
                 ++currentState[i + 1];
                 return fAllDecls[i];
@@ -228,7 +228,7 @@
                     return findMatchingDecl(elementName, subGroupHandler);
                 }
             }
-            if (allowExpandedName(fOpenContent.fWildcard, elementName, subGroupHandler, grammar)) {
+            if (allowExpandedName(fOpenContent.fWildcard, elementName, subGroupHandler, xcmHelper)) {
             //if (fOpenContent.fWildcard.allowQName(elementName)) {
                 return fOpenContent;
             }

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSAllCM.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSAllCM.java?rev=884566&r1=884565&r2=884566&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSAllCM.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSAllCM.java Thu Nov 26 14:30:01 2009
@@ -19,8 +19,6 @@
 
 import java.util.Vector;
 
-import org.apache.xerces.impl.Constants;
-import org.apache.xerces.impl.xs.SchemaGrammar;
 import org.apache.xerces.impl.xs.SubstitutionGroupHandler;
 import org.apache.xerces.impl.xs.XMLSchemaException;
 import org.apache.xerces.impl.xs.XSConstraints;
@@ -115,7 +113,7 @@
      * @param currentState  Current state
      * @return an element decl object
      */
-    public Object oneTransition (QName elementName, int[] currentState, SubstitutionGroupHandler subGroupHandler, SchemaGrammar grammar) {
+    public Object oneTransition (QName elementName, int[] currentState, SubstitutionGroupHandler subGroupHandler, XCMValidatorHelper xcmHelper) {
 
         // error state
         if (currentState[0] < 0) {

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSCMValidator.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSCMValidator.java?rev=884566&r1=884565&r2=884566&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSCMValidator.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSCMValidator.java Thu Nov 26 14:30:01 2009
@@ -19,7 +19,6 @@
 
 import java.util.Vector;
 
-import org.apache.xerces.impl.xs.SchemaGrammar;
 import org.apache.xerces.impl.xs.SubstitutionGroupHandler;
 import org.apache.xerces.impl.xs.XMLSchemaException;
 import org.apache.xerces.impl.xs.XSConstraints;
@@ -58,11 +57,11 @@
      *
      * @param elementName
      * @param state  Current state
-     * @param grammar SchemaGrammar that corresponds to the namespace of the element
+     * @param xcmHelper A helper that allows inquiry of global element declarations
      * @return element decl or wildcard decl that
      *         corresponds to the element from the Schema grammar
      */
-    public Object oneTransition (QName elementName, int[] state, SubstitutionGroupHandler subGroupHandler, SchemaGrammar grammar);
+    public Object oneTransition (QName elementName, int[] state, SubstitutionGroupHandler subGroupHandler, XCMValidatorHelper xcmHelper);
 
 
     /**

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSDFACM.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSDFACM.java?rev=884566&r1=884565&r2=884566&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSDFACM.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSDFACM.java Thu Nov 26 14:30:01 2009
@@ -23,7 +23,6 @@
 import org.apache.xerces.impl.Constants;
 import org.apache.xerces.impl.dtd.models.CMNode;
 import org.apache.xerces.impl.dtd.models.CMStateSet;
-import org.apache.xerces.impl.xs.SchemaGrammar;
 import org.apache.xerces.impl.xs.SchemaSymbols;
 import org.apache.xerces.impl.xs.SubstitutionGroupHandler;
 import org.apache.xerces.impl.xs.XMLSchemaException;
@@ -269,7 +268,7 @@
      *
      * @exception RuntimeException thrown on error
      */
-    public Object oneTransition(QName curElem, int[] state, SubstitutionGroupHandler subGroupHandler, SchemaGrammar grammar) {
+    public Object oneTransition(QName curElem, int[] state, SubstitutionGroupHandler subGroupHandler, XCMValidatorHelper xcmHelper) {
         int curState = state[0];
 
         if(curState == XSCMValidator.FIRST_ERROR || curState == XSCMValidator.SUBSEQUENT_ERROR) {
@@ -283,7 +282,7 @@
         }
         // apply open content - suffix mode 
         else if (state[3] == STATE_SUFFIX) {
-            if (allowExpandedName(fOpenContent.fWildcard, curElem, subGroupHandler, grammar)) {//if (fOpenContent.fWildcard.allowQName(curElem)) {
+            if (allowExpandedName(fOpenContent.fWildcard, curElem, subGroupHandler, xcmHelper)) {//if (fOpenContent.fWildcard.allowQName(curElem)) {
                 return fOpenContent;
             }
 
@@ -317,7 +316,7 @@
                     }
                 }
                 // XML Schema 1.1
-                else if (allowExpandedName((XSWildcardDecl)fElemMap[elemIndex], curElem, subGroupHandler, grammar)) {
+                else if (allowExpandedName((XSWildcardDecl)fElemMap[elemIndex], curElem, subGroupHandler, xcmHelper)) {
                     matchingDecl = fElemMap[elemIndex];
                     // Element has precedence over a wildcard
                     // if no occurences or we reached minOccurs, keep looking for
@@ -356,7 +355,7 @@
         if (matchingDecl == null) {
             // XML Schema 1.1
             // Validate against Open Content
-            if (fOpenContent != null && matchOpenContentModel(curElem, state, subGroupHandler, curState, grammar)) {
+            if (fOpenContent != null && matchOpenContentModel(curElem, state, subGroupHandler, curState, xcmHelper)) {
                 return fOpenContent;
             }
 
@@ -395,7 +394,7 @@
                         // we've already seen enough instances of the first "foo" perhaps there is
                         // another element declaration or wildcard deeper in the element map which
                         // matches.
-                        return findMatchingDecl(curElem, state, subGroupHandler, elemIndex, grammar);
+                        return findMatchingDecl(curElem, state, subGroupHandler, elemIndex, xcmHelper);
                     }  
                 }
                 else if (state[2] < o.minOccurs) {
@@ -450,7 +449,7 @@
         return null;
     } // findMatchingDecl(QName, SubstitutionGroupHandler): Object
     
-    Object findMatchingDecl(QName curElem, int[] state, SubstitutionGroupHandler subGroupHandler, int elemIndex, SchemaGrammar grammar) {    
+    Object findMatchingDecl(QName curElem, int[] state, SubstitutionGroupHandler subGroupHandler, int elemIndex, XCMValidatorHelper xcmHelper) {    
         
         int curState = state[0];
         int nextState = 0;
@@ -477,7 +476,7 @@
                     }
                 }
                 // XML Schema 1.1
-                else if (allowExpandedName((XSWildcardDecl)fElemMap[elemIndex], curElem, subGroupHandler, grammar)) {
+                else if (allowExpandedName((XSWildcardDecl)fElemMap[elemIndex], curElem, subGroupHandler, xcmHelper)) {
                     matchingDecl = fElemMap[elemIndex];
                     // Element has precedence over a wildcard
                     // if no occurences or we reached minOccurs, keep looking for
@@ -514,7 +513,7 @@
         if (matchingDecl == null) {
             // XML Schema 1.1
             // Validate against Open Content
-            if (fOpenContent != null && matchOpenContentModel(curElem, state, subGroupHandler, curState, grammar)) {
+            if (fOpenContent != null && matchOpenContentModel(curElem, state, subGroupHandler, curState, xcmHelper)) {
                 return fOpenContent;
             }
 
@@ -549,12 +548,12 @@
         return null;
     } // findMatchingDecl(QName, SubstitutionGroupHandler): Object
     
-    boolean allowExpandedName(XSWildcardDecl wildcard, QName curElem, SubstitutionGroupHandler subGroupHandler, SchemaGrammar grammar) {
+    boolean allowExpandedName(XSWildcardDecl wildcard, QName curElem, SubstitutionGroupHandler subGroupHandler, XCMValidatorHelper xcmHelper) {
         if (wildcard.allowQName(curElem)) {
             if (wildcard.fDisallowedSibling && findMatchingElemDecl(curElem, subGroupHandler) != null) {
                 return false;
             }
-            if (wildcard.fDisallowedDefined && grammar != null && grammar.getElementDeclaration(curElem.localpart) != null) {
+            if (wildcard.fDisallowedDefined && xcmHelper.getGlobalElementDecl(curElem) != null) {
                 return false;
             }
             return true;
@@ -562,7 +561,7 @@
         return false;
     }
     
-    boolean matchOpenContentModel(QName curElem, int[] state, SubstitutionGroupHandler subGroupHandler, int curState, SchemaGrammar grammar) {
+    boolean matchOpenContentModel(QName curElem, int[] state, SubstitutionGroupHandler subGroupHandler, int curState, XCMValidatorHelper xcmHelper) {
         // if suffix mode, we should have reached a final state
         if (fOpenContent.fMode == XSOpenContentDecl.MODE_SUFFIX) {
             if (fFinalStateFlags[curState]) {
@@ -578,7 +577,7 @@
                 return false;
             }
         }
-        if (allowExpandedName(fOpenContent.fWildcard, curElem, subGroupHandler, grammar)) {
+        if (allowExpandedName(fOpenContent.fWildcard, curElem, subGroupHandler, xcmHelper)) {
             return true;
         }
 

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSEmptyCM.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSEmptyCM.java?rev=884566&r1=884565&r2=884566&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSEmptyCM.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XSEmptyCM.java Thu Nov 26 14:30:01 2009
@@ -19,7 +19,6 @@
 
 import java.util.Vector;
 
-import org.apache.xerces.impl.xs.SchemaGrammar;
 import org.apache.xerces.impl.xs.SubstitutionGroupHandler;
 import org.apache.xerces.impl.xs.XMLSchemaException;
 import org.apache.xerces.impl.xs.XSConstraints;
@@ -92,7 +91,7 @@
      * @param subGroupHandler the substitution group handler
      * @return element index corresponding to the element from the Schema grammar
      */
-    public Object oneTransition (QName elementName, int[] currentState, SubstitutionGroupHandler subGroupHandler, SchemaGrammar grammar){
+    public Object oneTransition (QName elementName, int[] currentState, SubstitutionGroupHandler subGroupHandler, XCMValidatorHelper xcmHelper){
 
         // error state
         if (currentState[0] < 0) {
@@ -101,7 +100,7 @@
         }
 
         if (fOpenContent != null) {
-            if (allowExpandedName(fOpenContent.fWildcard, elementName, subGroupHandler, grammar)) {
+            if (allowExpandedName(fOpenContent.fWildcard, elementName, subGroupHandler, xcmHelper)) {
                 return fOpenContent;
             }
         }
@@ -170,9 +169,9 @@
     private boolean allowExpandedName(XSWildcardDecl wildcard,
             QName curElem,
             SubstitutionGroupHandler subGroupHandler,
-            SchemaGrammar grammar) {
+            XCMValidatorHelper xcmHelper) {
         if (wildcard.allowQName(curElem)) {
-            if (wildcard.fDisallowedDefined && grammar.getElementDeclaration(curElem.localpart) != null) {
+            if (wildcard.fDisallowedDefined && xcmHelper.getGlobalElementDecl(curElem) != null) {
                 return false;
             }
             return true;

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java?rev=884566&r1=884565&r2=884566&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java Thu Nov 26 14:30:01 2009
@@ -24,11 +24,9 @@
 import org.apache.xerces.impl.xs.identity.Field;
 import org.apache.xerces.impl.xs.identity.IdentityConstraint;
 import org.apache.xerces.impl.xs.identity.Selector;
-import org.apache.xerces.impl.xs.util.XSObjectListImpl;
 import org.apache.xerces.util.DOMUtil;
 import org.apache.xerces.util.XMLChar;
 import org.apache.xerces.xni.QName;
-import org.apache.xerces.xs.XSAnnotation;
 import org.w3c.dom.Element;
 
 /**
@@ -47,7 +45,7 @@
         super(handler, gAttrCheck);
     }
     
-    void traverseIdentityConstraint(IdentityConstraint ic,
+    boolean traverseIdentityConstraint(IdentityConstraint ic,
             Element icElem, XSDocumentInfo schemaDoc, Object [] icElemAttrs) {
         
         // General Attribute Checking will have been done on icElem by caller
@@ -58,7 +56,7 @@
             reportSchemaError("s4s-elt-must-match.2",
                     new Object[]{"identity constraint", "(annotation?, selector, field+)"},
                     icElem);
-            return;
+            return false;
         }
         
         // General Attribute Checking on sElem
@@ -69,7 +67,7 @@
             // if no more children report an error
             if(sElem == null) {
                 reportSchemaError("s4s-elt-must-match.2", new Object[]{"identity constraint", "(annotation?, selector, field+)"}, icElem);
-                return;
+                return false;
             }
         }
         else {
@@ -79,13 +77,14 @@
             }
         }
         
-        Object [] attrValues = fAttrChecker.checkAttributes(sElem, false, schemaDoc);
-        
-        // if more than one annotation report an error
+        // must be <selector>
         if(!DOMUtil.getLocalName(sElem).equals(SchemaSymbols.ELT_SELECTOR)) {
             reportSchemaError("s4s-elt-must-match.1", new Object[]{"identity constraint", "(annotation?, selector, field+)", SchemaSymbols.ELT_SELECTOR}, sElem);
+            return false;
         }
-        // and make sure <selector>'s content is fine:
+        Object [] attrValues = fAttrChecker.checkAttributes(sElem, false, schemaDoc);
+        
+        // make sure <selector>'s content is fine:
         Element selChild = DOMUtil.getFirstChildElement(sElem);
         
         if (selChild !=null) {
@@ -111,7 +110,7 @@
         String sText = ((String)attrValues[XSAttributeChecker.ATTIDX_XPATH]);
         if(sText == null) {
             reportSchemaError("s4s-att-must-appear", new Object [] {SchemaSymbols.ELT_SELECTOR, SchemaSymbols.ATT_XPATH}, sElem);
-            return;
+            return false;
         }
         sText = XMLChar.trim(sText);
         
@@ -126,7 +125,7 @@
             reportSchemaError(e.getKey(), new Object[]{sText}, sElem);
             // put back attr values...
             fAttrChecker.returnAttrArray(attrValues, schemaDoc);
-            return;
+            return false;
         }
         
         // put back attr values...
@@ -136,14 +135,18 @@
         Element fElem = DOMUtil.getNextSiblingElement(sElem);
         if(fElem == null) {
             reportSchemaError("s4s-elt-must-match.2", new Object[]{"identity constraint", "(annotation?, selector, field+)"}, sElem);
+            return false;
         }
         while (fElem != null) {
+            if(!DOMUtil.getLocalName(fElem).equals(SchemaSymbols.ELT_FIELD)) {
+                reportSchemaError("s4s-elt-must-match.1", new Object[]{"identity constraint", "(annotation?, selector, field+)", SchemaSymbols.ELT_FIELD}, fElem);
+                fElem = DOMUtil.getNextSiblingElement(fElem);
+                continue;
+            }
+            
             // General Attribute Checking
             attrValues = fAttrChecker.checkAttributes(fElem, false, schemaDoc);
             
-            if(!DOMUtil.getLocalName(fElem).equals(SchemaSymbols.ELT_FIELD))
-                reportSchemaError("s4s-elt-must-match.1", new Object[]{"identity constraint", "(annotation?, selector, field+)", SchemaSymbols.ELT_FIELD}, fElem);
-            
             // and make sure <field>'s content is fine:
             Element fieldChild = DOMUtil.getFirstChildElement(fElem);
             if (fieldChild != null) {            
@@ -163,9 +166,10 @@
                 }
             }
             String fText = ((String)attrValues[XSAttributeChecker.ATTIDX_XPATH]);
-            if(fText == null) {
+            if (fText == null) {
                 reportSchemaError("s4s-att-must-appear", new Object [] {SchemaSymbols.ELT_FIELD, SchemaSymbols.ATT_XPATH}, fElem);
-                return;
+                fAttrChecker.returnAttrArray(attrValues, schemaDoc);
+                return false;
             }
             fText = XMLChar.trim(fText);
             try {
@@ -178,13 +182,14 @@
                 reportSchemaError(e.getKey(), new Object[]{fText}, fElem);
                 // put back attr values...
                 fAttrChecker.returnAttrArray(attrValues, schemaDoc);
-                return;
+                return false;
             }
             fElem = DOMUtil.getNextSiblingElement(fElem);
             // put back attr values...
             fAttrChecker.returnAttrArray(attrValues, schemaDoc);
         }
         
+        return ic.getFieldCount() > 0;
     } // traverseIdentityConstraint(IdentityConstraint,Element, XSDocumentInfo)
     
     void traverseIdentityConstraintReferral(Element icElem, XSElementDecl element, 

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java?rev=884566&r1=884565&r2=884566&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java Thu Nov 26 14:30:01 2009
@@ -43,6 +43,7 @@
 import org.apache.xerces.util.NamespaceSupport;
 import org.apache.xerces.util.SymbolTable;
 import org.apache.xerces.xni.QName;
+import org.apache.xerces.xs.XSAttributeUse;
 import org.apache.xerces.xs.XSMultiValueFacet;
 import org.apache.xerces.xs.XSObjectList;
 import org.apache.xerces.xs.XSSimpleTypeDefinition;
@@ -128,12 +129,13 @@
                         (name.equals(SchemaSymbols.ELT_DOCUMENTATION)))) {
                     reportSchemaError("src-annotation", new Object[]{name}, child);
                 }
-                
-                // General Attribute Checking
-                // There is no difference between global or local appinfo/documentation,
-                // so we assume it's always global.
-                attrValues = fAttrChecker.checkAttributes(child, true, schemaDoc);
-                fAttrChecker.returnAttrArray(attrValues, schemaDoc);
+                else {
+                    // General Attribute Checking
+                    // There is no difference between global or local appinfo/documentation,
+                    // so we assume it's always global.
+                    attrValues = fAttrChecker.checkAttributes(child, true, schemaDoc);
+                    fAttrChecker.returnAttrArray(attrValues, schemaDoc);
+                }
                 
                 child = DOMUtil.getNextSiblingElement(child);
             }
@@ -366,14 +368,23 @@
                         baseValidator.getPrimitiveKind() == XSSimpleType.PRIMITIVE_NOTATION) {
                     // need to use the namespace context returned from checkAttributes
                     schemaDoc.fValidationContext.setNamespaceSupport(nsDecls);
+                    Object notation = null;
                     try{
                         QName temp = (QName)fQNameDV.validate(enumVal, schemaDoc.fValidationContext, null);
                         // try to get the notation decl. if failed, getGlobalDecl
                         // reports an error, so we don't need to report one again.
-                        fSchemaHandler.getGlobalDecl(schemaDoc, XSDHandler.NOTATION_TYPE, temp, content);
+                        notation = fSchemaHandler.getGlobalDecl(schemaDoc, XSDHandler.NOTATION_TYPE, temp, content);
                     }catch(InvalidDatatypeValueException ex){
                         reportSchemaError(ex.getKey(), ex.getArgs(), content);
                     }
+                    if (notation == null) {
+                        // Either the QName value is invalid, or it doens't
+                        // resolve to a notation declaration.
+                        // Ignore this facet, to avoid instance validation problems
+                        fAttrChecker.returnAttrArray (attrs, schemaDoc);
+                        content = DOMUtil.getNextSiblingElement(content);
+                        continue;
+                    }
                     // restore to the normal namespace context
                     schemaDoc.fValidationContext.setNamespaceSupport(schemaDoc.fNamespaceSupport);
                 }
@@ -735,6 +746,7 @@
         Element child=null;
         XSAttributeGroupDecl tempAttrGrp = null;
         XSAttributeUseImpl tempAttrUse = null;
+        XSAttributeUse otherUse = null;
         String childName;
         
         for (child=firstAttr; child!=null; child=DOMUtil.getNextSiblingElement(child)) {
@@ -744,9 +756,15 @@
                         schemaDoc,
                         grammar,
                         enclosingCT);
-                if (tempAttrUse == null) break;
-                if (attrGrp.getAttributeUse(tempAttrUse.fAttrDecl.getNamespace(),
-                        tempAttrUse.fAttrDecl.getName())==null) {
+                if (tempAttrUse == null) continue;
+                if (tempAttrUse.fUse == SchemaSymbols.USE_PROHIBITED) {
+                    attrGrp.addAttributeUse(tempAttrUse);
+                    continue;
+                }
+                otherUse = attrGrp.getAttributeUseNoProhibited(
+                        tempAttrUse.fAttrDecl.getNamespace(),
+                        tempAttrUse.fAttrDecl.getName());
+                if (otherUse==null) {
                     String idName = attrGrp.addAttributeUse(tempAttrUse);
                     // Only applies to XML Schema 1.0
                     if (fSchemaHandler.fSchemaVersion < Constants.SCHEMA_VERSION_1_1 && idName != null) {
@@ -755,8 +773,7 @@
                         reportSchemaError(code, new Object[]{name, tempAttrUse.fAttrDecl.getName(), idName}, child);
                     }
                 }
-                else {
-                    // REVISIT: what if one of the attribute uses is "prohibited"
+                else if (otherUse != tempAttrUse) {
                     String code = (enclosingCT == null) ? "ag-props-correct.2" : "ct-props-correct.4";
                     String name = (enclosingCT == null) ? attrGrp.fName : enclosingCT.getName();
                     reportSchemaError(code, new Object[]{name, tempAttrUse.fAttrDecl.getName()}, child);
@@ -766,14 +783,20 @@
                 //REVISIT: do we need to save some state at this point??
                 tempAttrGrp = fSchemaHandler.fAttributeGroupTraverser.traverseLocal(
                         child, schemaDoc, grammar);
-                if(tempAttrGrp == null ) break;
+                if(tempAttrGrp == null ) continue;
                 XSObjectList attrUseS = tempAttrGrp.getAttributeUses();
-                XSAttributeUseImpl existingAttrUse = null, oneAttrUse;
+                XSAttributeUseImpl oneAttrUse;
                 int attrCount = attrUseS.getLength();
                 for (int i=0; i<attrCount; i++) {
                     oneAttrUse = (XSAttributeUseImpl)attrUseS.item(i);
-                    if (existingAttrUse == attrGrp.getAttributeUse(oneAttrUse.fAttrDecl.getNamespace(),
-                            oneAttrUse.fAttrDecl.getName())) {
+                    if (oneAttrUse.fUse == SchemaSymbols.USE_PROHIBITED) {
+                        attrGrp.addAttributeUse(oneAttrUse);
+                        continue;
+                    }
+                    otherUse = attrGrp.getAttributeUseNoProhibited(
+                            oneAttrUse.fAttrDecl.getNamespace(),
+                            oneAttrUse.fAttrDecl.getName());
+                    if (otherUse==null) {
                         String idName = attrGrp.addAttributeUse(oneAttrUse);
                         // Only applies to XML Schema 1.0
                         if (fSchemaHandler.fSchemaVersion < Constants.SCHEMA_VERSION_1_1 && idName != null) {
@@ -782,8 +805,7 @@
                             reportSchemaError(code, new Object[]{name, oneAttrUse.fAttrDecl.getName(), idName}, child);
                         }
                     }
-                    else {
-                        // REVISIT: what if one of the attribute uses is "prohibited"
+                    else if (oneAttrUse != otherUse) {
                         String code = (enclosingCT == null) ? "ag-props-correct.2" : "ct-props-correct.4";
                         String name = (enclosingCT == null) ? attrGrp.fName : enclosingCT.getName();
                         reportSchemaError(code, new Object[]{name, oneAttrUse.fAttrDecl.getName()}, child);
@@ -898,7 +920,7 @@
         // reference a <group> whose model group is an all model group,
         // minOccurs and maxOccurs must be one.
         if (processingAllEl) {
-        	// XML Schema 1.1 - maxOccurs can have a value > 1
+            // XML Schema 1.1 - maxOccurs can have a value > 1
             if (max != 1 && fSchemaHandler.fSchemaVersion != Constants.SCHEMA_VERSION_1_1) {
                 reportSchemaError("cos-all-limited.2", new Object[]{new Integer(max),
                         ((XSElementDecl)particle.fValue).getName()}, parent);

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAttributeGroupTraverser.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAttributeGroupTraverser.java?rev=884566&r1=884565&r2=884566&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAttributeGroupTraverser.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAttributeGroupTraverser.java Thu Nov 26 14:30:01 2009
@@ -76,7 +76,6 @@
         // get global decl
         attrGrp = (XSAttributeGroupDecl)fSchemaHandler.getGlobalDecl(schemaDoc, XSDHandler.ATTRIBUTEGROUP_TYPE, refAttr, elmNode);
         
-        
         // no children are allowed here except annotation, which is optional.
         Element child = DOMUtil.getFirstChildElement(elmNode);
         if (child != null) {
@@ -116,7 +115,7 @@
         // global declaration must have a name
         if (nameAttr == null) {
             reportSchemaError("s4s-att-must-appear", new Object[]{"attributeGroup (global)", "name"}, elmNode);
-            nameAttr = "no name";
+            nameAttr = NO_NAME;
         }
         
         attrGrp.fName = nameAttr;
@@ -147,6 +146,12 @@
             reportSchemaError("s4s-elt-must-match.1", args, nextNode);
         } 
         
+        if (nameAttr.equals(NO_NAME)) {
+            // if a global group doesn't have a name, then don't add it.
+            fAttrChecker.returnAttrArray(attrValues, schemaDoc);
+            return null;
+        }
+
         // Remove prohibited attributes from the set
         attrGrp.removeProhibitedAttrs();
         
@@ -174,7 +179,24 @@
         attrGrp.fAnnotations = annotations;
         
         // make an entry in global declarations.
-        grammar.addGlobalAttributeGroupDecl(attrGrp);
+        if (grammar.getGlobalAttributeGroupDecl(attrGrp.fName) == null) {
+            grammar.addGlobalAttributeGroupDecl(attrGrp);
+        }
+
+        // also add it to extended map
+        final String loc = fSchemaHandler.schemaDocument2SystemId(schemaDoc);
+        final XSAttributeGroupDecl attrGrp2 = grammar.getGlobalAttributeGroupDecl(attrGrp.fName, loc);
+        if (attrGrp2 == null) {
+            grammar.addGlobalAttributeGroupDecl(attrGrp, loc);
+        }
+
+        // handle duplicates
+        if (fSchemaHandler.fTolerateDuplicates) {
+            if (attrGrp2 != null) {
+                attrGrp = attrGrp2;
+            }
+            fSchemaHandler.addGlobalAttributeGroupDecl(attrGrp);
+        }
         
         fAttrChecker.returnAttrArray(attrValues, schemaDoc);
         return attrGrp;

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAttributeTraverser.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAttributeTraverser.java?rev=884566&r1=884565&r2=884566&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAttributeTraverser.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAttributeTraverser.java Thu Nov 26 14:30:01 2009
@@ -103,8 +103,7 @@
                 
                 if (child != null) {
                     reportSchemaError("src-attribute.3.2", new Object[]{refAtt.rawname}, child);
-                }               
-                
+                }
                 // for error reporting
                 nameAtt = refAtt.localpart;
             } else {
@@ -172,6 +171,8 @@
         if (consType == XSConstants.VC_DEFAULT &&
                 useAtt != null && useAtt.intValue() != SchemaSymbols.USE_OPTIONAL) {
             reportSchemaError("src-attribute.2", new Object[]{nameAtt}, attrDecl);
+            // Recover by honouring the default value
+            attrUse.fUse = SchemaSymbols.USE_OPTIONAL;
         }
         
         // a-props-correct
@@ -185,6 +186,9 @@
             catch (InvalidDatatypeValueException ide) {
                 reportSchemaError (ide.getKey(), ide.getArgs(), attrDecl);
                 reportSchemaError ("a-props-correct.2", new Object[]{nameAtt, defaultAtt}, attrDecl);
+                // Recover by removing the default value
+                attrUse.fDefault = null;
+                attrUse.fConstraintType = XSConstants.VC_NONE;
             }
             
             // 3 If the {type definition} is or is derived from ID then there must not be a {value constraint}.
@@ -192,6 +196,9 @@
             // Only applies to XML Schema 1.0
             if (fSchemaHandler.fSchemaVersion < Constants.SCHEMA_VERSION_1_1 && ((XSSimpleType)attribute.getTypeDefinition()).isIDType() ) {
                 reportSchemaError ("a-props-correct.3", new Object[]{nameAtt}, attrDecl);
+                // Recover by removing the default value
+                attrUse.fDefault = null;
+                attrUse.fConstraintType = XSConstants.VC_NONE;
             }
             
             // check 3.5.6 constraint
@@ -202,6 +209,9 @@
                 if (attrUse.fConstraintType != XSConstants.VC_FIXED ||
                         !attrUse.fAttrDecl.getValInfo().actualValue.equals(attrUse.fDefault.actualValue)) {
                     reportSchemaError ("au-props-correct.2", new Object[]{nameAtt, attrUse.fAttrDecl.getValInfo().stringValue()}, attrDecl);
+                    // Recover by using the decl's {value constraint}
+                    attrUse.fDefault = attrUse.fAttrDecl.getValInfo();
+                    attrUse.fConstraintType = XSConstants.VC_FIXED;
                 }
             }
         }
@@ -327,7 +337,7 @@
             }
         }
         
-        // Handler type attribute
+        // Handle type attribute
         if (attrType == null && typeAtt != null) {
             XSTypeDefinition type = (XSTypeDefinition)fSchemaHandler.getGlobalDecl(schemaDoc, XSDHandler.TYPEDECL_TYPE, typeAtt, attrDecl);
             if (type != null && type.getTypeCategory() == XSTypeDefinition.SIMPLE_TYPE) {
@@ -361,10 +371,6 @@
         attribute.setValues(nameAtt, tnsAtt, attrType, constraintType, scope,
                 attDefault, enclCT, annotations, inheritable);
         
-        // Step 2: register attribute decl to the grammar
-        if (isGlobal && nameAtt != null)
-            grammar.addGlobalAttributeDecl(attribute);
-        
         // Step 3: check against schema for schemas
         
         // required attributes
@@ -440,6 +446,11 @@
             catch (InvalidDatatypeValueException ide) {
                 reportSchemaError (ide.getKey(), ide.getArgs(), attrDecl);
                 reportSchemaError ("a-props-correct.2", new Object[]{nameAtt, attDefault.normalizedValue}, attrDecl);
+                // Recover by removing the default value
+                attDefault = null;
+                constraintType = XSConstants.VC_NONE;
+                attribute.setValues(nameAtt, tnsAtt, attrType, constraintType, scope,
+                        attDefault, enclCT, annotations, inheritable);
             }
         }
         
@@ -449,6 +460,11 @@
         if (fSchemaHandler.fSchemaVersion < Constants.SCHEMA_VERSION_1_1 && attDefault != null) {
             if (attrType.isIDType() ) {
                 reportSchemaError ("a-props-correct.3", new Object[]{nameAtt}, attrDecl);
+                // Recover by removing the default value
+                attDefault = null;
+                constraintType = XSConstants.VC_NONE;
+                attribute.setValues(nameAtt, tnsAtt, attrType, constraintType, scope,
+                        attDefault, enclCT, annotations, inheritable);
             }
         }
         
@@ -457,6 +473,7 @@
         // The {name} of an attribute declaration must not match xmlns.
         if (nameAtt != null && nameAtt.equals(XMLSymbols.PREFIX_XMLNS)) {
             reportSchemaError("no-xmlns", null, attrDecl);
+            return null;
         }
         
         // no-xsi
@@ -464,15 +481,37 @@
         // The {target namespace} of an attribute declaration, whether local or top-level, must not match http://www.w3.org/2001/XMLSchema-instance (unless it is one of the four built-in declarations given in the next section).
         if (tnsAtt != null && tnsAtt.equals(SchemaSymbols.URI_XSI)) {
             reportSchemaError("no-xsi", new Object[]{SchemaSymbols.URI_XSI}, attrDecl);
+            return null;
         }
         
         // Attribute without a name. Return null.
-        if (attribute.getName() == null)
+        if (nameAtt.equals(NO_NAME))
             return null;
-        
+
+        // Step 2: register attribute decl to the grammar
+        if (isGlobal) {
+            if (grammar.getGlobalAttributeDecl(nameAtt) == null) {
+                grammar.addGlobalAttributeDecl(attribute);
+            }
+
+            // also add it to extended map
+            final String loc = fSchemaHandler.schemaDocument2SystemId(schemaDoc);
+            final XSAttributeDecl attribute2 = grammar.getGlobalAttributeDecl(nameAtt, loc);
+            if (attribute2  == null) {
+                grammar.addGlobalAttributeDecl(attribute, loc);
+            }
+
+            if (fSchemaHandler.fTolerateDuplicates) {
+                if (attribute2  != null) {
+                    attribute = attribute2;
+                }
+                fSchemaHandler.addGlobalAttributeDecl(attribute);
+            }
+        }
+
         return attribute;
     }
-    
+
     // throws an error if the constraint value is invalid for the given type
     void checkDefaultValid(XSAttributeDecl attribute) throws InvalidDatatypeValueException {
         // validate the original lexical rep, and set the actual value

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java?rev=884566&r1=884565&r2=884566&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java Thu Nov 26 14:30:01 2009
@@ -18,7 +18,6 @@
 
 import org.apache.xerces.impl.Constants;
 import org.apache.xerces.impl.dv.InvalidDatatypeFacetException;
-import org.apache.xerces.impl.dv.SchemaDVFactory;
 import org.apache.xerces.impl.dv.XSFacets;
 import org.apache.xerces.impl.dv.XSSimpleType;
 import org.apache.xerces.impl.dv.xs.XSSimpleTypeDecl;
@@ -29,6 +28,7 @@
 import org.apache.xerces.impl.xs.XSAttributeGroupDecl;
 import org.apache.xerces.impl.xs.XSAttributeUseImpl;
 import org.apache.xerces.impl.xs.XSComplexTypeDecl;
+import org.apache.xerces.impl.xs.XSConstraints;
 import org.apache.xerces.impl.xs.XSModelGroupImpl;
 import org.apache.xerces.impl.xs.XSOpenContentDecl;
 import org.apache.xerces.impl.xs.XSParticleDecl;
@@ -68,13 +68,40 @@
  */
 
 class  XSDComplexTypeTraverser extends XSDAbstractParticleTraverser {
-
-    private static final String EXTENDED_SCHEMA_FACTORY_CLASS = "org.apache.xerces.impl.dv.xs.ExtendedSchemaDVFactoryImpl";
-    private static final String SCHEMA11_FACTORY_CLASS = "org.apache.xerces.impl.dv.xs.Schema11DVFactoryImpl";
     
     // size of stack to hold globals:
     private final static int GLOBAL_NUM = 13;
     
+    private static XSParticleDecl fErrorContent = null;
+    private static XSWildcardDecl fErrorWildcard = null;
+    private static XSParticleDecl getErrorContent() {
+        if (fErrorContent == null) {
+            XSParticleDecl particle = new XSParticleDecl();
+            particle.fType = XSParticleDecl.PARTICLE_WILDCARD;
+            particle.fValue = getErrorWildcard();
+            particle.fMinOccurs = 0;
+            particle.fMaxOccurs = SchemaSymbols.OCCURRENCE_UNBOUNDED;
+            XSModelGroupImpl group = new XSModelGroupImpl();
+            group.fCompositor = XSModelGroupImpl.MODELGROUP_SEQUENCE;
+            group.fParticleCount = 1;
+            group.fParticles = new XSParticleDecl[1];
+            group.fParticles[0] = particle;
+            XSParticleDecl errorContent = new XSParticleDecl();
+            errorContent.fType = XSParticleDecl.PARTICLE_MODELGROUP;
+            errorContent.fValue = group;
+            fErrorContent = errorContent;
+        }
+        return fErrorContent;
+    }
+    private static XSWildcardDecl getErrorWildcard() {
+        if (fErrorWildcard == null) {
+            XSWildcardDecl wildcard = new XSWildcardDecl();
+            wildcard.fProcessContents = XSWildcardDecl.PC_SKIP;
+            fErrorWildcard = wildcard;
+        }
+        return fErrorWildcard;
+    }
+    
     // globals for building XSComplexTypeDecls
     private String fName = null;
     private String fTargetNamespace = null;
@@ -92,8 +119,6 @@
     private XSOpenContentDecl fOpenContent = null;
     private XSAssertImpl[] fAssertions = null;
     
-    private XSParticleDecl fEmptyParticle = null;
-    
     // our own little stack to retain state when getGlobalDecls is called:
     private Object [] fGlobalStore = null;
     private int fGlobalStorePos = 0;
@@ -101,22 +126,11 @@
     XSDComplexTypeTraverser (XSDHandler handler,
             XSAttributeChecker gAttrCheck) {
         super(handler, gAttrCheck);
-        if (handler.fSchemaVersion == Constants.SCHEMA_VERSION_1_0) {
-            schemaFactory = SchemaDVFactory.getInstance();
-        }
-        else if (handler.fSchemaVersion == Constants.SCHEMA_VERSION_1_1) {
-            schemaFactory = SchemaDVFactory.getInstance(SCHEMA11_FACTORY_CLASS);
-        }
-        else {
-            schemaFactory =  SchemaDVFactory.getInstance(EXTENDED_SCHEMA_FACTORY_CLASS);
-        }
     }
     
     
     private static final boolean DEBUG=false;
     
-    private SchemaDVFactory schemaFactory;
-    
     private static final class ComplexTypeRecoverableError extends Exception {
         
         private static final long serialVersionUID = 6802729912091130335L;
@@ -181,13 +195,35 @@
         XSComplexTypeDecl type = traverseComplexTypeDecl (complexTypeNode,
                 complexTypeName, attrValues, schemaDoc, grammar);
         contentRestore();
+        // need to add the type to the grammar for later constraint checking
+        grammar.addComplexTypeDecl(type, fSchemaHandler.element2Locator(complexTypeNode));
+
         if (complexTypeName == null) {
             reportSchemaError("s4s-att-must-appear", new Object[]{SchemaSymbols.ELT_COMPLEXTYPE, SchemaSymbols.ATT_NAME}, complexTypeNode);
+            type = null;
         } else {
-            grammar.addGlobalComplexTypeDecl(type);
+            if (grammar.getGlobalTypeDecl(type.getName()) == null) {
+                grammar.addGlobalComplexTypeDecl(type);
+            }
+            
+            // also add it to extended map
+            final String loc = fSchemaHandler.schemaDocument2SystemId(schemaDoc);
+            final XSTypeDefinition type2 = grammar.getGlobalTypeDecl(type.getName(), loc); 
+            if (type2 == null) {
+                grammar.addGlobalComplexTypeDecl(type, loc);
+            }
+
+            // handle duplicates
+            if (fSchemaHandler.fTolerateDuplicates) {
+                if (type2 != null) {
+                    if (type2 instanceof XSComplexTypeDecl) {
+                        type = (XSComplexTypeDecl) type2;
+                    }
+                }
+                fSchemaHandler.addGlobalTypeDecl(type);
+            }
         }
-        // need to add the type to the grammar for later constraint checking
-        grammar.addComplexTypeDecl(type, fSchemaHandler.element2Locator(complexTypeNode));
+
         fAttrChecker.returnAttrArray(attrValues, schemaDoc);
         
         return type;
@@ -672,16 +708,17 @@
             }
             
             String name = genAnonTypeName(simpleContentElement);
-            fXSSimpleType = schemaFactory.createTypeRestriction(name,schemaDoc.fTargetNamespace,(short)0,baseValidator,null);
-            if (fXSSimpleType instanceof XSSimpleTypeDecl) {
-                ((XSSimpleTypeDecl)fXSSimpleType).setAnonymous(true);
-            }
-            try {
+            fXSSimpleType = fSchemaHandler.fDVFactory.createTypeRestriction(name,schemaDoc.fTargetNamespace,(short)0,baseValidator,null);
+            try{
                 fValidationState.setNamespaceSupport(schemaDoc.fNamespaceSupport);
                 fXSSimpleType.applyFacets(facetData, presentFacets, fixedFacets, fValidationState);
-            }
-            catch(InvalidDatatypeFacetException ex){
+            }catch(InvalidDatatypeFacetException ex){
                 reportSchemaError(ex.getKey(), ex.getArgs(), simpleContent);
+                // Recreate the type, ignoring the facets
+                fXSSimpleType = fSchemaHandler.fDVFactory.createTypeRestriction(name,schemaDoc.fTargetNamespace,(short)0,baseValidator,null);
+            }
+            if (fXSSimpleType instanceof XSSimpleTypeDecl) {
+                ((XSSimpleTypeDecl)fXSSimpleType).setAnonymous(true);
             }
             
             // -----------------------------------------------------------------------
@@ -800,7 +837,7 @@
             boolean mixedOnType, XSDocumentInfo schemaDoc,
             SchemaGrammar grammar)
     throws ComplexTypeRecoverableError {
-
+        
         Object[] complexContentAttrValues = fAttrChecker.checkAttributes(complexContentElement, false,
                 schemaDoc);
 
@@ -1163,18 +1200,7 @@
                 //   {max occurs} 1
                 //   {term}       a model group whose {compositor} is sequence and whose {particles} is empty.
                 else if (fContentType == XSComplexTypeDecl.CONTENTTYPE_EMPTY) {
-                    if (fEmptyParticle == null) {
-                        XSModelGroupImpl group = new XSModelGroupImpl();
-                        group.fCompositor = XSModelGroupImpl.MODELGROUP_SEQUENCE;
-                        group.fParticleCount = 0;
-                        group.fParticles = null;
-                        group.fAnnotations = XSObjectListImpl.EMPTY_LIST;
-                        fEmptyParticle = new XSParticleDecl();
-                        fEmptyParticle.fType = XSParticleDecl.PARTICLE_MODELGROUP;
-                        fEmptyParticle.fValue = group;
-                        fEmptyParticle.fAnnotations = XSObjectListImpl.EMPTY_LIST;
-                    }
-                    fParticle = fEmptyParticle;
+                    fParticle = XSConstraints.getEmptySequence();
                     fContentType = XSComplexTypeDecl.CONTENTTYPE_ELEMENT;
                 }
             }
@@ -1257,11 +1283,14 @@
                             elem);
                 }
             }
-            else {
+            else if (existingAttrUse != oneAttrUse) {
                 if (extension) {
-                    throw new ComplexTypeRecoverableError("ct-props-correct.4",
+                    reportSchemaError("ct-props-correct.4",
                             new Object[]{typeName, oneAttrUse.fAttrDecl.getName()},
                             elem);
+                    // Recover by using the attribute use from the base type,
+                    // to make the resulting schema "more valid".
+                    toAttrGrp.replaceAttributeUse(existingAttrUse, oneAttrUse);
                 }
             }
         }
@@ -1457,18 +1486,7 @@
         // 6.3 Particle of Content type - based on wildcard element
         //    
         if (particle == null && (isMixed || (!isDerivation && fOpenContent != null))) {
-            if (fEmptyParticle == null) {
-                XSModelGroupImpl group = new XSModelGroupImpl();
-                group.fCompositor = XSModelGroupImpl.MODELGROUP_SEQUENCE;
-                group.fParticleCount = 0;
-                group.fParticles = null;
-                group.fAnnotations = XSObjectListImpl.EMPTY_LIST;
-                fEmptyParticle = new XSParticleDecl();
-                fEmptyParticle.fType = XSParticleDecl.PARTICLE_MODELGROUP;
-                fEmptyParticle.fValue = group;
-                fEmptyParticle.fAnnotations = XSObjectListImpl.EMPTY_LIST;
-            }
-            particle = fEmptyParticle;
+            particle = XSConstraints.getEmptySequence();
         }
         fParticle = particle;
 
@@ -1659,6 +1677,7 @@
         //
         fBaseType = SchemaGrammar.getXSAnyType(fSchemaHandler.fSchemaVersion);
         fContentType = XSComplexTypeDecl.CONTENTTYPE_MIXED;
+        fXSSimpleType = null;
         fParticle = getErrorContent();
         // REVISIT: do we need to remove all attribute uses already added into
         // the attribute group? maybe it's ok to leave them there. -SG
@@ -1668,30 +1687,6 @@
         
     }
     
-    private XSParticleDecl getErrorContent() {
-        XSParticleDecl particle = new XSParticleDecl();
-        particle.fType = XSParticleDecl.PARTICLE_WILDCARD;
-        particle.fValue = getErrorWildcard();
-        particle.fMinOccurs = 0;
-        particle.fMaxOccurs = SchemaSymbols.OCCURRENCE_UNBOUNDED;
-        XSModelGroupImpl group = new XSModelGroupImpl();
-        group.fCompositor = XSModelGroupImpl.MODELGROUP_SEQUENCE;
-        group.fParticleCount = 1;
-        group.fParticles = new XSParticleDecl[1];
-        group.fParticles[0] = particle;
-        XSParticleDecl errorContent = new XSParticleDecl();
-        errorContent.fType = XSParticleDecl.PARTICLE_MODELGROUP;
-        errorContent.fValue = group;
-        
-        return errorContent;
-    }
-    
-    private XSWildcardDecl getErrorWildcard() {
-        XSWildcardDecl errorWildcard = new XSWildcardDecl();
-        errorWildcard.fProcessContents = XSWildcardDecl.PC_SKIP;
-        return errorWildcard;
-    }
-    
     private void contentBackup() {
         if(fGlobalStore == null) {
             fGlobalStore = new Object [GLOBAL_NUM];

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java?rev=884566&r1=884565&r2=884566&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java Thu Nov 26 14:30:01 2009
@@ -458,7 +458,7 @@
                         fSchemaHandler.checkForDuplicateNames(
                                 (schemaDoc.fTargetNamespace == null) ? ","+DOMUtil.getAttrValue(child, SchemaSymbols.ATT_NAME)
                                         : schemaDoc.fTargetNamespace+","+ DOMUtil.getAttrValue(child, SchemaSymbols.ATT_NAME),
-                                        fSchemaHandler.getIDRegistry(), fSchemaHandler.getIDRegistry_sub(),
+                                        fSchemaHandler.ATTRIBUTE_TYPE, fSchemaHandler.getIDRegistry(), fSchemaHandler.getIDRegistry_sub(),
                                         child, schemaDoc);
                     }
                 } else if (childName.equals(SchemaSymbols.ELT_KEYREF)) {
@@ -471,10 +471,6 @@
             }
         }
         
-        // Step 2: register the element decl to the grammar
-        if (isGlobal && nameAtt != null)
-            grammar.addGlobalElementDecl(element);
-        
         // Step 3: check against schema for schemas
         
         // required attributes
@@ -488,7 +484,12 @@
         
         // element
         if (child != null) {
-            reportSchemaError("s4s-elt-must-match.1", new Object[]{nameAtt, "(annotation?, (simpleType | complexType)?, alternative*, (unique | key | keyref)*))", DOMUtil.getLocalName(child)}, child);
+            if (fSchemaHandler.fSchemaVersion == Constants.SCHEMA_VERSION_1_1) {
+                reportSchemaError("s4s-elt-must-match.1", new Object[]{nameAtt, "(annotation?, (simpleType | complexType)?, alternative*, (unique | key | keyref)*))", DOMUtil.getLocalName(child)}, child);
+            }
+            else {
+                reportSchemaError("s4s-elt-must-match.1", new Object[]{nameAtt, "(annotation?, (simpleType | complexType)?, (unique | key | keyref)*))", DOMUtil.getLocalName(child)}, child);
+            }
         }
         
         // Step 4: check 3.3.3 constraints
@@ -543,6 +544,7 @@
             fValidationState.setNamespaceSupport(schemaDoc.fNamespaceSupport);
             if (fSchemaHandler.fXSConstraints.ElementDefaultValidImmediate(element.fType, element.fDefault.normalizedValue, fValidationState, element.fDefault) == null) {
                 reportSchemaError ("e-props-correct.2", new Object[]{nameAtt, element.fDefault.normalizedValue}, elmDecl);
+                element.fDefault = null;
                 element.setConstraintType(XSConstants.VC_NONE);
             }
         }
@@ -552,6 +554,7 @@
             for (int i=0; i< element.fSubGroup.length; i++) {
                 if (!fSchemaHandler.fXSConstraints.checkTypeDerivationOk(element.fType, element.fSubGroup[i].fType, element.fSubGroup[i].fFinal)) {
                     reportSchemaError ("e-props-correct.4", new Object[]{nameAtt, ((QName)subGroupAtt.get(i)).prefix +":"+((QName)subGroupAtt.get(i)).localpart}, elmDecl);
+//TODO: remove the subGroup from the list?????
                 }
             }
         }
@@ -565,6 +568,8 @@
                     (elementType.getTypeCategory() == XSTypeDefinition.COMPLEX_TYPE &&
                             ((XSComplexTypeDecl)elementType).containsTypeID())) {
                 reportSchemaError ("e-props-correct.5", new Object[]{element.fName}, elmDecl);
+                element.fDefault = null;
+                element.setConstraintType(XSConstants.VC_NONE);
             }
         }
         
@@ -572,6 +577,31 @@
         if (element.fName == null)
             return null;
         
+        // Step 5: register the element decl to the grammar
+        if (isGlobal) {
+            grammar.addGlobalElementDeclAll(element);
+            
+            if (grammar.getGlobalElementDecl(element.fName) == null) {
+                grammar.addGlobalElementDecl(element);
+            }
+            
+            // we also add the element to the tolerate duplicates list as well
+            final String loc = fSchemaHandler.schemaDocument2SystemId(schemaDoc);
+            final XSElementDecl element2 = grammar.getGlobalElementDecl(element.fName, loc);
+            if (element2 == null) {
+                grammar.addGlobalElementDecl(element, loc);
+            }
+
+            // if we are tolerating duplicates, and we found a duplicate declaration
+            // use the duplicate one instead
+            if (fSchemaHandler.fTolerateDuplicates) {
+                if (element2 != null) {
+                    element = element2;
+                }
+                fSchemaHandler.addGlobalElementDecl(element);
+            }
+        }
+        
         return element;
     }
     

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDGroupTraverser.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDGroupTraverser.java?rev=884566&r1=884565&r2=884566&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDGroupTraverser.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDGroupTraverser.java Thu Nov 26 14:30:01 2009
@@ -20,6 +20,7 @@
 import org.apache.xerces.impl.xs.SchemaGrammar;
 import org.apache.xerces.impl.xs.SchemaSymbols;
 import org.apache.xerces.impl.xs.XSAnnotationImpl;
+import org.apache.xerces.impl.xs.XSConstraints;
 import org.apache.xerces.impl.xs.XSGroupDecl;
 import org.apache.xerces.impl.xs.XSModelGroupImpl;
 import org.apache.xerces.impl.xs.XSParticleDecl;
@@ -152,7 +153,9 @@
             reportSchemaError("s4s-att-must-appear", new Object[]{"group (global)", "name"}, elmNode);
         }
         
-        XSGroupDecl group = null;
+        // Create the group defi up-front, so it can be passed
+        // to the traversal methods
+        XSGroupDecl group = new XSGroupDecl();
         XSParticleDecl particle = null;
         
         // must have at least one child
@@ -163,10 +166,6 @@
                     new Object[]{"group (global)", "(annotation?, (all | choice | sequence))"},
                     elmNode);
         } else {
-            // Create the group defi up-front, so it can be passed
-            // to the traversal methods
-            group = new XSGroupDecl();
-            
             String childName = l_elmChild.getLocalName();
             if (childName.equals(SchemaSymbols.ELT_ANNOTATION)) {
                 annotation = traverseAnnotationDecl(l_elmChild, attrValues, true, schemaDoc);
@@ -204,37 +203,56 @@
                         DOMUtil.getLocalName(DOMUtil.getNextSiblingElement(l_elmChild))},
                         DOMUtil.getNextSiblingElement(l_elmChild));
             }
-            
-            // add global group declaration to the grammar
-            if (strNameAttr != null) {
-                group.fName = strNameAttr;
-                group.fTargetNamespace = schemaDoc.fTargetNamespace;
-                // TODO: if particle == null (error situation?), should we
-                //       recover by synthesizing an empty sequence?
-                if (particle != null)
-                    group.fModelGroup = (XSModelGroupImpl)particle.fValue;
-                XSObjectList annotations;
-                if (annotation != null) {
-                    annotations = new XSObjectListImpl();
-                    ((XSObjectListImpl) annotations).addXSObject(annotation);
-                } else {
-                    annotations = XSObjectListImpl.EMPTY_LIST;
-                }
-                group.fAnnotations = annotations;                
+        }
+        
+        // add global group declaration to the grammar
+        if (strNameAttr != null) {
+            group.fName = strNameAttr;
+            group.fTargetNamespace = schemaDoc.fTargetNamespace;
+            if (particle == null) {
+                particle = XSConstraints.getEmptySequence(); 
+            }
+            group.fModelGroup = (XSModelGroupImpl)particle.fValue;
+            XSObjectList annotations;
+            if (annotation != null) {
+                annotations = new XSObjectListImpl();
+                ((XSObjectListImpl) annotations).addXSObject(annotation);
+            } else {
+                annotations = XSObjectListImpl.EMPTY_LIST;
+            }
+            group.fAnnotations = annotations;
+            // Add group declaration to grammar
+            if (grammar.getGlobalGroupDecl(group.fName) == null) {
                 grammar.addGlobalGroupDecl(group);
             }
-            else {
-                // name attribute is not there, don't return this group.
-                group = null;
+
+            // also add it to extended map
+            final String loc = fSchemaHandler.schemaDocument2SystemId(schemaDoc);
+            final XSGroupDecl group2 = grammar.getGlobalGroupDecl(group.fName, loc);
+            if (group2 == null) {
+                grammar.addGlobalGroupDecl(group, loc);
+            }
+
+            // handle duplicates
+            if (fSchemaHandler.fTolerateDuplicates) {
+                if (group2 != null) {
+                    group = group2;
+                }
+                fSchemaHandler.addGlobalGroupDecl(group); 
             }
         }
-        if(group != null) { 
+        else {
+            // name attribute is not there, don't return this group.
+            group = null;
+        }
+
+        if (group != null) { 
             // store groups redefined by restriction in the grammar so
             // that we can get at them at full-schema-checking time.
             Object redefinedGrp = fSchemaHandler.getGrpOrAttrGrpRedefinedByRestriction(XSDHandler.GROUP_TYPE,
                     new QName(XMLSymbols.EMPTY_STRING, strNameAttr, strNameAttr, schemaDoc.fTargetNamespace),
                     schemaDoc, elmNode);
-            if(redefinedGrp != null) {
+            if (redefinedGrp != null) {
                 // store in grammar
                 grammar.addRedefinedGroupDecl(group, (XSGroupDecl)redefinedGrp,
                         fSchemaHandler.element2Locator(elmNode));



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