1 Вопрос: Почему Saxon выдает ошибку с распределенным CentOS saxon.jar, а не с саксонским кодом из sourceforge?

вопрос создан в Wed, May 8, 2019 12:00 AM

У меня есть сервер 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, я не верю, что с кодом есть проблема. Это что-то еще, но я не знаю, что ...

    
0
1 ответ                              1                         

Вы можете узнать, какая версия 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?

    
0
2019-05-08 17: 06: 22Z
  1. «2.xsl» был просто артефактом меня, меняющего имена файлов во время моей записи, чтобы попытаться сделать это более очевидным, переименовав имена файлов в примере из «2 .xsl "to" input.xsl ". Я также пренебрег изменением имени файла в выводе ошибки. Извините ... Я обнаружил эту ошибку только после того, как перезагрузил страницу, чтобы проверить ответы. FWIW ... Saxon, установленный yum, отображает следующую информацию о версии: SAXON 9.3.0.4 от Saxonica (сборка 122216)
    2019-05-08 18: 09: 41Z
  2. 9.3.0.4, безусловно, довольно старый (2010-12-22) и даже не обновлялся с исправлениями исправлений (последние в ветке 9.3 были 9.3 .0.11). Сказав это, если это ошибка саксонской, то это довольно маловероятно. Но я боюсь, что мы никак не сможем исследовать проблему в древнем выпуске, которого нет в более позднем.
    2019-05-08 21: 27: 26Z
источник размещен Вот