2017-06-21 121 views
0

我正在与eXist开始一个新项目。我们将存储几百个代表手稿的TEI XML文档。我们想要捕捉的一些东西是重复的,主要是人和地方。我的同事已经向TEI社区询问了表示我们想要捕获的策略,并且已经建议使用XInclude作为减少重复的一种方式。exists-db:XQuery和包含XInclude的文档

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

存在,但在分贝系列化的时间,这意味着 查询引擎将看到的XInclude标签会被扩展之前扩展XIncludes。因此,您无法跨XIncludes查询 - 除非您为其创建自己的 代码(例如XQuery函数)。尽管如此,我们当然希望 支持对xincluded内容的查询。

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

我不知道我是否应该有一个“工作”序列化源TEI XML文件扩展XIncludes并将这些文件存储在单独的收藏?在这种情况下,file:serialize是这个任务的正确函数吗?

我们在项目的开始,所以任何建议表示赞赏。

回答

0

你能描述你试过什么样的查询was missing the text

一般来说,由于通过XInclude的引用文件是格式良好的XML文档,可以使用集合(文件夹)来组织你的查询中存在-DB。因此,代替​​,您可以for $search in collection('/app/mydata')/*

更详细的答案将遵循源文档中未展开的xinclude语句的属性,并找到目标中的匹配元素,但难以在没有具体MWE的情况下进行抽象。

你试图创建一个让条款的临时和扩展片段,并认为不是存储的XML查询? 当心命名空间!

希望这会有所帮助,并向Sebastiaan致以问候。

+0

对不起,这个答复很慢,而不是在原始问题中加一个例子。说实话,这是一个带有一些项目信息的简单单一文件,我将部分信息分割成单独的文件来测试XInclude支持。它并不真正反映项目的组织结构,我需要根据您的答案来思考更多。我也会看看你的关于let子句的建议。 我会除了你的答案,因为我的问题的答案 - “查询使用XInclude的文件的最佳做法是什么?” - 似乎是,“这取决于...”:) – MikeJ

+1

一旦你有MWE,随时修改你的问题。我有45万tei/xml片段通过XInclude连接存在。所以答案的默认部分是:无论如何,只需几行xQuery代码即可。 – duncdrum