Author: mukulg
Date: Sat Nov  6 07:39:13 2010
New Revision: 1031965

URL: http://svn.apache.org/viewvc?rev=1031965&view=rev
Log:
committing changes for jira issue XERCESJ-1472 (allowing xs:group as child of 
xs:all for schema 1.1). fellow committers are invited to review this change.

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/XSDAbstractParticleTraverser.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=1031965&r1=1031964&r2=1031965&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
 Sat Nov  6 07:39:13 2010
@@ -254,6 +254,7 @@
         maxInclusive-valid-restriction.4 = maxInclusive-valid-restriction.4: 
Error for type ''{2}''. The maxInclusive value =''{0}'' must be > minExclusive 
of the base type ''{1}''.
         maxLength-valid-restriction = maxLength-valid-restriction: In the 
definition of {2}, maxLength value = ''{0}'' must be <= that of the base type 
''{1}''.
         mg-props-correct.2 = mg-props-correct.2: Circular definitions detected 
for group ''{0}''. Recursively following the '{'term'}' values of the particles 
leads to a particle whose '{'term'}' is the group itself.
+        mg-props-correct.3 = mg-props-correct.3: Incorrect schema instruction 
''{0}'' found as child of ''xs:all -> xs:group''. Only the compositor xs:all is 
permitted as child of ''xs:all -> xs:group''.   
         minExclusive-less-than-equal-to-maxExclusive = 
minExclusive-less-than-equal-to-maxExclusive: In the definition of {2}, 
minExclusive value = ''{0}'' must be <= maxExclusive value = ''{1}''.
         minExclusive-less-than-maxInclusive = 
minExclusive-less-than-maxInclusive: In the definition of {2}, minExclusive 
value = ''{0}'' must be < maxInclusive value = ''{1}''.
         minExclusive-valid-restriction.1 = minExclusive-valid-restriction.1: 
Error for type ''{2}''. The minExclusive value =''{0}'' must be >= minExclusive 
of the base type ''{1}''.

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractParticleTraverser.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractParticleTraverser.java?rev=1031965&r1=1031964&r2=1031965&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractParticleTraverser.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractParticleTraverser.java
 Sat Nov  6 07:39:13 2010
@@ -26,6 +26,7 @@ import org.apache.xerces.impl.xs.XSParti
 import org.apache.xerces.impl.xs.util.XInt;
 import org.apache.xerces.impl.xs.util.XSObjectListImpl;
 import org.apache.xerces.util.DOMUtil;
+import org.apache.xerces.xs.XSModelGroup;
 import org.apache.xerces.xs.XSObject;
 import org.apache.xerces.xs.XSObjectList;
 import org.w3c.dom.Element;
@@ -52,7 +53,7 @@ abstract class XSDAbstractParticleTraver
      *   id = ID
      *   maxOccurs = 1 : 1
      *   minOccurs = (0 | 1) : 1&gt;
-     *   Content: (annotation? , element*)
+     *   Content: (annotation?, (element | any | group)*)
      * &lt;/all&gt;
      **/
     XSParticleDecl traverseAll(Element allDecl,
@@ -90,21 +91,39 @@ abstract class XSDAbstractParticleTraver
             // Only elements are allowed in <all>
             if (childName.equals(SchemaSymbols.ELT_ELEMENT)) {
                 particle = 
fSchemaHandler.fElementTraverser.traverseLocal(child, schemaDoc, grammar, 
PROCESSING_ALL_EL, parent);
+                if (particle != null) {
+                    fPArray.addParticle(particle);
+                }
             }
             else {
-               // XML Schema 1.1 - allow wildcard
-                if (fSchemaHandler.fSchemaVersion == 
Constants.SCHEMA_VERSION_1_1 &&
-                    childName.equals(SchemaSymbols.ELT_ANY)) {
-                    particle = 
fSchemaHandler.fWildCardTraverser.traverseAny(child, schemaDoc, grammar);
+               // XML Schema 1.1 - allow wildcard and group
+                if (fSchemaHandler.fSchemaVersion == 
Constants.SCHEMA_VERSION_1_1) {
+                    if (childName.equals(SchemaSymbols.ELT_ANY)) {
+                        particle = 
fSchemaHandler.fWildCardTraverser.traverseAny(child, schemaDoc, grammar);
+                        if (particle != null) {
+                            fPArray.addParticle(particle);
+                        }
+                    }
+                    else if (childName.equals(SchemaSymbols.ELT_GROUP)) {
+                        particle = 
fSchemaHandler.fGroupTraverser.traverseLocal(child, schemaDoc, grammar);        
                                        
+                        if (particle != null) {
+                            expandGroupParticleForCompositorAll(particle, 
child); 
+                        }
+                    }
+                    else {
+                       // in XML Schema 1.1 mode, it's an error to have 
anything other than xs:any or xs:group at this point.
+                       // report an error.
+                       Object[] args = {"all", "(annotation?, (element | any | 
group)*)", DOMUtil.getLocalName(child)};
+                       reportSchemaError("s4s-elt-must-match.1", args, child);
+                    }
                 }
                 else {
+                    // in XML Schema 1.0 mode, it's an error to have anything 
other than xs:element at this point.
+                    // report an error.
                     Object[] args = {"all", "(annotation?, element*)", 
DOMUtil.getLocalName(child)};
                     reportSchemaError("s4s-elt-must-match.1", args, child);
                 }
             }
-            
-            if (particle != null)
-                fPArray.addParticle(particle);
         }
         
         particle = null;
@@ -141,6 +160,37 @@ abstract class XSDAbstractParticleTraver
         return particle;
     }
     
+    /*
+     * Given a particle declaration (having model-group as it's term) add 
all-of it's leaf descendant 
+     * particles (element and wild-card declarations) to a global particle 
array (fPArray), by expanding
+     * the input particle (method argument) recursively.
+     */
+    private void expandGroupParticleForCompositorAll(XSParticleDecl particle, 
Element child) {
+        
+        XSModelGroupImpl group = (XSModelGroupImpl) particle.fValue;
+        if (group.getCompositor() == XSModelGroup.COMPOSITOR_ALL) {
+            XSParticleDecl[] subParticles = group.fParticles;
+            for (int partlIdx = 0; partlIdx < group.fParticleCount; 
partlIdx++) {
+               short particleType = subParticles[partlIdx].fType;
+               if (particleType == XSParticleDecl.PARTICLE_ELEMENT  || 
+                   particleType == XSParticleDecl.PARTICLE_WILDCARD) {
+                     fPArray.addParticle(subParticles[partlIdx]); 
+               }
+               else {
+                   // the sub particle is a model-group. call the method 
recursively.
+                   expandGroupParticleForCompositorAll(subParticles[partlIdx], 
child); 
+               }
+            }
+        }
+        else {
+            String wrongCompsName = (group.getCompositor() == 
XSModelGroup.COMPOSITOR_SEQUENCE) ? 
+                                     "xs:"+SchemaSymbols.ELT_SEQUENCE : 
"xs:"+SchemaSymbols.ELT_CHOICE;
+            // it's an error to have a non-all (xs:all) compositor within 
"xs:all -> xs:group"
+            reportSchemaError("mg-props-correct.3", new Object[] 
{wrongCompsName}, child);
+        }
+        
+    } // expandGroupParticleForCompositorAll
+
     /**
      * Traverse the Sequence declaration
      *



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to