MarkLogic 8-SPARQL-跟随同义词链

MarkLogic 8-SPARQL-跟随同义词链,sparql,semantics,marklogic,Sparql,Semantics,Marklogic,假设我有很多同义词的本体论 <term> <word>cat</word> <synonyms> <synonym>feline</synonym> </synonyms> </term> <term> <word>feline></word> <synonyms> <synonym>kitty<

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

<term>
  <word>cat</word>
  <synonyms>
    <synonym>feline</synonym>
  </synonyms>
</term>
<term>
  <word>feline></word>
  <synonyms>
    <synonym>kitty</synonym>
  <synonyms>
</term>
我如何编写SPARQL查询,这样我就可以给它一个单词cat,它将给我cat的所有同义词以及cat的同义词的所有同义词


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

要使用SPARQL,需要将此数据表示为三元组。更了解本体论的人可能会提出更好的IRIs,但如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
}

应该还猫和小猫

啊这其实是有道理的。我们必须从现有的三元组中进行一些推断,然后它大大简化了SPARQL查询。很好。