wikidatablazegraph

How to use OR in wikidata rdf Graph services


I took the example of finding Genshis Khan's children. How can I tell the graph to travel either P40 or P10. I would like the graph to be able to travel 2 types of LinkType

#Children of Genghis Khan
#defaultView:Graph
PREFIX gas: <http://www.bigdata.com/rdf/gas#>

SELECT ?item ?itemLabel ?pic ?linkTo
WHERE {
  SERVICE gas:service {
    gas:program gas:gasClass "com.bigdata.rdf.graph.analytics.SSSP" ;
                gas:in wd:Q720 ;
                gas:traversalDirection "Forward" ;
                gas:out ?item ;
                gas:out1 ?depth ;

                gas:maxIterations 4 ;
                gas:linkType wdt:P40.#Here, how can I do a OR operation
  }
  OPTIONAL { ?item wdt:P40 ?linkTo }
  OPTIONAL { ?item wdt:P18 ?pic }
  SERVICE wikibase:label {bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }
}

Solution

  • UNION statements give you the effect of an OR operation, so theoretically duplicating and nesting your current SERVICE clause for P40, and combining it with another for P10, should do the trick. For example:

    #Children of Genghis Khan
    #defaultView:Graph
    PREFIX gas: <http://www.bigdata.com/rdf/gas#>
    
    SELECT ?item ?itemLabel ?pic ?linkTo
    WHERE {
      {
        SERVICE gas:service {
          gas:program gas:gasClass "com.bigdata.rdf.graph.analytics.SSSP" ;
                      gas:in wd:Q720 ;
                      gas:traversalDirection "Forward" ;
                      gas:out ?item ;
                      gas:out1 ?depth ;
                      gas:maxIterations 4 ;
                      gas:linkType wdt:P40.
        }
        OPTIONAL { ?item wdt:P40 ?linkTo }
      } UNION {
        SERVICE gas:service {
          gas:program gas:gasClass "com.bigdata.rdf.graph.analytics.SSSP" ;
                      gas:in wd:Q720 ;
                      gas:traversalDirection "Forward" ;
                      gas:out ?item ;
                      gas:out1 ?depth ;                  
                      gas:maxIterations 4 ;
                      gas:linkType wdt:P10.
        }
        OPTIONAL { ?item wdt:P10 ?linkTo }
      }
      OPTIONAL { ?item wdt:P18 ?pic }
      SERVICE wikibase:label {bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }
    }