File size: 2,391 Bytes
695363c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2a26226
695363c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import gradio as gr
import rdflib
import json

# Função para carregar e extrair os nomes do arquivo JSON-LD
def load_names_from_jsonld(jsonld_file):
    with open(jsonld_file, 'r', encoding='utf-8') as f:
        data = json.load(f)
    
    names = []
    for item in data['@graph']:
        if 'name' in item:
            names.append(item['name'])
    
    return names

# Carregar nomes do arquivo JSON-LD
names = load_names_from_jsonld('https://huggingface.co/spaces/histlearn/ShowGraph/raw/main/datafile.jsonld')

def run_query_and_visualize(qtext, turtle_file):
    # Carrega o arquivo Turtle
    g = rdflib.Graph()
    g.parse(turtle_file, format="turtle")

    # Executa a consulta SPARQL
    qres = g.query(qtext)

    # Prepara o gráfico com recursos remotos
    net = Network(notebook=True, height="400px", width="100%", cdn_resources='remote')
    nodes = set()

    # Processa os resultados da consulta
    for row in qres:
        s, p, o = row
        if str(s) not in nodes:
            net.add_node(str(s), label=str(s))
            nodes.add(str(s))
        if str(o) not in nodes:
            net.add_node(str(o), label=str(o))
            nodes.add(str(o))
        net.add_edge(str(s), str(o), title=str(p))

    # Gera o gráfico e o exibe diretamente na célula do notebook
    net.show("graph.html")
    return "graph.html"

def update_query(selected_location):
    return f"""
    PREFIX schema: <http://schema.org/>

    SELECT * WHERE {{
        ?s schema:name "{selected_location}" .
        ?s ?p ?o .
    }}
    """

with gr.Blocks() as demo:
    gr.Markdown("# Visualização de Query SPARQL")

    with gr.Column():
        selected_location = gr.Dropdown(choices=names, label="Selecione o Local")
        query_input = gr.Textbox(label="Consulta SPARQL", value=update_query(names[0]), lines=10)
        turtle_file_input = gr.File(label="Arquivo Turtle")
        run_button = gr.Button("Executar Consulta")

    graph_output = gr.HTML()

    def on_location_change(loc):
        query_input.value = update_query(loc)

    selected_location.change(fn=on_location_change, inputs=selected_location, outputs=query_input)

    def on_run_button_click(query, turtle_file):
        return run_query_and_visualize(query, turtle_file.name)

    run_button.click(fn=on_run_button_click, inputs=[query_input, turtle_file_input], outputs=graph_output)

demo.launch()