MyTetra Share
Делитесь знаниями!
Как настроить XSLT-транслятор Saxon в VSCode и как им пользоваться
Время создания: 09.08.2024 14:50
Текстовые метки: vscode, vc code, visual studio code, IDE, XML, XSLT, saxon, транслятор, transform, трансформация, код, настройка
Раздел: Компьютер - Программирование - IDE
Запись: xintrea/mytetra_syncro/master/base/1723204225wi8rccp8ph/text.html на raw.github.com

Создание Workspace


Для того, чтобы полноценно пользоваться XSLT-транслятором необходимо, чтобы в VSCode был создан Workspace, а не просто был открыт какой-то XML-файл на редактирование. Проще всего создать Workspace можно следующим образом:


1. Оставить открытыми только те файлы, которые будут использоваться в Workspace. Обычно для задачи XSLT-трансляции это XML-файлы, которые лежат в каком-то каталоге.


2. В меню выбрать File - Save Workspace As... и сохранить Workspace в файл, указав директорию, где лежат XML-файлы. После этого действия в директории появится файл с расширением *.code-workspace. Имя файла - это и будет имя Workspace. Например, если сохранен файл как xslt_translate.code-workspace , то имя Workspace будет считаться как xslt_translate, а в интерфейсе такой Workspace будет отображаться как XSLT_TRANSLATE (WORKSPACE).


Файл с расширением *.code-workspace - это текстовый файл в формате JSON, и его содержимое будет примерно следующим:



{

"folders": [

{

"path": "."

}

],

"settings": {}

}



Если содержимое не такое, например присутствуют ненужные каталоги, то можно их убрать. Для этого надо в в области EXPLORER (левая вертикальная область в GUI VSCode) распахнуть раздел с именем только что созданного рабочего пространства XSLT_TRANSLATE (WORKSPACE), и выбрав лишний каталог по правой кнопке мыши, можно выбрать действие Remove Folder From Workspace.


После того как создано Workspace и оно активно, можно дальше начинать настройку.



Установка расширений для работы с XML и XSLT


Чтобы работать в VSCode с инструментами XML и XSLT, надо установить расширения:



  • XSLT/XPath for Visual Studio Code
  • XML Tool



После установки, эти расширения ставятся частью всего VSCode, а не только текущего Workspace.



Установка JAVA


Так как транслятор Saxon написан на Java, то для его исполнения необходимо, чтобы на компьютере стояла среда исполнения Java.


В Linux это можно сделать путем установки пакета java-common.


В Windows установить Java OpenJDK можно с сайта:


https://adoptopenjdk.net/installation.html



Установка XSLT процессора Saxon


Под Linux утилиту Saxon можно установить из стандартных репозитариев. В Debian Linux для этого можно установить:



  • либо пакет libsaxon-java, (устарел, ибо поддерживает XPath 1.0 и XSLT 1.0)
  • либо пакет libsaxonhe-java. (более новый)



В обеих случаях, после установки надо заглянуть в информацию о пакете и посмотреть, куда был установлен jar-файл с процессором Saxon. Скорее всего, это будет следующий путь:



/usr/share/java/saxon.jar



или



/usr/share/java/Saxon-HE.jar



Пользователи Windows могут попробовать установить Saxon отсюда:



https://sourceforge.net/projects/saxon/files/Saxon-HE/10/Java/



После установки, так же как и в случае с Linux, нужно запомнить полный путь к jar-файлу.



Создание задачи для запуска транслятора Saxon


Чтобы пользоваться Saxon в VSCode, необходимо создать задачу, которую можно будет вызывать в GUI VSCode. Если Workspace новое, то в нем не настроено еще ни одной задачи. Для настройки задачи запуска Saxon, надо в меню выбрать:



Terminal -> Configure Tasks



И далее в списке выбрать xslt: Saxon Transform (New). В результате в каталоге, где лежит файл xslt_translate.code-workspace будет создан подкаталог .vscode а в нем создан файл tasks.json. В этом файле будет лежать первично сконфигурированная задача для запуска Saxon:



{

"type": "xslt",

"label": "xslt: Saxon Transform (New)",

"saxonJar": "${config:XSLT.tasks.saxonJar}",

"xsltFile": "${command:xslt-xpath.pickXsltFile}",

"xmlSource": "${command:xslt-xpath.pickXmlSourceFile}",

"resultPath": "${workspaceFolder}/xsl-out/result1.xml",

"allowSyntaxExtensions40": "off",

"messageEscaping": "adaptive",

"group": {

"kind": "build"

},

"problemMatcher": [

"$saxon-xslt"

]

}



Здесь видно, что местоположение jar-файла с транслятором Saxon задается из конфигурационной переменной ${config:XSLT.tasks.saxonJar}. Чтобы задать это значение, надо в меню выбрать:



File - Preferences - Settings



В открывшемся окне в строке поиска надо набрать xslt. И далее надо выбрать пункт XSLT > Tasks: Saxon Jar в которм надо ввести полный путь к jar-файлу, который был запомнен ранее:




На этом скриншоте показана установка устаревшего транслятора Saxon.

Для правильной работы надо прописывать JAR-файл от Saxon-HE



Данная настройка сохранится в пользовательских настройках среды IDE VSCode. Ее не будет видно ни в файле Workspace, ни в файле tasks.json, но она будет влиять на выполнение задачи.


Далее, чтобы не запутаться, разработчики рекомендуют открыть файл task.json, выбрав его в области EXPLORER, и путем редактирования JSON-кода изменить значение label на любое другое удобное. Это необходимо сделать из-за того, что предполагается, что задач для XSLT-трансляции может потребоваться несколько штук.


Далее надо код:



"group": {

"kind": "build"

},



Заменить на:


"group": {

"kind": "build",

"isDefault": true

},



Таким образом, по-умолчанию, данная задача будет запускаться при запуске команды сборки:



Terminal - Run Build Task... (или Ctrl + Shift +B)



Если внимательно посмотреть, то можно увидеть, что в задаче чрез команды xslt-xpath.pickXsltFile и xslt-xpath.pickXmlSourceFile запрашиваются XSLT и XSL файлы:



...

"xsltFile": "${command:xslt-xpath.pickXsltFile}",

"xmlSource": "${command:xslt-xpath.pickXmlSourceFile}",

"resultPath": "${workspaceFolder}/xsl-out/result1.xml",

...



Это значит, что в момент запуска задачи XSLT-трансляции (клавишами Ctrl + Shift +B), будет появляться диалог для выбра XSLT-файла, а затем для выбора XML-файла. А результат трансляции будет укладываться в файл /xsl-out/result1.xml в каталоге Workspace.



Запуск задачи XSLT-трансформации через Saxon


Чтобы запустить транслятор Saxon, можно, находясь в любом файле, нажать Ctrl + Shift + B. Далее надо последовательно выбрать XSLT и XML файл. в результате трансляция будет запущена.


При выполнении трансляции возможно появляение следующей ошибки:



Error: Could not find or load main class net.sf.saxon.Transform

Caused by: java.lang.ClassNotFoundException: net.sf.saxon.Transform



Появление этой ошибки связано с тем, что трансформер Saxon в какой-то период времени стал сильно перерабатываться. В VSCode формируется следующая команда для запуска трансформации:



java -cp /usr/share/java/saxon.jar net.sf.saxon.Transform

-xsl:/home/user/work/misc/sample.xslt

-s:/home/user/work/misc/sample.xml

-o:/home/user/work/misc/xsl-out/result1.xml

--allowSyntaxExtensions:off



В то время как обычный Saxon (как минимум версии 6.5.5) требует для своего запуска совершенно другой команды:



java -jar /usr/share/java/saxon.jar -o result.xml sample.xml sample.xslt



Для того, чтобы выполнялась команда, прописанная в расширениях VSCode, надо пользоваться не пакетом Saxon, а пакетом с Saxon-HE (то есть Home Edition), который содержит версию старше 9.x, а конкретно 9.9.1.5J от компании Saxonica. То есть в настройках File - Preferences - Settings необходимо прописать путь /usr/share/java/Saxon-HE.jar. После этого будет формироваться следующая команда:



java -cp /usr/share/java/Saxon-HE.jar net.sf.saxon.Transform

-xsl:/home/user/work/misc/sample.xslt

-s:/home/user/work/misc/sample.xml

-o:/home/user/work/misc/xsl-out/result1.xml

--allowSyntaxExtensions:off



Если все сделано правильно, то после запуска транслятора на исполнение сочетанием клавиш Ctrl + Shift + B, будет предложен выбор XML и XSLT файлов. А после их выбра, если при самой трансляции не возникло ошибок, будет казаться что ничего не произошло. Только появится сообщение: "Completed task: 'xslt: Saxon Transform (New)", где вместо этого названия задачи может быть написано то название, которое было задано при создании задачи в параметре label (см. рекомендации выше).





Это значит, что трансляция успешно завершилась и сформировался выходной файл.


Вот так просто и непринужденно можно пользоваться XSLT-транслятором в VSCode.


Так же в этом разделе:
 
MyTetra Share v.0.64
Яндекс индекс цитирования