首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rdflib和sparql查询过滤n3/turtle文件

使用rdflib和sparql查询过滤n3/turtle文件
EN

Stack Overflow用户
提问于 2012-04-18 23:44:43
回答 1查看 759关注 0票数 3

我正在尝试使用pyrdf和sparql过滤一个海龟文件。但是我注意到sparql查询会丢失有关元素上下文的信息。然后,我想将查询结果重新打印为一个海龟文件,是否可以在不手动扫描元素的所有子字段的情况下执行此操作?我们有如下格式的位置数据:

代码语言:javascript
复制
:pt0001
     vcard:category "Poste e Telegrafi"
    ; vcard:fn "Ufficio Bologna 1"
    ; vcard:extended-address "Via Cairoli 9, Bologna BO, Italy"
    ; vcard:latitude "44.504192"
    ; vcard:longitude "11.338661"
    ; vcard:tel "051 243425"
    ; vcard:fax "051 244459"
    ; cs:opening "Mon, Tue, Wed, Thu, Fri: 0800-1330. Sat: 0800-1230."
    ; cs:closing "01-01, 01-06, P, LA, 04-25, 05-01, 06-02, 08-15, 11-01, 12-08, 12-25, 12-26: .".

例如,我们只想要有名称(fn)的位置。感谢你找到的任何提示...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-19 02:50:21

要返回所有有名称的位置,可以做一些简单的操作,例如:

代码语言:javascript
复制
SELECT DISTINCT ?location
WHERE { 
   ?location vcard:fn [].
}

这将返回标识符(在您的示例中为:pt0001),当然,查询也可以调整为返回所有属性值。

(__编辑我根据你的澄清添加了额外的例子,我想这就是你想要的)

如下所示:

代码语言:javascript
复制
SELECT ?location ?prop ?value
WHERE { 
   ?location vcard:fn [];
             ?prop ?value .
} ORDER BY ?location

此查询的结果将是以下形式的结果表:

代码语言:javascript
复制
?location    ?prop           ?value
:pt0001      vcard:category  "Poste e Telegrafi"
:pt0001      vcard:name      "Ufficio Bologna 1"
:pt0001      vcard:tel       "051 243425"
(etc...)   

或者,作为另一种选择,您可以显式地制定查询以获取每个位置的特定属性值:

代码语言:javascript
复制
SELECT ?location ?name ?cat ?tel
WHERE { 
   ?location vcard:fn ?name ;
             vcard:category ?cat ;
             vcard:tel ?tel .
} ORDER BY ?location

它将返回表单的结果表:

代码语言:javascript
复制
?location ?name               ?cat                ?tel
:pt0001   "Ufficio Bologna 1" "Poste e Telegrafi" "051 243425"

选你所选。

SPARQL查询的诀窍是以三元组的形式思考。您的数据包含主语-谓语-宾语三元组,SPARQL查询在这些三元组上形成模式。

作为进一步的说明:我看到您正在考虑将查询结果重新打印为turtle。在这种情况下,构造查询可能就是您想要的。SELECT查询的结果(如上所示)是一个表结构,而构造查询的结果是一个RDF三元组的集合:

代码语言:javascript
复制
 CONSTRUCT { ?subject ?predicate ?object }
 WHERE { 
   ?subject ?predicate ?object ;
            vcard:fn [] 
 }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10213045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档