问题描述
您可以在链接的MDB SPARQL Explorer 中运行以下查询. ?imdbID
(最后一个变量)的值包含来自三个可能域(freebase.com,rottentomatoes.com或imdb.com)之一的IRI.我想知道如何应用filter
以便仅保留来自imdb.com域的行.
You can run the query below at the Linked MDB SPARQL Explorer. The values of ?imdbID
(the last variable) contains IRIs from one of three possible domains (freebase.com, rottentomatoes.com or imdb.com). I would like to know how to apply a filter
such that only the rows from the imdb.com domain are retained.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/terms/>
PREFIX movie: <http://data.linkedmdb.org/resource/movie/>
SELECT ?title ?date ?director ?imdbID
WHERE {
?film foaf:page ?imdbID.
?film dc:title ?title.
?film dc:date ?date .
?film movie:director ?directorURI.
?directorURI rdfs:label ?director .
}
推荐答案
不确定为什么@JoshuaTaylor并没有将其发布为答案,而是在查询中添加@JoshuaTaylor的过滤器:
Not sure why this wasn't posted by @JoshuaTaylor as an answer but adding @JoshuaTaylor's filter to your query is what you are requesting:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/terms/>
PREFIX movie: <http://data.linkedmdb.org/resource/movie/>
SELECT ?title ?date ?director ?imdbID
WHERE {
?film foaf:page ?imdbID.
?film dc:title ?title.
?film dc:date ?date .
?film movie:director ?directorURI.
?directorURI rdfs:label ?director .
FILTER(regex(str(?imdbID), "www.imdb.com" ) )
}
哪个返回:
<?xml version="1.0"?>
<sparql
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xs="http://www.w3.org/2001/XMLSchema#"
xmlns="http://www.w3.org/2005/sparql-results#" >
<head>
<variable name="title"/>
<variable name="date"/>
<variable name="director"/>
<variable name="imdbID"/>
</head>
<results>
<result>
<binding name="title">
<literal>Buffy the Vampire Slayer</literal>
</binding>
<binding name="date">
<literal>1992-07-31</literal>
</binding>
<binding name="director">
<literal>Fran Rubel Kuzui (Director)</literal>
</binding>
<binding name="imdbID">
<uri>http://www.imdb.com/title/tt0103893</uri>
</binding>
</result>
<result>
<binding name="title">
<literal>Batman</literal>
</binding>
<binding name="date">
<literal>1989-06-23</literal>
</binding>
<binding name="director">
<literal>Tim Burton (Director)</literal>
</binding>
<binding name="imdbID">
<uri>http://www.imdb.com/title/tt0096895</uri>
</binding>
</result>
<result>
<binding name="title">
<literal>Batman</literal>
</binding>
<binding name="date">
<literal>1966-07-30</literal>
</binding>
<binding name="director">
<literal>Leslie H. Martinson (Director)</literal>
</binding>
<binding name="imdbID">
<uri>http://www.imdb.com/title/tt0060153</uri>
</binding>
</result>
<result>
<binding name="title">
<literal>Batman & Robin</literal>
</binding>
<binding name="date">
<literal>1997-06-20</literal>
</binding>
<binding name="director">
<literal>Joel Schumacher (Director)</literal>
</binding>
<binding name="imdbID">
<uri>http://www.imdb.com/title/tt0118688</uri>
</binding>
</result>
<result>
<binding name="title">
<literal>Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb</literal>
</binding>
如果要使其不区分大小写,可以使用i
标志,如下所示:
If you want to make it case insensitive you can use the i
flag like so:
FILTER(regex(str(?imdbID), "www.IMDB.com", "i" )
如果您想了解有关过滤器的更多信息,请查看 3.1字符串的值.
If you want to see some more information on filter have a look at 3.1 Restricting the Values of Strings.
这篇关于根据SParQL中的URI进行过滤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!