首页 文章

使用SPARQL使用前缀名称进行RDF图形查询

提问于
浏览
1

我目前正在为处理传感器数据的项目创建一个本体 . 我在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 回答

  • 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 在这里很重要,因为任何具有三个变量的三重模式都在请求 all 三元组,这可能会使服务器超时或崩溃 . 但是通过设置限制,您可以找到数据的建模方式,然后替换 ?s ,'?p and ?o`等中的值,以更详细地查看数据的特定部分 .

    是的,有很多来源可以学习更多有关RDF和SPARQL的知识 .

相关问题