假设我有很多带有同义词的本体论。
<term>
<word>cat</word>
<synonyms>
<synonym>feline</synonym>
</synonyms>
</term>
<term>
<word>feline></word>
<synonyms>
<synonym>kitty</synonym>
<synonyms>
</term>
如何编写SPARQL查询,以便我可以为其提供单词cat
,它将为我提供cat
的所有同义词以及{{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
}
应返回“猫”和“小猫”。