Author: knoaman
Date: Thu Dec 10 18:33:26 2009
New Revision: 889357
URL: http://svn.apache.org/viewvc?rev=889357&view=rev
Log:
Make sure that the type of the CTA is either xs:error or is validly derived
from the type of the element.
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
URL:
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties?rev=889357&r1=889356&r2=889357&view=diff
==============================================================================
---
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
(original)
+++
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
Thu Dec 10 18:33:26 2009
@@ -229,6 +229,7 @@
e-props-correct.4 = e-props-correct.4: The '{'type definition'}' of
element ''{0}'' is not validly derived from the '{'type definition'}' of the
substitutionHead ''{1}'', or the '{'substitution group exclusions'}' property
of ''{1}'' does not allow this derivation.
e-props-correct.5 = e-props-correct.5: A '{'value constraint'}' must
not be present on element ''{0}'', because the element''s '{'type definition'}'
or '{'type definition'}'''s '{'content type'}' is ID, or is derived from ID.
e-props-correct.6 = e-props-correct.6: Circular substitution group
detected for element ''{0}''.
+ e-props-correct.7 = e-props-correct.7: Type alternative ''{1}'' is not
xs:error or is not validly derived from the type definition, ''{2}'', of
element ''{0}''.
fractionDigits-valid-restriction = fractionDigits-valid-restriction:
In the definition of {2}, the value ''{0}'' for the facet ''fractionDigits'' is
invalid, because it must be <= the value for ''fractionDigits'' which was set
to ''{1}'' in one of the ancestor types.
fractionDigits-totalDigits = fractionDigits-totalDigits: In the
definition of {2}, the value ''{0}'' for the facet ''fractionDigits'' is
invalid, because the value must be <= the value for ''totalDigits'' which is
''{1}''.
length-minLength-maxLength.1.1 = length-minLength-maxLength.1.1: For
type {0}, it is an error for the value of length ''{1}'' to be less than the
value of minLength ''{2}''.
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
URL:
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java?rev=889357&r1=889356&r2=889357&view=diff
==============================================================================
---
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
(original)
+++
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
Thu Dec 10 18:33:26 2009
@@ -17,11 +17,14 @@
package org.apache.xerces.impl.xs.traversers;
+import org.apache.xerces.impl.Constants;
+import org.apache.xerces.impl.dv.XSSimpleType;
import org.apache.xerces.impl.xpath.XPath20;
import org.apache.xerces.impl.xpath.XPathException;
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.XSComplexTypeDecl;
import org.apache.xerces.impl.xs.XSElementDecl;
import org.apache.xerces.impl.xs.alternative.Test;
import org.apache.xerces.impl.xs.alternative.XSTypeAlternativeImpl;
@@ -54,6 +57,12 @@
* @version $Id$
*/
class XSDTypeAlternativeTraverser extends XSDAbstractTraverser {
+
+ private static final XSSimpleType fErrorType;
+ static {
+ SchemaGrammar grammar =
SchemaGrammar.getS4SGrammar(Constants.SCHEMA_VERSION_1_1);
+ fErrorType = (XSSimpleType)grammar.getGlobalTypeDecl("error");
+ }
XSDTypeAlternativeTraverser (XSDHandler handler,
XSAttributeChecker attrChecker) {
@@ -141,10 +150,28 @@
if (typeAtt == null && !hasAnonType) {
reportSchemaError("src-type-alternative.3.12.13.2", null,
altElement);
}
-
+
// fall back to the element declaration's type
if (alternativeType == null) {
- alternativeType= element.fType;
+ alternativeType = element.fType;
+ }
+ // Element Properties Correct
+ // 7.1 T is validly substitutable for E.{type definition}, subject to
+ // the blocking keywords of E.{disallowed substitutions}.
+ // 7.2 T is the type xs:error
+ else if (alternativeType != fErrorType){
+ short block = element.fBlock;
+ if (element.fType.getTypeCategory() ==
XSTypeDefinition.COMPLEX_TYPE) {
+ block |= ((XSComplexTypeDecl)
element.fType).getProhibitedSubstitutions();
+ }
+ if
(!fSchemaHandler.fXSConstraints.checkTypeDerivationOk(alternativeType,
element.fType, block)) {
+ reportSchemaError(
+ "e-props-correct.7",
+ new Object[] { element.getName(),
alternativeType.getName(), element.fType.getName()},
+ altElement);
+ }
+ // fall back to element declaration's type
+ alternativeType = element.fType;
}
// not expecting any more children
@@ -185,7 +212,7 @@
//set the xpathDefaultNamespace attribute value
typeAlternative.setXPathDefauleNamespace(xpathNS);
}
-
+
grammar.addTypeAlternative(element, typeAlternative);
fAttrChecker.returnAttrArray(attrValues, schemaDoc);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]