【问题标题】:Handle TDE errors in Marklogic Xquery处理 Marklogic Xquery 中的 TDE 错误
【发布时间】:2022-02-01 07:05:49
【问题描述】:

我为我的 ML 内容数据库中存在的文档创建了模板没有 <invalid-values>ignore</invalid-values>。因此,当文档的创建/更新过程中存在无效行值时,我的代码会引发 TDE-INDEX 错误。

TDE-INDEX: xdmp:eval("xquery 版本 "1.0-ml"; import module namesp...", (), ****...) -- 将模板 /template.xml 应用到文档 /workid.xml 时出错:TDE-EVALFAILED: Eval for Column subject_name='$subject[@code eq $subject_code]/text()' 返回多个值(预期只有一个)

现在我有一个需求,我需要在 ErrorLog.txt 文件中跟踪此错误并继续插入文档。

从有关 TDE 的 Marklogic 文档中,我可以看到这可以通过两种方式处理。

  1. 设置<invalid-values>ignore</invalid-values>,我们无法记录错误,它会继续操作

  2. 如果没有该选项,则会抛出错误并停止处理。

现在有两个问题我正在寻找答案:

  1. 是否可以使用 try/catch 表达式捕获 TDE 错误?

  2. 是否可以记录 TDE 错误并允许文档插入/更新操作?

【问题讨论】:

  • 如果您要捕获异常,您是否希望能够捕获 TDE 异常以跳过 TDE 处理,但仍保存文档?对于您的特定问题,如果看起来好像它需要一个列的单个值并且您有多个值,因此您可以应用不同的 TDE 并为该列生成多行,只选择一个值而不是所有匹配的值,或连接它们并产生一个字符串。
  • @MadsHansen 我们最终决定修改现有模板以获取一个值而不是所有匹配项,因为我们不想丢失报告中的数据并允许保存记录。

标签: xml xquery marklogic marklogic-10


【解决方案1】:

对于我们所有使用 TDE 的关键任务文档,我们实际上首先进行显式调用以针对 XSD 验证文档。然后我们提前知道它是否会在严格的 TDE 模板上出错。对于许多项目,我们实际上是从 DSL 生成 TDE 和模式,以保证它们一致。

通过提前进行验证,然后可以使用业务逻辑记录错误并通过与 TDE 一起使用的某种切换机制来触发或不触发 TDE 索引:

  • 收藏
  • 目录
  • 上下文

我们经常使用的一个技巧是将提示嵌入到上下文逻辑中的模板或子模板中。例如,您可以在元素或集合中存储一个关于验证成功的布尔值,并使用类似 /some/path[fancy condition related to node -collection or element ]

的上下文

【讨论】:

  • 感谢您的回答。我们决定将上下文与谓词一起使用,因为我们希望具有报告的价值以及保存记录。
  • 我很高兴这个答案有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多