Problem with unparsed entity location when indirect referenced in the DTDs
--------------------------------------------------------------------------
Key: XERCESJ-1537
URL: https://issues.apache.org/jira/browse/XERCESJ-1537
Project: Xerces2-J
Issue Type: Bug
Components: DTD
Affects Versions: 2.9.1
Environment: All
Reporter: Radu Coravu
We have an XML file with the content:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE doc SYSTEM "../dtd/entityProblem.dtd">
<doc>
<fig image="test"/>
</doc>
The main DTD "entityProblem.dtd" (located in the right folder) has the
following content:
<!ELEMENT doc ( fig )>
<!ELEMENT fig EMPTY>
<!ATTLIST fig image ENTITY #REQUIRED>
<!ENTITY % entityProblem SYSTEM "../source/entityProblem.ent">
%entityProblem;
and the included DTD "entityProblem.ent" which is included in a relative folder
has the content:
<?xml version="1.0" encoding="UTF-8"?>
<!NOTATION gif SYSTEM "gif">
<!ENTITY % test '<!ENTITY test SYSTEM "images/crane.gif" NDATA gif>'>
%test;
If we transform the XML with an XSLT processor which uses Xerces for parsing
(like Saxon) with the content like:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<xsl:text>
</xsl:text>
<xsl:value-of select="unparsed-entity-uri(/doc/fig/@image)"/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
Then the unparsed entity location will be resolved relative to the current file
directory (new File(".")) instead of resolving it relative to the DTD where it
was declared.
A possible solution is to make modifications in the
org.apache.xerces.impl.XMLEntityManager on the
"org.apache.xerces.impl.XMLEntityManager.startEntity(String, boolean)" method
and in the case of InternalEntity, instead of creating for it an XMLInputSource
like:
xmlInputSource = new XMLInputSource(null, null, null, reader, null);
you could set a system ID to the input source like:
xmlInputSource = new XMLInputSource(null, fCurrentEntity != null ?
fCurrentEntity.getExpandedSystemId() : null, null, reader, null);
We implemented this solution in Oxygen XML Editor as a patch but there are
still problems, with this solution in place the image system ID is expanded
relative to "entityProblem.dtd" and not relative to "entityProblem.ent".
Using MSXML.NET the image location is correctly solved relative to
"entityProblem.ent"
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]