--- /dev/null
+<HTML>
+<HEAD>
+<SCRIPT language="Javascript">
+var inputok=0;
+function listrvars()
+ {
+ for (num=0; num<top.norvars; num++)
+ {
+ document.write("<OPTION value="+top.rvars[num]+">"+top.rvars[num]);
+ }
+ }
+function listsvars()
+ {
+ for (num=0; num<top.nosvars; num++)
+ {
+ document.write("<OPTION value="+top.svars[num]+">"+top.svars[num]);
+ }
+ }
+function listvvars()
+ {
+ for (num=0; num<top.novvars; num++)
+ {
+ document.write("<OPTION value="+top.vvars[num]+">"+top.vvars[num]);
+ }
+ }
+function help()
+ {
+with (document.form1) {
+ if (selopt[0].checked)
+ alert ("Turns a list of strings which cannot have attributes (the [val]) in a list of strings which can have them, but initially has none (a [set]).");
+ if (selopt[1].checked)
+ alert ("Taken a list of posix regular expressions, 'pattern [val]' searches the HELM library for all the URIs which match with at least one of those and returns a [set] representing them.");
+ if (selopt[2].checked)
+ alert ("A [svar] represents a list of URIs with attributes.");
+ if (selopt[3].checked)
+ alert ("A [rvar] is a single URI with attributes.");
+ if (selopt[4].checked)
+ alert ("Parenthesis are employed to force precedence between operators.");
+ if (selopt[5].checked)
+ alert ("The [path] you must enter represents a relation; this production returns a [set] composed by the union of all the URIs which match the chosen relation in the [val] you will enter afterwards, without attributes. If you select 'inverse', you'll obtain a list of all the URIs for which the [val] matches the chosen relation, 'sub' and 'super' modify the result depending on the chosen relation and the last input box allows you to add attributes to the result.");
+ if (selopt[6].checked)
+ alert ("This production returns a [set] composed by all the URIs in the given [set] which match the condition in the given [boole].");
+ if (selopt[7].checked)
+ alert ("'Union' returns a [set] which is the union of the two given [set]; should an URI be present in each [set] with different attributes, it will be included in the result only once with all the attributes.\n'Intersect' returns a [set] which contains the cartesian product of the URIs listed in each given [set].\n'Diff' returns a [set] which contains the URIs found in the first given [set] but not in the second. Attributes are ignored.");
+ if (selopt[8].checked)
+ alert ("Allows you to assign a value to a [svar]");
+ if (selopt[9].checked)
+ alert ("Allows you to assign a value to a [vvar]");
+ }
+ }
+function choice()
+{
+top.stadd="";
+with (document.form1) {
+ inputok=0;voidfield=0;top.wrong=0;
+ if (selopt[0].checked) {
+ top.stadd="ref [val]";
+ inputok=1;
+ }
+ if (selopt[1].checked) {
+ top.stadd="pattern [val]";
+ inputok=1;
+ }
+ if (selopt[2].checked) {
+ top.stadd=set1.value;
+ if (set1.value!="") {inputok=1} else voidfield=1;
+ }
+ if (selopt[3].checked) {
+ top.stadd=set2.value;
+ if (set2.value!="") {inputok=1} else voidfield=1;
+ }
+ if (selopt[4].checked) {
+ top.stadd="([set])";
+ inputok=1;
+ }
+ if (selopt[5].checked) {
+ if (set5.value.charAt(set5.value.length-1)==","){set5.value=set5.value.substring(0,set5.value.length-1)}
+ if (set5.value.length<7) {set5.value=""};
+ set4.value=top.tpa(set4.value);
+ top.stadd="relation "+set25.value+" "+set3.value+" "+set4.value+" [val] "+set5.value;
+ top.gramcheck("qp",set4.value);
+ //alert(set5.value.charAt(set5.value.length-1));
+ top.stadd=top.tpa(top.stadd);
+ //while (top.stadd.indexOf("<")>-1)
+ //{top.stadd=top.stadd.replace("<","<");}
+ if (set5.value!="")
+ {top.gramcheck("vlist",set5.value);}
+ else inputok=1;
+ }
+ if (selopt[6].checked) {
+ top.stadd="select @"+set6.value+" in [set] where [boole]";
+ top.gramcheck("id",set6.value);
+ if ((set6.value!="") && (inputok==1))
+ {
+ top.rvars[top.norvars]="@"+set6.value;
+ top.norvars++;
+ }
+ }
+ if (selopt[7].checked) {
+ top.stadd="[set] "+set7.value+" [set]";
+ inputok=1;
+ }
+ if (selopt[8].checked) {
+ top.stadd="let %"+set8.value+" be [set] in [set]";
+ top.gramcheck("id",set8.value);
+ if ((set8.value!="") && (inputok==1))
+ {
+ top.svars[top.nosvars]="%"+set8.value;
+ top.nosvars++;
+ }
+ }
+ if (selopt[9].checked) {
+ top.stadd="let $"+set9.value+" be [val] in [set]";
+ top.gramcheck("id",set9.value);
+ if ((set9.value!="") && (inputok==1))
+ {
+ top.vvars1[top.novvars1]="$"+set9.value;
+ top.novvars1++;
+ }
+ }
+ if (selopt[10].checked) {
+ set10.value=top.tpa(set10.value);
+ top.stadd=set10.value;
+ if (set10.value!="") {inputok=1} else voidfield=1;
+ }
+ }
+if (top.stadd!="" && inputok==1) {top.aggq()}
+ else if (voidfield==1) alert("You left at least one field unfilled");
+}
+</SCRIPT>
+</HEAD>
+<BODY>
+<h1> <SCRIPT language="Javascript">document.write(top.ltr) </SCRIPT>
+<input type="button" value="<-" onmouseOver="top.help(-8)" onclick="top.annulla()">
+<input type="button" value="->" onmouseOver="top.help(-81)" onclick="top.ripristina()"></h1>
+<h2> Select one of the following: </h2>
+<form name="form1" action="Javascript:choice();" method="get">
+<input type="radio" name="selopt"> ref [val] <br>
+<input type="radio" name="selopt"> pattern [val] <br>
+<input type="radio" name="selopt"> <select name="set1" type=text onFocus="selopt[2].checked=true;top.help(6)">
+<SCRIPT language=Javascript> listsvars(); </SCRIPT>
+</select>
+<br>
+<input type="radio" name="selopt"> <select name="set2" type=text onFocus="selopt[3].checked=true;top.help(4)">
+<SCRIPT language=Javascript> listrvars(); </SCRIPT>
+</select>
+<br>
+<input type="radio" name="selopt"> ( [set] ) <br>
+<input type="radio" name="selopt"> relation
+<select name="set25" onFocus="selopt[5].checked=true">
+<OPTION selected value="">
+<OPTION value=inverse> inverse
+</select>
+<select name="set3" onFocus="selopt[5].checked=true">
+<OPTION selected value="">
+<OPTION value=sub> sub
+<OPTION value=super> super
+</select>
+<input name="set4" type=text size=15 value="""" onFocus="selopt[5].checked=true;top.help(5)">
+[val] <input name="set5" type=text size=20 onFocus="selopt[5].checked=true;top.help(2);if (this.value=='') this.value='attr $';">
+<br>
+<input type="radio" name="selopt"> select @ <input name="set6" type=text onFocus="selopt[6].checked=true;top.help(3)">
+in [set] where [boole] <br> <input type="radio" name="selopt"> [set]
+<select name="set7" onFocus="selopt[7].checked=true">
+<OPTION value=union> union
+<OPTION value=intersect> intersect
+<OPTION value=diff> diff
+</select>
+[set] <br>
+<input type="radio" name="selopt"> let %<input name="set8" type=text onFocus="selopt[8].checked=true;top.help(3)"> be [set] in [set] <br>
+<input type="radio" name="selopt"> let $<input name="set9" type=text onFocus="selopt[9].checked=true;top.help(3)"> be [val] in [set] <br>
+<input type="radio" name="selopt"> <input name="set10" type=text
+onFocus="selopt[10].checked=true;top.help(1)"> <br>
+<input type="submit" value="compose"><input type="button" value="get help" onclick="help()">
+<!--input type="button" value="compose" onclick="choice()"><!--input type="button" value="get help" onclick="help()">
+</form>
+</BODY>
+</HTML>