使用带有 SPARQL 的前缀名称进行 RDF 图查询

RDF graph querying using prefix names with SPARQL

我目前正在为处理传感器数据的项目创建 ontology。 我在 Python 中使用 RDFLib 成功创建了一个 RDF 图。然后使用 Jena TDB 数据库存储图形。现在我想使用 SPARQL 查询数据库,但老实说我不知道​​从哪里开始。

例如,如果我使用的是已知词汇表,比如朋友的朋友 (FOAF),那么我将简单地执行类似这样的查询,我会得到我需要的:

SELECT ?name
WHERE {
    ?person foaf:name ?name .
}

但由于我使用不同的本体(传感器本体)创建我的 RDF,我的目标是执行此查询并获取所有相关数据:

SELECT *  {?dev ?lon ?lat}

其中dev是设备名称,lon是设备所在的经度,lat是纬度。所有这些数据都在图表中提供,但尚未定义为可查询。

总而言之,我试图找出 classes 等的前缀名称,例如 class 设备可以表示为 (dev, device...)

可以在 RDFLib 中分配标签作为解决方案,还是我必须开发查询词汇表?

RDF 三元组旨在表示具有主语、宾语、谓语结构的数据。例如,下面是一个 RDF 三元组:

<http://example.org/FalaG> foaf:name "FalaG"^^xsd:string

...其中 foaf:name 是扩展为 <http://xmlns.com/foaf/0.1/name>.

的带前缀的 qname

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、'?pand?o` 等中的值,以更详细地查看数据的特定部分.

是的,有很多资源可以让您更多地了解 RDF 和 SPARQL。