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/01/20 02:09:45 UTC
svn commit: r735898 - in
/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl:
dv/xs/XSSimpleTypeDecl.java xs/traversers/XSDSimpleTypeTraverser.java
Author: knoaman
Date: Mon Jan 19 17:09:45 2009
New Revision: 735898
URL: http://svn.apache.org/viewvc?rev=735898&view=rev
Log:
Do not expand union simple types - Thanks to John K Chan.
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/traversers/XSDSimpleTypeTraverser.java
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=735898&r1=735897&r2=735898&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 Mon Jan 19 17:09:45 2009
@@ -1900,7 +1900,11 @@
(fMemberTypes[i].fFacetsDefined != 0 && fMemberTypes[i].fFacetsDefined != FACET_WHITESPACE)) {
fMemberTypes[i].checkFacets(validatedInfo);
}
- validatedInfo.memberType = fMemberTypes[i];
+
+ if (fMemberTypes[i].fVariety != VARIETY_UNION) {
+ validatedInfo.memberType = fMemberTypes[i];
+ }
+
return aValue;
} catch(InvalidDatatypeValueException invalidValue) {
}
@@ -2348,27 +2352,36 @@
this.fOrdered = ORDERED_PARTIAL;
return;
}
- // we need to process the first member type before entering the loop
- short ancestorId = getPrimitiveDV(fMemberTypes[0].fValidationDV);
- boolean commonAnc = ancestorId != DV_ANYSIMPLETYPE;
- boolean allFalse = fMemberTypes[0].fOrdered == ORDERED_FALSE;
- // for the other member types, check whether the value is false
- // and whether they have the same ancestor as the first one
- for (int i = 1; i < fMemberTypes.length && (commonAnc || allFalse); i++) {
- if (commonAnc)
- commonAnc = ancestorId == getPrimitiveDV(fMemberTypes[i].fValidationDV);
- if (allFalse)
- allFalse = fMemberTypes[i].fOrdered == ORDERED_FALSE;
- }
- if (commonAnc) {
- // REVISIT: all member types should have the same ordered value
- // just use the first one. Can we assume this?
- this.fOrdered = fMemberTypes[0].fOrdered;
- } else if (allFalse) {
- this.fOrdered = ORDERED_FALSE;
- } else {
+
+ short firstMemberOrderVal = fMemberTypes[0].fOrdered;
+ // if any one of the memberTypes have partial order, set the order of this union to partial
+ if (firstMemberOrderVal==ORDERED_PARTIAL) {
this.fOrdered = ORDERED_PARTIAL;
+ return;
}
+
+ // if any of the memberTypes are of different order, set the order of this union to partial
+ short ancestorId = getPrimitiveDV(getFirstExpandedSimpleTypeValidationDV(fMemberTypes[0]));
+ boolean commonAnc = true;
+ for (int i=1; i<fMemberTypes.length; i++) {
+ if (fMemberTypes[i].fOrdered != firstMemberOrderVal) {
+ this.fOrdered = ORDERED_PARTIAL;
+ return;
+ }
+ if (commonAnc) {
+ commonAnc = (getPrimitiveDV(getFirstExpandedSimpleTypeValidationDV(fMemberTypes[i])) == ancestorId);
+ }
+ }
+
+ // if all the memberTypes are false order, set the order of this union to false
+ if (firstMemberOrderVal == ORDERED_FALSE) {
+ this.fOrdered = ORDERED_FALSE;
+ return;
+ }
+
+ // all the memberTypes are total order
+ // if they're from the same primitive type, set the order of this union to total, otherwise partial
+ this.fOrdered = commonAnc ? ORDERED_TOTAL : ORDERED_PARTIAL;
}
}//setOrdered
@@ -2419,11 +2432,11 @@
short ancestorId = 0 ;
if(memberTypes.length > 0){
- ancestorId = getPrimitiveDV(memberTypes[0].fValidationDV);
+ ancestorId = getPrimitiveDV(getFirstExpandedSimpleTypeValidationDV(memberTypes[0]));
}
for(int i = 0 ; i < memberTypes.length ; i++){
- if(!memberTypes[i].getBounded() || (ancestorId != getPrimitiveDV(memberTypes[i].fValidationDV)) ){
+ if(!memberTypes[i].getBounded() || (ancestorId != getPrimitiveDV(getFirstExpandedSimpleTypeValidationDV(memberTypes[i]))) ){
this.fBounded = false;
return;
}
@@ -2433,6 +2446,20 @@
}//setBounded
+ // returns the validation DV of the first simple type not a union
+ private short getFirstExpandedSimpleTypeValidationDV(XSSimpleTypeDecl simpleType) {
+ if (simpleType.fVariety == VARIETY_UNION) {
+ for (int i=0; i<simpleType.fMemberTypes.length; i++) {
+ short validationDV = getFirstExpandedSimpleTypeValidationDV(simpleType.fMemberTypes[i]);
+ if (validationDV != -1) {
+ return validationDV;
+ }
+ }
+ return -1;
+ }
+ return simpleType.fValidationDV;
+ } // getFirstPrimitiveValidationDV()
+
private boolean specialCardinalityCheck(){
if( (fBase.fValidationDV == XSSimpleTypeDecl.DV_DATE) || (fBase.fValidationDV == XSSimpleTypeDecl.DV_GYEARMONTH)
|| (fBase.fValidationDV == XSSimpleTypeDecl.DV_GYEAR) || (fBase.fValidationDV == XSSimpleTypeDecl.DV_GMONTHDAY)
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDSimpleTypeTraverser.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDSimpleTypeTraverser.java?rev=735898&r1=735897&r2=735898&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDSimpleTypeTraverser.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDSimpleTypeTraverser.java Mon Jan 19 17:09:45 2009
@@ -297,7 +297,9 @@
XSConstants.DERIVATION_UNION, schemaDoc);
if (dv != null) {
// if it's a union, expand it
- if (dv.getVariety() == XSSimpleType.VARIETY_UNION) {
+ // In XML Schema 1.1, we do not expand
+ if (dv.getVariety() == XSSimpleType.VARIETY_UNION &&
+ fSchemaHandler.fSchemaVersion < Constants.SCHEMA_VERSION_1_1) {
dvs = dv.getMemberTypes();
for (int j = 0; j < dvs.getLength(); j++)
dTValidators.add(dvs.item(j));
@@ -333,8 +335,9 @@
// traverse this child to get the member type
dv = traverseLocal(content, schemaDoc, grammar);
if (dv != null) {
- // if it's a union, expand it
- if (dv.getVariety() == XSSimpleType.VARIETY_UNION) {
+ // if it's a union, expand it (only in XML 1.0)
+ if (dv.getVariety() == XSSimpleType.VARIETY_UNION &&
+ fSchemaHandler.fSchemaVersion < Constants.SCHEMA_VERSION_1_1) {
dvs = dv.getMemberTypes();
for (int j = 0; j < dvs.getLength(); j++) {
dTValidators.add(dvs.item(j));
@@ -493,6 +496,12 @@
if (((XSSimpleType)temp.item(i)).getVariety() == XSSimpleType.VARIETY_LIST) {
return true;
}
+ /* In XML Schema 1.1, unions are not expanded */
+ else if (fSchemaHandler.fSchemaVersion == Constants.SCHEMA_VERSION_1_1 && ((XSSimpleType)temp.item(i)).getVariety() == XSSimpleType.VARIETY_UNION) {
+ if (isListDatatype((XSSimpleType)temp.item(i))) {
+ return true;
+ }
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org