我有两种不同的本体:一种用于电影类型,另一种用于电影认证。我想在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")
}
此处R
是Restricted
认证
查询结果包含x
和z
中的电影,但我只想要x
和z
中的公共电影?
答案 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中受益。