From: Michael B. <mbe...@mb...> - 2005-04-01 11:35:47
|
[Elliotte Rusty Harold ] > > Is this accurate? If so, I'd suggest eXist needs a better story for > > handling DTDs. In particular, the DTDs themselves should be stored in > > the database rather than the local file system. They don't necessarily > > need to be indexed, queried, or searched; but it should be possible to > > upload a DTD or DTD module and assign it to a particular public ID and > > system ID. This functionality should be exposed through the various APIs > > (REST, SOAP, Perl, etc.) that talk to eXist. > [Wolfgang Meier] > Yes, that's correct. I already thought about storing DTDs in the db. > However, I guess it will not be possible to tweak the apache-commons > resolver library to resolve DTDs against the db (?), so we will have > to implement our own mechanism. > Maybe I've misunderstood something, but isn't the specific problem with fetching relatively-referenced DTDs from the database down to the fact that eXist relies on the parser's entity resolution behaviour? In the same way that the insistence on trying to access a DTD that is declared in an instance being parsed, even if validation is explicitly turned off, is a feature of Xerces that has always been somewhat controversial, but which eXist itself can't do anything about. And where a SYSTEM uri is specified relative to the location document being parsed, I suppose the problem becomes how to tell Xerces and its resolver that relative paths are to be resolved by querying into the eXist database rather than treating them as local filesystem paths. That's why the workaround Wolfgang suggested so far all involve storing the DTD at whatever location in the filesystem Xerces will be fetching the document from at parse time, the snag being that just where this location is varies depends on how eXist is wrapped. This problem doesn't of course arise if the DTD SYSTEM uri contains an absolute reference to the location of the DTD. It strikes me as a bit problematic to re-implement entity resolution wtihin eXist just to solve the special case of relative references. But maybe it's the only way to go. Michael Beddow |