如何在MarkLogic中查找所有根目录

时间:2015-01-30 09:42:02

标签: marklogic

我想知道如何获得MarkLogic数据库中的所有顶级目录。

cts:uris()可用于此目的:

cts:uris()[matches(., '^[^/]*/$')]

但是必须有一些比匹配每个URI更有效的东西来列出几个顶级目录!

2 个答案:

答案 0 :(得分:2)

假设您不想要求目录属性,并且您对目录的定义是存在一个包含" /"的URI的文档。但是并没有以" /"结尾,xmlsh为此实现了两个实现,既不是100%理想的 - 因为没有直接的方法。除了目录属性,"目录"的概念;不是MarkLogic中直接建模的概念 - 类似于AWS S3密钥,它的派生便利性不是根概念。要有效地推断出“共同前缀”的列表'您需要启用URI词典。那你可以使用各种URI搜索。参见

https://github.com/DALDEI/xmlsh/blob/master/extensions/marklogic/src/org/xmlsh/marklogic/ui/listRootDirectory.xquery

有关匹配'目录的示例'在根目录下,或顶级目录'如果$ urimatch是"" 。这不是完美的,但它确实处理了一个常见的情况,即完整的URL被用作数据库中的URI,例如' http://www.marklogic.com/document'

  declare variable $start external := 1 ;    
  declare variable $end  external := 1000;    
  declare variable $urimatch external := "" ;   
  fn:distinct-values(
    for $d in cts:uris("","any"  )
    where ($urimatch eq "" or contains( $d , $urimatch ) )

    return 
       if( matches( $d , "^[a-zA-Z]+://" ) ) then
          replace( $d , "(^[a-zA-Z]+://[a-zA-Z0-9_.-]+/).*","$1" )
       else
       if( contains( $d , "/" ) ) then 
          substring-before( $d , "/" ) || "/"
       else 
        $d

    )[ $start to $end ]

答案 1 :(得分:0)

您无法绕过每个URI。但是,这是另一种获取根目录列表的方法。

   public value: any = [{ Name: "Medium", Id: 2 }];

    public isItemSelected(itemText: string): boolean {
        return this.value.some(item => item.Name === itemText);
    }