我目前正在为处理传感器数据的项目创建本体。 我在Python中使用RDFLib成功创建了一个RDF图。然后使用Jena TDB数据库存储图形。现在我想使用SPARQL查询数据库,但老实说,我不知道从哪里开始。
例如,如果我已经使用已知的词汇表可以说朋友的朋友(SELECT ?name
WHERE {
?person foaf:name ?name .
}
)那么我将简单地执行这样的查询,我会得到我需要的东西:
SELECT * {?dev ?lon ?lat}
但是,由于我使用不同的本体(传感器本体)创建我的RDF,我的目标是执行此查询并获取所有相关数据:
dev
其中lon
是设备名称,lat
是设备所在的经度,db = MySQLdb.connect(host="******", user="********", passwd="********", db="******")
cursor = db.cursor()
cursor.execute("SELECT * FROM bm_player_bans ORDER BY id DESC LIMIT 0, 1")
results = cursor.fetchall()
for row in results:
mostRecentBanUUID = row[1]
print results
print mostRecentBanUUID
是纬度。所有这些数据都在图表中提供,但尚未定义为查询。
总结一下,我试图找出类的前缀名称,等等,例如类设备可以用(dev,device ...)表示
可以在RDFLib中指定标签作为解决方案,还是必须为查询开发词汇表?
答案 0 :(得分:1)
RDF三元组旨在表示具有主语,对象,谓词结构的数据。例如,以下是RDF三元组:
<http://example.org/FalaG> foaf:name "FalaG"^^xsd:string
...其中foaf:name
是一个带前缀的qname,扩展为<http://xmlns.com/foaf/0.1/name>
。
SPARQL与上面的三元组基本相同(这是Turtle文本序列化),除了你可以引入前缀为?
的变量。然后,SPARQL将在数据中找到匹配项并绑定每个匹配项的变量。
除了作为变量名之外,变量的名称没有固有的含义。所以以下内容会找到上述三元组,其中包括:
SELECT ?p
WHERE {
?p foaf:name ?o
}
注意我有目的地使用无意义的变量名称来概述变量名称没有固有含义。
在查找URI方面,您可以使用SPARQL来发现在存储库中找到的值。在上一个查询的基础上,您可以使用以下内容找到FalaG
存储库中的任何其他信息:
SELECT ?person ?p ?o
WHERE {
?person foaf:name "FalaG"^^xsd:string .
?person ?p ?o
}
要发现其他属性的URI等,请使用以下命令:
SELECT ?s ?p ?o
WHERE {
?s ?p ?o
} LIMIT
LIMIT
在这里很重要,因为任何包含三个变量的三重模式都在请求所有三元组,这可能会超时或崩溃服务器。但是,通过设置限制,您可以找到数据的建模方式,然后替换?s
,&#39;?p and
?o`等中的值,以查看特定部分的更多详细信息数据。
是的,有很多来源可以学习更多有关RDF和SPARQL的知识。