我正在使用Jena ARQ编写针对从Jena TDB读取的大型本体的SPARQL查询,以便找到与基于rdfs标签的概念相关联的类型:
SELECT DISTINCT ?type WHERE {
?x <http://www.w3.org/2000/01/rdf-schema#label> "aspirin" .
?x <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type .
}
Run Code Online (Sandbox Code Playgroud)
这很好用,实际上非常快(<1秒).不幸的是,对于某些术语,我需要以不区分大小写的方式执行此查询.例如,因为标签"Tylenol"
位于本体中,而不是"tylenol"
,所以以下查询为空:
SELECT DISTINCT ?type WHERE {
?x <http://www.w3.org/2000/01/rdf-schema#label> "tylenol" .
?x <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type .
}
Run Code Online (Sandbox Code Playgroud)
我可以使用FILTER语法编写此查询的不区分大小写的版本,如下所示:
SELECT DISTINCT ?type WHERE {
?x <http://www.w3.org/2000/01/rdf-schema#label> ?term .
?x <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type .
FILTER ( regex (str(?term), "tylenol", "i") )
}
Run Code Online (Sandbox Code Playgroud)
但现在查询需要一分钟才能完成!有没有办法以更有效的方式编写不区分大小写的查询?
我正在查询推文的数据集:
SELECT * WHERE {
?tweet smo:tweeted_at ?date ;
smo:has_hashtag ?hashtag ;
smo:tweeted_by ?account ;
smo:english_tweet true .
FILTER ( ?date >= "20130722"^^xsd:date && ?date < "20130723"^^xsd:date )
}
Run Code Online (Sandbox Code Playgroud)
如果推文有多个主题标签,则每个主题标签的结果集中有一行.我有什么方法可以将主题标签聚合成一个数组吗?
什么';' WHERE子句中的运算符在SPARQL中意味着什么?
例如:
SELECT ?x ?y
WHERE { ?z foaf:name ?x ; :surname ?y }
Run Code Online (Sandbox Code Playgroud)
什么; 算子意味着什么?就像一个逻辑,这意味着这一部分
?z foaf:
走了之前:再次姓?
维基百科的地理标记功能一个不少 的 其 文章.(请查看页面右上角.)
是否有任何API可以查询指定半径范围内的所有地理标记页面?
好的,所以根据丢失理论的答案,我试过这个(在DBpedia查询资源管理器上):
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT ?subject ?label ?lat ?long WHERE {
?subject geo:lat ?lat.
?subject geo:long ?long.
?subject rdfs:label ?label.
FILTER(xsd:float(?lat) - 57.03185 <= 0.05 && 57.03185 - xsd:float(?lat) <= 0.05
&& xsd:float(?long) - 9.94513 <= 0.05 && 9.94513 - xsd:float(?long) <= 0.05
&& lang(?label) = "en"
).
} LIMIT 20
Run Code Online (Sandbox Code Playgroud)
这非常接近我想要的,除了它在点周围的(局部)方块内返回结果而不是圆.另外我想如果结果根据距离点的距离进行排序.(如果可能的话.)
我试图将欧氏距离确定为真实距离的近似值,但我在SPARQL中对数字进行平方时遇到了麻烦.(问题在这里打开.)当我得到有用的东西时,我会更新问题,但与此同时,我将欣赏有关替代方法的任何建议.
最后的更新.我放弃了通过DBpedia使用SPARQL.我编写了一个简单的解析器,它可以获取Wikipedia文章文本夜间数据库转储并解析所有文章以获取地理编码.它工作得很好,它允许我存储有关地理标记文章的信息,但我希望如此.
这可能是我将继续使用的解决方案,如果我开始创建一个很好的接口,我可能会考虑允许公共API访问和/或将源发布到解析器.
我正在尝试使用SPARQL查询来检索有关DBpedia资源(Person)的信息.我想通过参数化资源URI使用相同的查询来检索有关任何Person的数据.由于特定资源可能不存在某些属性,因此我正在使用OPTIONAL语句.这是我的查询:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT ?label ?abstract ?placeOfBirth
?birthPlace ?birthDate ?deathDate ?page ?thumbnail
WHERE {
<http://dbpedia.org/resource/Neil_Simon> rdfs:label ?label ;
dbo:abstract ?abstract ;
foaf:page ?page .
OPTIONAL {
<http://dbpedia.org/resource/Neil_Simon> dbpprop:placeOfBirth ?placeOfBirth ;
dbpprop:birthPlace ?birthPlace ;
dbo:birthDate ?birthDate ;
dbo:deathdate ?deathDate ;
dbo:thumbnail ?thumbnail .
}
FILTER (LANG(?label) = 'en')
FILTER (LANG(?abstract) = 'en')
}
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
我在OPTIONAL中留下了除标签,摘要和页面之外的所有内容,因为如果我对另一个人使用相同的查询,则可能没有这些属性.问题是,结果中没有显示这些可选属性.在Neil Simon的案例中,您可以看到birthDate,birthPlace和缩略图的值:http://dbpedia.org/resource/Neil_Simon .但是,当我运行查询时,这些值不会显示:DBpedia SPARQL查询.我做错了什么,如何选择性地检索这些属性?
在SPARQL中,我们可以通过gollowing语法按行对行进行分组:
GROUP BY ?colName
Run Code Online (Sandbox Code Playgroud)
我们可以分组超过1列,例如:
GROUP BY (?colName1 + ?colName2 + ?colName3)
Run Code Online (Sandbox Code Playgroud)
假设一个查询如下:
Select ?a ?b ?c (MIN(?y) AS ?d)
Where {
....
}
GROUP BY (?a + ?b + ?c)
Run Code Online (Sandbox Code Playgroud)
但是这个查询不起作用.
似乎我没有grok SPARQL DESCRIBE查询.我需要检索匹配条件的资源的完整图表.在我尝试过的一个SPARQL端点上(NorwegianRådataNå,http://data.bibsys.no/data/query_authority.html )这个工作正常:
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
DESCRIBE ?person WHERE {
?person rdf:type foaf:Person .
FILTER EXISTS { ?person owl:sameAs ?sameAs }
}
LIMIT 100
Run Code Online (Sandbox Code Playgroud)
我得到一个具有owl:personAs三元组的Person资源的结果.
在其他SPARQL端点上,Onki Light(http://sparql.onki.fi/sparql.tpl)和DBPedia(http://dbpedia.org/sparql)类似的查询
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
DESCRIBE ?x WHERE {
?x rdf:type skos:Concept .
FILTER EXISTS { ?x skos:prefLabel ?prefLabel }
}
LIMIT 100
Run Code Online (Sandbox Code Playgroud)
返回大量资源,既没有rdf:Type = skos:Concept也没有skos:prefLabel,所以我显然没有正确地进行查询.应该如何陈述这种查询以产生我需要的结果?
在下面的SPARQL查询中,我不确定如何使用if
两个字符串中的一个绑定到变量?result
.我听说有"范围"和"超出范围"的概念,但我并没有真正看到差异.我也尝试将该if
条款放在select
行中,但它也没有用.如何根据条件修复此查询以绑定?result
到两个字符串之一?
SELECT ?result
WHERE{
?chain rdf:type rdfs:Property .
?chain rdfs:domain <http://www.vs.cs.hs-rm.de/ontostor/SVC#MDiskGroup> .
?chain rdfs:range <http://www.vs.cs.hs-rm.de/ontostor/SVC#IOgroup> .
?this ?chain ?arg .
?arg io:id ?var .
IF(?var = "0"^^xsd:integer,
BIND(" *"^^xsd:string AS ?result),
BIND(""^^xsd:string AS ?result)) .
}
Run Code Online (Sandbox Code Playgroud) 我想在其主题中提取一个包含单词"alice"的三元组.我使用的查询是:
SELECT ?s ?p ?o WHERE { ?s ?p ?o .FILTER regex(?s, \"alice\") .}
Run Code Online (Sandbox Code Playgroud)
尽管有三重满足这个约束,但这并没有给我任何结果.
另一方面,当我使用相同的查询来提取在其对象中包含单词brillant的三元组时.它仅返回2个可能匹配中的一个.
使用的查询是:
SELECT ?s ?p ?o WHERE { ?s ?p ?o .FILTER regex(?o, \"brillant\") .}
Run Code Online (Sandbox Code Playgroud)
请让我知道我哪里出错了,这种行为的原因是什么.
sparql ×10
rdf ×3
api ×1
arq ×1
dbpedia ×1
geolocation ×1
geotagging ×1
group-by ×1
if-statement ×1
jena ×1
regex ×1
tdb ×1
wikipedia ×1