MarkLogic 8 - SPARQL - 遵循同义词链

MarkLogic 8 - SPARQL - Follow synonym chain

假设我有很多带有同义词的本体。

<term>
  <word>cat</word>
  <synonyms>
    <synonym>feline</synonym>
  </synonyms>
</term>
<term>
  <word>feline></word>
  <synonyms>
    <synonym>kitty</synonym>
  <synonyms>
</term>

我如何编写一个 SPARQL 查询,这样我就可以给它 cat 这个词,它会给我所有 cat 的同义词以及 cat 的所有同义词=11=]

我不知道是否有递归执行此操作的方法,或者您是否必须指定每个级别。

要使用 SPARQL,您需要将此数据表示为三元组。更了解本体的人会提出更好的 IRI,但类似(如 MarkLogic 内部所示):

<triple>
  <subject>http://marklogic.com/scope#cat</subject>
  <predicate>http://marklogic.com/term</predicate>
  <object>cat</object>
</triple>
<triple>
  <subject>http://marklogic.com/scope#cat</subject>
  <predicate>http://marklogic.com/synonym</predicate>
  <object>feline</object>
</triple>
<triple>
  <subject>http://marklogic.com/scope#cat</subject>
  <predicate>http://marklogic.com/synonym</predicate>
  <object>kitty</object>
</triple>

请注意,我的三元组的含义与您的含义不完全一致,但希望足够接近以说明问题。使用三元组,您可以执行 SPARQL 查询,例如:

select ?term
where {
  <http://marklogic.com/scope#cat> <http://marklogic.com/synonym> ?term
}

应该 return "feline" 和 "kitty"。