Почему Saxon выдает ошибку с распределенным CentOS saxon.jar, а не с саксонским кодом из sourceforge? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть существующий сервер CentOS 7 (конечно, кто-то другой), работающий под управлением Saxon. Если я бегу:

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

... отлично работает.

На новом сервере я установил Saxon через "yum install 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.

Если я скачаю последний Saxon с sourceforge.net/projects/saxon, перенаправлю мой CLASSPATH из установленного yum saxon.jar (от 2014 года!) В файлы jar из sourceforge, преобразование будет работать отлично.

Итак, у меня есть FIX для решения этой проблемы (то есть использовать последнюю версию sourceforge, а не устаревшую версию CentOS), но мне все еще интересно, что происходит.

Это просто какая-то старая ошибка, исправленная в более новой версии? Или, может быть, мне не хватает вспомогательных файлов, которые находятся в jar-файлах, полученных из sourceforge, но не в файлах, полученных из 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, я не верю, что есть проблема с кодом. Это что-то еще, но я не знаю, что ...

1 Ответ

0 голосов
/ 08 мая 2019

Вы можете узнать, какая версия Saxon находится в определенном JAR-файле, выполнив

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

и это было бы намного полезнее, чем просто сообщить нам, откуда вы его установили.

Сообщение об ошибке подсказывает мне, что используемая «таблица стилей» на самом деле вовсе не таблица стилей, а обычный документ XML. (Саксон видит, что корневой элемент не является xsl:stylesheet, поэтому он решает, что это должна быть упрощенная таблица стилей; затем он ищет атрибут xsl:version, находит, что его нет, и жалуется).

Я не знаю точно, что здесь не так, но приложение использует вызов Saxon, который работает с одним выпуском и не работает с другим. За 20 лет жизни Саксона не было много несовместимых изменений в интерфейсе командной строки, но их было несколько, и я подозреваю, что одна из этих саксонских версий действительно очень старая.

второстепенный

Есть еще одна подсказка, которую я пропустил при первом чтении: сообщение об ошибке относится к файлу с именем 2.xsl. Из предоставленной информации мы не видим, что такое 2.xsl. Это должен быть файл, который выглядит как таблица стилей, но не ... Но почему у него другое имя? Несомненно, тот факт, что у вашего файла есть конец начального тега в строке 19, как и у этого загадочного файла, выглядит значительным. Возможно, есть какой-то сценарий, который выполняется до того, как Saxon действительно будет вызван, и который создает 2.xsl?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...