【问题标题】:SPARQL query on Pizza ontologyPizza本体上的SPARQL查询
【发布时间】:2017-07-17 21:00:32
【问题描述】:

我是 SPARQL 的初学者。我有pizza ontology,我正在尝试编写一个列出所有热浇头的查询。到目前为止,我想出了这个:

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 .

}

但是,它返回一个空结果。为什么我的查询有误?

提前感谢您的帮助。

【问题讨论】:

  • 你为什么选择?targetPizza而不是?topping变量?
  • 我认为变量的选择没有太大的区别。并且不应该退回所有带有热浇头的比萨饼吗?但即使我将其更改为顶部,它仍然是一个空结果。
  • “变量的选择没有影响”?您选择未在查询中绑定的变量 ?targetPizza。为什么你认为这无关紧要?
  • 以前我尝试将 PizzaTopping 与 VegatableTopping 交换,然后我将 Mild 而不是 Hot,并且查询有效。但我不知道它是否适用于所有情况。
  • 请看下面我的回答,它解释了为什么它不适用于热辣浇头 - 原因是,即使是浇头,Pizza 本体数据也是异构建模。

标签: sparql


【解决方案1】:

简短回答:没有任何内容符合您的查询。您可以通过运行查看与您的查询结构匹配但没有给定辣味值的所有内容

PREFIX pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT * WHERE {
  ?topping rdfs:subClassOf pizza:PizzaTopping .
  ?topping rdfs:subClassOf ?restriction .
  ?restriction rdf:type owl:Restriction .
  ?restriction ?p ?o .
}

结果:

+--------------------+---------------------+---------------------+
|      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         |
+--------------------+---------------------+---------------------+

那么这里的问题是什么?下一步将是反过来,即我们检查与辣味相关的所有内容:

PREFIX pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT DISTINCT ?s WHERE {
  ?s rdfs:subClassOf ?restriction .
  ?restriction owl:onProperty pizza:hasSpiciness .
  ?restriction owl:someValuesFrom pizza:Hot .
}

结果:

+------------------------------+
|              s               |
+------------------------------+
|  pizza:HotGreenPepperTopping |
|  pizza:JalapenoPepperTopping |
|  pizza:TobascoPepperSauce    |
|  pizza:CajunSpiceTopping     |
|  pizza:HotSpicedBeefTopping  |
+------------------------------+

那么,这怎么可能呢?好吧,简短的回答是,没有一个辣浇头被定义为 pizza:PizzaTopping 类的实例,您可以使用额外的可选三重模式来验证这一点

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 owl: <http://www.w3.org/2002/07/owl#>

SELECT distinct ?s ?type WHERE {
  ?s rdfs:subClassOf ?restriction .
  ?restriction owl:onProperty pizza:hasSpiciness .
  ?restriction owl:someValuesFrom pizza:Hot .
  OPTIONAL {?s rdf:type ?type }
}

结果:

+------------------------------+------------+
|              s               |    type    |
+------------------------------+------------+
|  pizza:HotGreenPepperTopping |  owl:Class |
|  pizza:JalapenoPepperTopping |  owl:Class |
|  pizza:TobascoPepperSauce    |  owl:Class |
|  pizza:CajunSpiceTopping     |  owl:Class |
|  pizza:HotSpicedBeefTopping  |  owl:Class |
+------------------------------+------------+

【讨论】:

  • 谢谢先生,非常感谢您的回答。
【解决方案2】:

我认为您只需要选择 Pizza Topping 的所有子类,然后您的查询应该可以正常工作:

SELECT ?targetPizza
WHERE {
?targetPizza rdfs:subClassOf* pizza:PizzaTopping .
?targetPizza rdfs:subClassOf ?restriction .
?restriction owl:onProperty pizza:hasSpiciness .
?restriction owl:someValuesFrom pizza:Hot .

}

【讨论】:

    【解决方案3】:
    SELECT ?targetPizza
    WHERE {
    ?targetPizza rdfs:subClassOf pizza:PizzaTopping .
    ?targetPizza rdfs:subClassOf ?restriction .
    ?restriction owl:onProperty pizza:hasSpiciness .
    ?restriction owl:someValuesFrom pizza:Hot .
    
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多