使用带有 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。
我目前正在为处理传感器数据的项目创建 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>
.
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。