3 <SCRIPT language="Javascript">
4 var query="*"; // stringa che contiene la query nel suo stato attuale.
7 var storepb=1; // queste tre variabili contengono il numero da assegnare al prossimo simbolo set, val o boole per creare il link nel frame in alto a sinistra.
8 var stadd; // contiene la stringa da aggiungere alla query.
9 var fb; // contiene la stringa da aggiungere alla query prima che i set,val e boole siano convertiti in link.
10 var ltr="*"; // qui viene memorizzato qual è l' ultimo link su cui si è cliccato.
14 var novvars2=0; // queste tre variabili servono per sapere dove memorizzare i nomi delle rvar,svar e vvar inserite dall' utente.
16 var ricordaliaslist=0;
18 var numeroazioniannullate=0;
19 var terminecic="";var listaliases="";vlds=new Array();//contengono i parametri per dialogare col server in caso di ambiguità nella Match Conclusion.
20 var disambiguation_choices = "";
21 aliasglob=new Array();//per conservare la lista degli alias
26 vvars1=new Array(100);
27 vvars2=new Array(100); // contengono le rvar,svar e vvar inserite dall' utente.
41 aliasglob=new Array();
43 numeroazioniannullate=0;
46 // @processorURL@ will be substituted by the searchEngine using
48 var processorURL="@processorURL@";
50 function ask_uwobo(url)
52 return (top.topurl+"/ask_uwobo?url="+escape(processorURL + "apply?xmluri=" + escape(url) + "&keys=T1%2CT2%2CL%2CE¶m.processorURL="+escape(processorURL)+"¶m.getterURL=http%3A//mowgli.cs.unibo.it%3A58081/¶m.proofcheckerURL=http%3A//mowgli.cs.unibo.it%3A58084/¶m.draw_graphURL=http%3A//mowgli.cs.unibo.it%3A58083/¶m.uri_set_queueURL=http%3A//mowgli.cs.unibo.it%3A58082/¶m.UNICODEvsSYMBOL=unicode¶m.keys=d_c%2CC1%2CHC2%2CL¶m.thkeys=T1%2CT2%2CL%2CE¶m.embedkeys=d_c%2CTC1%2CHC2%2CL¶m.doctype-public=-//W3C//DTD%20XHTML%201.0%20Transitional//EN¶m.encoding=iso-8859-1¶m.thencoding=iso-8859-1¶m.media-type=text/html¶m.thmedia-type=text/html¶m.interfaceURL=http%3A//helm.cs.unibo.it/helm/html/cic/index.html¶m.thinterfaceURL=http%3A//helm.cs.unibo.it/helm/html/theory/index.html¶m.CICURI=dummy:query_result¶m.naturalLanguage=yes¶m.annotations=no¶m.topurl=http://helm.cs.unibo.it/helm&prop.method=html"));
54 function help(w) // quando invocata, visualizza l' help relativo ad un oggetto. Di solito è legata ad un evento onFocus o onMouseOver.
58 case -10: hw.document.write("Insert an <a href="+top.topurl+top.action+"grammarpdq.html#Id target=gw>Id</a> or an <a href="+top.topurl+top.action+"grammarpdq.html#Uri target=gw>Uri</a> here.")
60 case -9: hw.document.write("By clicking this you may add or remove aliases as you wish.")
62 case -81: hw.document.write("Allows you to recover your last input")
64 case -8: hw.document.write("Allows you to delete your last input")
66 case -7: hw.document.write("Erases your query and starts a new pre-defined query, you will keep your list of aliases.")
68 case -6: hw.document.write("Puts this string in the current cursor position. This button works only with Internet Explorer.")
70 case -5: hw.document.write("Erases your query and starts a new one.")
72 case -4: hw.document.write("If you click this your query will be processed and the results will appear in the frame above.")
74 case -3: hw.document.write("Substitutes your query with the text written in the area above. Unless you have a good knowledge of MathQL, it's recommended that you use this only to recover errors.")
76 case -2: hw.document.write("This is the edit/submit window. You can modify your query here, but be aware that no syntax check will be performed and that if you enter a <a href="+top.topurl+top.action+"grammar.html#rvar target=gw>variable</a> it won't be available for quick composition later. You may also want to add a <a href="+top.topurl+top.action+"grammar.html#set target=gw>set</a>, a <a href="+top.topurl+top.action+"grammar.html#val target=gw>val</a> or a <a href="+top.topurl+top.action+"grammar.html#boole target=gw>boole</a> somewhere in the query. If you do, write '<set>','<val>' or '<bol>' in the point you'd like it to appear, or use the buttons on the right if you are using IE. When you're done with the query, click the Submit button.")
78 case -1: hw.document.write("You may see the grammar here.")
80 case 0: hw.document.write("")
82 case 1: hw.document.write("You may enter an arbitrary statement here; be careful since syntax errors won't be detected.");
84 case 2: hw.document.write("Enter an <a href="+top.topurl+top.action+"grammar.html#attr_list target=gw>attr_list</a> here.");
86 case 3: hw.document.write("Enter an <a href="+top.topurl+top.action+"grammar.html#id target=gw>id</a> here.");
88 case 4: hw.document.write("You must select one previously entered <a href="+top.topurl+top.action+"grammar.html#rvar target=gw>rvar</a>. If you haven't already entered at least one, you can't choose this. ");
90 case 5: hw.document.write("Enter a <a href="+top.topurl+top.action+"grammar.html#path target=gw>path</a> here.");
92 case 6: hw.document.write("You must select one previously entered <a href="+top.topurl+top.action+"grammar.html#svar target=gw>svar</a>. If you haven't already entered at least one, you can't choose this. ");
94 case 7: hw.document.write("Enter a <a href="+top.topurl+top.action+"grammar.html#string_list target=gw>string_list</a> here.");
96 case 8: hw.document.write("You must select one <a href="+top.topurl+top.action+"grammar.html#vvar target=gw>vvar</a> previously entered as an 'attr'. If you haven't already entered at least one, you can't choose this. ");
98 case 81: hw.document.write("You must select one <a href="+top.topurl+top.action+"grammar.html#vvar target=gw>vvar</a> previously entered in a 'let' statement. If you haven't already entered at least one, you can't choose this. ");
100 case 9: hw.document.write("Enter a single <a href="+top.topurl+top.action+"grammar.html#quoted_string target=gw>quoted_string</a> here.");
104 function tpa(quotpath)
106 while (quotpath.indexOf("<")>-1)
107 {quotpath=quotpath.replace("<","<");}
108 while (quotpath.indexOf(">")>-1)
109 {quotpath=quotpath.replace(">",">");}
112 function idcheck(ident)
115 partediid=/[a-zA-Z0-9_\-\']/;
116 if (!lettera.test(ident.charAt(0))){alert("an Id must begin with a letter.");return(0)}
117 while (ident.length>0)
119 ident=ident.substring(1,(ident.length));
121 if (!partediid.test(ident.charAt(0))){alert(ident.charAt(0)+" is not a valid character for an Id.");return(0);}
125 function uricheck(ident)
128 cic=ident.substring(0,5);//alert(cic);
129 if (cic!="cic:/"){alert("an Uri must begin with the string 'cic:/'");return(0);}
130 ident=ident.substring(5,ident.length);//alert(ident);
131 if (ident.indexOf(".")<0){alert("an Uri must contain a '.'");return(0);}
132 ident1=ident.substring(0,ident.indexOf("."));//alert(ident1);
133 ident2=ident.substring(ident.indexOf(".")+1,ident.length);//alert(ident2);
134 while (ident1.length>0)
136 if (ident1.indexOf("/")>-1)
138 if (idcheck(ident1.substring(0,ident1.indexOf("/")))==0){return (0)}
139 ident1=ident1.substring(ident1.indexOf("/")+1,ident1.length);//alert(ident1);
141 else {if (idcheck(ident1)==0){return (0)}
144 if (ident2=="con"||ident2=="var"){return(1)}
145 if (ident2.substring(0,6)!="ind#1/"){alert ("syntax error in the Uri.");return(0);}
146 ident2=ident2.substring(6,ident2.length);//alert(ident2);
147 if (!cifra.test(ident2.charAt(0))){alert ("syntax error in the Uri.");return(0);}
148 if (ident2.indexOf("/")>-1)
150 while (ident2.charAt(0)!="/")
153 if (!cifra.test(ident2.charAt(0))){alert ("syntax error in the Uri.");return(0);}
154 ident2=ident2.substring(1,ident2.length);
157 while (ident2.length>0)
160 ident2=ident2.substring(1,ident2.length);
161 if (ident2.length>0){
162 if (!cifra.test(ident2.charAt(0))){alert ("syntax error in the Uri.");return(0);}
167 function gramcheck(how,what) // esegue il controllo sintattico sulla stringa "what", controllando che rispetti i requisiti indicati dalla clausola "how". Se qualcosa non è ok, la variabile "wrong" viene posta ad 1 e la stringa da aggiungere viene ignorata, mentre viene visualizzato un apposito messaggio di errore.
170 var alpha=/[A-Za-z:_]/
173 case "qsl": // lista di quoted string
174 if (what.charAt(0)!="{") {gramcheck("qs",what);break;}
175 if (what.charAt(what.length-1)!="}") {alert ("The list must end with a '}'.");wrong=1;break;}
176 what=what.substring(1,what.length-1);//alert (what);
177 while (what.indexOf("\",\"")>-1)
179 as=what.substring(0,what.indexOf("\",\"")+1);//alert(as);
180 what=what.substring(what.indexOf("\",\"")+2,what.length);//alert(what);
183 gramcheck("qs",what);
185 case "qp": // quoted path
186 if (what.charAt(0)!="\"") {alert ("A quoted string must be included between quotes."); wrong=1; break;}
187 if (what.charAt(what.length-1)!="\"") {alert ("A quoted string must be included between quotes."); wrong=1; break;}
188 while (what.indexOf("\"/\"")>-1)
190 as=what.substring(0,what.indexOf("\"/\"")+1);//alert(as);
191 what=what.substring(what.indexOf("\"/\"")+2,what.length);//alert(what);
194 gramcheck("qs",what);
196 case "qs": // quoted string
197 if (what.charAt(0)!="\"") {alert ("A quoted string must be included between quotes."); wrong=1; break;}
198 if (what.charAt(what.length-1)!="\"") {alert ("A quoted string must be included between quotes."); wrong=1; break;}
199 what=what.substring(0,what.length-1);//alert (what);
201 else while (what.length>0)
203 what=what.substring(1,what.length);
204 if (what.charAt(0)=="\"" && slash==0) {alert ("A \" in a quoted string must be preceded by a \\.");wrong=1;break;}
205 if (what.charAt(0)=="\\") {slash=1} else {slash=0}
206 if (slash==1 && what.length==1) {alert ("A \\ in a quoted string must be followed by something.");wrong=1;}
209 case "vlist": // lista di vvar (tutto ciò che si trova dopo "attr")
210 //alert(what.substring(0,4));
211 if ((what.substring(0,4))!="attr"){wrong=1;alert("A vvar_list must begin with the word 'attr'")}
212 what=what.substring(5,(what.length));vl=what;
213 //alert(what+"what");
214 while (what.length>0)
216 if (what.indexOf(",")>0) {vv=(what.substring(0,what.indexOf(",")));}
219 if (vv.charAt(0)!="$"){wrong=1;alert("A vvar must begin with a '$'");}
220 if (vv.indexOf("<-")>0)
222 what=what.substring(vv.length+1,what.length);
223 //alert(what+" nuovowhat "+wrong);
224 path=vv.substring(vv.indexOf("<-")+2,vv.length);
225 //alert(path+" path "+wrong);
226 gramcheck("qp",path);
227 vv=vv.substring(1,(vv.indexOf("<-")));
228 //alert(vv+" vv "+wrong);
231 else {wrong=1;alert("An Assign must contain a '<-'.");what="";}
232 //alert (what+"what");
236 //alert (what.charAt(0));
237 if (!alpha.test(what.charAt(0))) {wrong=1;alert("An ID must begin with a letter , ':' , or '_' .");}
238 while (what.length>1) {
239 what=what.substring(1,(what.length));
240 if (!alpha.test(what.charAt(0)) && !numero.test(what.charAt(0)))
241 {wrong=1;alert(what.charAt(0)+" is not a valid character for an id.");}
242 //document.write(what+"<BR>");
247 if (how=="vlist" && wrong==0) // nel caso in cui sia stato eseguito il controllo su una lista di vvar e non siano stati riscontrati errori, tutte le variabili inserite vengono memorizzate.
251 if (vl.indexOf(",")>-1)
253 vvars2[novvars2++]=vl.substring(0,vl.indexOf("<"));
254 vl=vl.substring(vl.indexOf(",")+1,vl.length);
258 vvars2[novvars2++]=vl.substring(0,vl.indexOf("<"));;
262 //alert ("esco dal loop");
264 if (wrong==0) {cw.inputok=1} else stadd="";
266 function savelink(n,t) // invocata quando si clicca su un link, memorizza quale di questi debba poi essere sostituito.
268 if (t=='s') { top.ltr="[?set"+String(n)+"]";}
269 if (t=='v') { top.ltr="[?val"+String(n)+"]";}
270 if (t=='b') { top.ltr="[?bol"+String(n)+"]";}
273 function aggcw() // invocata automaticamente ad ogni modifica della variabile "query", fa apparire nel frame in alto a destra il menu di composizione relativo al primo link della query. Consente quindi di comporre tutta la query senza mai cliccare su alcun link.
278 if (pq.indexOf("[?")>-1)
280 ltr=pq.slice(pq.indexOf("[?"));
281 ltr=ltr.substring(ltr.indexOf("[?"),(ltr.length-ltr.indexOf("[?"))-(ltr.length-ltr.indexOf("]")-1));
282 wto=ltr.substring(2,5);
283 if (wto=="set") {window.open(top.topurl+action+"set.html","cw");pq="";}
284 else if (wto=="val") {window.open(top.topurl+action+"val.html","cw");pq="";}
285 else if (wto=="bol") {window.open(top.topurl+action+"boole.html","cw");pq="";}
286 else pq=pq.substring(pq.indexOf("[?")+2,pq.length);
288 else {window.open(top.topurl+action+"blank.html","cw");pq="";}
291 function aggform() // aggiorna il form nel frame centrale. Invocata ad ogni cambio della variabile "query".
294 while (cquery.indexOf("<")>-1)
296 cquery=cquery.replace(cquery.substring(cquery.indexOf("<"),cquery.indexOf(">")+1),"");
299 while (cquery.indexOf("[?")>-1)
302 if (cquery.indexOf("]")>-1)
304 while (cquery.indexOf("]")<cquery.indexOf("[?") && cquery.indexOf("]")>-1)
305 {cquery=cquery.replace("]","q+u+a+d+r+a+c+h+i+u+s+a");}//alert("loop"+cquery.indexOf("]")+cquery.indexOf("[?"))}
306 ag1=cquery.slice(cquery.indexOf("[?"));//alert(ag1);
307 ag1=ag1.substring(ag1.indexOf("[?"),(ag1.length-ag1.indexOf("[?"))-(ag1.length-ag1.indexOf("]")));//alert(ag1);
308 ag2=ag1.substring(2,5);//alert(ag2);
309 if (ag2=="set") cquery=cquery.replace(cquery.substring(cquery.indexOf("[?"),cquery.indexOf("]")+1),"<set>");
310 else if (ag2=="val") cquery=cquery.replace(cquery.substring(cquery.indexOf("[?"),cquery.indexOf("]")+1),"<val>");
311 else if (ag2=="bol") cquery=cquery.replace(cquery.substring(cquery.indexOf("[?"),cquery.indexOf("]")+1),"<boole>");
312 else cquery=cquery.replace(cquery.substring(cquery.indexOf("[?"),cquery.indexOf("[?")+1),"q+u+a+d+r+a");
315 else {cquery=cquery.replace("[?","q+u+a+d+r+a?")}
318 while (cquery.indexOf("q+u+a+d+r+a+c+h+i+u+s+a")>-1)
320 cquery=cquery.replace("q+u+a+d+r+a+c+h+i+u+s+a","]");
322 while (cquery.indexOf("q+u+a+d+r+a")>-1)
324 cquery=cquery.replace("q+u+a+d+r+a","[");
326 while (cquery.indexOf("<")>-1)
328 cquery=cquery.replace("<","<");
330 while (cquery.indexOf(">")>-1)
332 cquery=cquery.replace(">",">");
336 function ripristina()
338 //alert (actinput+" "+storia.length);
339 if (numeroazioniannullate>0)
341 numeroazioniannullate--;
342 query=storia[actinput+1];actinput++;
344 qw.document.write(query);
353 //alert (actinput+" "+storia.length);
356 numeroazioniannullate++;
357 query=storia[actinput-1];actinput--;
359 qw.document.write(query);
362 if (query=="*"){cw.location=top.topurl+action+"set.html";ltr="*";} else {aggcw();}
366 function parse() // prende la stringa che si sta tentando di inserire nella query, aggiunge i link dove necessario e mette il risultato nella variabile "fb"
368 while (fb.indexOf("[set]")>-1){
369 if (fb.indexOf("set")>0)
371 fb=fb.replace("[set]","<A HREF="+top.topurl+action+"set.html target=cw onclick=top.savelink("+top.storeps+",'s')>[?set"+top.storeps+"]</A>");
375 while (fb.indexOf("[val]")>-1){
376 if (fb.indexOf("val")>0)
378 fb=fb.replace("[val]","<A HREF="+top.topurl+action+"val.html target=cw onclick=top.savelink("+top.storepv+",'v')>[?val"+top.storepv+"]</A>");
382 while (fb.indexOf("[boole]")>-1){
383 if (fb.indexOf("boole")>0)
385 fb=fb.replace("[boole]","<A HREF="+top.topurl+action+"boole.html target=cw onclick=top.savelink("+top.storepb+",'b')>[?bol"+top.storepb+"]</A>");
390 function aggq() // aggiorna la query sostituendo l' ultimo link editato con la stringa inserita, poi aggiorna tutti i frame.
392 //window.open(top.topurl+action+"summary.html","cw");
395 nst=ltr.substring(5,(ltr.length-1));// alert(nst+" "+ltr);
396 query=query.replace("<A HREF="+top.topurl+action+"set.html target=cw onclick=top.savelink("+nst+",'s')>"+ltr+"</A>",ltr);
397 query=query.replace("<A HREF="+top.topurl+action+"val.html target=cw onclick=top.savelink("+nst+",'v')>"+ltr+"</A>",ltr);
398 query=query.replace("<A HREF="+top.topurl+action+"boole.html target=cw onclick=top.savelink("+nst+",'b')>"+ltr+"</A>",ltr);
400 query=query.replace(ltr,fb);
401 actinput++;storia[actinput]=query;numeroazioniannullate=0;//alert (actinput+" "+storia.length);
402 qw.document.write(query);aggform();
406 var topurl=document.location.protocol+'//'+document.location.host;
408 var action="/getpage?url=";
412 // UTILITY FUNCTIONS FOR templateambigpdq1.html
413 function templateambigpdq1_armageddon()
416 top.window.open(top.topurl+top.action+"start.html","qw");
417 top.window.open(top.topurl+top.action+"blank.html","cw");
418 top.window.open(top.topurl+top.action+"blank.html","hw");
419 top.window.open(top.topurl+top.action+"blank.html","gw");
420 top.window.open(top.topurl+top.action+"blank.html","sw");
423 function templateambigpdq1_resetta()
425 if (confirm("This will erase your query and start a new one. Are you sure you want to do this?"))
426 {templateambigpdq1_armageddon();}
429 function templateambigpdq1_listauri(document,elenco)
431 for (i=0;i<elenco.length;i++)
433 document.write("<input type=checkbox name=uricheck value="+elenco[i]+"> "+elenco[i]+"<br>");
437 function templateambigpdq1_invia(document,top,elenco,ident)
439 vecchiavlds=top.vlds.length;
440 stringa=top.topurl+"/searchPattern?term="+top.terminecic;
441 stringa=stringa+"&aliases="+top.listaliases;
442 stringa=stringa+"&choices=";
444 top.vlds[top.vlds.length]=ident;
445 for (j=0;j<elenco.length;j++)
447 if (document.disamb.uricheck[j].checked)
449 top.vlds[top.vlds.length]=document.disamb.uricheck[j].value;
452 top.vlds[top.vlds.length]=";";
453 for (j=0;j<top.vlds.length;j++)
455 choices=choices+(top.vlds[j]==";"?";":escape(top.vlds[j]))+" ";
457 choices=choices.substring(0,choices.length-2);
458 stringa=stringa+escape(choices);
459 if (top.vlds.length==vecchiavlds){alert("You must select at least one of the options.");}
462 window.open(ask_uwobo(stringa),"cw");
466 function templateambigpdq1_selezionaCostanti(document,elenco) {
467 for (i=0; i<elenco.length; i++) {
468 if (elenco[i].substring(elenco[i].length-4, elenco[i].length) != ".var") {
469 document.disamb.uricheck[i].checked = true;
471 document.disamb.uricheck[i].checked = false;
478 // UTILITY FUNCTIONS FOR templateambigpdq2.html
479 function templateambigpdq2_armageddon()
482 top.window.open(top.topurl+top.action+"start.html","qw");
483 top.window.open(top.topurl+top.action+"blank.html","cw");
484 top.window.open(top.topurl+top.action+"blank.html","hw");
485 top.window.open(top.topurl+top.action+"blank.html","gw");
486 top.window.open(top.topurl+top.action+"blank.html","sw");
489 function templateambigpdq2_resetta()
491 if (confirm("This will erase your query and start a new one. Are you sure you want to do this?"))
492 {templateambigpdq2_armageddon();}
495 function templateambigpdq2_listainterpretazioni(document,elenco,labels)
497 for (i=0;i<elenco.length;i++)
499 document.write("<input type=radio name=interp value="+elenco[i]+"> "+labels[i]+"<br />");
503 function templateambigpdq2_invia(document,elenco)
505 stringa=top.topurl+"/searchPattern?term="+top.terminecic;
506 stringa=stringa+"&aliases="+(top.listaliases==""?"":"%20");
507 controllo=stringa.length;
508 for (j=0;j<elenco.length;j++)
510 if (document.disamb.interp[j].checked)
512 stringa=stringa+escape(elenco[j]);
514 // TODO da implementare nella terza fase
515 //top.aliasglob[top.aliasglob.length]=document.disamb.interp[j].value;
517 //for (k=0;k<top.aliasglob.length;k++){alert(top.aliasglob[k])}
518 //top.listaliases=top.listaliases+document.disamb.interp[j].value;//in caso di query ulteriori con la stessa lista di alias
522 if (stringa.length!=controllo)
524 window.open(ask_uwobo(stringa),"cw");
526 else {alert("You must choose one option.");}
531 // UTILITY FUNCTIONS FOR templateambigpdq3.html
532 function templateambigpdq3_init(aliases)
534 top.aliasglob = new Array();
535 for (i=0; i<aliases.length; i++) {
536 top.aliasglob[i] = aliases[i];
538 top.vlds=new Array();
539 top.window.open(top.topurl+top.action+"editorpdq.html", "sw");
544 document.write(' <FRAMESET ROWS="69%,31%"> <FRAMESET COLS="40%,60%"> <FRAMESET ROWS="46%,54%"> <FRAME NAME="qw" SRC="'+topurl+action+'start.html"> <FRAME NAME="sw" SRC="'+topurl+action+'blank.html"> </FRAMESET> <FRAME NAME="cw" SRC="'+topurl+action+'blank.html"> </FRAMESET> <FRAMESET COLS="49%,51%"> <FRAME NAME="gw" SRC="'+topurl+action+'blank.html" onFocus="help(-1)";> <FRAME NAME="hw" SRC="'+topurl+action+'blank.html"> </FRAMESET> </FRAMESET>');