如何获取 SPARQL 中一个主题的所有相关三元组?
How to get all related triples to a subject in SPARQL?
我需要获取与某个主题相关的所有数据。我试图查询
SELECT * WHERE {?s ?p ?o}
但问题是一些 ?o 对象是 URI,我也需要这些连接,直到连接结束。例如,我有:
http://www.example.com/data/subject-test http://www.example.com#hasNetListPrice http://www.example.com/data/price-subject-test.
http://www.example.com/data/price-subject-test http://www.example.com/si-cpq/data/price-currency http://www.example.com/data/EURO.
以此类推,直到三元组不再连接到初始主题,http://www.example.com/si-cpq/data/subject-test。
此外,有时有 4 个三元组连接,有时更多,所以我不能对所有的都使用相同的模式。此外,还需要一个通用的 select 查询,而不是仅适用于价格三元组的查询,因为数据具有更多属性。
(这可能只是部分答案,但可能会通过 comments/edits 提供的更多信息进行改进):
首先,可能需要指定您在结果中接受的 rdf:type
。此外,您可能必须添加“可选中间变量层”:
# untested due to the lack of data
prefix cpq: <http://www.example.com/si-cpq/data/>
SELECT * WHERE
{
# defining admissible types (here: guessed type-names)
VALUES ?t {cpq:Currency cpq:Foobar}
?s ?p ?o1. # first relation
{
# direct connection between ?s and target type
?o1 rdf:type ?t.
}
UNION
{
# level 1 indirect connection between ?s and target type
?o1 ?p2 ?o2.
?o2 rdf:type ?t.
}
UNION
{
# level 2 indirect connection between ?s and target type
?o1 ?p2 ?o2.
?o2 ?p3 ?o3.
?o3 rdf:type ?t.
}
# add more levels and restrictions as needed
}
您也可以查看 property paths,但它们仅适用于固定(即非可变)属性。
我需要获取与某个主题相关的所有数据。我试图查询
SELECT * WHERE {?s ?p ?o}
但问题是一些 ?o 对象是 URI,我也需要这些连接,直到连接结束。例如,我有:
http://www.example.com/data/subject-test http://www.example.com#hasNetListPrice http://www.example.com/data/price-subject-test.
http://www.example.com/data/price-subject-test http://www.example.com/si-cpq/data/price-currency http://www.example.com/data/EURO.
以此类推,直到三元组不再连接到初始主题,http://www.example.com/si-cpq/data/subject-test。
此外,有时有 4 个三元组连接,有时更多,所以我不能对所有的都使用相同的模式。此外,还需要一个通用的 select 查询,而不是仅适用于价格三元组的查询,因为数据具有更多属性。
(这可能只是部分答案,但可能会通过 comments/edits 提供的更多信息进行改进):
首先,可能需要指定您在结果中接受的 rdf:type
。此外,您可能必须添加“可选中间变量层”:
# untested due to the lack of data
prefix cpq: <http://www.example.com/si-cpq/data/>
SELECT * WHERE
{
# defining admissible types (here: guessed type-names)
VALUES ?t {cpq:Currency cpq:Foobar}
?s ?p ?o1. # first relation
{
# direct connection between ?s and target type
?o1 rdf:type ?t.
}
UNION
{
# level 1 indirect connection between ?s and target type
?o1 ?p2 ?o2.
?o2 rdf:type ?t.
}
UNION
{
# level 2 indirect connection between ?s and target type
?o1 ?p2 ?o2.
?o2 ?p3 ?o3.
?o3 rdf:type ?t.
}
# add more levels and restrictions as needed
}
您也可以查看 property paths,但它们仅适用于固定(即非可变)属性。