Author: mrglavas
Date: Fri Nov 18 13:10:32 2005
New Revision: 345572

URL: http://svn.apache.org/viewcvs?rev=345572&view=rev
Log:
Fixing JIRA Issue #682:
http://issues.apache.org/jira/browse/XERCESJ-682

When a selector matches, only key IDCs are required to match all of their 
fields.
Unique and keyref IDCs which only match some of their fields are not members of 
the
"qualified node set" however this is not an error and we shouldn't be reporting 
one.

Modified:
    xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java

Modified: 
xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
URL: 
http://svn.apache.org/viewcvs/xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java?rev=345572&r1=345571&r2=345572&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java 
(original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java Fri 
Nov 18 13:10:32 2005
@@ -3405,34 +3405,19 @@
                 return;
             }
 
-            // do we have enough values?
+            // Validation Rule: Identity-constraint Satisfied
+            // 4.2 If the {identity-constraint category} is key, then all of 
the following must be true:
+            // 4.2.1 The target node set and the qualified node set are equal, 
that is, every member of the 
+            // target node set is also a member of the qualified node set and 
vice versa.
+            //
+            // If the IDC is a key check whether we have all the fields.
             if (fValuesCount != fFieldCount) {
-                switch (fIdentityConstraint.getCategory()) {
-                    case IdentityConstraint.IC_UNIQUE :
-                        {
-                            String code = "UniqueNotEnoughValues";
-                            String ename = 
fIdentityConstraint.getElementName();
-                            reportSchemaError(code, new Object[] { ename });
-                            break;
-                        }
-                    case IdentityConstraint.IC_KEY :
-                        {
-                            String code = "KeyNotEnoughValues";
-                            UniqueOrKey key = (UniqueOrKey) 
fIdentityConstraint;
-                            String ename = 
fIdentityConstraint.getElementName();
-                            String kname = key.getIdentityConstraintName();
-                            reportSchemaError(code, new Object[] { ename, 
kname });
-                            break;
-                        }
-                    case IdentityConstraint.IC_KEYREF :
-                        {
-                            String code = "KeyRefNotEnoughValues";
-                            KeyRef keyref = (KeyRef) fIdentityConstraint;
-                            String ename = 
fIdentityConstraint.getElementName();
-                            String kname = 
(keyref.getKey()).getIdentityConstraintName();
-                            reportSchemaError(code, new Object[] { ename, 
kname });
-                            break;
-                        }
+                if (fIdentityConstraint.getCategory() == 
IdentityConstraint.IC_KEY) {
+                    String code = "KeyNotEnoughValues";
+                    UniqueOrKey key = (UniqueOrKey) fIdentityConstraint;
+                    String ename = fIdentityConstraint.getElementName();
+                    String kname = key.getIdentityConstraintName();
+                    reportSchemaError(code, new Object[] { ename, kname });
                 }
                 return;
             }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to