2013-04-11 38 views
2

如何用两个变量创建sparql查询? 让我解释一下: 我有一个历史地图的本体论。我的实体是:HistoricalMap,Language,Color 以及连接它们的对象属性为:hasLanguage,hasColor(hist.map具有语言和颜色)。 如果我使查询:带两个变量的Sparql查询

SELECT ?HistoricalMap ?Language ?Color 
     WHERE { ?HistoricalMap p1:hasLanguage ?Language. 
         ?HistoricalMap p1:hasColor ?Color. 
} 

我得到的所有有颜色和语言的地图。

我该如何要求地图hasColor“红”AND hasLanguage法语?

回答

5

因为你想要“AND”,所以你可以在模式中使用常量。

SELECT ?HistoricalMap 
     WHERE { ?HistoricalMap p1:hasLanguage "French". 
         ?HistoricalMap p1:hasColor "Red" . 
} 

如果你也想还是回到了变量,使用FILTER

SELECT ?HistoricalMap ?Language ?Color 
     WHERE { ?HistoricalMap p1:hasLanguage ?Language. 
         ?HistoricalMap p1:hasColor ?Color. 
       FILTER(?Language = "French" && ?Color = "Red") 
} 
+0

:我尝试了建议的模式,但它返回“没有找到匹配”,即使存在一个匹配“法国”和“红”的代表作为我本体中的实例(Protege)。“French”和“Red”是实例的名称,它们也作为标签存储在这些实例中。也许这是一种问题? – user2270072 2013-04-11 19:38:50

+1

这是一个猜谜游戏,没有一个完整的,最小的例子。请显示数据;请说出您使用哪个系统进行查询。尝试“红色”^^ xsd:string和“French”^^ xsd:string因为Protege通常将字符串存储为数据类型文字。 – AndyS 2013-04-11 20:18:09

+0

我终于做到了这一点,它似乎工作: – user2270072 2013-04-11 20:22:48

3

你需要了解如何法语红色在你的数据表示。

它应该足以查看它们在执行查询时如何返回。

查询DBpedia中,这将是,例如:

SELECT ?entity 
WHERE { 
    ?entity dbpedia-owl:colour <http://dbpedia.org/resource/Red> . 
    ?entity dbpedia-owl:language <http://dbpedia.org/resource/French_language> . 
} 
+0

“French”在我的本体(Protege)中被表示为实例。单词“French”和“Red”是实例的名称,它们也作为标签存储在这些实例中。也许这是某种问题? – user2270072 2013-04-11 19:43:39

+1

使用url _instance_。(请参阅dbpedia上的网址示例) – kr1 2013-04-11 19:52:23

+0

谢谢您的回答。它似乎接受查询,但它返回白色线作为答案...即使有两个真实的答案... – user2270072 2013-04-11 20:07:22