Somewhere between libxml 2.9.0 and 2.9.2, possibly at the commit referenced
in a previous discussion[1], forward slashes started to be removed from
resolved relative URLs, changing a "file:///" prefix to "file:/".

This makes PHP's DOMDocument (which uses libxml) throw an error when
loading an entity, as it's now given a URL with a "file:/" (single forward
slash) prefix.

This will succeed:
DOMDocument::load('file:///path/to/some/file.xml');
and this will fail:
DOMDocument::load('file:/path/to/some/file.xml');

In my case, I have a catalog file that references DTD files using a
relative path:<rewriteURI uriStartString="http://jats.nlm.nih.gov/";
rewritePrefix="jats/"/>

This used to convert
http://jats.nlm.nih.gov/publishing/1.0/JATS-journalpublishing1.dtd
to
file:///opt/schema/jats/publishing/1.0/JATS-journalpublishing1.dtd
but now it gets converted to
file:/opt/schema/jats/publishing/1.0/JATS-journalpublishing1.dtd
and PHP throws an error:
DOMDocument::loadXML(): failed to load external entity
"file:/opt/schema/jats/publishing/1.0/JATS-journalpublishing1.dtd"

A system using PHP built against libxml 2.9.0 doesn't have this problem,
but a system using PHP built against libxml 2.9.2 does.

Should I report this as a bug?

Alf

[1] https://mail.gnome.org/archives/xml/2014-September/msg00018.html
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xml@gnome.org
https://mail.gnome.org/mailman/listinfo/xml

Reply via email to