MarkLogic中如何从cts:triples输出提取主语、宾语值?
解决方案:提取MarkLogic三元组的主语/宾语值
提取主语值
使用sem:triple-subject获取三元组的主语IRI,再通过fn:local-name提取IRI的本地名称(适用于带命名空间或无命名空间的IRI场景):
for $triple in cts:triples((), sem:iri("testName"), (), (), (), cts:and-query(cts:collection-query("testCollection"))) return fn:local-name(sem:triple-subject($triple))
如果主语是无命名空间的简单IRI(如<a>),也可以用字符串替换直接去掉尖括号:
for $triple in cts:triples((), sem:iri("testName"), (), (), (), cts:and-query(cts:collection-query("testCollection"))) return fn:replace(sem:iri-to-string(sem:triple-subject($triple)), '^<|>$', '')
执行后输出:
a b c d e
提取宾语值
用sem:triple-object获取宾语IRI,再提取目标部分:
for $triple in cts:triples((), sem:iri("testName"), (), (), (), cts:and-query(cts:collection-query("testCollection"))) return fn:local-name(sem:triple-object($triple))
或者字符串替换写法:
for $triple in cts:triples((), sem:iri("testName"), (), (), (), cts:and-query(cts:collection-query("testCollection"))) return fn:replace(sem:iri-to-string(sem:triple-object($triple)), '^<|>$', '')
执行后输出:
aa bb cc dd ee
说明
cts:triples返回的是sem:triple类型对象,sem:triple-subject和sem:triple-object分别用于提取三元组的主语、宾语IRI,再通过IRI处理函数或字符串替换得到纯文本值。
内容的提问来源于stack exchange,提问作者marklogic_coder
相关产品推荐
相关产品推荐

