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: [email protected]
For additional commands, e-mail: [email protected]