query, in progress

This commit is contained in:
cesare 2025-02-19 17:50:55 +01:00
parent 9c138ccdb6
commit 0dbde2b4a9
5 changed files with 271 additions and 209 deletions

View File

@ -1906,15 +1906,12 @@ $(document).ready(function() {
//alert(query) //alert(query)
$("#loader").fadeIn(300); $("#loader").fadeIn(300);
//$("#searchcomm2").prop("disabled", true);
//$("#searchcomm2").html('<span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span> Searching...');
try { try {
var seachbBindingsStream = await myEngine.queryBindings(query, { sources: [{ type: 'sparql', value: sparqlEndpoint },], }); var seachbBindingsStream = await myEngine.queryBindings(query, { sources: [{ type: 'sparql', value: sparqlEndpoint },], });
} }
catch (err) { catch (err) {
$("#loader").fadeOut(300); $("#loader").fadeOut(300);
//$("#searchcomm2").prop("disabled", false);
//$("#searchcomm2").html('<span class="" role="status" aria-hidden="true"></span> Search');
console.log(err.message); console.log(err.message);
}; };
@ -1981,6 +1978,16 @@ $(document).ready(function() {
resultsInCantica.push(cantica); resultsInCantica.push(cantica);
resultsInCanto.push(cantica + canto) resultsInCanto.push(cantica + canto)
} }
//cambiare!
for (var ip=1; ip<10; ip++){
if (binding.has('pos'+ip)){
var tp=binding.get('pos'+ip).value;
if (!result.has(tp))
result.add(tp)
}
}
//cambiare!
if (unitaRicerca != 'frase' && pos == -1) { if (unitaRicerca != 'frase' && pos == -1) {
unitaRicerca = 'frase' unitaRicerca = 'frase'
} }

View File

@ -127,8 +127,8 @@ WHERE {
ecrm:P148i_is_component_of ?canto. ecrm:P148i_is_component_of ?canto.
?cl syntit:hasClauseType ?clatype; ?cl syntit:hasClauseType ?clatype;
syntit:hasClauseFunction ?clafun. syntit:hasClauseFunction ?clafun.
?seocc olires:occurrenceOf ?sentence; #?seocc olires:occurrenceOf ?sentence;
olires:occursInRegion ?frag. # olires:occursInRegion ?frag.
?claocc olires:occurrenceOf ?cl; ?claocc olires:occurrenceOf ?cl;
olires:occursInRegion ?fragcl. olires:occursInRegion ?fragcl.
?fragcl olires:fragmentRegionFrom ?clfr; ?fragcl olires:fragmentRegionFrom ?clfr;
@ -140,7 +140,7 @@ WHERE {
olires:hasStructuralComponent ?canto. olires:hasStructuralComponent ?canto.
BIND(CONCAT(STR(?clafun), ';') AS ?clafunction) BIND(CONCAT(STR(?clafun), ';') AS ?clafunction)
BIND(STR(?clatype) AS ?clt) BIND(STR(?clatype) AS ?clt)
FILTER (?clto > ?pos && ?clfr<?pos) . #FILTER (?clto > ?pos && ?clfr<?pos) .
}` }`
//bindConcatStatement //bindConcatStatement
@ -157,7 +157,7 @@ WHERE {
"args": [] "args": []
} }
}` }`
//clauseTypeBindConcatStatement //clauseTypeBindStatement
const clausetarget_typebind = const clausetarget_typebind =
`{ `{
"type": "bind", "type": "bind",
@ -167,7 +167,7 @@ WHERE {
}, },
"expression": { "expression": {
"type": "operation", "type": "operation",
"operator": "concat", "operator": "",
"args": [] "args": []
} }
}` }`
@ -192,6 +192,46 @@ WHERE {
} }
}` }`
const clausepos_filter=`
{
"type": "filter",
"expression": {
"type": "operation",
"operator": "&&",
"args": [
{
"type": "operation",
"operator": ">",
"args": [
{
"termType": "Variable",
"value": "clto"
},
{
"termType": "Variable",
"value": "pos_"
}
]
},
{
"type": "operation",
"operator": "<",
"args": [
{
"termType": "Variable",
"value": "clfr"
},
{
"termType": "Variable",
"value": "pos_"
}
]
}
]
}
}
`
//Query per advanced search con obiettivo = 'Periodo' //Query per advanced search con obiettivo = 'Periodo'
const sentencetargetquery = ` const sentencetargetquery = `
PREFIX ecrm: <http://erlangen-crm.org/current/> PREFIX ecrm: <http://erlangen-crm.org/current/>
@ -219,7 +259,7 @@ SELECT (?t_canto as ?Canto) (?t_cantica as ?Cantica) ?sentence ?clfr ?clto ?claf
olires:hasNumber ?num. olires:hasNumber ?num.
?cantica ecrm:P102_has_title ?t_cantica; ?cantica ecrm:P102_has_title ?t_cantica;
olires:hasStructuralComponent ?canto. olires:hasStructuralComponent ?canto.
#BIND(concat(str(?clatype1),";", str(?clatype2)) AS ?clatype) #BIND((str(?clatype1),";", str(?clatype2)) AS ?clatype)
#BIND(COALESCE(?posgen,-1) AS ?pos) #BIND(COALESCE(?posgen,-1) AS ?pos)
} }
@ -431,4 +471,3 @@ WHERE {
} order by ?Cantica ?Canto` } order by ?Cantica ?Canto`

View File

@ -377,25 +377,25 @@ var filters = []
var unionop = `{"union": {"type": "union", "patterns":[]}, "bgp": {"type": "bgp", "triples":[]}, "group": {"type": "group", "patterns":[]}}` var unionop = `{"union": {"type": "union", "patterns":[]}, "bgp": {"type": "bgp", "triples":[]}, "group": {"type": "group", "patterns":[]}}`
var idtoken = 0;
function parseJsonClause(op, tokens, nowhere) { function parseJsonClause(op, tokens, nowhere) {
//alert(op) //alert(op)
var idp = -1 var idp = -1
if (nowhere[0].type == 'filter' && nowhere[0].expression.args[0].value == 'Rappresentazione') {
/*if (nowhere[0].type != null && nowhere[0].type == 'filter' && nowhere[0].expression.args[0].value == 'Rappresentazione') {
//nowhere.splice(0, 1) //nowhere.splice(0, 1)
nowhere.splice(0, 2) nowhere.splice(0, 2)
} }*/
if (op.trim() == 'OR') { if (op.trim() == 'OR') {
//nowhere.splice(1, 0, JSON.parse(unionop)['union'])
nowhere.splice(0, 0, JSON.parse(unionop)['union']) nowhere.splice(0, 0, JSON.parse(unionop)['union'])
nowhere.splice(1, 0, clausePosCoalesceStatement)
idp = 0 idp = 0
} }
if (op.trim() == 'AND') { if (op.trim() == 'AND') {
//nowhere.splice(1, 0, JSON.parse(unionop)['group'])
nowhere.splice(0, 0, JSON.parse(unionop)['group']) nowhere.splice(0, 0, JSON.parse(unionop)['group'])
//idp = 1
idp = 0 idp = 0
} }
@ -403,12 +403,12 @@ function parseJsonClause(op, tokens, nowhere) {
te_op = tokens[mtoken] te_op = tokens[mtoken]
if ('TERM' in te_op) { if ('TERM' in te_op) {
cond = theguiQ[te_op['TERM']] cond = theguiQ[te_op['TERM']]
idtoken += 1;
multipleCondSpQuery = buildStatementClause(cond, multipleCondSpQuery, -1, nowhere[idp].patterns, mtoken) multipleCondSpQuery = buildStatementClause(cond, multipleCondSpQuery, -1, nowhere[idp].patterns, idtoken, op.trim())
} }
else else
parseJsonClause(Object.keys(te_op)[0], te_op[Object.keys(te_op)[0]], nowhere.at(-1).patterns) parseJsonClause(Object.keys(te_op)[0], te_op[Object.keys(te_op)[0]], nowhere[0].patterns)
} }
@ -422,17 +422,21 @@ function buildSPQuery(guiquery) {
var SparqlParser = sparqljs.Parser; var SparqlParser = sparqljs.Parser;
var spqparser = new SparqlParser(); var spqparser = new SparqlParser();
multipleCondSpQuery = spqparser.parse(ontoSparqlQueryMultCond); multipleCondSpQuery = spqparser.parse(ontoSparqlQueryMultCond);
bindConcatStatement = JSON.parse(sentencetarget_functionbind);
occBindConcatStatement = JSON.parse(sentencetarget_occbind);
posBindConcatStatement = JSON.parse(sentencetarget_posbind);
clausePosCoalesceStatement = JSON.parse(clausetarget_coalesce);
if (theguiQ['unitaRicerca'] == 'frase' || theguiQ['unitaRicerca'] == 'verso') { if (theguiQ['unitaRicerca'] == 'frase' || theguiQ['unitaRicerca'] == 'verso') {
multipleCondSpQuery = spqparser.parse(clausetargetquery); multipleCondSpQuery = spqparser.parse(clausetargetquery);
clausePosCoalesceStatement = JSON.parse(clausetarget_coalesce); //clausePosCoalesceStatement = JSON.parse(clausetarget_coalesce);
} }
if (theguiQ['unitaRicerca'] == 'periodo') {//Multiple Conditions if (theguiQ['unitaRicerca'] == 'periodo') {//Multiple Conditions
multipleCondSpQuery = spqparser.parse(sentencetargetquery); multipleCondSpQuery = spqparser.parse(sentencetargetquery);
bindConcatStatement = JSON.parse(sentencetarget_functionbind); /*bindConcatStatement = JSON.parse(sentencetarget_functionbind);
occBindConcatStatement = JSON.parse(sentencetarget_occbind); occBindConcatStatement = JSON.parse(sentencetarget_occbind);
posBindConcatStatement = JSON.parse(sentencetarget_posbind); posBindConcatStatement = JSON.parse(sentencetarget_posbind);*/
} }
@ -444,21 +448,21 @@ function buildSPQuery(guiquery) {
var clauses = parser.parse(test); var clauses = parser.parse(test);
//here get clauses //here get clauses
var jsonclauses = JSON.parse(clauses) var jsonclauses = JSON.parse(clauses)
idtoken = 0
for (const ck of Object.keys(jsonclauses)) { for (const ck of Object.keys(jsonclauses)) {
parseJsonClause(ck, jsonclauses[ck], multipleCondSpQuery.where) parseJsonClause(ck, jsonclauses[ck], multipleCondSpQuery.where)
} /*if (ck.trim()=='OR' && (theguiQ['unitaRicerca'] == 'frase' || theguiQ['unitaRicerca'] == 'verso')) {
if (theguiQ['unitaRicerca'] == 'frase' || theguiQ['unitaRicerca'] == 'verso') {
multipleCondSpQuery.where.push(clausePosCoalesceStatement) multipleCondSpQuery.where.push(clausePosCoalesceStatement)
/*if (posBindConcatStatement['expression']['args'].length) {
multipleCondSpQuery.where.push(posBindConcatStatement)
multipleCondSpQuery.variables.push(JSON.parse(sentencetarget_posVariable))
//multipleCondSpQuery.where.push(sentencetargetstatement_posCoalesce)
}*/ }*/
} }
/*if (theguiQ['unitaRicerca'] == 'frase' || theguiQ['unitaRicerca'] == 'verso') {
multipleCondSpQuery.where.push(clausePosCoalesceStatement)
}*/
if (theguiQ['unitaRicerca'] == 'periodo') { if (theguiQ['unitaRicerca'] == 'periodo') {
multipleCondSpQuery.where.push(bindConcatStatement) multipleCondSpQuery.where.push(bindConcatStatement)
multipleCondSpQuery.where.push(occBindConcatStatement) multipleCondSpQuery.where.push(occBindConcatStatement)
@ -672,7 +676,7 @@ function getFiltroContestoJson(datiContesto) {
return [] return []
} }
function buildStatementClause(clause, parsedquery, whereind, theplace, token) { function buildStatementClause(clause, parsedquery, whereind, theplace, token, op) {
// //
var tmpgroup = '' var tmpgroup = ''
if (clause['TipoClausola'] == "Sintattico") { if (clause['TipoClausola'] == "Sintattico") {
@ -763,6 +767,7 @@ function buildStatementClause(clause, parsedquery, whereind, theplace, token) {
} }
] ]
}` }`
if (theguiQ['unitaRicerca'] == 'periodo') { if (theguiQ['unitaRicerca'] == 'periodo') {
posBindConcatStatement['expression']['args'].push(JSON.parse(tmppos)) posBindConcatStatement['expression']['args'].push(JSON.parse(tmppos))
tmppos = `{"termType": "Literal", tmppos = `{"termType": "Literal",
@ -775,13 +780,24 @@ function buildStatementClause(clause, parsedquery, whereind, theplace, token) {
}` }`
posBindConcatStatement['expression']['args'].push(JSON.parse(tmppos)) posBindConcatStatement['expression']['args'].push(JSON.parse(tmppos))
} }
else else {
{
tmppos = `{ tmppos = `{
"termType": "Variable", "termType": "Variable",
"value": "pos`+ token + `" "value": "pos`+ token + `"
}` }`
if (op == 'OR') {
clausePosCoalesceStatement['expression']['args'].push(JSON.parse(tmppos)) clausePosCoalesceStatement['expression']['args'].push(JSON.parse(tmppos))
var orfilter=clausepos_filter.replaceAll("pos_", "pos")
if (!parsedquery['where'].includes(JSON.parse(orfilter)))
parsedquery['where'].push(JSON.parse(orfilter))
}
else{
parsedquery['variables'].push(JSON.parse(tmppos))
var andfilter=clausepos_filter.replaceAll("pos_", "pos"+ token)
parsedquery['where'].push(JSON.parse(andfilter))
}
} }
tmpgroup = JSON.parse(tmpg) tmpgroup = JSON.parse(tmpg)

View File

@ -76,7 +76,7 @@
value: defaultEditorQuery value: defaultEditorQuery
}, },
requestConfig : { requestConfig : {
endpoint : "https://hdnlab1.isti.cnr.it/fuseki/commedia/query" endpoint : "https://lida.dantenetwork.it/fuseki/commedia/query"
}, },
copyEndpointOnNewTab : false, copyEndpointOnNewTab : false,
resizeable : true, resizeable : true,

View File

@ -937,91 +937,91 @@ WHERE {
<h5>Esempi di query sulla struttura</h5> <h5>Esempi di query sulla struttura</h5>
</p> </p>
<p> <p>
<a href="#" class="link-info" onClick='writeQuery(query_1)'> 1 <a href="#" class="link-info" onClick='writeQuery(query_1)'>
Versetti in cui compare una forma.</a> Versetti in cui compare una forma.</a>
</p> </p>
<p> <p>
<a href="#" class="link-info" onClick='writeQuery(query_2)'>Versetti 2 <a href="#" class="link-info" onClick='writeQuery(query_2)'>Versetti
in cui compaiono parole che iniziano con una stringa.</a> in cui compaiono parole che iniziano con una stringa.</a>
</p> </p>
<p> <p>
<a href="#" class="link-info" onClick='writeQuery(query_11)'>Le 3 <a href="#" class="link-info" onClick='writeQuery(query_11)'>Le
parole più frequenti in un libro.</a> parole più frequenti in un libro.</a>
</p> </p>
<p> <p>
<a href="#" class="link-info" onClick='writeQuery(query_3)'>Versetti 4 <a href="#" class="link-info" onClick='writeQuery(query_3)'>Versetti
che si ripetono più volte.</a> che si ripetono più volte.</a>
</p> </p>
<p> <p>
<a href="#" class="link-info" onClick='writeQuery(query_15)'>Le 5 <a href="#" class="link-info" onClick='writeQuery(query_15)'>Le
parole che compaiono in due libri, con il numero di occorrenze.</a> parole che compaiono in due libri, con il numero di occorrenze.</a>
</p> </p>
<p> <p>
<a href="#" class="link-info" onClick='writeQuery(query_12)'>Le 6 <a href="#" class="link-info" onClick='writeQuery(query_12)'>Le
parole di un libro, che non compaiono in un altro libro.</a> parole di un libro, che non compaiono in un altro libro.</a>
</p> </p>
<p> <p>
<h5>Esempi di query sul 'livello linguistico'</h5> <h5>Esempi di query sul 'livello linguistico'</h5>
</p> </p>
<p> <p>
<a href="#" class="link-info" onClick='writeQuery(query_4)'>Cerco 7 <a href="#" class="link-info" onClick='writeQuery(query_4)'>Cerco
in un libro le forme associate ad un lemma.</a> in un libro le forme associate ad un lemma.</a>
</p> </p>
<p> <p>
<a href="#" class="link-info" onClick='writeQuery(query_5)'>Cerco 8 <a href="#" class="link-info" onClick='writeQuery(query_5)'>Cerco
in tutta l'opera le forme associate ad un lemma.</a> in tutta l'opera le forme associate ad un lemma.</a>
</p> </p>
<p> <p>
<a href="#" class="link-info" onClick='writeQuery(query_8)'>Cerco 9 <a href="#" class="link-info" onClick='writeQuery(query_8)'>Cerco
i verbi (lila:verb) presenti in un libro.</a> i verbi (lila:verb) presenti in un libro.</a>
</p> </p>
<p> <p>
<a href="#" class="link-info" onClick='writeQuery(query_17)'>I verbi più frequenti in un libro.</a> 10 <a href="#" class="link-info" onClick='writeQuery(query_17)'>I verbi più frequenti in un libro.</a>
</p> </p>
<p> <p>
<a href="#" class="link-danger" onClick='writeQuery(query_6)'>Cerco 11 <a href="#" class="link-danger" onClick='writeQuery(query_6)'>Cerco
i versetti di un libro in cui una parola in una specifica i versetti di un libro in cui una parola in una specifica
posizione abbia categoria grammaticale 'lila:verb' (query posizione abbia categoria grammaticale 'lila:verb' (query
distribuita sul dataset di LiLa).</a> distribuita sul dataset di LiLa).</a>
</p> </p>
<p> <p>
<a href="#" class="link-danger" onClick='writeQuery(query_14)'>Cerco 12 <a href="#" class="link-danger" onClick='writeQuery(query_14)'>Cerco
i versetti di un libro in cui compaiano due parole consecutive i versetti di un libro in cui compaiano due parole consecutive
che hanno rispettivamente categoria grammaticale 'lila:verb' e che hanno rispettivamente categoria grammaticale 'lila:verb' e
'lila:noun'</a> 'lila:noun'</a>
</p> </p>
<p> <p>
<a href="#" class="link-danger" onClick='writeQuery(query_19)'> 13 <a href="#" class="link-danger" onClick='writeQuery(query_19)'>
Le occorrenze delle categorie verbali (lila:POS) delle prime 4 parole dei versetti del libro 'Genesis'. Le occorrenze delle categorie verbali (lila:POS) delle prime 4 parole dei versetti del libro 'Genesis'.
</a> </a>
</p> </p>
<p> <p>
<a href="#" class="link-danger" onClick='writeQuery(query_18)'> 14 <a href="#" class="link-danger" onClick='writeQuery(query_18)'>
TEST! Le occorrenze delle categorie verbali (lila:POS) nelle sequenze di 4 parole nei versetti del libro 'Genesi'. TEST! Le occorrenze delle categorie verbali (lila:POS) nelle sequenze di 4 parole nei versetti del libro 'Genesi'.
</a> </a>
</p> </p>
<p> <p>
<a href="#" class="link-danger" onClick='writeQuery(query_13)'>Cerco 15 <a href="#" class="link-danger" onClick='writeQuery(query_13)'>Cerco
le forme derivate da un lemma secondo le regole definite le forme derivate da un lemma secondo le regole definite
dall'ontologia "Word Formation Latin" (WFL)</a> dall'ontologia "Word Formation Latin" (WFL)</a>
</p> </p>
<p> <p>
<a href="#" class="link-danger" onClick='writeQuery(query_7)'>Termini 16 <a href="#" class="link-danger" onClick='writeQuery(query_7)'>Termini
con la stessa radice basati sulla proprieta lila:hasBase del con la stessa radice basati sulla proprieta lila:hasBase del
lemma cercato.</a> lemma cercato.</a>
</p> </p>
<p> <p>
<a href="#" class="link-danger" onClick='writeQuery(query_16)'>Cerca 17 <a href="#" class="link-danger" onClick='writeQuery(query_16)'>Cerca
le forme associate ai lemmi appartenenti ad un SynSet della le forme associate ai lemmi appartenenti ad un SynSet della
risorsa Latin WordNet pubblicata su LiLa</a> risorsa Latin WordNet pubblicata su LiLa</a>
</p> </p>
<p> <p>
<a href="#" class="link-danger" onClick='writeQuery(query_9)'>Cerco 18 <a href="#" class="link-danger" onClick='writeQuery(query_9)'>Cerco
i verbi (lila:Verb) presenti in un libro e per ciascun lemma i verbi (lila:Verb) presenti in un libro e per ciascun lemma
visualizzo la definizione nel dizionario Lewis &amp; Short.</a> visualizzo la definizione nel dizionario Lewis &amp; Short.</a>
</p> </p>
<p> <p>
<a href="#" class="link-danger" onClick='writeQuery(query_10)'>Cerco 19 <a href="#" class="link-danger" onClick='writeQuery(query_10)'>Cerco
in un capitolo di un libro le forme che hanno una particolare in un capitolo di un libro le forme che hanno una particolare
stringa nella definizione del dizionario Lewis & Short.</a> stringa nella definizione del dizionario Lewis & Short.</a>
</p> </p>