您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用Python rdflib:如何在sparql查询中包含文字?

5b51 2022/1/14 8:20:44 python 字数 4655 阅读 478 来源 www.jb51.cc/python

我可以在查询中包含URI和变量,但我不能在我的查询中包含文字.发现,我有一些成功读取RDF文件的代码所有带有skos的RDF三元组:prefLabels,计算它们,然后从一组关键字中识别出几个特定的??:import rdflib.plugins.sparql as sparql import rdflib import rdflib.graph as g

概述

我可以在查询中包含URI和变量,但我不能
在我的查询中包含文字.

发现,我有一些成功读取RDF文件代码
所有带有skos的RDF三元组:prefLabels,计算它们,然后
从一组关键字中识别出几个特定的??:

import rdflib.plugins.sparql as sparql
import rdflib
import rdflib.graph as g

graph = g.Graph()
# Read the RDF file
graph.parse(
   'h:\......SKOSTaxonomy.rdf',format='xml')

# Build and execute the query
q = sparql.prepareQuery('SELECT ?s ?p ?o WHERE { ?s ?p ?o .}')
p = rdflib.URIRef("http://www.w3.org/2004/02/skos/core#prefLabel")
qres = graph.query(q,initBindings = {'p' : p})

print len(qres)

# Look for keywords among the results
keywords = set([u'Jackknifing','Technology-mapping','Something random'])

for (subj,pred,obj) in qres:
    if obj.value in keywords:
        print obj.value

正如所料,此代码打印:

2299
Jackknifing
Technology-mapping

因为Jackknifing和技术映射是文件中的prefLabels.

我真正想要做的是构造和执行Sparql查询
依次查找每个关键字.但这就是我脱离困境的地方,
因为我无法将字符串放入查询中.我试过这个,因为
例:

o = rdflib.Literal(u'Jackknifing')
qres = graph.query(q,initBindings = {'p' : p,'o' : o})

但是qres是空的.我也试过明确地将文字放入
查询,例如

q = sparql.prepareQuery('SELECT ?s ?p WHERE { ?s ?p "Technology-mapping" .}')
qres = graph.query(q,initBindings = {'p' : p})

但这也会返回一个空结果.

文字是如何包含在查询中的?

RDFLib docs on Literals显示了使用数据类型创建文字方法,但没有使用语言标记创建文字的示例.但是,文档也附有源代码
the signature for Literal‘s __new__是:

static __new__(lexical_or_value,lang=None,datatype=None,normalize=None)

由于数据中的文字具有语言标记(‘en’),因此您应该将文字创建为

o = rdflib.Literal(u'Jackkifing',lang='en')

以便语言标记文字相关联.

总结

以上是编程之家为你收集整理的使用Python rdflib:如何在sparql查询中包含文字?全部内容,希望文章能够帮你解决使用Python rdflib:如何在sparql查询中包含文字?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶