检查/解析单独xml文件中的交叉引用 起点

检查/解析单独xml文件中的交叉引用 起点,xml,xslt,xslt-2.0,Xml,Xslt,Xslt 2.0,假设我们有一本xml格式的书。这本书由许多资产组成,这些资产可以通过带有属性path的标记ref-asset相互引用。[路径掩码:{id}{version}目标资产] 重要提示:资产是单个文件,没有合并的完整文件 示例性XML(合并以获得更好的视觉效果) +功能: 通过collection()搜索文件系统上的所有单个资产文件,通过document()将它们加载到进程中,并搜索匹配的命中率 第二次尝试合并,完成文件: 将所有单个资产合并到书籍中,并通过xsl:key或类似技术进行匹配 问题:

假设我们有一本xml格式的书。这本书由许多资产组成,这些资产可以通过带有属性
path
的标记
ref-asset
相互引用。[路径掩码:{id}{version}目标资产]

重要提示:资产是单个文件,没有合并的完整文件

示例性XML(合并以获得更好的视觉效果)


+功能:

通过collection()搜索文件系统上的所有单个资产文件,通过document()将它们加载到进程中,并搜索匹配的命中率

第二次尝试合并,完成文件:

将所有单个
资产
合并到
书籍
中,并通过
xsl:key
或类似技术进行匹配


问题:
  • collection()
    是否能够加载数千个文档,并且仍然能够使用后续的
    document()
    处理资产
  • 如何“索引”运行定时加载的文档[仍然通过
    xsl:key
    ?]来高效搜索
非常感谢进一步的提示/不需要特定的样式表[我会自己做,只要我知道怎么做]



编辑:
collection()
已返回一系列文档节点,因此可能不需要
document()

有关性能的问题始终取决于产品,因此如果该问题是特定于萨克森的,则更容易回答

我经常在Saxon中使用collection()函数来处理数千个输入文档,是的,它很有能力做到这一点。在Saxon EE中,collection()是多线程的,因此可以在多核机器上并行解析多个文档

索引有点棘手,因为key()函数只能搜索一个文档。几周前,我们在牛津XML暑期学校的性能研讨会上研究了一个非常类似的问题,并通过使用maps的新XSLT 3.0特性解决了这个问题(速度提高了十倍)。大概是这样的:

<xsl:variable name="index" as="map(xs:string, element(asset))">
  <xsl:map>
    <xsl:for-each select="collection('....')/asset">
      <xsl:map-entry key="@id || '|' || @version"
                     select="."/>
    </xsl:for-each>
  </xsl:map>
</xsl:variable>

<xsl:template match="ref-asset">
  <xsl:variable name="asset" select="$index(@path)"/>
  ....
</xsl:template>

....

collection
已经为您提供了一系列文档节点,因此我目前不知道您还需要
文档
功能做什么。关于文件集合和Saxon EE的内存问题,请参阅,这应该会有所帮助。当您首先说“没有合并的完整文件”,然后作为示例输入显示一个名为“合并文件”的内容时,我不理解您的输入数据的外观。事实上
collection()
返回一系列文档节点对我来说是新的。我是那个领域的初学者。“合并的完整文件”只是为了更好地概述。正如我提到的,这些文件是分开的。我期待着2016年布拉格XML,并希望xsl:map将成为其中的一部分。
<xsl:variable name="index" as="map(xs:string, element(asset))">
  <xsl:map>
    <xsl:for-each select="collection('....')/asset">
      <xsl:map-entry key="@id || '|' || @version"
                     select="."/>
    </xsl:for-each>
  </xsl:map>
</xsl:variable>

<xsl:template match="ref-asset">
  <xsl:variable name="asset" select="$index(@path)"/>
  ....
</xsl:template>