XSLT - Saxon неправильно сформированный URL неизвестный протокол: xmldb - PullRequest
0 голосов
/ 13 ноября 2018

В eXist 4.4 / XQuery 3.1 я выполняю преобразование XSL 2.0, используя transform:transform().В преобразовании я передаю параметр в преобразование XSL для Saxon, чтобы использовать его для доступа к информации в базе данных.

<param name="paramSaxondatapath" value="xmldb:exist:///db/apps/deheresi/data/"/>

Все отлично работает: Saxon извлекает узлы, необходимые из документов в eXist-DB и преобразовании XSLуспешно.

Теперь я пытаюсь выполнить то же самое, но из вне среды eXist-DB (локальный диск, использующий Oxygen).Таким образом, в документе XSLT я жестко закодировал параметр:

<xsl:param name="paramSaxondatapath">xmldb:exist:///db/apps/deheresi/data/</xsl:param>

Тем не менее, когда я запускаю этот файл XSLT локально (в Oxygen, локальный файл XSLT, Saxon-HE 9.6.0.7), Saxon выдает мнеисключение unknown protocol: xmldb

FODC0002: Exception thrown by URIResolver: 
Malformed URL 
xmldb:exist:///db/apps/deheresi/data/bibliography.xml
(base file:/Users/foo/Desktop/De_Heresi/deheresi_TEI/fo_dep_single.xsl): 
unknown protocol: xmldb

Учитывая, что это передается Саксону идентичным образом (т. е. заключено в doc(concat(paramSaxondatapath,'somefile.xml')), я удивлен, что это не реагирует одинаково оба раза.

Есть ли другой URI, который я должен использовать?

Большое спасибо.

РЕДАКТИРОВАТЬ: Любопытно, если я использую командную строку для преобразования (то есть не запускается кислородом), Саксон принимаетэто и выполняет преобразование.Похоже, что-то связано с кислородом ...

1 Ответ

0 голосов
/ 13 ноября 2018

Я предполагаю, что когда eXist вызывает Saxon, он устанавливает URIResolver, который распознает URI с префиксом "xmldb:exist:" и обрабатывает их сам. Вне среды eXist вам нужно будет предоставить свой собственный URIResolver, который делает нечто подобное - подключается к базе данных и получает требуемый документ.

...