XML目录应该能够解析模块吗?

问题描述

我正在尝试使用这样的doctype在XML上运行XSL转换:

<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1d3 20150301//EN" "http://jats.nlm.nih.gov/publishing/1.1d3/JATS-journalpublishing1.dtd">

我正在处理器周围使用Java 11:

Source s = getXsl(src,bibSources);

System.setProperty("javax.xml.accessExternalDTD","all");
System.setProperty("javax.xml.accessExternalSchema","all");
System.setProperty("javax.xml.catalog.files",xmlCatalog);

System.setProperty(CatalogFeatures.Feature.RESOLVE.getPropertyName(),"strict");

TransformerFactory factory = new net.sf.saxon.TransformerFactoryImpl();
factory.setFeature("http://saxon.sf.net/feature/suppressXsltNamespaceCheck",true);
StringWriter writer = new StringWriter();
StreamResult streamResult = new StreamResult(writer);

Transformer t = factory.newTransformer(s);
Source xml = new StreamSource(zip.getInputStream(entry));
t.transform(xml,streamResult);

运行转换时出现的错误是这样的:

Error on line 333 column 31 of JATS-journalpublishing1.dtd:
  SXXP0003: Error reported by XML parser: JAXP00090001: The CatalogResolver is enabled with
  the catalog "catalog.xml",but a CatalogException is returned.: JAXP09040001: No match
  found for publicId '-//NLM//DTD JATS (Z39.96) Journal Publishing DTD-Specific Modules
  v1.1d3 20150301//EN' and systemId 'JATS-journalpubcustom-modules1.ent'.

正在访问目录,但似乎无法解析DTD依赖的模块。这是正常现象,还是我在Java中错误地设置了XML属性

编辑:

XML目录中有一个dtd条目:

<public publicId="-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1d3 20150301//EN" uri="http://ecswebqa02:8080/xml-catalog/dtd/jatsDTD/JATS-Publishing-1-1d3-MathML2-DTD/JATS-journalpublishing1.dtd"/>

尽管该模块与dtd的本地副本相邻,但目录中没有该模块的条目:

http://ecswebqa02:8080/xml-catalog/dtd/jatsDTD/JATS-Publishing-1-1d3-MathML2-DTD/JATS-journalpubcustom-modules1.ent

解决方法

如果实体的相对URI正确,我希望解析器做正确的事情。如果您使用的是Apache Commons解析器,则可以通过打开“ {xml.catalog.verbosity””设置http://xerces.apache.org/xml-commons/components/resolver/resolver-article.html

获得更详细的处理消息。

您也可以尝试更新的https://xmlresolver.org/解析器。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...