如何在VS Code中配置BaseX?

3

问题是什么

我正在尝试使用BaseX在VS Code中运行XQuery,但每次使用XML工具执行查询时,由于命令的执行返回错误代码,因此失败了。

如何知道这是问题所在?

扩展程序的存储库上,它说:

执行引擎的输出通过操作系统的标准输出获得。如果进程退出时带有任何代码而不是 0,则 stdout 中写入的任何内容都会显示为错误消息。如果 stdout 中的内容包含行号,则错误提示将包含一个按钮,可将您带到相应的行。

当我运行我的查询时收到的结果是作为错误输出的确切的查询结果,正如上述引用所述,这是您预期的结果。

我如何配置settings.json文件

在上述存储库中,settings.json的编写如下:

{
    "xmlTools.xqueryExecutionEngine": "C:\\Program Files (x86)\\Altova\\AltovaXML2008\\AltovaXML.exe",
    "xmlTools.xqueryExecutionArguments": [
        "-xquery", "$(script)",
        "-in", "$(input)"
        "-out", "$(input).output.xml"
    ]
}

但我正在使用BaseX,所以我尝试使用它来创造上述等效内容:

"xmlTools.xqueryExecutionEngine": "basex.bat",
"xmlTools.xqueryExecutionArguments": [
    "$(script)",
    "-i", "$(input)",
    "-o", "output.xml"
], 

根据basex文档,这似乎是正确的执行方式。

注意:

  1. 如果output.xml还不存在,则Windows会发送错误代码9009。为了解决这个问题,我只使用预定义的文件,但如果有办法避免出现此问题并且仅创建文件而不出错,那么我很想知道如何解决。
  2. 写入以下内容

备用settings.json

"xmlTools.xqueryExecutionArguments": [
    "-o", "output.xml",
    "$(script)",
], 

这个方法不起作用,虽然在cmd中我必须这样写(在包含输入文件的情况下也尝试过,但是在我的特定情况下不需要使用它,因此我尝试了两种方法)。

可行的方法

cmd中,可以通过以下方式编写:

basex -o output.xml data.xq

如果存在output.xml,则运行成功。

echo %ErrorLevel%

返回值为0

我有点困惑如何将 settings.json 翻译到命令提示符中,因此我不确定如何在我的命令提示符中重现遇到的问题。如果有一种方式可以忽略退出代码(并防止停止执行我的命令),那么这将解决我的问题。更好的方法是找到正确的方法来编写 settings.json 以允许我从 VS Code 运行我的 XQuery。

测试数据

为了测试的缘故,这里是我使用的文件

data.xsd

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="personType">
    <xs:sequence>
        <xs:element name="fname" type="xs:string"/>
        <xs:element name="minit" type="xs:string"/>
        <xs:element name="lname" type="xs:string"/>
    </xs:sequence>
</xs:complexType> 
<xs:complexType name="peopleType">
    <xs:sequence>
        <xs:element name="person" type="personType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>
<xs:element name="peopleDB" type="peopleType"></xs:element>
</xs:schema>

data.xml

<?xml version="1.0" ?>
<peopleDB xsi:noNamespaceSchemaLocation="data.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <person>
        <fname>John</fname>
        <minit>A</minit>
        <lname>Roger</lname>
    </person>
    <person>
        <fname>Fred</fname>
        <minit>X</minit>
        <lname>Gerald</lname>
    </person>
</peopleDB>

data.xq

<personDB>
{
let $d:=doc("data.xml") for $p in 
$d/peopleDB/person
return $p
}
</personDB>

也许你可以看一下这个:https://marketplace.visualstudio.com/items?itemName=deltaxml.xslt-xpath,然后向Phil Fearon寻求指导?同时联系Christian Gruen? - Dimitre Novatchev
2个回答

2

XML工具扩展目前未得到维护。但是,有几个适用于一般XML编程任务的扩展可供推荐(后两者由我维护):

虽然这些扩展都没有直接支持BaseX执行XQuery的功能,但VS Code内置了支持执行shell命令的Tasks

因此,您可以设置用户任务(还支持工作区级别的任务):

  1. 从“命令面板”(Ctrl-Shift-P)中调用“打开用户任务”命令
  2. 从“选择任务模板”选项中,选择其他
  3. 将创建一个tasks.json文件,将该文件编辑为以下内容:
       {
         "version": "2.0.0",
         "tasks": [
           {
             "label": "Run BaseX XQuery",
             "type": "shell",
             "command": "\"path\\to\\basex.bat\" \"-xquery\" ${file} \"-in\" \"${workspaceFolder}\\input.xml\" \"-out\" \"${workspaceFolder}\\output.xml\"
           }
         ]
       }
  1. 保存文件(Ctrl-S)

注意:在JSON中转义字符如\*时需要小心。

完成这4个步骤后,您现在可以使用运行任务命令从VS Code运行此任务(前提是您已经打开了一个工作区文件夹)。

您可能不想像我在这个示例中那样硬编码脚本中的路径,但是您可以使用变量引用来创建更灵活的内容(也许甚至可以提示您选择文件),或者创建多个具有不同label值和不同路径的任务。


1

这似乎部分有效。我知道我的回答来得很晚,但也许仍有人会发现这有用。

"xmlTools.xqueryExecutionEngine": "C:\\Program Files (x86)\\BaseX\\bin\\basex.bat",
"xmlTools.xqueryExecutionArguments": [
    "-i", "$(input)",
    "-o", "$(input).output.xml",
    "$(script)"
]

注意! 你的 BaseX 路径可能与我的不同。

我还没有弄清楚如何让 BaseX 忽略 XML 命名空间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接