mrglavas 2004/06/21 21:08:45 Modified: java/src/org/apache/xerces/impl/xs/opti SchemaDOMParser.java DefaultDocument.java java/src/org/apache/xerces/impl/xs/traversers XSDHandler.java Log: Schema location hints specified as relative URIs should be relative
to the actual URI of the schema document rather than the specified URI. When available use the actual document URI as the base URI for resolving imports and includes. This is consistent with what the XML 1.0 3E says: "... it (the base URI) is the URI of the resource retrieved after all redirection has occurred." [1] [1] http://www.w3.org/TR/2004/REC-xml-20040204/#sec-external-ent Revision Changes Path 1.9 +2 -1 xml-xerces/java/src/org/apache/xerces/impl/xs/opti/SchemaDOMParser.java Index: SchemaDOMParser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/opti/SchemaDOMParser.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- SchemaDOMParser.java 30 Apr 2004 02:42:43 -0000 1.8 +++ SchemaDOMParser.java 22 Jun 2004 04:08:45 -0000 1.9 @@ -94,6 +94,7 @@ fDepth = -1; fLocator = locator; fNamespaceContext = namespaceContext; + schemaDOM.setDocumentURI(locator.getExpandedSystemId()); } // startDocument(XMLLocator,String,NamespaceContext, Augmentations) /** 1.7 +8 -5 xml-xerces/java/src/org/apache/xerces/impl/xs/opti/DefaultDocument.java Index: DefaultDocument.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/opti/DefaultDocument.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DefaultDocument.java 24 Feb 2004 22:59:11 -0000 1.6 +++ DefaultDocument.java 22 Jun 2004 04:08:45 -0000 1.7 @@ -42,6 +42,8 @@ public class DefaultDocument extends NodeImpl implements Document { + private String fDocumentURI = null; + // default constructor public DefaultDocument() { } @@ -235,9 +237,10 @@ * over this attribute. * @since DOM Level 3 */ - public String getDocumentURI(){ - return null; + public String getDocumentURI() { + return fDocumentURI; } + /** * The location of the document or <code>null</code> if undefined. * <br>Beware that when the <code>Document</code> supports the feature @@ -245,8 +248,8 @@ * over this attribute. * @since DOM Level 3 */ - public void setDocumentURI(String documentURI){ - throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not supported"); + public void setDocumentURI(String documentURI) { + fDocumentURI = documentURI; } /** DOM Level 3*/ 1.78 +13 -3 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java Index: XSDHandler.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java,v retrieving revision 1.77 retrieving revision 1.78 diff -u -r1.77 -r1.78 --- XSDHandler.java 29 Mar 2004 22:55:54 -0000 1.77 +++ XSDHandler.java 22 Jun 2004 04:08:45 -0000 1.78 @@ -188,6 +188,16 @@ private String emptyString2Null(String ns) { return ns == XMLSymbols.EMPTY_STRING ? null : ns; } + private String doc2SystemId(Document doc) { + String documentURI = null; + /** + * REVISIT: Casting until DOM Level 3 interfaces are available. -- mrglavas + */ + if (doc instanceof org.apache.xerces.impl.xs.opti.SchemaDOM) { + documentURI = ((org.apache.xerces.impl.xs.opti.SchemaDOM) doc).getDocumentURI(); + } + return documentURI != null ? documentURI : (String) fDoc2SystemId.get(doc); + } // This vector stores strings which are combinations of the // publicId and systemId of the inputSource corresponding to a @@ -670,7 +680,7 @@ fSchemaGrammarDescription.reset(); fSchemaGrammarDescription.setContextType(XSDDescription.CONTEXT_IMPORT); - fSchemaGrammarDescription.setBaseSystemId((String)fDoc2SystemId.get(schemaRoot)); + fSchemaGrammarDescription.setBaseSystemId(doc2SystemId(schemaRoot)); fSchemaGrammarDescription.setLocationHints(new String[]{schemaHint}); fSchemaGrammarDescription.setTargetNamespace(schemaNamespace); @@ -740,7 +750,7 @@ } fSchemaGrammarDescription.reset(); fSchemaGrammarDescription.setContextType(refType); - fSchemaGrammarDescription.setBaseSystemId((String)fDoc2SystemId.get(schemaRoot)); + fSchemaGrammarDescription.setBaseSystemId(doc2SystemId(schemaRoot)); fSchemaGrammarDescription.setLocationHints(new String[]{schemaHint}); fSchemaGrammarDescription.setTargetNamespace(callerTNS); newSchemaRoot = resolveSchema(fSchemaGrammarDescription, mustResolve, child); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]