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/01/14 07:28:47 UTC

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

Author: mukulg
Date: Fri Jan 14 06:28:46 2011
New Revision: 1058860

URL: http://svn.apache.org/viewvc?rev=1058860&view=rev
Log:
committing few improvements as per XML Schema 1.1 requirements.

allowing attribute references from namespace http://www.w3.org/2001/XMLSchema-instance in complexType's and permitting validation of corresponding attributes in instance documents.

Ref, the recent discussion on xerces-dev list - http://markmail.org/message/sjo34dqenmhyzeno.

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/traversers/XSDAttributeTraverser.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=1058860&r1=1058859&r2=1058860&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 Fri Jan 14 06:28:46 2011
@@ -3366,7 +3366,7 @@ public class XMLSchemaValidator
             // {required} is true matches one of the attribute information items in the element
             // information item's [attributes] as per clause 3.1 above.
             if (currUse.fUse == SchemaSymbols.USE_REQUIRED) {
-                if (!isSpecified)
+                if (!isSpecified)                    
                     reportSchemaError(
                         "cvc-complex-type.4",
                         new Object[] { element.rawname, currDecl.fName });

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=1058860&r1=1058859&r2=1058860&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 Fri Jan 14 06:28:46 2011
@@ -19,6 +19,7 @@ package org.apache.xerces.impl.xs.traver
 
 import org.apache.xerces.impl.Constants;
 import org.apache.xerces.impl.dv.InvalidDatatypeValueException;
+import org.apache.xerces.impl.dv.SchemaDVFactory;
 import org.apache.xerces.impl.dv.ValidatedInfo;
 import org.apache.xerces.impl.dv.XSSimpleType;
 import org.apache.xerces.impl.xs.SchemaGrammar;
@@ -63,6 +64,8 @@ import org.w3c.dom.Element;
  */
 class XSDAttributeTraverser extends XSDAbstractTraverser {
     
+    private static final String SCHEMA11_FACTORY_CLASS = "org.apache.xerces.impl.dv.xs.Schema11DVFactoryImpl";
+    
     public XSDAttributeTraverser (XSDHandler handler,
             XSAttributeChecker gAttrCheck) {
         super(handler, gAttrCheck);
@@ -88,7 +91,13 @@ class XSDAttributeTraverser extends XSDA
         XSAnnotationImpl annotation = null;
         if (attrDecl.getAttributeNode(SchemaSymbols.ATT_REF) != null) {
             if (refAtt != null) {
-                attribute = (XSAttributeDecl)fSchemaHandler.getGlobalDecl(schemaDoc, XSDHandler.ATTRIBUTE_TYPE, refAtt, attrDecl);
+                if (SchemaSymbols.URI_XSI.equals(refAtt.uri) && fSchemaHandler.fSchemaVersion == Constants.SCHEMA_VERSION_1_1) {
+                    SchemaDVFactory schemaFactory = SchemaDVFactory.getInstance(SCHEMA11_FACTORY_CLASS);
+                    attribute = getAttributeDeclForXSINamespace(refAtt.localpart, enclosingParent, schemaFactory); 
+                }
+                else {
+                   attribute = (XSAttributeDecl)fSchemaHandler.getGlobalDecl(schemaDoc, XSDHandler.ATTRIBUTE_TYPE, refAtt, attrDecl);
+                }
                 
                 Element child = DOMUtil.getFirstChildElement(attrDecl);
                 if (child != null && DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) {
@@ -101,7 +110,7 @@ class XSDAttributeTraverser extends XSDA
                         annotation = traverseSyntheticAnnotation(attrDecl, text, attrValues, false, schemaDoc);
                     }
                 }
-                
+
                 if (child != null) {
                     reportSchemaError("src-attribute.3.2", new Object[]{refAtt.rawname}, child);
                 }
@@ -221,6 +230,36 @@ class XSDAttributeTraverser extends XSDA
         return attrUse;
     }
     
+    /*
+     * Construct an XSAttributeDecl object for attributes in the namespace http://www.w3.org/2001/XMLSchema-instance 
+     */
+    private XSAttributeDecl getAttributeDeclForXSINamespace(String localpart, XSObject enclosingParent, SchemaDVFactory schemaFactory) {
+        
+        XSAttributeDecl attrDecl = new XSAttributeDecl();
+        
+        XSSimpleType anyURI = schemaFactory.getBuiltInType(SchemaSymbols.ATTVAL_ANYURI);        
+        if (SchemaSymbols.XSI_TYPE.equals(localpart)) {
+            attrDecl.setValues(SchemaSymbols.XSI_TYPE, SchemaSymbols.URI_XSI, schemaFactory.getBuiltInType(SchemaSymbols.ATTVAL_QNAME), 
+                               XSConstants.VC_NONE, XSConstants.SCOPE_GLOBAL, null, enclosingParent, null, false);   
+        }
+        else if (SchemaSymbols.XSI_NIL.equals(localpart)) {
+            attrDecl.setValues(SchemaSymbols.XSI_NIL, SchemaSymbols.URI_XSI, schemaFactory.getBuiltInType(SchemaSymbols.ATTVAL_BOOLEAN), 
+                               XSConstants.VC_NONE, XSConstants.SCOPE_GLOBAL, null, enclosingParent, null, false);  
+        }
+        else if (SchemaSymbols.XSI_SCHEMALOCATION.equals(localpart)) {
+            attrDecl.setValues(SchemaSymbols.XSI_SCHEMALOCATION, SchemaSymbols.URI_XSI, schemaFactory.createTypeList("#AnonType_schemaLocation", 
+                               SchemaSymbols.URI_XSI, (short)0, anyURI, null), XSConstants.VC_NONE, XSConstants.SCOPE_GLOBAL, null, enclosingParent, 
+                               null, false); 
+        }
+        else if (SchemaSymbols.XSI_NONAMESPACESCHEMALOCATION.equals(localpart)) {
+            attrDecl.setValues(SchemaSymbols.XSI_NONAMESPACESCHEMALOCATION, SchemaSymbols.URI_XSI, anyURI, XSConstants.VC_NONE, XSConstants.SCOPE_GLOBAL, 
+                               null, enclosingParent, null, false);
+        }
+        
+        return attrDecl;
+        
+    } // getAttributeDeclForXSINamespace
+
     protected XSAttributeDecl traverseGlobal(Element attrDecl,
             XSDocumentInfo schemaDoc,
             SchemaGrammar grammar) {



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