Как я могу проверить XML-документы в конкретной базе данных по схеме в базе данных Schemas в консоли запросов Marklogic?

Использование консоли запросов Marklogic 10. Я пытаюсь проверить XML-документы на соответствие двум различным схемам, которые я загрузил в базу данных схем. XML-документы, которые я хочу проверить, находятся в созданной мной базе данных под названием "myDatabase". Я хочу иметь возможность выполнять проверку существующих документов в базе данных, а также выполнять проверку перед вставкой новых документов в базу данных.

Я написал два разных запроса (для проверки существующих документов и еще один для запуска перед созданием документа), но единственный способ заставить их работать в консоли запросов - это выбрать базу данных документов, выбрать сервер App-Services и использовать xdmp:eval() чтобы получить документы из "myDatabase".

У меня вопрос: как я могу выполнить эти запросы к документам в "myDatabase" без использования xdmp:eval() обходной путь?

Я включаю следующие запросы:

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())
)
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())
  )  

Обновление: если я попытаюсь выполнить запрос проверки или даже просто попытаюсь скомпилировать схему в любой базе данных, кроме документов, я получаю следующее сообщение об ошибке:

[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

1 ответ

Короткий ответ, проверьте, если Schemas выбрана в качестве базы данных схем для вашего myDatabase база данных документов.

Сервер приложений, который вы оцениваете, определяет, какие документы и базу данных модулей следует использовать. База данных документов, в свою очередь, определяет, какие схемы и база данных триггеров ей соответствуют. Если вы создаете пустую базу данных в пользовательском интерфейсе администратора, она устанавливает схемы и триггеры на(none)по умолчанию. То же самое может относиться к другим методам создания базы данных.

HTH!

Другие вопросы по тегам