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