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: commits-unsubscr...@xerces.apache.org For additional commands, e-mail: commits-h...@xerces.apache.org