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]

Reply via email to