首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据Marklogic查询控制台中模式数据库中的模式验证特定数据库中的XML文档?

如何根据Marklogic查询控制台中模式数据库中的模式验证特定数据库中的XML文档?
EN

Stack Overflow用户
提问于 2019-12-05 17:03:38
回答 1查看 313关注 0票数 0

使用Marklogic 10的查询控制台。我试图根据加载到模式数据库中的两个不同模式验证XML文档。我要验证的XML文档位于我创建的一个名为"myDatabase“的数据库中。我希望能够对数据库中的现有文档运行验证,并在将新文档插入数据库之前运行验证。

我编写了两个不同的查询(用于验证现有文档,另一个查询在文档创建之前运行),但让它们在查询控制台中工作的唯一方法是选择文档数据库,选择another服务器,并使用xdmp:eval()从"myDatabase“获取文档。

我的问题是,如何在不使用myDatabase解决方案的情况下,针对“xdmp:eval()”中的文档运行这些查询?

我包括以下几个问题:

代码语言:javascript
复制
xquery version "1.0-ml";

(: Validate existing documents :)

import schema namespace mods = "http://www.loc.gov/mods/v3" at "/mods-3-7.xsd";
import module namespace schematron = "http://marklogic.com/xdmp/schematron" at "/MarkLogic/schematron/schematron.xqy";   
declare namespace svrl = "http://purl.oclc.org/dsdl/svrl";  

let $query := 
  "xquery version '1.0-ml';
  let $doc := fn:doc('/test.xml')
  return $doc"
let $docs := xdmp:eval($query, (),
                <options xmlns="xdmp:eval">
                  <database>{xdmp:database("myDatabase")}</database>
                </options>)
for $doc in $docs
return 
(
  try { concat(fn:document-uri(validate strict {$doc}), "&#xa;  MODS validation passed") }
  catch ($e) { concat("MODS validation failed: ", $e/error:format-string/text()) },

  schematron:validate($doc, schematron:get("/schematron.sch"))/svrl:schematron-output/svrl:failed-assert/svrl:text/concat("  Schematron error - ", text())
)
代码语言:javascript
复制
xquery version "1.0-ml";

(: Validate new documents before loading :)

import module namespace schematron = "http://marklogic.com/xdmp/schematron" at "/MarkLogic/schematron/schematron.xqy";   
declare namespace svrl = "http://purl.oclc.org/dsdl/svrl";  

let $node := xdmp:document-get("temp/test.xml")
let $query := 
  "xquery version '1.0-ml';
  import schema namespace mods = &quot;http://www.loc.gov/mods/v3&quot; at &quot;/mods-3-7.xsd&quot;;
  import module namespace schematron = &quot;http://marklogic.com/xdmp/schematron&quot; at &quot;/MarkLogic/schematron/schematron.xqy&quot;; 
  declare variable $node as node()* external;
  xdmp:document-insert('/test.xml', validate strict {$node} )"
return
  (
    try { 
          xdmp:eval($query, (xs:QName('node'), $node),
            <options xmlns="xdmp:eval">
              <database>{xdmp:database("myDatabase")}</database>
            </options>)
        }
    catch ($e) { "Validation failed: ",
                 $e/error:format-string/text() },

    schematron:validate($node, schematron:get("/schematron.sch"))/svrl:schematron-output/svrl:failed-assert/svrl:text/concat("  Schematron error - ", text())
  )  

更新:--如果我试图运行验证查询,甚至尝试在除文档之外的任何数据库中编译模式,则会收到以下错误消息:

代码语言:javascript
复制
[1.0-ml] XDMP-NODB: xdmp:eval("declare variable $validator-uri as xs:string external;&#10;decla...", (fn:QName("","validator-uri"), "/schematron.sch-validator.xsl", fn:QName("","validator-xslt"), ...), <options xmlns="xdmp:eval"><database>0</database></options>) -- No database with identifier 0
EN

回答 1

Stack Overflow用户

发布于 2019-12-06 06:37:16

简单地回答,请检查是否选择Schemas作为myDatabase文档数据库的架构数据库。

您所评估的应用服务器指示应该使用哪些文档和模块数据库。文档数据库依次指示哪些模式和触发器数据库与其匹配。如果在Admin中创建空数据库,默认情况下它会将架构和触发器设置为(none)。对于创建数据库的其他方法,也可能存在相同的情况。

哈哈!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59200027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档