MarkLogic 8 - SPARQL - 跟随同义词链

时间:2015-06-08 14:26:33

标签: sparql semantics marklogic

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

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

如何编写SPARQL查询,以便我可以为其提供单词cat,它将为我提供cat的所有同义词以及{{1的同义词的所有同义词}}

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

1 个答案:

答案 0 :(得分:1)

要使用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
}

应返回“猫”和“小猫”。