exist-db:XQuery 和带有 XInclude 的文档

exist-db: XQuery and documents with XInclude

我正着手使用 eXist 开展一个新项目。我们将存储数百份代表手稿的 TEI XML 文档。我们想要捕捉的许多事物都是重复的,主要是人物和地点。我的同事向 TEI 社区询问了有关表示我们想要捕获的内容的策略,并建议使用 XInclude 作为减少重复的一种方法。

我已经快速尝试将 XInclude 添加到文档中,并且序列化的 XML 确实呈现了包含 XML 文件。但是,XQuery 中缺少包含的文本。我在 eXist 文档 (http://exist-db.org/exist/apps/doc/xinclude.xml) 中注意到:

eXist-db expands XIncludes at serialization time, which means that the query engine will see the XInclude tags before they are expanded. You therefore cannot query across XIncludes - unless you create your own code (e.g. an XQuery function) for it. We would certainly like to support queries over xincluded content in the future though.

查询使用 XInclude 的文件的最佳做法是什么?

我想知道我是否应该有一个 'job' 来序列化源 TEI XML 文件以扩展 XIncludes 并将这些文件存储在单独的集合中?在那种情况下,file:serialize 是完成此任务的正确函数吗?

我们正处于项目的开始阶段,因此欢迎任何建议。

您能描述一下您尝试过的 was missing the text 查询类型吗?

通常,由于通过 XInclude 引用的文件是格式正确的 xml 文档,您可以使用集合(文件夹)在 exist-db 中组织查询。因此,您可以 for $search in collection('/app/mydata')/*

而不是 for $search in doc("mydoc.xml")

更详细的答案将遵循源文档中未展开的 xinclude 语句的属性,并在目标中找到匹配的元素,但如果没有具体的 MWE,很难抽象出来。

您是否尝试过在 let 子句中创建一个临时的和扩展的片段,并查询它而不是存储的 xml? 当心命名空间 !

希望这对您有所帮助,并向塞巴斯蒂安问好。