Search code examples
graphrdfsparqljenafuseki

How to generate all triples that fit a particular node type or/and edge type using SPARQL query?


It is a follow up question to :

How to list and count the different types of node and edge entities in the graph data using SPARQL query?

So assuming I have the different node entities and edge entities of a given graph, how do I go about listing all triples, given a node-edge-node pattern? And how do I generate ALL node-edge-node patterns given the node and edge entities?

Example: If there is a network consisting of papers(nodes), authors(nodes), conferences(nodes), iswrittenby(edge), ispublishedin(edge), presentsin(edge) and so on , I'd have node entity type : papers authors conferences and for edge entity type: iswrittenby, ispublishedin , presentsin etc

What I'm looking to do now is generate patterns like:

1) paper(node)-iswrittenby(edge)-author(node) 2) paper(node)-iscitedby(edge)-paper(node) and so on... and then generate all triples from the dataset which satisfy these patterns.


Solution

  • I think what you're looking for is

    construct {   
      ?paper :isWrittenBy ?author .
      ?paper :isCitedBy ?paper2
    }
    where {
      ?paper :isWrittenBy ?author .
      ?paper :isCitedBy ?paper2
    }
    

    The spec section on construct queries might be a helpful reference.