implementazione filtri contesto, in progress
This commit is contained in:
parent
2ceb8f477e
commit
17db3ba3fd
191
js/utils.js
191
js/utils.js
|
@ -136,9 +136,13 @@ WHERE {
|
||||||
}
|
}
|
||||||
###end
|
###end
|
||||||
### condizioni comuni
|
### condizioni comuni
|
||||||
?canto ecrm:P102_has_title ?t_canto.
|
|
||||||
|
?canto ecrm:P102_has_title ?t_canto;
|
||||||
|
olires:hasNumber ?num .
|
||||||
?cantica ecrm:P102_has_title ?t_cantica;
|
?cantica ecrm:P102_has_title ?t_cantica;
|
||||||
olires:hasStructuralComponent ?canto.
|
olires:hasStructuralComponent ?canto.
|
||||||
|
# FILTER (?t_cantica in ("Inferno", "Purgatorio"))
|
||||||
|
# FILTER (?num IN ("12"^^xsd:short, "4"^^xsd:short ) )
|
||||||
### end
|
### end
|
||||||
###condizioni sintattiche
|
###condizioni sintattiche
|
||||||
{
|
{
|
||||||
|
@ -243,12 +247,12 @@ var colorssp = d3.scaleQuantize()
|
||||||
.range(["#1f78b4", "#a6cee3", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c", "#fdbf6f", "#ff7f00",
|
.range(["#1f78b4", "#a6cee3", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c", "#fdbf6f", "#ff7f00",
|
||||||
"#cab2d6", "#6a3d9a", "#ffff99", "#b15928", "#F46D43",
|
"#cab2d6", "#6a3d9a", "#ffff99", "#b15928", "#F46D43",
|
||||||
"#D53E4F", "#9E0142", "#e377c2", "#7f7f7f", "#bcbd22"]);
|
"#D53E4F", "#9E0142", "#e377c2", "#7f7f7f", "#bcbd22"]);
|
||||||
/*.range(["#3288bd", "#66c2a5", "#e41a1c", "#4daf4a", "#984ea3", "#d53e4f", "#f46d43", "#ABDDA4",
|
/*.range(["#3288bd", "#66c2a5", "#e41a1c", "#4daf4a", "#984ea3", "#d53e4f", "#f46d43", "#ABDDA4",
|
||||||
"#E6F598", "#FFFFBF", "#FEE08B", "#FDAE61", "#F46D43",
|
"#E6F598", "#FFFFBF", "#FEE08B", "#FDAE61", "#F46D43",
|
||||||
"#D53E4F", "#9E0142", "#e377c2", "#7f7f7f", "#bcbd22"]);*/
|
"#D53E4F", "#9E0142", "#e377c2", "#7f7f7f", "#bcbd22"]);*/
|
||||||
|
|
||||||
const mapsynttypestopalette = {
|
const mapsynttypestopalette = {
|
||||||
"Ma": 0, "SubI": 1, "SubII": 3, "SubIII": 4, "Co": 5, "Co0":2,
|
"Ma": 0, "SubI": 1, "SubII": 3, "SubIII": 4, "Co": 5, "Co0": 2,
|
||||||
"CoI": 9, "CoII": 10, "SubIV": 5, "SubV": 6, "ParentethicalClause": 17,
|
"CoI": 9, "CoII": 10, "SubIV": 5, "SubV": 6, "ParentethicalClause": 17,
|
||||||
"CoIII": 11, "ParentheticalCo": 14, "PseudoCo": 16, "SubVI": 7, "CoIV": 12,
|
"CoIII": 11, "ParentheticalCo": 14, "PseudoCo": 16, "SubVI": 7, "CoIV": 12,
|
||||||
"CoV": 13, "ParentheticalCoI": 15, "SubVII": 8
|
"CoV": 13, "ParentheticalCoI": 15, "SubVII": 8
|
||||||
|
@ -270,64 +274,64 @@ syntitprefix = 'https://dantenetwork.it/ontology/syntit/current/'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function getFormaContext(formaid, numversi=3) {
|
function getFormaContext(formaid, numversi = 3) {
|
||||||
var context = []
|
var context = []
|
||||||
var cantica = 1;
|
var cantica = 1;
|
||||||
var listaforme = formeprima;
|
var listaforme = formeprima;
|
||||||
var minpos = 0;
|
var minpos = 0;
|
||||||
var limitv = Math.max((numversi),3)
|
var limitv = Math.max((numversi), 3)
|
||||||
var maxpos = 0;
|
var maxpos = 0;
|
||||||
var offset=0;
|
var offset = 0;
|
||||||
|
|
||||||
|
|
||||||
if (parseInt(formaid) < 33373) {
|
if (parseInt(formaid) < 33373) {
|
||||||
offset=parseInt(formaid)
|
offset = parseInt(formaid)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parseInt(formaid) > 33373 && parseInt(formaid) < 66588) {
|
if (parseInt(formaid) > 33373 && parseInt(formaid) < 66588) {
|
||||||
listaforme = formeseconda;
|
listaforme = formeseconda;
|
||||||
cantica = 2;
|
cantica = 2;
|
||||||
offset=parseInt(formaid)-33374
|
offset = parseInt(formaid) - 33374
|
||||||
|
|
||||||
}
|
}
|
||||||
if (parseInt(formaid) > 66587 && parseInt(formaid) < 99314) {
|
if (parseInt(formaid) > 66587 && parseInt(formaid) < 99314) {
|
||||||
listaforme = formeterza;
|
listaforme = formeterza;
|
||||||
cantica = 3;
|
cantica = 3;
|
||||||
offset=parseInt(formaid)-66588
|
offset = parseInt(formaid) - 66588
|
||||||
|
|
||||||
}
|
}
|
||||||
if (parseInt(formaid) > 99314 || parseInt(formaid) < 0){
|
if (parseInt(formaid) > 99314 || parseInt(formaid) < 0) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
maxpos = listaforme.length - 1
|
maxpos = listaforme.length - 1
|
||||||
var pos = 0
|
var pos = 0
|
||||||
var startindex=Math.max(0, (offset-25))
|
var startindex = Math.max(0, (offset - 25))
|
||||||
|
|
||||||
//console.log('Forma id: '+formaid+' startindex '+ startindex+' offset '+offset+' ('+cantica+')')
|
//console.log('Forma id: '+formaid+' startindex '+ startindex+' offset '+offset+' ('+cantica+')')
|
||||||
for (i=startindex; i<listaforme.length; i++){
|
for (i = startindex; i < listaforme.length; i++) {
|
||||||
var tmpos=listaforme[i].split('_')[2]
|
var tmpos = listaforme[i].split('_')[2]
|
||||||
if (tmpos==formaid){
|
if (tmpos == formaid) {
|
||||||
pos=i;
|
pos = i;
|
||||||
//console.log(' in pos: '+pos)
|
//console.log(' in pos: '+pos)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*for (const [index, element] of listaforme.entries()) {
|
/*for (const [index, element] of listaforme.entries()) {
|
||||||
if(element.split('_')[2]==formaid){
|
if(element.split('_')[2]==formaid){
|
||||||
pos=index;
|
pos=index;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
var item = listaforme[pos].split('_');
|
var item = listaforme[pos].split('_');
|
||||||
var numverso = item[3]
|
var numverso = item[3]
|
||||||
var spannum=(11*limitv)
|
var spannum = (11 * limitv)
|
||||||
|
|
||||||
var contextinf = Math.max(minpos, parseInt(pos) - spannum)
|
var contextinf = Math.max(minpos, parseInt(pos) - spannum)
|
||||||
var contextsup = Math.min(maxpos, parseInt(pos) + spannum)
|
var contextsup = Math.min(maxpos, parseInt(pos) + spannum)
|
||||||
for (j = contextinf; j < contextsup + 1; j++) {
|
for (j = contextinf; j < contextsup + 1; j++) {
|
||||||
|
@ -514,10 +518,17 @@ function buildSQ(stquery) {
|
||||||
if (stquery['Clausola0']['opzioni_testo'] == 'prefisso') {
|
if (stquery['Clausola0']['opzioni_testo'] == 'prefisso') {
|
||||||
strval = "^" + searchtext.trim();
|
strval = "^" + searchtext.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var filtroContesto = getFiltroContesto(JSON.parse(stquery['Clausola0']['contesto']));
|
||||||
|
|
||||||
var filtroContesto=getFiltroContesto(JSON.parse(stquery['Clausola0']['contesto']));
|
if (filtroContesto.length>0){
|
||||||
|
for (tmpc of filtroContesto){
|
||||||
|
console.log(filtroContesto[0])
|
||||||
|
parsedquery.where.splice(4, 0, tmpc)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
parsedquery.where[0].expression.args[1].value = strval;
|
parsedquery.where[0].expression.args[1].value = strval;
|
||||||
if (stquery['Clausola0']['lemma_forma'] == 'lemma')
|
if (stquery['Clausola0']['lemma_forma'] == 'lemma')
|
||||||
parsedquery.where[0].expression.args[0].value = "lm";
|
parsedquery.where[0].expression.args[0].value = "lm";
|
||||||
|
@ -534,18 +545,26 @@ function buildSQ(stquery) {
|
||||||
|
|
||||||
//Filtro Contesto
|
//Filtro Contesto
|
||||||
|
|
||||||
function getFiltroContesto(datiContesto){
|
function getFiltroContesto(datiContesto) {
|
||||||
var cantica=0;
|
var cantica = 0;
|
||||||
for (contestoCantica of datiContesto){
|
var canticheids= new Set ()
|
||||||
|
var contextids=[]
|
||||||
|
for (contestoCantica of datiContesto) {
|
||||||
cantica++;
|
cantica++;
|
||||||
for (const [index, element] of contestoCantica.entries()) {
|
for (const [index, element] of contestoCantica.entries()) {
|
||||||
if(element==1)
|
if (element == 1){
|
||||||
console.log('Cantica '+cantica+', Canto '+(parseInt(index)+1));
|
canticheids.add(cantica)
|
||||||
}
|
console.log('Cantica ' + cantica + ', Canto ' + (parseInt(index) + 1));
|
||||||
|
contextids.push (parseInt(index) + 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(contextids.length>0)
|
||||||
|
return (buildFilterContext(contextids, canticheids))
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildStatementClause(clause, parsedquery, whereind, theplace) {
|
function buildStatementClause(clause, parsedquery, whereind, theplace) {
|
||||||
|
@ -735,6 +754,96 @@ function getStringFilter(filter, opzione) {
|
||||||
};
|
};
|
||||||
return (strval)
|
return (strval)
|
||||||
}
|
}
|
||||||
|
//costruzione filtri per query
|
||||||
|
|
||||||
|
//filtri contesto
|
||||||
|
function buildFilterContext(contextids, contextcantiche) {
|
||||||
|
resfilters=[]
|
||||||
|
var filtercontexttemplate = `{
|
||||||
|
"type": "filter",
|
||||||
|
"expression": {
|
||||||
|
"type": "operation",
|
||||||
|
"operator": "in",
|
||||||
|
"args": [
|
||||||
|
{
|
||||||
|
"termType": "Variable",
|
||||||
|
"value": "num"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
|
||||||
|
var filtercontextcantichetemplate = `{
|
||||||
|
"type": "filter",
|
||||||
|
"expression": {
|
||||||
|
"type": "operation",
|
||||||
|
"operator": "in",
|
||||||
|
"args": [
|
||||||
|
{
|
||||||
|
"termType": "Variable",
|
||||||
|
"value": "t_cantica"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
|
||||||
|
var itemcontexttemplate = `
|
||||||
|
{
|
||||||
|
"termType": "Literal",
|
||||||
|
"value": "na",
|
||||||
|
"language": "",
|
||||||
|
"datatype": {
|
||||||
|
"termType": "NamedNode",
|
||||||
|
"value": "http://www.w3.org/2001/XMLSchema#short"
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
var canticacontexttemplate= `
|
||||||
|
{
|
||||||
|
"termType": "Literal",
|
||||||
|
"value": "na",
|
||||||
|
"language": "",
|
||||||
|
"datatype": {
|
||||||
|
"termType": "NamedNode",
|
||||||
|
"value": "http://www.w3.org/2001/XMLSchema#string"
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var contextfilter=[]
|
||||||
|
|
||||||
|
filters=JSON.parse(filtercontexttemplate)
|
||||||
|
cantichefilters=JSON.parse(filtercontextcantichetemplate)
|
||||||
|
|
||||||
|
//forEach(() => { /* ... */ } )
|
||||||
|
for (var ids of contextids){
|
||||||
|
var myfilter= JSON.parse(itemcontexttemplate);
|
||||||
|
myfilter['value']=ids.toString()
|
||||||
|
contextfilter.push(myfilter)
|
||||||
|
}
|
||||||
|
if (contextfilter.length>0){
|
||||||
|
filters['expression']['args'].push(contextfilter)
|
||||||
|
resfilters.push(filters)
|
||||||
|
}
|
||||||
|
|
||||||
|
var canticheliteral=['Inferno', 'Purgatorio', 'Paradiso']
|
||||||
|
contextfilter=[]
|
||||||
|
|
||||||
|
if(contextcantiche.size < 3){
|
||||||
|
contextcantiche.forEach((value) => {
|
||||||
|
var cfilter=JSON.parse(canticacontexttemplate);
|
||||||
|
cfilter['value']=canticheliteral[value-1]
|
||||||
|
contextfilter.push(cfilter)
|
||||||
|
})
|
||||||
|
cantichefilters['expression']['args'].push(contextfilter)
|
||||||
|
resfilters.push(cantichefilters)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return resfilters
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function buildFilterStatement(target, filter, opzione) {
|
function buildFilterStatement(target, filter, opzione) {
|
||||||
|
|
||||||
var filtertemplate = `{
|
var filtertemplate = `{
|
||||||
|
|
Loading…
Reference in New Issue