【问题标题】:SPARQL queries failSPARQL 查询失败
【发布时间】:2014-09-06 12:13:57
【问题描述】:

这个ontology 有这些classes 和这个数量的triples。为了完整起见,这里是triples

此查询按预期工作:

 PREFIX pizza: <http://www.ncl.ac.uk/pizza#>
 PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
 SELECT ?p
 FROM <http://homepages.cs.ncl.ac.uk/phillip.lord/scratch/pizza.rdf>
 WHERE {
  ?p rdfs:subClassOf pizza:PizzaTopping
 }

如图here

但是,此查询不会产生预期的结果:

 PREFIX pizza: <http://www.ncl.ac.uk/pizza#>
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
 PREFIX owl: <http://www.w3.org/2002/07/owl#>
 SELECT DISTINCT *
 FROM <http://homepages.cs.ncl.ac.uk/phillip.lord/scratch/pizza.rdf>
 WHERE { 
 ?Name ?Relation pizza:MushroomTopping .
 ?Relation owl:inverseOf pizza:isToppingOf .
 OPTIONAL { 
  ?Name2 ?Relation2 pizza:HamTopping .
  ?Relations2 owl:inverseOf pizza:isToppingOf . 
 }
 FILTER(?Name2 = ?PizzaName)
 }

简化版也失败了:

 PREFIX pizza: <http://www.ncl.ac.uk/pizza#>
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
 PREFIX owl: <http://www.w3.org/2002/07/owl#>
 SELECT *
 FROM <http://homepages.cs.ncl.ac.uk/phillip.lord/scratch/pizza.rdf>
 WHERE { 
 ?Name ?Relation pizza:NonVegetarianPizza .
 }

这些期望的查询可能有相同的错误:

 PREFIX pizza: <http://www.ncl.ac.uk/pizza#>
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
 SELECT *
 FROM <http://homepages.cs.ncl.ac.uk/phillip.lord/scratch/pizza.rdf>
 WHERE { ?p rdf:type pizza:Pizza;
            pizza:hasTopping ?t.
         ?t rdf:type pizza:TomatoTopping
       }

 PREFIX pizza: <http://www.ncl.ac.uk/pizza#>
 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 *
 FROM <http://homepages.cs.ncl.ac.uk/phillip.lord/scratch/pizza.rdf>
 WHERE
 {
  ?pizza rdfs:subClassof [
  owl:onProperty pizza:hasTopping;
  owl:someValuesFrom pizza:MushroomTopping ] .
 }

 PREFIX pizza: <http://www.ncl.ac.uk/pizza#>
 PREFIX owl:<http://www.w3.org/2002/07/owl#>
 PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
 SELECT *
 FROM <http://homepages.cs.ncl.ac.uk/phillip.lord/scratch/pizza.rdf>
 WHERE
 {
  ?pizza rdfs:subClassOf [
    owl:onProperty pizza:hasTopping;
    owl:someValuesFrom pizza:MozzarellaTopping ] .
  ?pizza rdfs:subClassof [
    owl:onProperty pizza:hasTopping;
    owl:someValuesFrom pizza:PeperonSausageTopping ] .
  ?pizza rdfs:subClassof [
    owl:onProperty pizza:hasTopping;
    owl:someValuesFrom pizza:TomatoTopping ] .
 }

我做错了什么?

【问题讨论】:

    标签: rdf sparql owl linked-data


    【解决方案1】:

    您的简化查询:

    PREFIX pizza: <http://www.ncl.ac.uk/pizza#>
     PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
     PREFIX owl: <http://www.w3.org/2002/07/owl#>
     SELECT *
     FROM <http://homepages.cs.ncl.ac.uk/phillip.lord/scratch/pizza.rdf>
     WHERE { 
     ?Name ?Relation pizza:NonVegetarianPizza .
     }
    

    不应该返回任何东西。在您链接到的数据中,pizza:NonVegetarianPizza 仅作为主题出现,从不作为对象出现。你有什么理由期望这个查询返回一些结果吗?

    【讨论】:

    • 我的目标是确定与 NonVegetarianPizza 相关的浇头。其他查询也有类似的目标。我应该如何重写以产生这些结果?
    • 您首先需要明确您所说的“相关”是什么意思。
    • 我会再看一遍并回复你:rhizomik.net/redefer-services/render?rdf=http://…
    • 您认为有解决方案是什么意思?带有 SweetPepperTopping 和 ParmesanTopping 的披萨不一定是 NonVegetarianPizza 或非 NonVegetarianPizza;这将取决于比萨饼上还有什么。要获得有关这些事情的结果,无论如何您都需要进行 OWL 推理。您可以使用 SPARQL 查询进行一些有限种类的 OWL 推理,但不能进行任意 OWL 推理。
    • 请注意(从密切的原因):“寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括期望的行为,一个特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。我认为您需要确定您期望获得的一些具体结果。只有这样,我们才能帮助解释您为什么没有收到它们以及您可以做些什么来获得它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2014-05-30
    相关资源
    最近更新 更多