gpt4 book ai didi

centos - 为什么 Saxon 使用 CentOS 分发的 saxon.jar 会抛出错误,但使用 sourceforge 的 saxon 代码不会抛出错误?

转载 作者:行者123 更新时间:2023-12-02 05:51:19 27 4
gpt4 key购买 nike

我有一个现有的 CentOS 7 服务器(当然是由其他人设置的)运行 Saxon。如果我运行:

/usr/bin/java net.sf.saxon.Transform -s:input.xml -xsl:input.xsl -o:output.xml

...它工作得很好。

在新服务器上,我通过“yum install saxon”安装了 Saxon。如果我尝试相同的命令,它会失败并显示错误:

Error at HTML on line 19 column 38 of 2.xsl:
XTSE0150: Simplified stylesheet: xsl:version attribute is missing
Failed to compile stylesheet. 1 error detected.

如果我从 sourceforge.net/projects/saxon 下载最新的 Saxon,将我的 CLASSPATH 从 yum 安装的 saxon.jar(日期为 2014 年!)重定向到来自 sourceforge 的 jar 文件,转换工作完美。

所以,我有一个解决这个问题的方法(即使用 sourceforge 的最新版本,而不是 CentOS 的过时版本),但我仍然很好奇发生了什么。

这只是新版本中修复的一些旧错误吗?或者也许我缺少 sourceforge 派生的 jar 中的支持文件,但 yum 派生的文件中没有?还是别的什么???

不管怎样,这是我的 XSLT 文件的头部。该错误特别指向 xsl:stylesheet 标记的末尾,尽管该配置中显然有一个“version=”设置:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:oai-pmh="http://www.openarchives.org/OAI/2.0/"
xmlns:oai_qdc="http://worldcat.org/xmlschemas/qdc-1.0/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:dcmitype="http://purl.org/dc/dcmitype/"
xmlns:edm="http://www.europeana.eu/schemas/edm/"
xmlns:oclcdc="http://worldcat.org/xmlschemas/oclcdc-1.0/"
xsi:schemaLocation="http://worldcat.org/xmlschemas/qdc-1.0/
http://worldcat.org/xmlschemas/qdc/1.0/qdc-1.0.xsd
http://purl.org/net/oclcterms
http://worldcat.org/xmlschemas/oclcterms/1.4/oclcterms-1.4.xsd"
exclude-result-prefixes="xs"
version="2.0"
xmlns="http://www.loc.gov/mods/v3">

鉴于代码在备用 Saxon 安装中工作得非常好,我不认为代码有问题。这是别的东西,但我不知道是什么......

最佳答案

您可以通过执行以下操作找出特定 JAR 文件中的 Saxon 版本:

java -cp saxon.jar net.sf.saxon.Version

这比仅仅告诉我们您从哪里安装它要有用得多。

错误消息向我表明所使用的“样式表”实际上根本不是样式表,而是一个普通的 XML 文档。 (Saxon 发现根元素不是 xsl:stylesheet,因此它确定它必须是简化的样式表;然后它查找 xsl:version 属性,发现没有一个,并且提示)。

我不知道这里到底出了什么问题,但应用程序正在使用 Saxon 调用,该调用适用于一个版本,但不适用于另一个版本。在 Saxon 的 20 年生命中,命令行界面并没有发生太多不兼容的更改,但也有一些,而且我怀疑其中一个 Saxon 版本确实非常古老。

事后思考

我在第一次阅读时错过了另一个线索:错误消息引用了一个名为 2.xsl 的文件。从提供的信息中,我们看不到2.xsl是什么。它一定是看起来是样式表但实际上不是的文件...但是为什么它有不同的名称?当然,您的文件的开始标记结尾位于第 19 行,这个神秘文件也是如此,这一事实显得很重要。也许在 Saxon 实际被调用之前正在执行一些脚本,并创建 2.xsl

关于centos - 为什么 Saxon 使用 CentOS 分发的 saxon.jar 会抛出错误,但使用 sourceforge 的 saxon 代码不会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56045415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com