Jackrabbit XPath问题

时间:2011-07-05 20:20:37

标签: jackrabbit jcr

我对Jackrabbit比较陌生。在我们的应用程序中,我们从未在repository.xml(以及workspace.xml)文件中打开SearchIndex部分,因为我们总是使用JCR UUID引用直接转到给定文档。我们使用 Jackrabbit v2.2.1 Oracle 作为存储库。现在我们的要求正在扩展,因为我们希望使用文档元数据功能来存储有关文档的上下文信息,以便我们可以使用元数据来检索选定的文档集。

作为第一步,我在workspace.xml文件中添加了默认的SearchIndex部分并重新启动了JCR。

我在日志文件中看到了一堆这样的行 - 然后我看到它在工作区区域下创建了索引文件夹。

2011-07-05 15:04:01.724 INFO [WebContainer:0] MultiIndex.java:1204索引... / vfs:metaData / 21ee130e-978e-415f-bfd1-7aa03d91​​608c / vfs:attributes( 3500)

我有这样的文件夹结构。当我在JCR中创建文档时,我将元数据信息指定为文档的一部分,该文档是复杂的XSD类型,其中包含docType,uploadedBy,contextValue等标记。

/ (root)
  /MyApp (sub-folder) 
      /documents/ (sub-folder) 
         /document-1.pdf (file) 
         /document-2.pdf (file) 
     /accounts/ (sub-folder) 
         /account.txt (file) 
        etc... 

以下XPath表达式有效。

// JCR:根/ VFS:元数据// * [VFS:属性/ VFS:DOCTYPE = 'TAX_DOCS']

如果我给出了错误的值,例如代替'TAX_DOCS','TAX',它就不会返回预期的文件,这很好。这证明元数据按预期正确存储,并且正确地用于过滤器过程。

此查询的问题是它从根文件夹开始搜索,但我只想从/ MyApp / documents子文件夹中搜索。所以我尝试了这个:

// JCR:根/ MyApp的/文件// VFS:元数据// * [VFS:属性/ VFS:DOCTYPE = 'TAX_DOCS']

它什么都不返回。然后我也尝试了这个但没有成功。

// JCR:根/ MyApp的/文件// * [VFS:元数据/ VFS:属性/ VFS:DOCTYPE = 'TAX_DOCS']

那么我做错了什么?我们需要设置或缺少workspace.xml配置中的任何内容吗?

感谢任何帮助。

谢谢,杰克

1 个答案:

答案 0 :(得分:2)

从除最后一个路径组件之外的任何内容中删除双击,并使用@表示法作为属性值,结果是:

/jcr:root/MyApp/documents//*[vfs:attributes/@vfs:docType='TAX_DOCS']

//构造查找整个子树而不是像/ do这样的直接子项。 JCR规范仅要求实现支持//构造作为XPath查询的最后一步。