XSLT 3 как написать пакет

Я попытался изучить пакет, затем начал и скопировал рабочий пример из спецификации xslt 3, но не могу использовать пакет. В шаблоне, который я использую, я получил ошибку: Пакет не может быть найден.

Что я сделал не так? Я ожидаю что-то с именем или объявлением xmlns Единственное, что я изменил, это http://example.com/csv-parser на http://flexibatch.com/fhx-parser и соответствующее объявление xmlns. Flexibatch.com такой же вымышленный, как и example.com

Спасибо за вашу помощь


person ocsk7    schedule 13.08.2019    source источник
comment
Сообщите нам, какой именно процессор XSLT 3 вы используете, включая его точные атрибуты командной строки или конфигурацию IDE. Например, для Saxon 9 вам необходимо указать расположение пакетов с параметром -lib в командной строке или в файле конфигурации.   -  person Martin Honnen    schedule 13.08.2019
comment
Я использую xml-редактор Oxygen 21.1 со встроенным Saxon EE 9.8.0.12! или внешним 9.9.   -  person ocsk7    schedule 13.08.2019
comment
Извините, я не знаю, что это за атрибут, я попытаюсь проверить с помощью Oxygen.   -  person ocsk7    schedule 13.08.2019


Ответы (2)


Если вы используете Saxon 9 внутри oXygen, то я думаю, что одним из вариантов использования пакетов является создание и использование файла конфигурации Saxon (oXygen поддерживает создание этого типа файла с помощью нового файла -> конфигурации Saxon, где у вас есть возможность открыть раздел [ xsltPackages], где вы можете связать name пакета с sourceLocation или exportLocation).

Затем в сценарии преобразования в расширенных параметрах Saxon вы можете указать файл конфигурации Saxon для использования, и таким образом Saxon будет знать, как найти любой пакет, который ваш основной модуль использует с xsl:use-package (https://www.w3.org/TR/xslt-30/#element-use-package), поскольку он может связать указанный там URI/имя с расположением пакета.

Это немного сложная настройка, возможно, добавьте тег для oXygen, чтобы их ребята из службы поддержки увидели ваш вопрос и могли предложить вам дополнительные или более простые варианты.

Пример раздела из файла конфигурации Saxon для использования пакета непосредственно из набора тестов XSLT 3:

 <xsltPackages>
      <package name="http://example.com/csv-parser" version="1.0"
           sourceLocation="https://github.com/w3c/xslt30-test/raw/master/tests/decl/package/package-100.xsl"/>
 </xsltPackages>

конечно, вы можете адаптировать исходное местоположение, если у вас есть локальный файл, и вам нужно адаптировать имя, если вы сделали это, как предполагает ваш вопрос.

Код XSLT для использования этого пакета можно просмотреть в Интернете по адресу https://github.com/w3c/xslt30-test/blob/master/tests/decl/package/package-100a.xsl (или исполняемый файл/загружаемый по адресу https://github.com/w3c/xslt30-test/raw/master/tests/decl/package/package-100a.xsl) и

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:csv="http://example.com/csv"
    exclude-result-prefixes="xs csv" version="3.0">

    <xsl:output indent="yes"/>

    <!-- example input "file"  -->
    <xsl:variable name="input" as="xs:string"
        >name,id,postal code 
        "Abel Braaksma",34291,1210 KA
        "Anders Berglund",473892,9843 ZD</xsl:variable>

    <!-- entry point -->
    <xsl:template name="xsl:initial-template">
        <xsl:copy-of select="csv:parse($input)"/>
    </xsl:template>

    <xsl:use-package name="http://example.com/csv-parser" package-version="*"/>


</xsl:stylesheet>

Таким образом, вы можете запустить сценарий преобразования в oXygen с кодом XSLT, связанным непосредственно с https://github.com/w3c/xslt30-test/raw/master/tests/decl/package/package-100a.xsl. и специальные настройки Saxon 9 с использованием конфигурации файл с вышеуказанным разделом.

person Martin Honnen    schedule 13.08.2019
comment
Спасибо, Мартин, я попробую это сегодня вечером. - person ocsk7; 13.08.2019

Он работает с файлом конфигурации, но теперь я получаю сообщение об ошибке: «Невозможно применить каскадное преобразование. Причина: .org.xml.sax.SAXParseException; системный идентификатор: файл:/C:/..../Test-Package.xsl_xslt_cascade; номер строки: 3; номер столбца: 9; Содержимое не разрешено в прологе. » (строка 3: xmlns:xsl=....)

person ocsk7    schedule 13.08.2019
comment
Либо начните новый вопрос с необходимыми деталями (минимальные, но полные примеры кода XML, XSLT-файлов и файла конфигурации, который вы использовали), либо отредактируйте свой вопрос и предоставьте там подробности. Возможно, было бы лучше начать новый вопрос, если проблема теперь возникает с вашим собственным кодом и больше не связана с использованием и запуском XSLT 3 на основе пакетов в oXygen в целом. - person Martin Honnen; 13.08.2019
comment
Хорошо, я сделаю это, но это займет некоторое время, так как я сейчас работаю и у меня только телефон. Код по-прежнему тот же, что и в спецификации xslt 3 3.5.7. - person ocsk7; 13.08.2019
comment
Хорошо, забудьте об этом. Я скопировал пример из главы 3.5.7 спецификации xslt 3, и он работает, поэтому очевидно, что я допустил ошибку в своем предыдущем испытании. Спасибо за вашу поддержку, Мартин. - person ocsk7; 14.08.2019