I am new to RDFLIB in python. I found this example of creating a graph on here. What is the simplest way to visualize graph created by this code?
import rdflib # Now we create a graph, a representaiton of the ontology g = rdflib.Graph() # Now define the key words that we will use (the edge weights of the graph) has_border_with = rdflib.URIRef('http://www.example.org/has_border_with') located_in = rdflib.URIRef('http://www.example.org/located_in') # define the things - base level objects that will be the nodes # In this case first we have countries germany = rdflib.URIRef('http://www.example.org/country1') france = rdflib.URIRef('http://www.example.org/country2') china = rdflib.URIRef('http://www.example.org/country3') mongolia = rdflib.URIRef('http://www.example.org/country4') # then we have continents europa = rdflib.URIRef('http://www.example.org/part1') asia = rdflib.URIRef('http://www.example.org/part2') # Having defined the things and the edge weights, now assemble the graph g.add((germany,has_border_with,france)) g.add((china,has_border_with,mongolia)) g.add((germany,located_in,europa)) g.add((france,located_in,europa)) g.add((china,located_in,asia)) g.add((mongolia,located_in,asia))
I see that the rdflib package has a tools component that has a function called rdfs2dot. How can I use this function to display a plot with the RDF graph in it?
Advertisement
Answer
Using the hint in this question: https://www.researchgate.net/post/Is_there_any_open_source_RDF_graph_converter
I was able to plot the RDF Graph by converting to Networkx Graph and using the Networkx/Matplotlib plotting tools.
import rdflib from rdflib.extras.external_graph_libs import rdflib_to_networkx_multidigraph import networkx as nx import matplotlib.pyplot as plt url = 'https://www.w3.org/TeamSubmission/turtle/tests/test-30.ttl' g = rdflib.Graph() result = g.parse(url, format='turtle') G = rdflib_to_networkx_multidigraph(result) # Plot Networkx instance of RDF Graph pos = nx.spring_layout(G, scale=2) edge_labels = nx.get_edge_attributes(G, 'r') nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels) nx.draw(G, with_labels=True) #if not in interactive mode for plt.show()
To visualise large RDF Graphs the styling might need some finetuning ;-)