如何获取 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,但它们仅适用于固定(即非可变)属性。