The com.voicegenie.strictconformance Property

The `com.voicegenie.strictconformance` property is set to true, or Yes, to specify that the interpreter should conform strictly to the VoiceXML 2.0 specification in certain scenarios, requiring a set of behaviour changes from previous versions. It is set to false, or No, to choose not to make the set of changes. This property can be configured through the Media Server > VXML menu in the Dialogic(r) IP Media Server Web User Interface.

- Default Setting
- Recommended Configuration
  - Note about Per-Application Configuration
- Behaviour Changes
  - Note about <vxml version="2.1">

Default Setting

The `com.voicegenie.strictconformance` property is initially set to "true". Note that this script option will also affect the naming of call-related events and session variables.

Recommended Configuration

Note: Although the property is set in the platform defaults file, the property can still be configured per application by using multiple platform defaults files. That is, the platform would be configured in general, to use strict conformance, but specific applications could use a separate defaults file that disables strict conformance.

Behaviour Changes

The following chart documents the property's effects (i.e., the behaviour changes between setting `com.voicegenie.strictconformance` to "true" and "false").

Note: If an application has the `<vxml>` `version` attribute set to 2.1 (or higher), the platform will behave as if the `com.voicegenie.strictconformance` property is set to "true", regardless of its actual value in the platform defaults file.

Scenario | Behaviour when "true" | Behaviour when "false"
The `expr` and `src` attributes are used simultaneously in an `<audio>` element: `<audio src="audio.vox" expr="audiovar"/>` | Results in an `error.badfetch` event being thrown. | The value of `src` overrides `expr`.
The `bridge` attribute is not specified for a `<transfer>` element: `<transfer dest="sip:1234@host.com"/>` | The default value is "false" (i.e. use blind transfer). | The default value is "true" (i.e. use bridge transfer).
The `xmlns` attribute is not specified in the `<vxml>` element. | Results in an `error.badfetch` event being thrown. The `xmlns` attribute must be specified as follows: `<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">` Note that this applies to all application pages, any root pages, and the platform defaults file. | The `xmlns` attribute is not required.
The `version` attribute is not specified in the `<vxml>` element. | Results in an `error.badfetch` event being thrown. The `version` attribute must be specified as follows: `<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">` Note that this applies to all application pages, and the platform defaults file. | The `version` attribute is not required.
A. Attempt to `<assign>` to an undeclared variable: `<assign name="myvar" value="42"/>` OR B. Attempt to make an assignment to an undeclared variable within an ECMAScript `<script>`: `<script> function foo() { myvar = 42; } </script>` Note: Variables can be declared either by the `<var>` element in VoiceXML, or by the "var" keyword in ECMAScript. | Either of these scenarios will result in an `error.semantic` event being thrown. Note that when the `<assign>` or `<script>` is encountered, the `error.semantic` is thrown at the VoiceXML level. Therefore, the error can only be handled by a matching VoiceXML `<catch>` or `<error>`. The error cannot be caught with a `try...catch` statement within the ECMAScript itself. For example, the following ECMAScript content will cause the error, but will not catch an exception: `<script> function foo() { try { myvar = 42; } catch (e) { // ... } } </script>` | Allowed. When `<assign>` is encountered, variables will be declared if not already declared. Within ECMAScripts, variable definitions without "var" are allowed.
Failure to evaluate a `<value>` inside `<log>`: `<log> <value expr="bad expression"/> </log>` | Results in an `error.semantic` event being thrown. | The `<value>` is ignored.
A grammar returns a slot value that contains one or more "#" characters (possibly for an ambiguous result). | The slot value is only used up to the first "#" character. | The whole unchanged slot value is used.
There are no active grammars when an input is expected. | Results in an `error.semantic` event being thrown. | Allowed.
There's no input in a `<field>` (i.e. a `noinput` event occurs); what is the status of `lastresult$.utteranceaudio`? | The `lastresult$.utteranceaudio` shadow variable is not set (i.e. is undefined). | Tthe `lastresult$.utteranceaudio` shadow variable is always assigned an utterance filename, which is passed to the ASR engine to create the utterance audio file. Reference to the utteranceaudio shadow variable in cases where no audio file is created will result in an `error.badfetch` event being thrown.
There's no input in a `<record>` (i.e. a `noinput` event occurs); what is the status of the record shadow variables `$.duration`, `$.size`, `$.termchar`, `$.maxtime`, `$.dest`, and `$.filetype`? | The shadow variables are not set. | The shadow variables are set.
After DTMF input during a `<transfer>`; what is the value of the `$.inputmode` shadow variable? | The variable is set to "dtmf" (lowercase). | The variable is set to "DTMF" (uppercase).
An invalid element is encountered inside `<form>`:

    <form>
      <dummy/>
      ...
    </form>
| Results in an `error.badfetch` event being thrown. | The invalid element is ignored.

Scenario | Behaviour when "true" | Behaviour when "false"
The `analysis` attribute is not specified for a `<transfer>` element: `<transfer dest="sip:1234@host.com"/>` | The default value is "true" (i.e. perform analysis). | The default value is "false" (i.e. don't perform analysis).
An event is caught in a different page (ex. application root) from the page that the event was thrown in. | Relative URIs in the catch element are resolved relative to the page that the event was thrown in. | Relative URIs in the catch element are resolved relative to the page that catches the event.
A `<field>`'s `type` attribute references an invalid builtin type. | The `error.unsupported.builtin` event is thrown at runtime. | The `error.unsupported.builtin` event is thrown at compile time, and therefore cannot be caught by the application.
After a recognition session, more than MAXNBEST (specified by the `maxnbest` property) results are available from the ASR engine. | The length of the `application.lastresult$` array will not be longer than MAXNBEST. | The `application.lastresult$` array may be filled with more than MAXNBEST results.
The value of the `session.connection. protocol.<name>` session variable. | When `session.connection. protocol.name` is available, the `session.connection. protocol.<name>` session variable is always defined, with the `<name>` specified by `session.connection. protocol.name`. The variable is set to an ECMAScript object (which may or may not have properties, depending on the protocol being used). | The `session.connection. protocol.<name>` session variable is not always defined, depending on the protocol being used.
Use of `<prompt>` `timeout`. | When the actual time elapsed during a timeout is measured (ex. by using JavaScript in the page), it will never be less than the specified timeout. (It may be slightly longer due to the design of the platform.) | The actual timeout elapsed may be slightly shorter than the specified amount.
Use of `<prompt>` `timeout` for an empty `<prompt>` tag (i.e. one that doesn't contain any child elements or text). | The `timeout` will still be processed and used. | The `timeout`s of empty or invalid prompts are ignored.
Different `bargein` values are specified for each `<prompt>` in a sequence of queued prompts in an input item. | The `bargein` value of each prompt is honoured during the period of time in which that prompt is playing. | Within a given input item, a prompt with `bargein="true"` will cause bargein to remain enabled for all the remaining queued prompts.
A dialog (i.e. form or menu) transitions back to itself. | The dialog's event counters are reset. | The values of the dialog's event counters are preserved.