Querying a Graph path in SPARQL

后端 未结 1 1651
太阳男子
太阳男子 2020-12-11 12:14

I am trying to write a SPARQL query to return a path from a source to a destination. Below is the Turtle file representing the data set.

@prefix node: 

        
相关标签:
1条回答
  • 2020-12-11 12:38

    Property paths in SPARQL are not things that you can query directly, but you can use property paths to help extract the edges along a path between two nodes. For instance, the following query returns the edges in paths from a to h. The basic idea is to use a property path to from a to some node u which has an edge to some node v from which there is a path to h. The values block just limits the value of e to be either p or q.

    prefix node: <http://prism.uvsq.fr/>
    prefix edge: <http://prism.uvsq.fr#>
    
    select distinct ?u ?e ?v where {
      values ?e { edge:p edge:q }
      node:a (edge:p|edge:q)* ?u .
      ?u ?e ?v .
      ?v (edge:p|edge:q)* node:h .
    }
    
    ----------------------------
    | u      | e      | v      |
    ============================
    | node:a | edge:p | node:g |
    | node:a | edge:p | node:b |
    | node:g | edge:p | node:f |
    | node:g | edge:p | node:c |
    | node:f | edge:p | node:k |
    | node:f | edge:p | node:g |
    | node:k | edge:p | node:l |
    | node:l | edge:p | node:g |
    | node:c | edge:p | node:i |
    | node:n | edge:p | node:m |
    | node:h | edge:p | node:n |
    | node:b | edge:p | node:c |
    | node:a | edge:q | node:f |
    | node:f | edge:q | node:l |
    | node:c | edge:q | node:h |
    | node:i | edge:q | node:j |
    | node:j | edge:q | node:n |
    | node:m | edge:q | node:g |
    ----------------------------
    

    That doesn't give you the actual paths, but it gives you all and only the edges that are on paths from a to h. From that you can reconstruct paths by putting the graph back together and performing a depth first traversal to enumerate the paths.

    0 讨论(0)
提交回复
热议问题