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