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 2011/09/08 20:21:19 UTC
svn commit: r1166836 - in
/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl: dv/xs/
xs/ xs/models/ xs/traversers/
Author: knoaman
Date: Thu Sep 8 18:21:19 2011
New Revision: 1166836
URL: http://svn.apache.org/viewvc?rev=1166836&view=rev
Log:
Allow equality check between singleton list value and atomic value - Jira 1527 (https://issues.apache.org/jira/browse/XERCESJ-1527)
Added:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/EqualityHelper.java (with props)
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSAttributeGroupDecl.java
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSConstraints.java
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11CMRestriction.java
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAttributeTraverser.java
Added: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/EqualityHelper.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/EqualityHelper.java?rev=1166836&view=auto
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/EqualityHelper.java (added)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/EqualityHelper.java Thu Sep 8 18:21:19 2011
@@ -0,0 +1,217 @@
+/*
+ * 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.dv.xs;
+
+import org.apache.xerces.impl.Constants;
+import org.apache.xerces.impl.dv.ValidatedInfo;
+import org.apache.xerces.impl.dv.xs.ListDV.ListData;
+import org.apache.xerces.xs.ShortList;
+import org.apache.xerces.xs.XSConstants;
+
+/**
+ * @version $Id$
+ */
+public class EqualityHelper {
+
+ // private constructor
+ private EqualityHelper() {}
+
+ // public methods
+
+ /**
+ * Compare 2 actual values
+ */
+ public static boolean isEqual(Object value1, Object value2,
+ short value1Type, short value2Type,
+ ShortList typeList1, ShortList typeList2,
+ short schemaVersion) {
+ if (schemaVersion == Constants.SCHEMA_VERSION_1_1) {
+ return isEqual11(value1, value2, value1Type, value2Type, typeList1, typeList2);
+ }
+
+ return isEqual(value1, value2, value1Type, value2Type, typeList1, typeList2);
+ }
+
+ public static boolean isEqual(ValidatedInfo value1, ValidatedInfo value2, short schemaVersion) {
+ if (schemaVersion == Constants.SCHEMA_VERSION_1_1) {
+ return isEqual11(value1.actualValue, value2.actualValue,
+ value1.actualValueType, value2.actualValueType,
+ value1.itemValueTypes, value2.itemValueTypes);
+ }
+
+ return isEqual(value1.actualValue, value2.actualValue,
+ value1.actualValueType, value2.actualValueType,
+ value1.itemValueTypes, value2.itemValueTypes);
+ }
+
+ // private XML Schema 1.0 methods
+ private static boolean isEqual(Object value1, Object value2,
+ short value1Type, short value2Type,
+ ShortList typeList1, ShortList typeList2) {
+
+ if (!isTypeComparable(value1Type, value2Type, typeList1, typeList2)) {
+ return false;
+ }
+
+ if (value1 == value2) {
+ return true;
+ }
+
+ if (value1 == null || value2 == null) {
+ return false;
+ }
+
+ return value1.equals(value2);
+ }
+
+ private static boolean isTypeComparable(short type1, short type2,
+ ShortList typeList1, ShortList typeList2) {
+
+ final short primitiveType1 = convertToPrimitiveKind(type1);
+ final short primitiveType2 = convertToPrimitiveKind(type2);
+
+ // Same types
+ if (primitiveType1 == primitiveType2) {
+ if (primitiveType1 == XSConstants.LIST_DT) {
+ return isListTypeComparable(typeList1, typeList2);
+ }
+
+ return true;
+ }
+
+ // Different types
+ return (primitiveType1 == XSConstants.ANYSIMPLETYPE_DT && primitiveType2 == XSConstants.STRING_DT ||
+ primitiveType1 == XSConstants.STRING_DT && primitiveType2 == XSConstants.ANYSIMPLETYPE_DT);
+ }
+
+ // private XML Schema 1.1 methods
+ private static boolean isEqual11(Object value1, Object value2,
+ short value1Type, short value2Type,
+ ShortList typeList1, ShortList typeList2) {
+
+ if (!isType11Comparable(value1Type, value2Type, typeList1, typeList2)) {
+ return false;
+ }
+
+ if (value1 == value2) {
+ return true;
+ }
+
+ if (value1 == null || value2 == null) {
+ return false;
+ }
+
+ if (value1 instanceof ListData) {
+ if (!(value2 instanceof ListData)) {
+ final ListData listData = (ListData) value1;
+ if (listData.getLength() != 1) {
+ return false;
+ }
+ value1 = listData.get(0);
+ }
+ }
+ else if (value2 instanceof ListData) {
+ final ListData listData = (ListData) value2;
+ if (listData.getLength() != 1) {
+ return false;
+ }
+ value2 = listData.get(0);
+ }
+
+ return value1.equals(value2);
+ }
+
+ private static boolean isType11Comparable(short type1, short type2,
+ ShortList typeList1, ShortList typeList2) {
+
+ final short primitiveType1 = convertToPrimitiveKind(type1);
+ final short primitiveType2 = convertToPrimitiveKind(type2);
+
+ // Same types
+ if (primitiveType1 == primitiveType2) {
+ if (primitiveType1 == XSConstants.LIST_DT) {
+ return isListTypeComparable(typeList1, typeList2);
+ }
+
+ return true;
+ }
+
+ // Different types
+ // Check singleton list vs atomic
+ if (primitiveType1 == XSConstants.LIST_DT) {
+ if (typeList1 == null || typeList1.getLength() != 1) {
+ return false;
+ }
+ return isType11Comparable(typeList1.item(0), primitiveType2, null, null);
+ }
+ else if (primitiveType2 == XSConstants.LIST_DT) {
+ if (typeList2 == null || typeList2.getLength() != 1) {
+ return false;
+ }
+ return isType11Comparable(primitiveType1, typeList2.item(0), null, null);
+ }
+
+ return (primitiveType1 == XSConstants.ANYSIMPLETYPE_DT && primitiveType2 == XSConstants.STRING_DT ||
+ primitiveType1 == XSConstants.STRING_DT && primitiveType2 == XSConstants.ANYSIMPLETYPE_DT);
+ }
+
+ // Private common methods
+ private static short convertToPrimitiveKind(short valueType) {
+ /** Primitive datatypes. */
+ if (valueType <= XSConstants.NOTATION_DT) {
+ return valueType;
+ }
+ /** Types derived from string. */
+ if (valueType <= XSConstants.ENTITY_DT) {
+ return XSConstants.STRING_DT;
+ }
+ /** Types derived from decimal. */
+ if (valueType <= XSConstants.POSITIVEINTEGER_DT) {
+ return XSConstants.DECIMAL_DT;
+ }
+
+ /** List datatypes */
+ if (valueType == XSConstants.LIST_DT || valueType == XSConstants.LISTOFUNION_DT) {
+ return XSConstants.LIST_DT;
+ }
+ /** Other types. */
+ return valueType;
+ }
+
+ private static boolean isListTypeComparable(ShortList typeList1, ShortList typeList2) {
+ final int typeList1Length = typeList1 != null ? typeList1.getLength() : 0;
+ final int typeList2Length = typeList2 != null ? typeList2.getLength() : 0;
+ if (typeList1Length != typeList2Length) {
+ return false;
+ }
+ for (int i = 0; i < typeList1Length; ++i) {
+ final short primitiveItem1 = convertToPrimitiveKind(typeList1.item(i));
+ final short primitiveItem2 = convertToPrimitiveKind(typeList2.item(i));
+ if (primitiveItem1 != primitiveItem2) {
+ if (primitiveItem1 == XSConstants.ANYSIMPLETYPE_DT && primitiveItem2 == XSConstants.STRING_DT ||
+ primitiveItem1 == XSConstants.STRING_DT && primitiveItem2 == XSConstants.ANYSIMPLETYPE_DT) {
+ continue;
+ }
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+}
Propchange: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/EqualityHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/EqualityHelper.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java?rev=1166836&r1=1166835&r2=1166836&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java Thu Sep 8 18:21:19 2011
@@ -1814,7 +1814,7 @@ public class XSSimpleTypeDecl implements
// then validate the actual value against the facets
if (context.needFacetChecking() &&
(fFacetsDefined != 0 && fFacetsDefined != FACET_WHITESPACE)) {
- checkFacets(validatedInfo);
+ checkFacets(validatedInfo, context);
}
// now check extra rules: for ID/IDREF/ENTITY
@@ -1824,12 +1824,11 @@ public class XSSimpleTypeDecl implements
}
- private void checkFacets(ValidatedInfo validatedInfo) throws InvalidDatatypeValueException {
+ private void checkFacets(ValidatedInfo validatedInfo, ValidationContext context) throws InvalidDatatypeValueException {
Object ob = validatedInfo.actualValue;
String content = validatedInfo.normalizedValue;
- short type = validatedInfo.actualValueType;
- ShortList itemType = validatedInfo.itemValueTypes;
+ final short schemaVersion = (context.getTypeValidatorHelper().isXMLSchema11()) ? Constants.SCHEMA_VERSION_1_1 : Constants.SCHEMA_VERSION_1_0;
// For QName and NOTATION types, we don't check length facets
if (fValidationDV != DV_QNAME && fValidationDV != DV_NOTATION) {
@@ -1864,42 +1863,13 @@ public class XSSimpleTypeDecl implements
if ( ((fFacetsDefined & FACET_ENUMERATION) != 0 ) ) {
boolean present = false;
final int enumSize = fEnumerationSize;
- final short primitiveType1 = convertToPrimitiveKind(type);
for (int i = 0; i < enumSize; i++) {
- final short primitiveType2 = convertToPrimitiveKind(fEnumeration[i].actualValueType);
- if ((primitiveType1 == primitiveType2 ||
- primitiveType1 == XSConstants.ANYSIMPLETYPE_DT && primitiveType2 == XSConstants.STRING_DT ||
- primitiveType1 == XSConstants.STRING_DT && primitiveType2 == XSConstants.ANYSIMPLETYPE_DT)
- && fEnumeration[i].actualValue.equals(ob)) {
- if (primitiveType1 == XSConstants.LIST_DT || primitiveType1 == XSConstants.LISTOFUNION_DT) {
- ShortList enumItemType = fEnumeration[i].itemValueTypes;
- final int typeList1Length = itemType != null ? itemType.getLength() : 0;
- final int typeList2Length = enumItemType != null ? enumItemType.getLength() : 0;
- if (typeList1Length == typeList2Length) {
- int j;
- for (j = 0; j < typeList1Length; ++j) {
- final short primitiveItem1 = convertToPrimitiveKind(itemType.item(j));
- final short primitiveItem2 = convertToPrimitiveKind(enumItemType.item(j));
- if (primitiveItem1 != primitiveItem2) {
- if (primitiveItem1 == XSConstants.ANYSIMPLETYPE_DT && primitiveItem2 == XSConstants.STRING_DT ||
- primitiveItem1 == XSConstants.STRING_DT && primitiveItem2 == XSConstants.ANYSIMPLETYPE_DT) {
- continue;
- }
- break;
- }
- }
- if (j == typeList1Length) {
- present = true;
- break;
- }
- }
- }
- else {
- present = true;
- break;
- }
+ if (EqualityHelper.isEqual(validatedInfo, fEnumeration[i], schemaVersion)) {
+ present = true;
+ break;
}
}
+
if(!present){
StringBuffer sb = new StringBuffer();
appendEnumString(sb);
@@ -2122,7 +2092,7 @@ public class XSSimpleTypeDecl implements
avalue[i] = fItemType.getActualValue(parsedList.nextToken(), context, validatedInfo, false);
if (context.needFacetChecking() &&
(fItemType.fFacetsDefined != 0 && fItemType.fFacetsDefined != FACET_WHITESPACE)) {
- fItemType.checkFacets(validatedInfo);
+ fItemType.checkFacets(validatedInfo, context);
}
memberTypes[i] = (XSSimpleTypeDecl)validatedInfo.memberType;
if (isUnion)
@@ -2154,7 +2124,7 @@ public class XSSimpleTypeDecl implements
Object aValue = fMemberTypes[i].getActualValue(_content, context, validatedInfo, true);
if (context.needFacetChecking() &&
(fMemberTypes[i].fFacetsDefined != 0 && fMemberTypes[i].fFacetsDefined != FACET_WHITESPACE)) {
- fMemberTypes[i].checkFacets(validatedInfo);
+ fMemberTypes[i].checkFacets(validatedInfo, context);
}
if (fMemberTypes[i].fVariety != VARIETY_UNION) {
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java?rev=1166836&r1=1166835&r2=1166836&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java Thu Sep 8 18:21:19 2011
@@ -36,6 +36,7 @@ import org.apache.xerces.impl.dv.Datatyp
import org.apache.xerces.impl.dv.InvalidDatatypeValueException;
import org.apache.xerces.impl.dv.ValidatedInfo;
import org.apache.xerces.impl.dv.XSSimpleType;
+import org.apache.xerces.impl.dv.xs.EqualityHelper;
import org.apache.xerces.impl.dv.xs.TypeValidatorHelper;
import org.apache.xerces.impl.dv.xs.XSSimpleTypeDecl;
import org.apache.xerces.impl.validation.ValidationManager;
@@ -3511,7 +3512,7 @@ public class XMLSchemaValidator
// get the value constraint from use or decl
// 4 The item's actual value must match the value of the {value constraint}, if it is present and fixed. // now check the value against the simpleType
if (actualValue != null && currDecl.getConstraintType() == XSConstants.VC_FIXED) {
- if (!ValidatedInfo.isComparable(fValidatedInfo, currDecl.fDefault) || !actualValue.equals(currDecl.fDefault.actualValue)) {
+ if (!EqualityHelper.isEqual(fValidatedInfo, currDecl.fDefault, fSchemaVersion)) {
reportSchemaError(
"cvc-attribute.4",
new Object[] {
@@ -3526,7 +3527,7 @@ public class XMLSchemaValidator
if (actualValue != null
&& currUse != null
&& currUse.fConstraintType == XSConstants.VC_FIXED) {
- if (!ValidatedInfo.isComparable(fValidatedInfo, currUse.fDefault) || !actualValue.equals(currUse.fDefault.actualValue)) {
+ if (!EqualityHelper.isEqual(fValidatedInfo, currUse.fDefault, fSchemaVersion)) {
reportSchemaError(
"cvc-complex-type.3.1",
new Object[] {
@@ -3768,8 +3769,8 @@ public class XMLSchemaValidator
}
// 5.2.2.2.2 If the {content type} of the actual type definition is a simple type definition, then the actual value of the item must match the canonical lexical representation of the {value constraint} value.
else if (ctype.fContentType == XSComplexTypeDecl.CONTENTTYPE_SIMPLE) {
- if (actualValue != null && (!ValidatedInfo.isComparable(fValidatedInfo, fCurrentElemDecl.fDefault)
- || !actualValue.equals(fCurrentElemDecl.fDefault.actualValue))) {
+ if (actualValue != null &&
+ !EqualityHelper.isEqual(fValidatedInfo, fCurrentElemDecl.fDefault, fSchemaVersion)) {
reportSchemaError(
"cvc-elt.5.2.2.2.2",
new Object[] {
@@ -3779,8 +3780,8 @@ public class XMLSchemaValidator
}
}
} else if (fCurrentType.getTypeCategory() == XSTypeDefinition.SIMPLE_TYPE) {
- if (actualValue != null && (!ValidatedInfo.isComparable(fValidatedInfo, fCurrentElemDecl.fDefault)
- || !actualValue.equals(fCurrentElemDecl.fDefault.actualValue))) {
+ if (actualValue != null &&
+ !EqualityHelper.isEqual(fValidatedInfo, fCurrentElemDecl.fDefault, fSchemaVersion)) {
// REVISIT: the spec didn't mention this case: fixed
// value with simple type
reportSchemaError(
@@ -4191,6 +4192,10 @@ public class XMLSchemaValidator
public void append(ValueStoreBase newVal) {
for (int i = 0; i < newVal.fValues.size(); i++) {
fValues.addElement(newVal.fValues.elementAt(i));
+
+ // REVISIT:
+ addValueType(newVal.getValueTypeAt(i));
+ addItemValueType(newVal.getItemValueTypeAt(i));
}
} // append(ValueStoreBase)
@@ -4336,19 +4341,16 @@ public class XMLSchemaValidator
LOOP : for (int i = 0; i < size; i = next) {
next = i + fFieldCount;
for (int j = 0; j < fFieldCount; j++) {
- Object value1 = fLocalValues[j];
- Object value2 = fValues.elementAt(i);
- short valueType1 = fLocalValueTypes[j];
- short valueType2 = getValueTypeAt(i);
- if (value1 == null || value2 == null || valueType1 != valueType2 || !(value1.equals(value2))) {
+ final Object value1 = fLocalValues[j];
+ final Object value2 = fValues.elementAt(i);
+ final short valueType1 = fLocalValueTypes[j];
+ final short valueType2 = getValueTypeAt(i);
+ final ShortList typeList1 = isListType(valueType1) ? fLocalItemValueTypes[j] : null;
+ final ShortList typeList2 = isListType(valueType2) ? getItemValueTypeAt(i) : null;
+
+ if (!EqualityHelper.isEqual(value1, value2, valueType1, valueType2, typeList1, typeList2, fSchemaVersion)) {
continue LOOP;
}
- else if(valueType1 == XSConstants.LIST_DT || valueType1 == XSConstants.LISTOFUNION_DT) {
- ShortList list1 = fLocalItemValueTypes[j];
- ShortList list2 = getItemValueTypeAt(i);
- if(list1 == null || list2 == null || !list1.equals(list2))
- continue LOOP;
- }
i++;
}
// found it
@@ -4368,17 +4370,19 @@ public class XMLSchemaValidator
final Vector values = vsb.fValues;
final int size1 = values.size();
if (fFieldCount <= 1) {
- for (int i = 0; i < size1; ++i) {
- short val = vsb.getValueTypeAt(i);
- if (!valueTypeContains(val) || !fValues.contains(values.elementAt(i))) {
- return i;
- }
- else if(val == XSConstants.LIST_DT || val == XSConstants.LISTOFUNION_DT) {
- ShortList list1 = vsb.getItemValueTypeAt(i);
- if (!itemValueTypeContains(list1)) {
- return i;
+ LOOP: for (int i = 0; i < size1; ++i) {
+ final Object value1 = values.elementAt(i);
+ final short valueType1 = vsb.getValueTypeAt(i);
+ final ShortList typeList1 = isListType(valueType1) ? vsb.getItemValueTypeAt(i) : null;
+ for (int j=0; j < fValues.size(); ++j) {
+ final Object value2 = fValues.elementAt(j);
+ final short valueType2 = getValueTypeAt(j);
+ final ShortList typeList2 = isListType(valueType2) ? getItemValueTypeAt(j) : null;
+ if (EqualityHelper.isEqual(value1, value2, valueType1, valueType2, typeList1, typeList2, fSchemaVersion)) {
+ continue LOOP;
}
}
+ return i;
}
}
/** Handle n-tuples. **/
@@ -4393,16 +4397,12 @@ public class XMLSchemaValidator
final Object value2 = fValues.elementAt(j+k);
final short valueType1 = vsb.getValueTypeAt(i+k);
final short valueType2 = getValueTypeAt(j+k);
- if (value1 != value2 && (valueType1 != valueType2 || value1 == null || !value1.equals(value2))) {
+ final ShortList typeList1 = isListType(valueType1) ? vsb.getItemValueTypeAt(i+k) : null;
+ final ShortList typeList2 = isListType(valueType2) ? getItemValueTypeAt(j+k) : null;
+
+ if (!EqualityHelper.isEqual(value1, value2, valueType1, valueType2, typeList1, typeList2, fSchemaVersion)) {
continue INNER;
}
- else if(valueType1 == XSConstants.LIST_DT || valueType1 == XSConstants.LISTOFUNION_DT) {
- ShortList list1 = vsb.getItemValueTypeAt(i+k);
- ShortList list2 = getItemValueTypeAt(j+k);
- if (list1 == null || list2 == null || !list1.equals(list2)) {
- continue INNER;
- }
- }
}
continue OUTER;
}
@@ -4489,6 +4489,9 @@ public class XMLSchemaValidator
//
// Private methods
//
+ private boolean isListType(short type) {
+ return type == XSConstants.LIST_DT || type == XSConstants.LISTOFUNION_DT;
+ }
private void addValueType(short type) {
if (fUseValueTypeVector) {
@@ -4516,13 +4519,6 @@ public class XMLSchemaValidator
return fValueType;
}
- private boolean valueTypeContains(short value) {
- if (fUseValueTypeVector) {
- return fValueTypes.contains(value);
- }
- return fValueType == value;
- }
-
private void addItemValueType(ShortList itemValueType) {
if (fUseItemValueTypeVector) {
fItemValueTypes.add(itemValueType);
@@ -4550,14 +4546,6 @@ public class XMLSchemaValidator
return fItemValueType;
}
- private boolean itemValueTypeContains(ShortList value) {
- if (fUseItemValueTypeVector) {
- return fItemValueTypes.contains(value);
- }
- return fItemValueType == value ||
- (fItemValueType != null && fItemValueType.equals(value));
- }
-
} // class ValueStoreBase
/**
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSAttributeGroupDecl.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSAttributeGroupDecl.java?rev=1166836&r1=1166835&r2=1166836&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSAttributeGroupDecl.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSAttributeGroupDecl.java Thu Sep 8 18:21:19 2011
@@ -18,6 +18,7 @@
package org.apache.xerces.impl.xs;
import org.apache.xerces.impl.dv.ValidatedInfo;
+import org.apache.xerces.impl.dv.xs.EqualityHelper;
import org.apache.xerces.impl.xs.util.XSObjectListImpl;
import org.apache.xerces.xs.XSAnnotation;
import org.apache.xerces.xs.XSAttributeGroupDefinition;
@@ -254,11 +255,12 @@ public class XSAttributeGroupDecl implem
return errorArgs;
} else {
// check the values are the same.
- ValidatedInfo baseFixedValue=(baseAttrUse.fDefault!=null ?
+ final ValidatedInfo baseFixedValue=(baseAttrUse.fDefault!=null ?
baseAttrUse.fDefault: baseAttrDecl.fDefault);
- ValidatedInfo thisFixedValue=(attrUse.fDefault!=null ?
+ final ValidatedInfo thisFixedValue=(attrUse.fDefault!=null ?
attrUse.fDefault: attrDecl.fDefault);
- if (!baseFixedValue.actualValue.equals(thisFixedValue.actualValue)) {
+
+ if (!EqualityHelper.isEqual(baseFixedValue, thisFixedValue, xsConstraints.getSchemaVersion())) {
errorArgs = new Object[]{typeName, attrDecl.fName, thisFixedValue.stringValue(),
baseFixedValue.stringValue(), "derivation-ok-restriction.2.1.3.b"};
return errorArgs;
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSConstraints.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSConstraints.java?rev=1166836&r1=1166835&r2=1166836&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSConstraints.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSConstraints.java Thu Sep 8 18:21:19 2011
@@ -86,6 +86,10 @@ public abstract class XSConstraints {
fAnyType = anyType;
fSchemaVersion = schemaVersion;
}
+
+ final public short getSchemaVersion() {
+ return fSchemaVersion;
+ }
/**
* check whether derived is valid derived from base, given a subset
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11CMRestriction.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11CMRestriction.java?rev=1166836&r1=1166835&r2=1166836&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11CMRestriction.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11CMRestriction.java Thu Sep 8 18:21:19 2011
@@ -22,6 +22,7 @@ import java.util.Arrays;
import java.util.List;
import org.apache.xerces.impl.Constants;
+import org.apache.xerces.impl.dv.xs.EqualityHelper;
import org.apache.xerces.impl.xs.SchemaGrammar;
import org.apache.xerces.impl.xs.SubstitutionGroupHandler;
import org.apache.xerces.impl.xs.XSConstraints;
@@ -32,11 +33,8 @@ import org.apache.xerces.impl.xs.XSOpenC
import org.apache.xerces.impl.xs.XSWildcardDecl;
import org.apache.xerces.impl.xs.identity.IdentityConstraint;
import org.apache.xerces.xni.QName;
-import org.apache.xerces.xs.XSComplexTypeDefinition;
import org.apache.xerces.xs.XSConstants;
import org.apache.xerces.xs.XSNamedMap;
-import org.apache.xerces.xs.XSSimpleTypeDefinition;
-import org.apache.xerces.xs.XSTypeDefinition;
// TODO: tests:
@@ -474,36 +472,9 @@ public final class XS11CMRestriction imp
return false;
}
- // Get primitive kind for the fixed values. Use "string" for
- // complex type with mixed content.
- short btype, dtype;
- if (eb.fType.getTypeCategory() == XSTypeDefinition.SIMPLE_TYPE) {
- btype = ((XSSimpleTypeDefinition)eb.fType).getPrimitiveType().getBuiltInKind();
- }
- else {
- XSComplexTypeDefinition complex = (XSComplexTypeDefinition)eb.fType;
- if (complex.getContentType() == XSComplexTypeDefinition.CONTENTTYPE_SIMPLE) {
- btype = complex.getSimpleType().getPrimitiveType().getBuiltInKind();
- }
- else {
- btype = XSConstants.STRING_DT;
- }
- }
- if (ed.fType.getTypeCategory() == XSTypeDefinition.SIMPLE_TYPE) {
- dtype = ((XSSimpleTypeDefinition)ed.fType).getPrimitiveType().getBuiltInKind();
- }
- else {
- XSComplexTypeDefinition complex = (XSComplexTypeDefinition)ed.fType;
- if (complex.getContentType() == XSComplexTypeDefinition.CONTENTTYPE_SIMPLE) {
- dtype = complex.getSimpleType().getPrimitiveType().getBuiltInKind();
- }
- else {
- dtype = XSConstants.STRING_DT;
- }
- }
// The 2 values must have the same primitive kind and actual value.
// equals() checks both equality and identity.
- if (btype != dtype || !eb.fDefault.actualValue.equals(ed.fDefault.actualValue)) {
+ if (!EqualityHelper.isEqual(eb.fDefault, ed.fDefault, Constants.SCHEMA_VERSION_1_1)) {
return false;
}
}
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=1166836&r1=1166835&r2=1166836&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 Sep 8 18:21:19 2011
@@ -21,6 +21,7 @@ import org.apache.xerces.impl.Constants;
import org.apache.xerces.impl.dv.InvalidDatatypeValueException;
import org.apache.xerces.impl.dv.ValidatedInfo;
import org.apache.xerces.impl.dv.XSSimpleType;
+import org.apache.xerces.impl.dv.xs.EqualityHelper;
import org.apache.xerces.impl.xs.SchemaGrammar;
import org.apache.xerces.impl.xs.SchemaSymbols;
import org.apache.xerces.impl.xs.XSAnnotationImpl;
@@ -208,7 +209,7 @@ class XSDAttributeTraverser extends XSDA
if (attrUse.fAttrDecl.getConstraintType() == XSConstants.VC_FIXED &&
attrUse.fConstraintType != XSConstants.VC_NONE) {
if (attrUse.fConstraintType != XSConstants.VC_FIXED ||
- !attrUse.fAttrDecl.getValInfo().actualValue.equals(attrUse.fDefault.actualValue)) {
+ !EqualityHelper.isEqual(attrUse.fAttrDecl.getValInfo(), attrUse.fDefault, fSchemaHandler.fSchemaVersion)) {
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();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org