2015-06-08 26 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查詢。很好。 –