Hi John,
<[EMAIL PROTECTED]> wrote on 08/15/2007 10:56:03 AM:
> Hi Michael,
>
> The reason I started to look at resolver is because when I attempt to
> parse the XML document,
> i.e. saxParser.getXMLReader().parse("C:/data/sample/shiporder.xml");
>
> I get an exception:
>
> C:\data\sample\NCBI_Entrezgene.dtd (The system cannot find the file
> specified)
>
> This is the file described in the DOCTYPE tag in the XML document. I
> was hoping that I could use the resolver to ignore this tag or point it
> to a different resource which does exist (my XSD in this case). Correct
> me if I'm wrong, but I thought that the purpose of the resolver was to
> redirect the parser to another resource if it could not find the one
> specified in the document.
Yes, but it needs to be another resource of the same type. You can't
return a DTD in place of a schema either.
> But as you said previously, it seems I can
> only redirect a DTD to another DTD. If there is any other way you know
> of ignoring this DOCTYPE then I'd like to know.
An empty document (one with zero characters in it) is a well-formed
external DTD. You could try returning that from the resolver or just turn
off the "load-external-dtd" feature [1] and the parser will ignore the
external DTD completely.
> As for the schema, I have set the schema in the SAXParserFactory:
>
> SchemaFactory factory = SchemaFactory.newInstance(W3C_XML_SCHEMA);
> File schemaLocation = new File("/data/sample/shiporder.xsd");
> Schema schema = factory.newSchema(schemaLocation);
> SAXParserFactory spf = SAXParserFactory.newInstance();
> spf.setSchema(schema);
>
> If I manually delete the DOCTYPE tag from the XML document (not my ideal
> way of dealing with the above issue), I get another error:
> Error: URI=file:///C:/data/sample/shiporder.xml Line=2: Document is
> invalid: no grammar found.
> Error: URI=file:///C:/data/sample/shiporder.xml Line=2: Document root
> element "shiporder", must match DOCTYPE root "null".
> Error: URI=file:///C:/data/sample/shiporder.xml Line=2: cvc-elt.1:
> Cannot find the declaration of element 'shiporder'.
>
> So, it seems its still insisting on or relying on a DOCTYPE declaration
> of some sort?
Seems like you have DTD validation enabled and namespace-awareness off.
You should be setting the SAXParserFactory up like:
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setSchema(schema);
// always turn this on; XML schema validation requires namespace support
spf.setNamespaceAware(true);
// the default is false, but I think you're setting it to true
spf.setValidating(false);
> Thanks,
> John
[1]
http://xerces.apache.org/xerces2-j/features.html#nonvalidating.load-external-dtd
Michael Glavassevich
XML Parser Development
IBM Toronto Lab
E-mail: [EMAIL PROTECTED]
E-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]