Как использовать пакет xml csv-parser в преобразовании? (пространство имен дает недействительный объект ref) - PullRequest
1 голос
/ 08 февраля 2020

Мне нужно преобразовать CSV в XML.

. Я бы хотел сделать это за один шаг с помощью xslt.

Я с большим интересом прочитал о W3 C пакет csv-parser . В документации показан пример, который объявляет пространство имен

xmlns:csv="http://example.com/csv"

в верхней части документа, а затем говорит, что оно будет использовать пакет csv-parser

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

В среде IDE Netbeans (8.2), когда я делаю свою собственную копию примера, приведенного для преобразования csv в рендеринг, страница вывода, сгенерированная в браузере (IE 11.1006), сообщает: «Первый аргумент для неустановленного c Java функция 'parse' не является допустимой ссылкой на объект. "

Когда я просматриваю приведенные выше URL, я вижу только заголовок страницы, но не пакеты. Нужно ли мне? Откуда браузер загружает пакет в противном случае?

Я думаю, что в сообщении об ошибке говорится, что ссылка на пакет неверна. Я что-то не понимаю в документации W3 C (w3.org)? Они только предлагают руководство по интерфейсу? Разве они не обеспечивают реализацию?

Для удобства, вот копия кода, предоставленного по гиперссылке выше:

<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"/>

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

   <!-- 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:stylesheet>```

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

Основное назначение примера csv-parser в спецификации XSLT 3.0 - это рабочий пример написания пакетов и их использования в приложении; он не был предназначен в первую очередь как рабочий кусок кода, хотя вы можете использовать его таким образом, если хотите.

Версия пакета librqry включена в набор тестов XSLT 3.0 по адресу

https://github.com/w3c/xslt30-test/blob/master/tests/decl/package/package-100.xsl

Основным автором был Майкл Сперберг-Маккуин Хотя другие члены РГ внесли свой вклад. Представляя пакет, спецификация гласит: «Для простоты изложения в примере показана простая, наивная реализация; реалистичный синтаксический анализатор c CSV будет более сложным и усложнит следование примеру». - это Майкл Sp-McQ, который является характерно скромным.

Но код был написан прежде всего как тест удобства использования возможностей упаковки XSLT 3.0, и, конечно, для его запуска требуется XSLT 3.0.

Вы говорите «когда я просматриваю URL выше», но это не URL, а URI - идентификаторы, а не местоположения. URI в домене example.com используется, потому что это пример.

Я не совсем уверен, что ошибка "Первый аргумент для не статичной c Java функции 'parse' это недопустимая ссылка на объект. " значит, но я сильно подозреваю, что это происходит потому, что вы не используете процессор XSLT 3.0. В XSLT 1.0 вызов функции с префиксным именем функции интерпретируется как вызов внешней функции (обычно это метод Java, если это процессор Java), и я подозреваю, что это происходит.

1 голос
/ 08 февраля 2020

Способ предоставления расположения пакетов процессору XSLT определяется процессором c, для Saxon 9 из командной строки вы можете использовать опцию -lib, чтобы предоставить имена файлов пакетов, которые вы хотите использовать, или вы можете использовать конфигурацию файл с соответствующим разделом, например, для загрузки пакета непосредственно из репозитория GitHub набора тестов XSLT 3

<configuration edition="HE" xmlns="http://saxon.sf.net/ns/configuration">
     <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>
</configuration>

Таким образом, вам необходимо убедиться, что вы безопасно используете пакет, который вы хотите использовать (то есть источник код, который вы нашли в spe c) в локальный файл, затем вы можете запустить Saxon 9.8 или более поздней версии из командной строки, используя опции -it -xsl:your-xslt-code.xsl -lib:package-file.xsl, или предоставить файл конфигурации с -config:config.xml.

На https://xqueryfiddle.liberty-development.net/94hwphT вы можете увидеть его в действии по-другому, там Saxon 9 запускает функцию XPath 3.1 transform в коде XQuery для запуска кода некоторых XSLT, предоставленных встроенным в узел конфигурации, также предоставленный inline, который напрямую ссылается на исходный код пакета из репозитория GitHub тестового набора W3 C.

...