Author: mukulg
Date: Tue Jul 5 11:01:24 2011
New Revision: 1142978
URL: http://svn.apache.org/viewvc?rev=1142978&view=rev
Log:
committing a schema 1.1 improvement. it seems that reference to
"##defaultNamespace" as value of xpathDefaultNamespace, wasn't working properly
with type alternatives in certain cases. i'm committing few improvements in
this area.
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/DOMUtil.java
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
URL:
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java?rev=1142978&r1=1142977&r2=1142978&view=diff
==============================================================================
---
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
(original)
+++
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
Tue Jul 5 11:01:24 2011
@@ -215,7 +215,11 @@ class XSDTypeAlternativeTraverser extend
typeAlternative.setBaseURI(fXsdHandler.getDocumentURI());
if (xpathDefaultNS == null) {
- xpathDefaultNS = schemaDoc.fXpathDefaultNamespace;
+ xpathDefaultNS = schemaDoc.fXpathDefaultNamespace;
+ if (xpathDefaultNS == null) {
+ // try to find value of xpathDefaultNamespace by resolving
'##defaultNamespace'
+ xpathDefaultNS = XSTypeHelper.getDefaultNamespace(altElement,
schemaDoc.fSchemaElement);
+ }
}
if (xpathDefaultNS != null) {
//set the xpathDefaultNamespace attribute value
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java
URL:
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java?rev=1142978&r1=1142977&r2=1142978&view=diff
==============================================================================
---
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java
(original)
+++
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java
Tue Jul 5 11:01:24 2011
@@ -32,6 +32,7 @@ import org.apache.xerces.impl.validation
import org.apache.xerces.impl.xs.SchemaSymbols;
import org.apache.xerces.impl.xs.XSComplexTypeDecl;
import org.apache.xerces.impl.xs.XSMessageFormatter;
+import org.apache.xerces.util.DOMUtil;
import org.apache.xerces.util.XMLChar;
import org.apache.xerces.xni.NamespaceContext;
import org.apache.xerces.xs.XSComplexTypeDefinition;
@@ -42,6 +43,7 @@ import org.apache.xerces.xs.XSTypeDefini
import org.eclipse.wst.xml.xpath2.processor.ResultSequence;
import org.eclipse.wst.xml.xpath2.processor.ResultSequenceFactory;
import org.eclipse.wst.xml.xpath2.processor.internal.types.AnyType;
+import org.w3c.dom.Element;
/**
* Class defining utility/helper methods related to XML schema types.
@@ -292,4 +294,30 @@ public class XSTypeHelper {
} // getXPath2ResultSequence
+
+ /*
+ * Resolve the reference '##defaultNamespace' (currently used for "type
alternative" component).
+ */
+ public static String getDefaultNamespace(Element localElement, Element
schemaElement) {
+
+ String defaultNamespace = null;
+
+ if (DOMUtil.getAttr(localElement, SchemaSymbols.ATT_XPATH_DEFAULT_NS)
!= null) {
+ defaultNamespace = XMLChar.trim(DOMUtil.getAttrValue(localElement,
SchemaSymbols.ATT_XPATH_DEFAULT_NS));
+ if
(SchemaSymbols.ATTVAL_TWOPOUNDDEFAULTNS.equals(defaultNamespace)) {
+ defaultNamespace = DOMUtil.getDefaultNamespace(localElement);
+ }
+ }
+ else if (DOMUtil.getAttr(schemaElement,
SchemaSymbols.ATT_XPATH_DEFAULT_NS) != null) {
+ defaultNamespace =
XMLChar.trim(DOMUtil.getAttrValue(schemaElement,
SchemaSymbols.ATT_XPATH_DEFAULT_NS));
+ if
(SchemaSymbols.ATTVAL_TWOPOUNDDEFAULTNS.equals(defaultNamespace)) {
+ defaultNamespace = DOMUtil.getDefaultNamespace(localElement);
+ }
+ }
+
+ return defaultNamespace;
+
+ } // getDefaultNamespace
+
+
} // class XSTypeHelper
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/DOMUtil.java
URL:
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/DOMUtil.java?rev=1142978&r1=1142977&r2=1142978&view=diff
==============================================================================
---
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/DOMUtil.java
(original)
+++
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/DOMUtil.java
Tue Jul 5 11:01:24 2011
@@ -19,6 +19,8 @@ package org.apache.xerces.util;
import java.util.Hashtable;
+import javax.xml.XMLConstants;
+
import org.apache.xerces.dom.AttrImpl;
import org.apache.xerces.dom.DocumentImpl;
import org.apache.xerces.impl.xs.opti.ElementImpl;
@@ -822,6 +824,24 @@ public class DOMUtil {
return node.getNamespaceURI();
}
+ // find value of "default namespace" for an element node. does a recursive
search
+ // up the DOM tree as needed, to find the appropriate in-scope "default
namespace".
+ public static String getDefaultNamespace(Element element) {
+
+ String defaultNamespace = null;
+
+ if (getAttr(element, XMLConstants.XMLNS_ATTRIBUTE) != null) {
+ defaultNamespace = XMLChar.trim(getAttrValue(element,
XMLConstants.XMLNS_ATTRIBUTE));
+ }
+
+ if (defaultNamespace == null && (element.getParentNode() instanceof
Element)) {
+ defaultNamespace =
getDefaultNamespace((Element)element.getParentNode());
+ }
+
+ return defaultNamespace;
+
+ } // getDefaultNamespace
+
// return annotation
public static String getAnnotation(Node node) {
if (node instanceof ElementImpl) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]