Hi All,

I'm having an issue with XML catalogs and validating an XML file based on 
lookups with URI elements. I believe the issue is coming down to resolving the 
include from one of my namespace schema. It could be that I'm not setting 
something but I just can't seem to figure it out. I believe the following 
example shows what I am talking about. If anyone can test it out please let me 
know if you are experiencing the same thing or know how or why it doesn't work. 
As a side note this works within a editor like Oxygen and everything resolves.

foo.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
elementFormDefault="qualified" targetNamespace="http://foo.jpl.nasa.gov/foo"; 
xmlns:foo="http://foo.jpl.nasa.gov/foo";>
  <xs:include schemaLocation="http://foo.jpl.nasa.gov/foo-include.xsd"/>
  <xs:element name="first" type="xs:string"/>
  <xs:complexType name="name">
    <xs:sequence>
      <xs:element ref="foo:first"/>
      <xs:element ref="foo:last"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="name" type="foo:name"/>
</xs:schema>

foo.xsd-include.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
elementFormDefault="qualified" targetNamespace="http://foo.jpl.nasa.gov/foo";>
  <xs:element name="last" type="xs:string"/>
</xs:schema>

catalog-foo.xml:

<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
  <!-- This is a sample -->
  <uri name="http://foo.jpl.nasa.gov/foo"; 
uri="file:///Users/pramirez/Desktop/catalog/foo.xsd"/>
  <system systemId="http://foo.jpl.nasa.gov/foo-include.xsd"; 
uri="file:///Users/pramirez/Desktop/catalog/includes/foo-include.xsd"/>
</catalog>

name.xml (purposely with an error so I can see if validation is occurring 
correctly):

<?xml version="1.0" encoding="UTF-8"?>
<name xmlns="http://foo.jpl.nasa.gov/foo";>
  <last></last>
  <first></first>
</name>

XMLTest.java:

public class XMLTest {
  public static void main(String[] args) throws Exception {
    String[] catalogs = {args[0]};
    XMLCatalogResolver resolver = new XMLCatalogResolver();
    resolver.setCatalogList(catalogs);



    SchemaFactory sf = 
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    sf.setResourceResolver(resolver);
    Schema s = sf.newSchema();
    Validator v = s.newValidator();
    v.setResourceResolver(resolver);
    v.validate(new StreamSource(args[1]));
  }
}

The java program then is just called with the reference to the catalog-foo.xml 
and name.xml and I receive the following error:

Exception in thread "main" org.xml.sax.SAXParseException: src-resolve: Cannot 
resolve the name 'foo:last' to a(n) 'element declaration' component.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown 
Source)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.xs.traversers.XSDHandler.reportSchemaError(Unknown 
Source)
at org.apache.xerces.impl.xs.traversers.XSDHandler.reportSchemaError(Unknown 
Source)
at org.apache.xerces.impl.xs.traversers.XSDHandler.getGlobalDecl(Unknown Source)
at 
org.apache.xerces.impl.xs.traversers.XSDElementTraverser.traverseLocal(Unknown 
Source)
at 
org.apache.xerces.impl.xs.traversers.XSDHandler.traverseLocalElements(Unknown 
Source)
at org.apache.xerces.impl.xs.traversers.XSDHandler.parseSchema(Unknown Source)
at org.apache.xerces.impl.xs.XMLSchemaLoader.loadSchema(Unknown Source)
at org.apache.xerces.impl.xs.XMLSchemaValidator.findSchemaGrammar(Unknown 
Source)
at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown 
Source)
at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown 
Source)
at 
org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown
 Source)
at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown
 Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown 
Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.jaxp.validation.StreamValidatorHelper.validate(Unknown 
Source)
at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown Source)
at javax.xml.validation.Validator.validate(Validator.java:127)
at gov.nasa.pds.tools.label.XMLTest.main(XMLTest.java:22)

Now if I put the contents of foo-include.xsd into foo.xsd then everything is 
fine and validation occurs correctly. Any ideas what I am doing wrong. My 
understanding is the system entry in the catalog would allow the include to 
resolve.

Thanks,
Paul Ramirez

Reply via email to