我们每天都会获得包含完整数据集的最新XML。这甚至可以在一天内多次发生。现在我们想运行我们的测试脚本,它们以XML格式访问这些数据。 XML以Salami Slice格式构建。
<Book id="01">
<Name>A</Name>
<ChapterRef id="02"></ChapterRef>
</Book>
<Book id="03" >
<Name>B</Name>
<ChapterRef ref="02"></ChapterRef>
<ChapterRef ref="04"></ChapterRef>
</Book>
<Chapter id="02">
<Name>Introduction</Name>
<nPages>10</nPages>
</Chapter>
<Chapter id="04">
<Name>Summary</Name>
<nPages>20</nPages>
</Chapter>
注意: ID是唯一的。
使用Xpath / XQuery,访问数据的查询如下: - 获取 nPages 的值,其中Book.Name =&#34; B&#34; &安培;&安培; Chapter.Name =&#34;摘要&#34;。
问题: XML中有大量数据。因此,如上所示随机访问这些XML文件需要花费大量时间。目前,我们正在使用XSLT将数据从萨拉米香肠切片转换为俄罗斯娃娃,以便快速访问数据。但这使得XML文件非常大。
我想知道基于XML的原生数据库(BaseX等)是否可以在这方面提供帮助。他们可以使用索引以salami切片格式(无需转换)存储数据,以便快速访问数据吗? 另外一个需要考虑的重要因素是,如果将此数据导入到基于本机XML的数据库,并且其索引需要花费大量时间或者是手动任务,那么此解决方案也不是一个可行的解决方案。
注意:仅限&#34;只读&#34;需要随机访问才能读取数据库中的数据。没有必要将其写回XML。
答案 0 :(得分:0)
使用流处理可以使用XSLT处理大型XML文档,这也是强制自己只通过文档一次的方法。流也被设计为“随着数据到达”工作,这意味着转换可以在另一个进程正在写入流时启动(可以是文件或字节流,只要它是XML)。
这是XSLT 3.0的一项新功能,并且(至少)受Saxon和Exselt支持。
如果您需要随机访问,XML数据库可能是更好的解决方案。您可以使用XQuery仅对需要更新的部分进行更新,从而避免每次都必须处理大量的初始XML。此外,使用XQuery,您可以使用XSLT + XPath重用现有技能,因为这些语言有很多共同点,但XQuery更适合数据库访问。
StackOverflow不允许使用工具建议,因此我不会考虑您应该选择的众多XML数据库中的哪一个,这显然是基于预算,实施时间,现有技术和知识的重用等的决策。 / p>