[Javascript] Libreria SPARQL
Ho visto da molti siti che è possibile implementare SPARQL su javascript. Eccone alcuni
sito1
sito2
Ho provato in tutti i modi a farlo funzionare ma non ci sono riuscito.
Questo è l'ultimo codice che ho effettuato prendendo questo file come riferimento sparql.js
Non capisco come devo implementarlo.
N.B. Prima avevo postato il virtuoso di un altro sito che ho preso come esempio, questo invece è quello corretto
sito1
sito2
Ho provato in tutti i modi a farlo funzionare ma non ci sono riuscito.
<!DOCTYPE html> <html> <head> <script type="text/javascript" src="sparql.js"></script> <script type="text/javascript"> var sparqler = new SPARQL.Service("http://www.linkedfood.org:8890/sparql/"); var query_string = "http://www.linkedfood.org:8890/sparql/"+ "select distinct ?name_Dish ?dish ?classes"+ "where {?dish rdf:type gr:Offering . ?dish rdfs:label ?name_Dish . ?dish a ?classes }"+ "order by(?name_Dish)"; </script> </head> <body> <title>Tabella</title> <div id="table"></div> </body> </html>
Questo è l'ultimo codice che ho effettuato prendendo questo file come riferimento sparql.js
Non capisco come devo implementarlo.
N.B. Prima avevo postato il virtuoso di un altro sito che ho preso come esempio, questo invece è quello corretto
Risposte
Ciao, premesso che non conosco SPARQL, ti posso dire cosa non va secondo me.
Innanzitutto lo script (sparql.js) che usi è piuttosto datato, quindi non funziona nei browser recenti, perché ad esempio usa l'oggetto window.netscape che non è più implementato.
Tuttavia se vuoi proprio usarlo, allora devi commentare la parte di codice interessata e cioè le righe da 331 a 339, cioè queste[nota]Cerca nello script window.netscape[/nota]:
Fatto questo, e aggiunto al tuo script un'istruzione che faccia effettivamente la query, non penso che tu riesca lo stesso a ottenere risposta da quel server[nota]Otterresti infatti l'errore No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.[/nota], a meno che tu non sia il titolare del suddetto server/dominio e possa configurarlo in modo da accettare richieste HTTP cross-site da script oppure riesca a trovare/implementare una qualche altra soluzione lato client per ovviare al problema.
Quindi se il tuo scopo è solo quello di imparare o provare SPARQL, allora o cambi linguaggio di programmazione oppure potresti usare http://www.sparql.org come endpoint.
Ti scrivo qui sotto un esempio di uso dello script sparql.js con il suddetto server:
Ovviamente apri la console negli strumenti di sviluppo del browser con Ctrl+Shift+i per vedere se funziona e se ci sono errori, ma forse è una cosa che fai normalmente quando programmi.
Innanzitutto lo script (sparql.js) che usi è piuttosto datato, quindi non funziona nei browser recenti, perché ad esempio usa l'oggetto window.netscape che non è più implementato.
Tuttavia se vuoi proprio usarlo, allora devi commentare la parte di codice interessata e cioè le righe da 331 a 339, cioè queste[nota]Cerca nello script window.netscape[/nota]:
try { if (!document.domain || (url.match(/^https?:\/\//) && url.slice(7, document.domain.length + 7) != document.domain && window.netscape && netscape.security && netscape.security.PrivilegeManager)) { netscape.security.PrivilegeManager.enablePrivilege( "UniversalBrowserRead"); netscape.security.PrivilegeManager.enablePrivilege( "UniversalXPConnect"); } } catch(e) { alert("Cross-site requests prohibited. You will only be able to SPARQL the origin site: " + e); return; }
Fatto questo, e aggiunto al tuo script un'istruzione che faccia effettivamente la query, non penso che tu riesca lo stesso a ottenere risposta da quel server[nota]Otterresti infatti l'errore No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.[/nota], a meno che tu non sia il titolare del suddetto server/dominio e possa configurarlo in modo da accettare richieste HTTP cross-site da script oppure riesca a trovare/implementare una qualche altra soluzione lato client per ovviare al problema.
Quindi se il tuo scopo è solo quello di imparare o provare SPARQL, allora o cambi linguaggio di programmazione oppure potresti usare http://www.sparql.org come endpoint.
Ti scrivo qui sotto un esempio di uso dello script sparql.js con il suddetto server:
<!DOCTYPE html> <html> <head> <meta charset="UFT-8"> <script src="sparql.js"></script> <script> //<![CDATA[ var sparqler = new SPARQL.Service("http://www.sparql.org/books/sparql"); var query = sparqler.createQuery(); query.setPrefix("books", "http://example.org/book/"); query.setPrefix("dc", "http://purl.org/dc/elements/1.1/"); query_string = "SELECT ?book ?title WHERE { ?book dc:title ?title }"; var success_callback = function (r) { if (r !== null && typeof r === 'object') { //console.log(JSON.stringify(r)); var tbl = document.getElementById('table'); tbl.innerHTML = JSON.stringify(r); } }; var failure_callback = function (e) { console.log(e); } results = query.query(query_string, { failure: failure_callback, success: success_callback }); //]]> </script> </head> <body> <title>Tabella</title> <div id="table"></div> </body> </html>
Ovviamente apri la console negli strumenti di sviluppo del browser con Ctrl+Shift+i per vedere se funziona e se ci sono errori, ma forse è una cosa che fai normalmente quando programmi.

Grazie stan per la spiegazione abbastanza esauriente. Il fatto è questo ho bisogno di una libreria che mi fa utilizzare SPARQL su javascript e cercando sulla rete, mi ha indirizzato su quel file che ho postato precedentemente.
Se c'è un'altra libreria che sia più efficace onestamente non saprei perché in rete non ne ho trovate, o almeno che non siano efficaci.
Io devo far girare la pagina web su tutti browser quindi mi sono affidato a questo
sito dove alla voce JavaScript mi da quella libreria
Tornando al codice, quindi dovevo creare le funzioni "succes" e "failure", ecco perchè non riuscivo a capire come dovevo implementare.
Adesso non mi resta che convertire il JSON in una tabella, speriamo di farcela.
Se c'è un'altra libreria che sia più efficace onestamente non saprei perché in rete non ne ho trovate, o almeno che non siano efficaci.
Io devo far girare la pagina web su tutti browser quindi mi sono affidato a questo
sito dove alla voce JavaScript mi da quella libreria
Tornando al codice, quindi dovevo creare le funzioni "succes" e "failure", ecco perchè non riuscivo a capire come dovevo implementare.
Adesso non mi resta che convertire il JSON in una tabella, speriamo di farcela.
Fatto questo, e aggiunto al tuo script un'istruzione che faccia effettivamente la query, non penso che tu riesca lo stesso a ottenere risposta da quel server2, a meno che tu non sia il titolare del suddetto server/dominio e possa configurarlo in modo da accettare richieste HTTP cross-site da script oppure riesca a trovare/implementare una qualche altra soluzione lato client per ovviare al problema.
Difatti collegandomi al [url=http://www.linkedfood.org:8890/sparql/]sito[/url], mi fa
xmlhttp.status = 0proprio perché tramite localhost non si può accedere. Purtroppo non mi serve per pratica ma devo presentare un progetto, quindi devo collegarmi a quel sito, non posso cambiare linguaggio perché è richiesto javascript.
Devo trovare una soluzione
Be', una possibile soluzione, se non sei costretto a usare quello script (sparql.js), è quella di usare jQuery+JSONP e con quattro righe di codice il gioco è fatto. Altrimenti devi sostituire il codice che avevi commentato con dell'altro che implementi tale meccanismo.
Al di là di questo, se è un progetto per l'università sei sicuro che il tuo prof. "gradisca" che tu ponga domande in un forum?[nota]Anche loro usano google...
[/nota] Tra l'altro potresti così facendo anche aiutare involontariamente qualche tuo collega se ha un progetto simile. Forse ti conveniva "oscurare" le informazioni che potessero far risalire al tuo progetto e quindi a te?
Al di là di questo, se è un progetto per l'università sei sicuro che il tuo prof. "gradisca" che tu ponga domande in un forum?[nota]Anche loro usano google...


Io non ho problemi a divulgare il mio codice per aiutare qualcuno, comunque ti ringrazio del consiglio a questo punto utilizzerò JQuery + Jsonp. Tra l'altro non ci trovo niente di male a chiedere un aiuto se sono in difficoltà, io stesso mi faccio in quattro per aiutare.
Quindi non ho motivo di "oscurare"
Quindi non ho motivo di "oscurare"

Ottimo allora!
L'ho scritto solo per sicurezza, perché recentemente è stato cancellato tutto un topic qui in informatica su richiesta di un professore che aveva scoperto un suo alunno che chiedeva aiuto per un progetto.
