【问题标题】:How to filter a SPARQL query by a property's class如何按属性的类过滤 SPARQL 查询
【发布时间】:2015-04-15 18:45:00
【问题描述】:

是否可以通过 SPARQL 查询的某个属性的类来查询过滤器? 我有一个描述电影的本体,我希望展示所有在欧洲拍摄的电影。

当前的 SPARQL 查询如下:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX cinema: <http://example.com/ontologies/cinemachain#>
SELECT ?film ?location
    WHERE { 
        ?film rdf:type cinema:Film .
        ?film cinema:wasFilmedAt ?location .
        FILTER(?location rdfs:subClassOf cinema:Europe) .

}

where 子句的前两行给出了所有电影及其位置的列表。如何使用过滤器向我返回位置是cinema:Europe 子类的结果?

【问题讨论】:

  • “地点是电影院的子类:欧洲” 地点似乎不太可能是某物的子类。毕竟,“homeMovie wasFilmedAt myHouse”可能是真的,但 myHouse 将是 Location 的 instance,而不是 Location 的子类。您的意思是您想要类型是欧洲子类的位置吗? (我仍然不确定这意味着什么,因为欧洲似乎是一个实例,而不是一个类......)
  • 在这个特定的本体中,cinema:Europe 是cinema:Location 的子类。这样我们就可以轻松地按大陆识别特定位置。对于这个过滤器,我想找到所有位置是欧洲成员的电影。你知道我如何使用 SPARQL 做到这一点吗?

标签: sparql owl protege rdfs protege4


【解决方案1】:

在这个特定的本体中,cinema:Europe 是cinema:Location 的子类。这样我们就可以轻松识别特定的 按大洲划分的位置。对于这个过滤器,我想找到所有电影 有一个位置是欧洲的成员。你知道我该怎么做吗 这使用 SPARQL?

好的,命名约定有点不寻常,但我们可以使用它。您只需要要求 ?location 的类型是 Europe 的子类(包括 Europe 本身):

select ?film ?location where {
  ?film rdf:type cinema:Film ;
        cinema:wasFilmedAt ?location .
  ?location rdf:type/rdfs:subClassOf* cinema:Europe .
}

【讨论】:

  • 谢谢,太好了!如您所想,我是 SPARQL 的新手
猜你喜欢
  • 2022-11-22
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多