标签: sparql

SPARQL - 将结果资源限制为某些命名空间

是否有一种标准方法可以限制SPARQL查询的结果属于特定的命名空间.

sparql

14
推荐指数
1
解决办法
4682
查看次数

如何编写SPARQL查询,有效地匹配字符串文字而忽略大小写

我正在使用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)

但现在查询需要一分钟才能完成!有没有办法以更有效的方式编写不区分大小写的查询?

rdf sparql jena arq tdb

14
推荐指数
2
解决办法
1万
查看次数

聚合SPARQL查询的结果

我正在查询推文的数据集:

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)

如果推文有多个主题标签,则每个主题标签的结果集中有一行.我有什么方法可以将主题标签聚合成一个数组吗?

sparql

14
推荐指数
1
解决办法
1万
查看次数

SPARQL运算符';'的含义

什么';' WHERE子句中的运算符在SPARQL中意味着什么?

例如:

SELECT ?x ?y
WHERE { ?z foaf:name ?x ; :surname ?y }
Run Code Online (Sandbox Code Playgroud)

什么; 算子意味着什么?就像一个逻辑,这意味着这一部分

?z foaf:

走了之前:再次姓?

sparql

14
推荐指数
1
解决办法
3714
查看次数

反向维基百科地理标记查找

维基百科的地理标记功能一个不少 文章.(请查看页面右上角.)

是否有任何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)

这非常接近我想要的,除了它在点周围的(局部)方块内返回结果而不是圆.另外我想如果结果根据距离点的距离进行排序.(如果可能的话.)

更新2

我试图将欧氏距离确定为真实距离的近似值,但我在SPARQL中对数字进行平方时遇到了麻烦.(问题在这里打开.)当我得到有用的东西时,我会更新问题,但与此同时,我将欣赏有关替代方法的任何建议.

更新3

最后的更新.我放弃了通过DBpedia使用SPARQL.我编写了一个简单的解析器,它可以获取Wikipedia文章文本夜间数据库转储并解析所有文章以获取地理编码.它工作得很好,它允许我存储有关地理标记文章的信息,但我希望如此.

这可能是我将继续使用的解决方案,如果我开始创建一个很好的接口,我可能会考虑允许公共API访问和/或将源发布到解析器.

api wikipedia geotagging geolocation sparql

13
推荐指数
1
解决办法
2713
查看次数

如何正确使用SPARQL OPTIONAL来检索可能存在的资源的属性?

我正在尝试使用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 dbpedia

13
推荐指数
1
解决办法
9085
查看次数

Sparql:如何GROUP BY多列

在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)

但是这个查询不起作用.

group-by sparql

13
推荐指数
3
解决办法
5395
查看次数

SPARQL DESCRIBE查询

似乎我没有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,所以我显然没有正确地进行查询.应该如何陈述这种查询以产生我需要的结果?

rdf sparql

13
推荐指数
1
解决办法
9807
查看次数

使用IF将变量绑定到两个值之一?

在下面的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)

rdf if-statement sparql

13
推荐指数
1
解决办法
1万
查看次数

使用SPARQL提取包含特定子字符串的三元组

我想在其主题中提取一个包含单词"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)

请让我知道我哪里出错了,这种行为的原因是什么.

regex sparql

13
推荐指数
1
解决办法
2万
查看次数

标签 统计

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