【问题标题】:SQL2 equivalent for this XPath query此 XPath 查询的 SQL2 等效项
【发布时间】:2014-07-23 06:50:36
【问题描述】:

是否存在与以下XPath 查询相同的SQL2 查询:

/jcr:root/content/ancestor//parent/jcr:content

它应该返回以下节点,例如:

/content/ancestor/a/b/c/parent/jcr:content
/content/ancestor/a/parent/jcr:content
/content/ancestor/parent/jcr:content

但不包括以下节点:

/content/xxx/a/b/c/parent/jcr:content
/content/xxx/a/parent/jcr:content
/content/xxx/parent/jcr:content

【问题讨论】:

    标签: aem jackrabbit jcr jcr-sql2


    【解决方案1】:

    以下应该可以工作:

    SELECT * FROM [nt:base] AS s 
      INNER JOIN [nt:base] AS parent
        ON ISCHILDNODE(s, parent)
    WHERE
      ISDESCENDANTNODE(s, [/content/ancestor]) AND
      NAME(parent) = 'parent' AND
      NAME(s) = 'jcr:content'
    

    如果s 的类型是cq:PageContentparent 的类型是cq:Page,您可以使用这些信息来加快查询速度:

    SELECT * FROM [cq:PageContent] AS s 
      INNER JOIN [cq:Page] AS parent
        ON ISCHILDNODE(s, parent)
    WHERE
      ISDESCENDANTNODE(s, [/content/ancestor]) AND
      NAME(parent) = 'parent' AND
      NAME(s) = 'jcr:content'
    

    【讨论】:

    • 你知道为什么 XPATH 在 JCR 2 中被弃用了吗?与 SQL2 查询相比,XPath 查询有时更短且更具可读性。
    • 即使它已被弃用,我仍在使用 XPATH。不过,它们在内部被翻译成 SQL2。将节点结构映射到 XPATH 要容易得多。所以我也想知道为什么我们应该使用更复杂、更难读取 SQL2 的方式在 XPATH 上。
    【解决方案2】:

    您可以使用 crxde 中的“查询工具”轻松地将 xpath 转换为 sql2 和反之亦然。

    【讨论】:

    • 你不能。此下拉列表的目的是定义在 Query 字段中输入的查询类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 2018-11-24
    相关资源
    最近更新 更多