btw, the intial value "" (empty string) of string variables has
historical reasons. Maybe we should switch it to null?
Peter
Am 09.05.2017 um 09:03 schrieb Peter Klügl:
> Hi,
>
>
> thanks. I've taken the liberty of creating a jira issue for this. I will
> fix it soon.
>
>
> Best,
>
>
> Peter
>
>
> Am 09.05.2017 um 08:08 schrieb Wolf-Dietrich Materna:
>> Hello,
>>
>> Variables in Ruta scripts are not initialized properly by RutaEngine
>> if their
>>
>> script is called by others.
>>
>>
>>
>> We found this issue in Ruta 2.3.1, but it’s still in Ruta 2.6.0.
>>
>> I attached the sample project TestVariable.zip to this mail.
>>
>>
>>
>> Example: script3.ruta
>>
>> ----
>>
>> DECLARE Value(STRING value);
>>
>> STRING value;
>>
>> W{-> CREATE(Value, "value" = value), ASSIGN(value, W.ct)};
>>
>> ----
>>
>> Creates an annotation "Value" with an empty feature "value".
>>
>> The variable "value" stores the word (and is evaluated by other rules
>> – the real use case doesn't matters here).
>>
>>
>>
>> Input testfiles:
>>
>> input-01.txt: snark
>>
>> input-02.txt: cat
>>
>>
>>
>> Output after running Ruta with script3.ruta:
>>
>> input-01.txt.xmi: Value annotation for "snark" with an empty value (nil)
>>
>> input-02.txt.xmi: Value annotation for "cat" with an empty value (nil)
>>
>> => works as expected.
>>
>>
>>
>> We added two scripts to call finally script3.ruta in the order
>>
>> script1 calls script2 => script2 calls script3 => scripts3
>>
>> to creates Value annotation.
>>
>> (our real project is complex - uses packages ...)
>>
>>
>>
>> Now we call script1.ruta on the same input, but the output annotation
>> Value
>>
>> contains a wrong value feature for all documents after the first.
>>
>> input-01.txt.xmi: Value annotation for "snark" with an empty value (nil)
>>
>> input-02.txt.xmi: Value annotation "cat" with value feature "snark"
>> (instead
>>
>> of nil as before).
>>
>> It seems the variable is not initialized properly if it is defined in
>> a sub-script, which is called by other scripts.
>>
>>
>>
>> It doesn't help to initialized the variable in script3, e.g:
>>
>> STRING value = "dog"
>>
>> ----
>>
>> The output is unchanged the Value annotation return the stored variable,
>>
>> which was set by script3.ruta while processing the first input file.
>>
>>
>>
>> One of my colleguage examined the issue and proposed to patch
>> RutaEngine class to solve this issue.
>>
>> We added the following lines to:
>>
>> private void resetEnvironment(RutaModule module, CAS cas):
>>
>> ---
>>
>> 641a642,646
>>
>>> final Collection<RutaModule> scripts = module.getScripts().values();
>>> for (final RutaModule subModule : scripts) {
>>> resetEnvironment(subModule, cas);
>>> }
>> ---
>>
>>
>>
>> This solves the issue in our applications which integrates Ruta.
>>
>> Known workaround: clear or initialize the variables at the end of the
>> script.
>>
>> But I prefer if the issue is fixed in the RutaEngine class.
>>
>>
>>
>> Regards,
>>
>> Wolf-Dietrich Materna
>>
>>
>>
>