I am going to build a topic hierarchy tree using SPARQL query extracted from DBpedia. How can I filtering no definition concepts from my sparql query?
My currently code is below:
from SPARQLWrapper import SPARQLWrapper, N3
from rdflib.extras.external_graph_libs import rdflib_to_networkx_graph
from pprint import pprint
from rdflib import Graph
import networkx as nx
import copy
# Main concept
concept = '<http://dbpedia.org/resource/Category:Machine_learning>'
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery(f"""
CONSTRUCT {{ ?child skos:broader {concept} .}}
WHERE {{ ?child skos:broader {concept} .}}
""")
sparql.setReturnFormat(N3)
results = sparql.query().convert()
g_child = Graph()
g_child.parse(data=results, format="n3")
sparql.setQuery(f"""
CONSTRUCT {{ ?child skos:broader {concept} .
?grandchild skos:broader ?child .}}
WHERE {{ ?child skos:broader {concept} .
?grandchild skos:broader ?child .}}
""")
sparql.setReturnFormat(N3)
results = sparql.query().convert()
g_grandchild = Graph()
g_grandchild.parse(data=results, format="n3")
I used to try:
sparql.setQuery(f"""
CONSTRUCT {{ ?child skos:broader {concept} .}}
WHERE {{ ?child skos:broader {concept} .
FILTER(LANG(?definition) = 'en')}}
""")
sparql.setReturnFormat(N3)
results = sparql.query().convert()
g_child = Graph()
g_child.parse(data=results, format="n3")
and
sparql.setQuery(f"""
CONSTRUCT {{ ?child skos:broader {concept} .
?grandchild skos:broader ?child .}}
WHERE {{ ?child skos:broader {concept} .
?grandchild skos:broader ?child .
FILTER(LANG(?definition) = 'en') }}
""")
sparql.setReturnFormat(N3)
results = sparql.query().convert()
g_grandchild = Graph()
g_grandchild.parse(data=results, format="n3")
However, the graph turns to empty.
Thank you in advance!