我想知道如何获得MarkLogic数据库中的所有顶级目录。
cts:uris()
可用于此目的:
cts:uris()[matches(., '^[^/]*/$')]
但是必须有一些比匹配每个URI更有效的东西来列出几个顶级目录!
答案 0 :(得分:2)
假设您不想要求目录属性,并且您对目录的定义是存在一个包含" /"的URI的文档。但是并没有以" /"结尾,xmlsh为此实现了两个实现,既不是100%理想的 - 因为没有直接的方法。除了目录属性,"目录"的概念;不是MarkLogic中直接建模的概念 - 类似于AWS S3密钥,它的派生便利性不是根概念。要有效地推断出“共同前缀”的列表'您需要启用URI词典。那你可以使用各种URI搜索。参见
有关匹配'目录的示例'在根目录下,或顶级目录'如果$ 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);
}