gpt4 book ai didi

rest - 使用 REST API 插入 MarkLogic 的 XQuery 文件会导致意外语法错误

转载 作者:行者123 更新时间:2023-12-02 21:01:14 34 4
gpt4 key购买 nike

我有以下 XQuery 文件,它组装了 JATS XML document来自一系列节点(内容在内容管理系统中保存为单独的文件):

let $jatsManifest := xdmp:unquote(xdmp:get-request-body())
let $jatsDoc := xdmp:xslt-eval(

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xdmp="http://marklogic.com/xdmp" extension-element-prefixes="xdmp" version="2.0">

<xsl:template match="/">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
<xsl:variable name="node"><xsl:value-of select="concat('/workspace/SpacesStore/', /jats-manifest/@id)"/></xsl:variable>
<xsl:copy-of select="document($node)" />
<body>
<xsl:apply-templates select="jats-manifest/segment" />
</body>
</article>
</xsl:template>

<xsl:template match="segment">
<!-- Create an ID that passes the JATS manifest validation (workspace-SpacesStore-{UUID}) -->
<xsl:variable name="nodeId"><xsl:value-of select="replace(replace(@id, '://', '-'), '/', '-')"/></xsl:variable>
<sec id="{{$nodeId}}">
<!-- Create the nodeName as known in ML (/workspace/SpacesStore/{UUID}) -->
<xsl:variable name="node"><xsl:value-of select="replace(concat('/', @id), '://', '/')"/></xsl:variable>
<title><xsl:copy-of select="document($node)"/></title>
<xsl:apply-templates />
</sec>
</xsl:template>

<xsl:template match="chunk">

<!-- Create the nodeName as known in ML (/workspace/SpacesStore/{UUID}) -->
<xsl:variable name="node"><xsl:value-of select="replace(concat('/', @id), '://', '/')"/></xsl:variable>
<xsl:copy-of select="document($node)"/>
</xsl:template>

</xsl:stylesheet>
,
$jatsManifest)
let $articleId := $jatsManifest/jats-manifest/@id
let $jatsURL := fn:concat('/JATS/workspace/SpacesStore/', $articleId)
let $_ := xdmp:document-insert($jatsURL, $jatsDoc)
return $jatsURL

可以在 MarkLogic 服务器上通过 URL http://localhost:8012/generateJATSDoc.xqy 进行访问。并在 HTTP 正文中接受类似的内容:

<?xml version="1.0" encoding="UTF-8"?>
<jats-manifest id="c4b3baaa-038c-43cf-8667-31b208cdb6ad">
<title>English</title>
<segment id="workspace://SpacesStore/bc4a3486-0c4d-4f95-b677-61269645fc26">
<chunk id="workspace://SpacesStore/8535cbe4-0b90-4d4e-baf4-8de678d7438f"/>
</segment>
</jats-manifest>

如果处理 XQuery 文件的 MarkLogic 应用服务器设置为使用文件系统作为模块数据库,则此操作可以正常工作并组装 JATS 文档。

但是,如果应用服务器为模块使用数据库,并且使用 MarkLogic REST API 将 XQuery 文件插入数据库,如下所示:

curl -v -X PUT --anyauth -u admin:admin --header "Content-Type:application/xquery" \
-d@"generateJATSDoc.xqy" \
"http://127.0.0.1:8012/v1/documents?uri=/generateJATSDoc.xqy&database=My-Modules-Database"

以与以前完全相同的方式调用它时,出现以下错误:

{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-UNEXPECTED", "message":"XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error, unexpected Dollar_"}}

在查询控制台中查看该文件,它看起来像这样:

Screenshot of XQuery file after inseting via REST

我可能希望它的格式类似于 XQuery 文件,所以我不确定这是否会导致问题。

我使用管理员用户向 MarkLogic 进行身份验证,以排除任何与权限相关的问题,但这似乎没有任何影响。

这是使用 MarkLogic 8.0-6.1。

我不明白什么会导致这种不同的行为。

最佳答案

我相信这是由于您在 XQuery 中发布的方式造成的。正如您所看到的,换行符已被删除,这可能意味着包含嵌套注释的 XQuery 未得到正确处理。如果您使用“--data-binary”而不是“-d”,它应该可以工作。

关于rest - 使用 REST API 插入 MarkLogic 的 XQuery 文件会导致意外语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43386152/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com