Hi Gunther,

Thank you! 

Dropping xmlresolver-6.0.14-data.jar and xmlresolver-6.0.14.jar from the zip 
release via https://github.com/xmlresolver/xmlresolver/releases into 
basex/lib/custom works. The document parses and the entities are resolved; I 
have the catalog set via "local options" in both .basex and .basexgui, so I'm 
going to think this is expected. And I can confirm that I don't need to 
explicitly set any options in doc() for things to work.

I'm sure this is a much more complex issue than it seems to me, but perhaps it 
would be a useful thing to ship the open resolver with BaseX?

Much appreciated,
Graydon

On Sun, May 11, 2025, at 06:01, Gunther Rademacher wrote:
> Hi Graydon,
>  
> thank you for reporting this. I was able to reproduce the behaviour that you 
> are seeing - not only with BaseX 11.9 and Java 21, but also with BaseX 11.8 
> and Java 11.
>  
> The root cause appears to be the standard JDK catalog resolver, 
> javax.xml.catalog.CatalogResolverImpl, which tends to throw a 
> CatalogException when a URI cannot be resolved via the catalog. 
> Unfortunately, BaseX does not currently handle this exception type. It 
> expects a TransformerException, which is why the process fails in your case.
>  
> In my own environment, I’ve never encountered this issue because I always 
> have XML Resolver, i.e. org.xmlresolver.Resolver, on the classpath. This 
> resolver replaces the standard implementation and simply returns null when a 
> match isn’t found, rather than throwing an exception.
>  
> I’ll open a GitHub issue to ensure that BaseX is updated to handle 
> CatalogException properly. In the meantime, a practical workaround is to add 
> XML Resolver to your classpath. I suspect you may already have it in place in 
> the environment where you tested BaseX 11.8, which could explain why the 
> issue didn’t surface there.
>  
> Also, as you mentioned, fn:doc was recently updated. You can find more about 
> those changes in this discussion:
> https://www.mail-archive.com/[email protected]/msg16163.html
> 
> However, I don’t believe those updates are directly related to the issue 
> you're seeing.
>  
> Best regards,
> Gunther
>  
> *Gesendet: *Sonntag, 11. Mai 2025 um 03:16
> *Von: *"Graydon Saunders" <[email protected]>
> *An: *BaseX <[email protected]>
> *Betreff: *[basex-talk] 11.9 doc() not working with DOCTYPE declaration
> Hello --
>  
> I'm on linux, using 11.9 and using
>  
> 20:59 graydon % java -version
> openjdk version "21.0.7" 2025-04-15
> OpenJDK Runtime Environment (Red_Hat-21.0.7.0.6-1) (build 21.0.7+6)
> OpenJDK 64-Bit Server VM (Red_Hat-21.0.7.0.6-1) (build 21.0.7+6, mixed mode, 
> sharing)
>  
> If I use the basexgui "Create DB" dialog and the internal parser, I can load 
> the whole folder without error; I get the expected DB and the named entities 
> in the content have been resolved. (These are effectively HTML 4 entity 
> names, so that's not completely guaranteeing that the DTD in the DOCTYPE is 
> being found and parsed somewhere.)
>  
> If I use the doc() function with an absolute file system path to one of the 
> same files that loaded into the DB just fine, I get an error. I get the same 
> error if I try to switch off the internal parser and set a catalog. It's at 
> least several files in the folder that loads fine as a DB.
>  
> All of this works fine with 11.8; whatever changed changed in 11.9.
>  
> The error is:
>  
> Could not execute XQUERY 
> doc('/home/graydon/GeneralCode/git/cpc-conversion/Chapter/BU4372-14A.xml'):
> Improper use? Potential bug? Your feedback is welcome:
> Contact: [email protected]
> Version: BaseX 11.9
> Java: Red Hat, Inc., 21.0.7
> OS: Linux, amd64
> Stack Trace: 
> javax.xml.catalog.CatalogException: JAXP09040002: No match found for href 
> '/home/graydon/GeneralCode/git/cpc-conversion/Chapter/BU4372-14A.xml' and 
> base '/home/graydon/GeneralCode/git/cpc-conversion/xquery/file'.
> at 
> java.xml/javax.xml.catalog.CatalogMessages.reportError(CatalogMessages.java:74)
> at 
> java.xml/javax.xml.catalog.CatalogResolverImpl.resolve(CatalogResolverImpl.java:153)
> at org.basex.query.StaticContext.resolve(StaticContext.java:156)
> at org.basex.query.StaticContext.resolve(StaticContext.java:137)
> at org.basex.query.QueryInput.<init>(QueryInput.java:31)
> at org.basex.query.func.fn.Docs.queryInput(Docs.java:37)
> at org.basex.query.func.fn.Docs.lambda$accept$0(Docs.java:67)
> at org.basex.query.scope.LockVisitor.lock(LockVisitor.java:48)
> at org.basex.query.func.fn.Docs.accept(Docs.java:56)
> at org.basex.query.scope.MainModule.databases(MainModule.java:93)
> at org.basex.query.QueryContext.addLocks(QueryContext.java:412)
> at org.basex.query.QueryProcessor.addLocks(QueryProcessor.java:230)
> at org.basex.core.cmd.AQuery.addLocks(AQuery.java:170)
> at org.basex.core.locks.Locking.acquire(Locking.java:86)
> at org.basex.core.jobs.Job.register(Job.java:48)
> at org.basex.core.Command.execute(Command.java:90)
> at org.basex.gui.GUI.execute(GUI.java:430)
> at org.basex.gui.GUI.lambda$execute$5(GUI.java:375)
> at java.base/java.lang.Thread.run(Thread.java:1583)
>  
> I can go on using 11.8 for now, so this is only somewhat alarming rather than 
> completely alarming.
>  
> -- Graydon

Reply via email to