基于Pizza本体的SPARQL查询
我是SPARQL的初学者。我有一个问题,我正试图写一个查询,列出所有热门的浇头。到目前为止,我已经想到了这个:基于Pizza本体的SPARQL查询,sparql,Sparql,我是SPARQL的初学者。我有一个问题,我正试图写一个查询,列出所有热门的浇头。到目前为止,我已经想到了这个: PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT ?targetPizza
WHERE {
?topping rdfs:subClassOf pizza:PizzaTopping .
?topping rdfs:subClassOf ?restriction .
?restriction owl:onProperty pizza:hasSpiciness .
?restriction owl:someValuesFrom pizza:Hot .
}
前缀rdf:
前缀比萨饼:
前缀rdfs:
前缀xsd:
前缀owl:
选择?目标披萨
在哪里{
?配料RDF:比萨子类:比萨配料。
?顶级RDF:子类?限制。
?限制猫头鹰:onProperty比萨饼:Hasspicness。
?限制猫头鹰:比萨饼的一些价值:热。
}
但是,它返回一个空结果。为什么我的问题是错误的
提前感谢您的帮助。简短回答:没有与您的查询匹配的内容。通过运行
SELECT ?targetPizza
WHERE {
?targetPizza rdfs:subClassOf pizza:PizzaTopping .
?targetPizza rdfs:subClassOf ?restriction .
?restriction owl:onProperty pizza:hasSpiciness .
?restriction owl:someValuesFrom pizza:Hot .
}
前缀比萨饼:
前缀rdf:
前缀rdfs:
前缀owl:
选择*WHERE{
?配料RDF:比萨子类:比萨配料。
?顶级RDF:子类?限制。
?限制rdf:类型owl:限制。
?限制?采购订单。
}
结果:
+--------------------+---------------------+---------------------+
| topping | p | o |
+--------------------+---------------------+---------------------+
| pizza:FishTopping | rdf:type | owl:Restriction |
| pizza:FishTopping | owl:onProperty | pizza:hasSpiciness |
| pizza:FishTopping | owl:someValuesFrom | pizza:Mild |
| pizza:NutTopping | rdf:type | owl:Restriction |
| pizza:NutTopping | owl:onProperty | pizza:hasSpiciness |
| pizza:NutTopping | owl:someValuesFrom | pizza:Mild |
+--------------------+---------------------+---------------------+
+------------------------------+
| s |
+------------------------------+
| pizza:HotGreenPepperTopping |
| pizza:JalapenoPepperTopping |
| pizza:TobascoPepperSauce |
| pizza:CajunSpiceTopping |
| pizza:HotSpicedBeefTopping |
+------------------------------+
+------------------------------+------------+
| s | type |
+------------------------------+------------+
| pizza:HotGreenPepperTopping | owl:Class |
| pizza:JalapenoPepperTopping | owl:Class |
| pizza:TobascoPepperSauce | owl:Class |
| pizza:CajunSpiceTopping | owl:Class |
| pizza:HotSpicedBeefTopping | owl:Class |
+------------------------------+------------+
那么这里有什么问题?下一步是反过来,即我们检查所有与辣味相关的东西:
前缀比萨饼:
前缀rdfs:
前缀owl:
选择不同的位置{
?s rdfs:子类?限制。
?限制猫头鹰:onProperty比萨饼:Hasspicness。
?限制猫头鹰:比萨饼的一些价值:热。
}
结果:
+--------------------+---------------------+---------------------+
| topping | p | o |
+--------------------+---------------------+---------------------+
| pizza:FishTopping | rdf:type | owl:Restriction |
| pizza:FishTopping | owl:onProperty | pizza:hasSpiciness |
| pizza:FishTopping | owl:someValuesFrom | pizza:Mild |
| pizza:NutTopping | rdf:type | owl:Restriction |
| pizza:NutTopping | owl:onProperty | pizza:hasSpiciness |
| pizza:NutTopping | owl:someValuesFrom | pizza:Mild |
+--------------------+---------------------+---------------------+
+------------------------------+
| s |
+------------------------------+
| pizza:HotGreenPepperTopping |
| pizza:JalapenoPepperTopping |
| pizza:TobascoPepperSauce |
| pizza:CajunSpiceTopping |
| pizza:HotSpicedBeefTopping |
+------------------------------+
+------------------------------+------------+
| s | type |
+------------------------------+------------+
| pizza:HotGreenPepperTopping | owl:Class |
| pizza:JalapenoPepperTopping | owl:Class |
| pizza:TobascoPepperSauce | owl:Class |
| pizza:CajunSpiceTopping | owl:Class |
| pizza:HotSpicedBeefTopping | owl:Class |
+------------------------------+------------+
那么,这怎么可能呢?简单的回答是,没有一种辣味配料被定义为类pizza:PizzaTopping
的实例,您可以使用额外的可选三重模式来验证这一点
前缀rdf:
前缀比萨饼:
前缀rdfs:
前缀owl:
选择不同的s类型,其中{
?s rdfs:子类?限制。
?限制猫头鹰:onProperty比萨饼:Hasspicness。
?限制猫头鹰:比萨饼的一些价值:热。
可选{s rdf:type?type}
}
结果:
+--------------------+---------------------+---------------------+
| topping | p | o |
+--------------------+---------------------+---------------------+
| pizza:FishTopping | rdf:type | owl:Restriction |
| pizza:FishTopping | owl:onProperty | pizza:hasSpiciness |
| pizza:FishTopping | owl:someValuesFrom | pizza:Mild |
| pizza:NutTopping | rdf:type | owl:Restriction |
| pizza:NutTopping | owl:onProperty | pizza:hasSpiciness |
| pizza:NutTopping | owl:someValuesFrom | pizza:Mild |
+--------------------+---------------------+---------------------+
+------------------------------+
| s |
+------------------------------+
| pizza:HotGreenPepperTopping |
| pizza:JalapenoPepperTopping |
| pizza:TobascoPepperSauce |
| pizza:CajunSpiceTopping |
| pizza:HotSpicedBeefTopping |
+------------------------------+
+------------------------------+------------+
| s | type |
+------------------------------+------------+
| pizza:HotGreenPepperTopping | owl:Class |
| pizza:JalapenoPepperTopping | owl:Class |
| pizza:TobascoPepperSauce | owl:Class |
| pizza:CajunSpiceTopping | owl:Class |
| pizza:HotSpicedBeefTopping | owl:Class |
+------------------------------+------------+
我认为您只需选择Pizza Topping的所有子类,那么您的查询应该可以正常工作:
SELECT ?targetPizza
WHERE {
?targetPizza rdfs:subClassOf* pizza:PizzaTopping .
?targetPizza rdfs:subClassOf ?restriction .
?restriction owl:onProperty pizza:hasSpiciness .
?restriction owl:someValuesFrom pizza:Hot .
}为什么选择
?targetPizza
而不是?topping
变量?我认为变量的选择没有多大区别。难道不应该退回所有有热馅的比萨饼吗?但即使我把它改为topping,它仍然是一个空结果。“变量的选择没有什么区别”?选择未在查询中绑定的变量?targetPizza
。为什么你认为这无关紧要?之前我试着用蔬菜浇头替换比萨浇头,我用淡的而不是热的,这样做很有效。但我不知道它是否适用于所有情况。请看下面我的答案,它解释了为什么它不适用于辣味配料-原因是,比萨饼本体数据是异构建模,即使是配料。谢谢您,先生,非常感谢您的回答。