Marklogic 使用JavaAPI根据模式数据库中的xsd验证文档

Marklogic 使用JavaAPI根据模式数据库中的xsd验证文档,marklogic,Marklogic,我在marklogic的模式数据库中有一个模式。 当我针对数据库中的模式使用JavaAPI插入文档并在其无效时抛出错误时,是否有方法进行严格验证 非常感谢您对如何通过解决方案提供的任何帮助。Java API的答案与实际情况相同。您可以安装REST转换。可以这么简单: xquery version "1.0-ml"; module namespace trans = "http://marklogic.com/rest-api/transform/validate"; declare func

我在marklogic的模式数据库中有一个模式。 当我针对数据库中的模式使用JavaAPI插入文档并在其无效时抛出错误时,是否有方法进行严格验证


非常感谢您对如何通过解决方案提供的任何帮助。

Java API的答案与实际情况相同。您可以安装REST转换。可以这么简单:

xquery version "1.0-ml";

module namespace trans = "http://marklogic.com/rest-api/transform/validate";

declare function trans:transform(
  $context as map:map,
  $params as map:map,
  $content as document-node()
) as document-node()
{
  let $validate := validate strict { $content }
  return $content
};
注意:使用转换名称“validate”上载此文件,因为转换名称必须与其命名空间匹配


您还可以使用Javascript实现此转换。有关更多信息,请参阅《REST应用程序开发人员指南》。

上述语句中名称空间的意义是什么?上述语句中名称空间marklogic.com/REST-api/transform的意义是什么?我在模式数据库中有一个具有以下名称空间的XSD:如何使用加载到数据库的转换来验证XML文档?我正在将transform=validate传递给下面的命令:curl-X PUT-T developertype.xml-H“Content-type:application/xml”--anyauth--user admin:admin“该名称空间是创建REST XQuery转换的有文档记录的方法(请参阅我回答中的docs链接)。用于调用转换的url看起来不错。若要排除转换故障,请检查ErrorLog.txt并使用xdmp:log。您的XSD应该可以有任何名称空间。有关使用XSD架构的详细信息,请参阅:感谢您的帮助。ErrorLog.txt显示状态500:xdmp-VALIDATENODECL:(err:XQDY0084)validate strict{$content}--缺少元素声明:在使用架构“”的非lax模式下,节点fn:doc(“”)/root需要声明。这与我在使用Java API或REST API时遇到的错误相同,但在使用XQuery时仍然有效。REST API似乎无法找到架构。对于XQuery,我们在“/schemas/my-schema.xsd”处导入架构“my schema”"; 在使用转换的情况下,我们如何在这里执行此操作?您可以在转换中使用相同的导入架构行,以查看这是否有帮助。但是,如果xml文件的名称空间正确,并且连接到rest扩展的rest用户可以找到模式,那么它应该可以工作。可能您的rest用户没有对架构的读取权限?