如何查询两个不同的本体?

时间:2016-12-27 06:44:56

标签: sparql jena ontology

我有两种不同的本体:一种用于电影类型,另一种用于电影认证。我想在SPARQL中编写一个查询,可以找到那些具有认证x(比如PG-13)和类型y(比如action)的电影。两个本体都不同,我将它们上传到Apache Jena。

这些是我的本体论:

PREFIX o2: <http://www.semanticweb.org/administrator/ontologies/2016/11/genre_ontology#>
PREFIX o1: <http://www.semanticweb.org/administrator/ontologies/2016/11/certification_ontology#>

我想找到具有流派和认证的电影。我的查询是

SELECT ?x ?z
WHERE {
    ?x o1:hasCertificationOf ?y.
   ?z o2:hasGenre ?a.

  FILTER regex(str(?y),"R_") FILTER regex (str(?a),"Adventure")
} 

此处RRestricted认证

查询结果包含xz中的电影,但我只想要xz中的公共电影?

1 个答案:

答案 0 :(得分:1)

您应该始终尝试提供一个最小的示例以及您的问题。

您可能需要查看Multiple triple patterns

?s cert:level cert:PG13 .  
?s genres:genre genres:Action . 

如您所见,我们使用两个名称空间(对于2个本体)。您可以像这样(在SPARQL查询之前)引用它们:

PREFIX cert: <http://example.com/cert/1.0/>
PREFIX genres: <http://example.com/genres/1.0/>

最终查询可能如下所示:

PREFIX cert: <http://example.com/cert/1.0/>
PREFIX genres: <http://example.com/genres/1.0/>

SELECT ?s ?p ?o
WHERE {
    ?s ?p ?o .
    ?s cert:level cert:PG13 .
    ?s genres:genre genres:Action .
}

NB :为了在单个查询中应用多个图形模式,您必须在这些模式中使用相同的变量(最后2个图形模式中的?s)。

我与作者没有任何关系,但我认为您可以从https://www.futurelearn.com/courses/linked-data中受益。