[xquery-talk] doc() function failing to load DTD
Michael Ludwig
mlu at as-guides.com
Wed Apr 15 11:48:44 PDT 2009
George Feinberg schrieb:
> Michael,
>
> Your issue is somewhat product-specific. In this case you are using
> Berkeley DB XML and it's dbxml shell program for testing.
Hi George :-) Yes, exactly, dbxml shell for testing.
> The problem is not the URI for the file but the file's reference to
> the DTD. BDB XML uses Xerces-C for parsing/validation and
> by default Xerces-C will look in the current directory for DTDs
> referenced by a relative pathname (e.g. "Sender.dtd"). If you
> change that to an absolute pathname or file: URI your query
> will succeed.
Yes, that works.
> In BDB XML you have another option if you write it into your
> program (vs using the dbxml shell). You can implement XmlResolver
> and resolve entities such as DTDs yourself.
That works fine, too. I took a look at the C++ sample program contained
in the Berkeley DB XML distribution and implemented something similar to
set a base URI for external entities, which I'm appending in case anyone
is looking for it.
Regards,
Michael Ludwig
public final class TestResolver extends XmlResolver {
private String dir;
public void setDirectory(String dir) {
if (dir.endsWith("/"))
this.dir = dir;
else
this.dir = dir + "/";
}
public XmlInputStream resolveEntity(
XmlTransaction txn, XmlManager mgr,
String systemId, String publicId) throws XmlException
{
String path = dir + systemId;
System.err.format("RESOLVER: %s -> %s%n", systemId, path);
return mgr.createLocalFileInputStream(path);
}
}
Usage:
TestResolver resolver = new TestResolver();
resolver.setDirectory( "C:/MILU/dev");
xmlManager.registerResolver(resolver);
More information about the talk
mailing list