File size: 2,442 Bytes
695363c
 
f3dbd83
 
695363c
2e7c89d
 
 
f3dbd83
695363c
 
2d000f8
2e7c89d
 
695363c
 
 
2e7c89d
2d000f8
695363c
2e7c89d
d1cb3da
695363c
2e7c89d
695363c
 
 
 
 
a12b796
695363c
 
 
 
 
 
 
 
 
a12b796
695363c
 
 
a12b796
3a02f13
a12b796
 
 
695363c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2e7c89d
695363c
 
 
 
 
f3dbd83
695363c
 
 
d1cb3da
 
695363c
d1cb3da
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
80
import gradio as gr
import rdflib
import requests
from pyvis.network import Network

# Função para carregar e extrair os nomes do arquivo JSON-LD a partir de uma URL
def load_names_from_url(jsonld_url):
    response = requests.get(jsonld_url)
    data = response.json()
    
    names = []
    for item in data:
        if 'name' in item:
            names.append(item['name'])
    
    return names

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

def run_query_and_visualize(qtext, jsonld_url):
    # Carrega o arquivo JSON-LD
    g = rdflib.Graph()
    g.parse(jsonld_url, format="json-ld")

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

    # Prepara o gráfico com recursos remotos
    net = Network(notebook=False, 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 salva em um arquivo HTML
    net.show("graph.html")
    with open("graph.html", "r") as file:
        graph_html = file.read()
    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]) if names else "", lines=10)
        run_button = gr.Button("Executar Consulta")

    graph_output = gr.HTML()

    def on_location_change(loc):
        return update_query(loc)

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

    def on_run_button_click(query):
        return run_query_and_visualize(query, 'https://huggingface.co/spaces/histlearn/ShowGraph/raw/main/datafile.jsonld')

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

demo.launch()