访问sparql中超类对象的属性

时间:2014-04-14 20:31:16

标签: inheritance sparql dbpedia

我正在尝试为我找到的对象获取超类的属性。

我有this query找到的大学列表:

SELECT * WHERE {
    ?University a dbpedia-owl:University.
    ?University dbpedia-owl:campus ?campus.
}
ORDER BY ?University LIMIT 10

我知道大学是这里教育机构的子类:

University包含属性campus,这很有趣,但EducationalInstitution包含我真正想要的属性locationCity

虽然我可以获取直接属于campus属性的属性University,但当我尝试获取属于{{1}的父类的属性locationCity时我得到no results

EducationalInstitution

返回父类属性的正确语法是什么?

或者我的方法完全不正确,我应该通过搜索SELECT * WHERE { ?University a dbpedia-owl:University. ?University dbpedia-owl:locationCity ?loc } ORDER BY ?University LIMIT 10 哪里有属性EducationalInstitutions来开始我的查询?

我也尝试过后者,但没有找到运气:

University

但是,搜索属于大学的其他字段,而不仅仅是在EducationalInstitution,this does work

SELECT * WHERE {
   ?EducationalInstitution a dbpedia-owl:EducationalInstitution;
                           a dbpedia-owl:University.
   ?EducationalInstitution dbpedia-owl:locationCity ?City.
   }
ORDER BY ?University LIMIT 10

2 个答案:

答案 0 :(得分:4)

OWL本体(我们正在使用的)不是面向对象的编程语言。属性不属于类。当我们说属性P的域是D类时,这意味着当我们在属性上看到三元组时,例如XPY,我们可以推断 X是D.这就是它的全部手段。当the mapping page for University说locationCity是大学的一个属性时,我认为这意味着locationCity的域是大学的超类,所以如果大学是一个超级类别有一个locationCity。我的基础是简单描述查询describe dbpedia-owl:locationCity的结果,其中these results(请注意,locationCity的域名是Organization,该组织是University的超类):

@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix dbpedia-owl:    <http://dbpedia.org/ontology/> .
@prefix owl:    <http://www.w3.org/2002/07/owl#> .
@prefix rdfs:   <http://www.w3.org/2000/01/rdf-schema#> .

dbpedia-owl:locationCity
    rdf:type    owl:ObjectProperty ;
    rdfs:domain dbpedia-owl:Organisation ;
    rdfs:range  dbpedia-owl:City ;
    rdfs:label  "locatie stad"@nl , "ville"@fr , "location city"@en ;
    rdfs:comment    "City the thing is located."@en .

通常,查看数据中实际存在的内容并将查询基于该数据是有用的。例如,您可能会查看为Rensselaer Polytechnic Institute定义的数据,并注意,例如,属性 dbpedia-owl:city它的值为dbpedia:Troy,_New_York。如果您要选择类型为dbpedia-owl:University的内容(即dbpedia-owl:University作为rdf:type属性的 dbpedia-owl:city属性的值,你只需要它:

select ?university ?city where {
  ?university rdf:type dbpedia-owl:University .
  ?university dbpedia-owl:city ?city .
}

SPARQL results

在SPARQL中,您可以使用a作为rdf:type的缩写,当您有多个具有相同主题的三元组时,可以将它们与;语法结合使用,这样我们就可以了可以使查询更好看,如下所示:

select ?university ?city where {
  ?university rdf:type dbpedia-owl:University ;
              dbpedia-owl:city ?city .
}

SPARQL results

请注意,我在这里使用dbpedia-owl:属性。这些来自DBpedia本体,它比原始信息框数据(dbpprop:属性)具有更清晰的数据。我已经在this answerWhy there is differences in the number of links connected to the same property?中讨论了这个问题。

基于数据查询实际上非常重要。正如您所看到的那样,映射wiki提到了locationCity属性,它实际上并没有在数据中的任何大学中使用:

select ?university ?city where {
  ?university a dbpedia-owl:University ;
              dbpedia-owl:locationCity ?city .
}

SPARQL results (no results)

您甚至可以使用SPARQL查找用于将大学与城市联系起来的dbpedia-owl:属性:

select distinct ?p where {
  ?university a dbpedia-owl:University ;
              ?p [ a dbpedia-owl:City ] .
  filter strstarts(str(?p),str(dbpedia-owl:))
}

SPARQL results

p
-------------------------------------------------
http://dbpedia.org/ontology/city
http://dbpedia.org/ontology/campus
http://dbpedia.org/ontology/state
http://dbpedia.org/ontology/affiliation
http://dbpedia.org/ontology/province
http://dbpedia.org/ontology/country
http://dbpedia.org/ontology/location
http://dbpedia.org/ontology/wikiPageRedirects
http://dbpedia.org/ontology/wikiPageDisambiguates
http://dbpedia.org/ontology/president
http://dbpedia.org/ontology/type

目前还不清楚为什么会使用其中的一些(例如,总统或类型),但我可以看到一些可能会被使用的地方,如果可能不正确(例如,州或省)。

答案 1 :(得分:-2)

答案似乎是属性是位置,而不是locationCity。