You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by mu...@apache.org on 2011/03/30 12:33:29 UTC

svn commit: r1086899 - in /xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs: XMLSchemaValidator.java XSDTypeAlternativeValidator.java

Author: mukulg
Date: Wed Mar 30 10:33:29 2011
New Revision: 1086899

URL: http://svn.apache.org/viewvc?rev=1086899&view=rev
Log:
committing few improvements for inheritable attributes processing.

It seems we should probably have something like following data structures,

XMLAttributes[], or
XMLSchemaValidator -> InheritableAttribute[]

in the field PSVIElementNSImpl -> fInheritedAttributes instead of the present XSAttributeUse[] (which only provides the attribute schema component and not the attribute value).

This would allow both the attribute QName and it's value for inherited attributes to be available in PSVI results after validation episode.

I might attempt above proposed improvement in near future.

Modified:
    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/XSDTypeAlternativeValidator.java

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=1086899&r1=1086898&r2=1086899&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 Wed Mar 30 10:33:29 2011
@@ -2410,22 +2410,7 @@ public class XMLSchemaValidator
         // simple content of an element identifies the parent of the element
         if (fSchemaVersion == Constants.SCHEMA_VERSION_1_1) {
             fIDContext.setCurrentScopeToParent();
-        }
-        
-        // inheritable attributes processing
-        XSAttributeUse[] inheritedAttributesPsvi = null; // for copying into the ElementPSVI
-        if (fSchemaVersion == Constants.SCHEMA_VERSION_1_1) {
-            fInhrAttrCountStack.push(fInheritableAttrList.size());
-            if (fInheritableAttrList.size() > 0) {
-                inheritedAttributesPsvi = new XSAttributeUse[fInheritableAttrList.size()]; 
-                for (int inhrAttrIdx = 0; inhrAttrIdx < fInheritableAttrList.size(); inhrAttrIdx++) {
-                    inheritedAttributesPsvi[inhrAttrIdx] = ((InheritableAttribute) fInheritableAttrList.get(inhrAttrIdx)).getAttributeUse();  
-                }
-            }
-            // find attributes among the attributes of the current element, which are declared inheritable and store them for later processing.
-            // one of the uses of inherited attributes is in type alternatives processing.
-            saveInheritableAttributes(fCurrentElemDecl, attributes);
-        }
+        }                
 
         // call all active identity constraints
         int count = fMatcherStack.getMatcherCount();
@@ -2433,6 +2418,13 @@ public class XMLSchemaValidator
             XPathMatcher matcher = fMatcherStack.getMatcherAt(i);
             matcher.startElement( element, attributes);
         }
+        
+        // inheritable attributes processing
+        XSAttributeUse[] inheritedAttributesForPsvi = null; 
+        if (fSchemaVersion == Constants.SCHEMA_VERSION_1_1) {
+            fInhrAttrCountStack.push(fInheritableAttrList.size());
+            inheritedAttributesForPsvi = getInheritedAttributesForPsvi();
+        }
 
         if (fAugPSVI) {
             augs = getEmptyAugs(augs);
@@ -2447,15 +2439,16 @@ public class XMLSchemaValidator
             fCurrentPSVI.fNotation = fNotation;
             // PSVI: add nil
             fCurrentPSVI.fNil = fNil;
-            if (inheritedAttributesPsvi != null) {
-               // PSVI: add inherited attributes
-               fCurrentPSVI.fInheritedAttributes = inheritedAttributesPsvi;
-            }
-        }
-        
-        // delegate to assertions validator subcomponent
+            // PSVI: add inherited attributes
+            fCurrentPSVI.fInheritedAttributes = inheritedAttributesForPsvi;            
+        }                
+                
         if (fSchemaVersion == Constants.SCHEMA_VERSION_1_1) {
+            // find attributes among the attributes of the current element, which are declared inheritable and store them for later processing.
+            // one of the uses of inherited attributes is in type alternatives processing.
+            saveInheritableAttributes(fCurrentElemDecl, attributes);
             try {
+               // delegate to assertions validator subcomponent
                fAssertionValidator.handleStartElement(element, attributes);
             }
             catch(Exception ex) {
@@ -2479,11 +2472,6 @@ public class XMLSchemaValidator
             System.out.println("==>handleEndElement:" + element);
         }
         
-        // inheritable attributes processing
-        if (fSchemaVersion == Constants.SCHEMA_VERSION_1_1 && fInhrAttrCountStack.size() > 0) {
-            fInheritableAttrList.setSize(fInhrAttrCountStack.pop());
-        }
-        
         // if we are skipping, return
         if (fSkipValidationDepth >= 0) {
             // but if this is the top element that we are skipping,
@@ -2614,7 +2602,7 @@ public class XMLSchemaValidator
                 // update PSVI
                 fValidatedInfo.memberType = ((ElementPSVImpl) assertAugs.getItem(Constants.ELEMENT_PSVI)).fValue.memberType;                
             } 
-            fIsAssertProcessingNeededForSTUnion = true;
+            fIsAssertProcessingNeededForSTUnion = true;            
         }
 
         // Check if we should modify the xsi:type ignore depth
@@ -2681,7 +2669,7 @@ public class XMLSchemaValidator
             fAppendBuffer = false;
             // same here.
             fUnionType = false;
-        }
+        }                
 
         return augs;
     } // handleEndElement(QName,boolean)*/
@@ -2700,6 +2688,12 @@ public class XMLSchemaValidator
             fCurrentPSVI.fNotation = this.fNotation;
             fCurrentPSVI.fValidationContext = this.fValidationRoot;
             fCurrentPSVI.fNil = this.fNil;
+            XSAttributeUse[] inheritedAttributesForPsvi = null;
+            if (fInhrAttrCountStack.size() > 0) {
+                fInheritableAttrList.setSize(fInhrAttrCountStack.pop());
+                inheritedAttributesForPsvi = getInheritedAttributesForPsvi();
+            }
+            fCurrentPSVI.fInheritedAttributes = inheritedAttributesForPsvi;
             // PSVI: validation attempted
             // nothing below or at the same level has none or partial
             // (which means this level is strictly assessed, and all chidren
@@ -4936,4 +4930,18 @@ public class XMLSchemaValidator
        
     } // class InheritableAttribute
     
+    /*
+     * Get inherited attributes for copying into an element PSVI.
+     */
+    private XSAttributeUse[] getInheritedAttributesForPsvi() {        
+        XSAttributeUse[] inheritedAttributes = null; 
+        if (fInheritableAttrList.size() > 0) {
+            inheritedAttributes = new XSAttributeUse[fInheritableAttrList.size()]; 
+            for (int inhrAttrIdx = 0; inhrAttrIdx < fInheritableAttrList.size(); inhrAttrIdx++) {
+                inheritedAttributes[inhrAttrIdx] = ((InheritableAttribute) fInheritableAttrList.get(inhrAttrIdx)).getAttributeUse();  
+            }  
+        }
+        return inheritedAttributes; 
+    } // getInheritedAttributesForPsvi
+    
 } // class XMLSchemaValidator

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDTypeAlternativeValidator.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDTypeAlternativeValidator.java?rev=1086899&r1=1086898&r2=1086899&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDTypeAlternativeValidator.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDTypeAlternativeValidator.java Wed Mar 30 10:33:29 2011
@@ -58,7 +58,7 @@ public class XSDTypeAlternativeValidator
         
         XSTypeAlternativeImpl[] typeAlternatives = currentElemDecl.getTypeAlternatives();        
         if (typeAlternatives != null) {              
-            // Construct a list of attributes needed for CTA processing. This includes inherited attributes as well.
+            // Construct a list of attributes needed for CTA processing. This includes inheritable attributes as well.
             XMLAttributes ctaAttributes = getAttributesForCTA(attributes, inheritableAttrList);
             for (int typeAltIdx = 0; typeAltIdx < typeAlternatives.length; typeAltIdx++) {
                 Test ctaTest = typeAlternatives[typeAltIdx].getTest();
@@ -82,7 +82,7 @@ public class XSDTypeAlternativeValidator
     
 
     /*
-     * Construct a list of attributes, needed for CTA processing. This includes inherited attributes as well.  
+     * Construct a list of attributes, needed for CTA processing. This includes inheritable attributes as well.  
      */
     private XMLAttributes getAttributesForCTA(XMLAttributes attributes, Vector inheritableAttrList) {
 
@@ -94,7 +94,7 @@ public class XSDTypeAlternativeValidator
             ctaAttributes.addAttribute(attrQName, attributes.getType(attrIndx), attributes.getValue(attrIndx));   
         }
 
-        // Add inherited attributes to the CTA attributes list
+        // add inherited attributes to the CTA attributes list
         for (int elemIndx = inheritableAttrList.size() - 1; elemIndx > -1; elemIndx--) {        
             InheritableAttribute inhAttr = (InheritableAttribute) inheritableAttrList.elementAt(elemIndx);
             XSAttributeDeclaration inhrAttrDecl = inhAttr.getAttributeUse().getAttrDeclaration();



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org