2015-06-08 30 views
1

比方说,我有很多与同义词有关的本体论。MarkLogic 8 - SPARQL - 遵循同义词链

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

我如何写SPARQL查询,这样我可以给它的字cat和它会给我的cat所有的同义词以及cat

我不要的同义词所有的同义词不知道是否有一种方法可以递归地执行此操作,或者您必须指定每个级别。

回答

1

要使用SPARQL,您需要将此数据表示为三元组。有人谁更好知道本体会拿出更好的光圈,但类似的信息(如内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 
} 

应该返回“猫科动物”和“猫咪”。

+0

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