Author: mukulg Date: Fri Jun 17 09:37:42 2011 New Revision: 1136825 URL: http://svn.apache.org/viewvc?rev=1136825&view=rev Log: committing a schema 1.1 fix. it seems that implementation of attribute xpathDefaultNamespace for xs:selector & xs:field in IDC constraints was incomplete (the evaluation of this wasn't occurring, but traverser was fine). i'm committing an improved implementation of this functionality.
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/identity/Field.java xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/Selector.java xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/XPathMatcher.java xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractIDConstraintTraverser.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=1136825&r1=1136824&r2=1136825&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 Jun 17 09:37:42 2011 @@ -1709,6 +1709,9 @@ public class XMLSchemaValidator ValueStore valueStore = fValueStoreCache.getValueStoreFor(field.getIdentityConstraint(), initialDepth); XPathMatcher matcher = field.createMatcher(valueStore); + if (fSchemaVersion == Constants.SCHEMA_VERSION_1_1) { + matcher.setXPathDefaultNamespace(field.getXPathDefaultNamespace()); + } fMatcherStack.addMatcher(matcher); matcher.startDocumentFragment(); return matcher; @@ -1734,6 +1737,9 @@ public class XMLSchemaValidator if (selector == null) return; XPathMatcher matcher = selector.createMatcher(activator, fElementDepth); + if (fSchemaVersion == Constants.SCHEMA_VERSION_1_1) { + matcher.setXPathDefaultNamespace(selector.getXPathDefaultNamespace()); + } fMatcherStack.addMatcher(matcher); matcher.startDocumentFragment(); } Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/Field.java URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/Field.java?rev=1136825&r1=1136824&r2=1136825&view=diff ============================================================================== --- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/Field.java (original) +++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/Field.java Fri Jun 17 09:37:42 2011 @@ -47,16 +47,19 @@ public class Field { /** Identity constraint. */ protected final IdentityConstraint fIdentityConstraint; + + /** XPath default namespace. */ + protected String fXpathDefaultNamespace; // // Constructors // /** Constructs a field. */ - public Field(Field.XPath xpath, - IdentityConstraint identityConstraint) { + public Field(Field.XPath xpath, IdentityConstraint identityConstraint, String xpathDefaultNamespace) { fXPath = xpath; fIdentityConstraint = identityConstraint; + fXpathDefaultNamespace = xpathDefaultNamespace; } // <init>(Field.XPath,IdentityConstraint) // @@ -88,6 +91,11 @@ public class Field { public String toString() { return fXPath.toString(); } // toString():String + + /** Return value of xpathDefaultNamespace. */ + public String getXPathDefaultNamespace() { + return fXpathDefaultNamespace; + } // // Classes Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/Selector.java URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/Selector.java?rev=1136825&r1=1136824&r2=1136825&view=diff ============================================================================== --- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/Selector.java (original) +++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/Selector.java Fri Jun 17 09:37:42 2011 @@ -49,16 +49,19 @@ public class Selector { // the Identity constraint we're the matcher for. Only // used for selectors! protected IdentityConstraint fIDConstraint; + + /** XPath default namespace. */ + protected String fXpathDefaultNamespace; // // Constructors // /** Constructs a selector. */ - public Selector(Selector.XPath xpath, - IdentityConstraint identityConstraint) { + public Selector(Selector.XPath xpath, IdentityConstraint identityConstraint, String xpathDefaultNamespace) { fXPath = xpath; fIdentityConstraint = identityConstraint; + fXpathDefaultNamespace = xpathDefaultNamespace; } // <init>(Selector.XPath,IdentityConstraint) // @@ -94,6 +97,11 @@ public class Selector { public String toString() { return fXPath.toString(); } // toString():String + + /** Return value of xpathDefaultNamespace. */ + public String getXPathDefaultNamespace() { + return fXpathDefaultNamespace; + } // // Classes Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/XPathMatcher.java URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/XPathMatcher.java?rev=1136825&r1=1136824&r2=1136825&view=diff ============================================================================== --- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/XPathMatcher.java (original) +++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/identity/XPathMatcher.java Fri Jun 17 09:37:42 2011 @@ -92,6 +92,9 @@ public class XPathMatcher { /** The matching string. */ protected Object fMatchedString; + + /** XPath default namespace. */ + protected String fXpathDefaultNamespace; /** Integer stack of step indexes. */ private final IntStack[] fStepIndexes; @@ -275,6 +278,10 @@ public class XPathMatcher { steps[fCurrentStep[i]].axis.type == XPath.Axis.CHILD) { XPath.Step step = steps[fCurrentStep[i]]; XPath.NodeTest nodeTest = step.nodeTest; + // set xpathDefaultNamespace if applicable. for XML Schema 1.1 + if (nodeTest.name.uri == null) { + nodeTest.name.uri = fXpathDefaultNamespace; + } if (DEBUG_MATCH) { System.out.println(toString()+" [CHILD] before"); } @@ -314,7 +321,10 @@ public class XPathMatcher { int attrCount = attributes.getLength(); if (attrCount > 0) { XPath.NodeTest nodeTest = steps[fCurrentStep[i]].nodeTest; - + // set xpathDefaultNamespace if applicable. for XML Schema 1.1 + if (nodeTest.name.uri == null) { + nodeTest.name.uri = fXpathDefaultNamespace; + } for (int aIndex = 0; aIndex < attrCount; aIndex++) { attributes.getName(aIndex, fQName); if (matches(nodeTest, fQName)) { @@ -444,6 +454,13 @@ public class XPathMatcher { } return str.toString(); } // toString():String + + /* + * Sets the value of XPath default namespace. + */ + public void setXPathDefaultNamespace(String xpathDefaultNamespace) { + fXpathDefaultNamespace = xpathDefaultNamespace; + } // // Private methods Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java?rev=1136825&r1=1136824&r2=1136825&view=diff ============================================================================== --- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java (original) +++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java Fri Jun 17 09:37:42 2011 @@ -114,11 +114,10 @@ class XSDAbstractIDConstraintTraverser e } sText = XMLChar.trim(sText); - Selector.XPath sXpath = null; + Selector.XPath sXpath = null; try { - sXpath = new Selector.XPath(sText, fSymbolTable, - schemaDoc.fNamespaceSupport); - Selector selector = new Selector(sXpath, ic); + sXpath = new Selector.XPath(sText, fSymbolTable, schemaDoc.fNamespaceSupport); + Selector selector = new Selector(sXpath, ic, getXPathDefaultNamespace(attrValues, schemaDoc)); ic.setSelector(selector); } catch (XPathException e) { @@ -172,10 +171,10 @@ class XSDAbstractIDConstraintTraverser e return false; } fText = XMLChar.trim(fText); + try { - Field.XPath fXpath = new Field.XPath(fText, fSymbolTable, - schemaDoc.fNamespaceSupport); - Field field = new Field(fXpath, ic); + Field.XPath fXpath = new Field.XPath(fText, fSymbolTable, schemaDoc.fNamespaceSupport); + Field field = new Field(fXpath, ic, getXPathDefaultNamespace(attrValues, schemaDoc)); ic.addField(field); } catch (XPathException e) { @@ -192,6 +191,17 @@ class XSDAbstractIDConstraintTraverser e return ic.getFieldCount() > 0; } // traverseIdentityConstraint(IdentityConstraint,Element, XSDocumentInfo) + /* + * Get the value of xpathDefaultNamespace attribute for xs:selector or xs:field + */ + private String getXPathDefaultNamespace(Object[] attrValues, XSDocumentInfo schemaDoc) { + String xpathDefaultNamespace = ((String)attrValues[XSAttributeChecker.ATTIDX_XPATHDEFAULTNS]); + if (xpathDefaultNamespace == null) { + xpathDefaultNamespace = schemaDoc.fXpathDefaultNamespace; + } + return xpathDefaultNamespace; + } // getXPathDefaultNamespace + void traverseIdentityConstraintReferral(Element icElem, XSElementDecl element, XSDocumentInfo schemaDoc, SchemaGrammar grammar) { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@xerces.apache.org For additional commands, e-mail: commits-h...@xerces.apache.org