The DEFINE-GRAMMAR method, from the client to the server, provides one or more grammars and tells the server to define, download if needed, and compile the specified grammar(s).
If the recognizer resource belonging to the session is in the idle state and is able to successfully load and compile the grammar, the status will return a COMPLETE reply with Status-Code indicating success.
If the recognizer could not define the grammar for some reason, for example if the download failed or the grammar failed to compile, or the grammar was in an unsupported form, the MRCP response for the DEFINE-GRAMMAR method will contain a failure status code of 407, and a completion-cause header field describing the failure reason.
MRCPV1 DEFINE-GRAMMAR Example:
C->S:DEFINE-GRAMMAR 543258 MRCP/1.0
Content-Type:application/grammar+xml
Content-Id:helpgrammar@root-level.store
Content-Length:104
<?xml version="1.0"?>
<!-- the default grammar language is US English -->
<grammar xml:lang="en-US" version="1.0">
<rule id="request">
I need help
</rule>
</grammar>
S->C:MRCP/1.0 543258 200 COMPLETE
Completion-Cause:000 success
MRCPV2 DEFINE-GRAMMAR Example:
C->S:MRCP/2.0 ... DEFINE-GRAMMAR 543258
Channel-Identifier:32AECB23433801@speechrecog
Content-Type:application/srgs+xml
Content-ID:<helpgrammar@root-level.store>
Content-Length:...
<?xml version="1.0"?>
<!-- the default grammar language is US English -->
<grammar xmlns="http://www.w3.org/2001/06/grammar"
xml:lang="en-US" version="1.0">
<rule id="request">
I need help
</rule>
</grammar>
S->C:MRCP/2.0 ... 543258 200 COMPLETE
Channel-Identifier:32AECB23433801@speechrecog
Completion-Cause:000 success
There are a number of ways in which grammars can be specified or referenced when using MRCP, which are described in the MRCPv1 and MRCPv2 specification documents, however a brief overview of the methods supported by LumenVox are shown below.
Typically, the type of reference used when specifying a grammar is indicated in the Content-Type header of the DEFINE-GRAMMAR request.
Inline XML-Based Speech Recognition Grammar Specification (SRGS) Grammar:
When describing inline XML-Based SRGS (GrXML), the grammar text is embedded within the data of the request.
In MRCPv1, the Content-Type for inline GrXML is application/grammar+xml
C->S:DEFINE-GRAMMAR 543258 MRCP/1.0
Content-Type:application/grammar+xml
Content-Id:helpgrammar@root-level.store
Content-Length:104
<?xml version="1.0"?>
<!-- the default grammar language is US English -->
<grammar xml:lang="en-US" version="1.0">
<rule id="request">
I need help
</rule>
</grammar>
S->C:MRCP/1.0 543258 200 COMPLETE
Completion-Cause:000 success
In MRCPv2, the Content-Type for this inline GrXML is application/srgs+xml
C->S:MRCP/2.0 ... DEFINE-GRAMMAR 543258
Channel-Identifier:32AECB23433801@speechrecog
Content-Type:application/srgs+xml
Content-ID:<helpgrammar@root-level.store>
Content-Length:...
<?xml version="1.0"?>
<!-- the default grammar language is US English -->
<grammar xmlns="http://www.w3.org/2001/06/grammar"
xml:lang="en-US" version="1.0">
<rule id="request">
I need help
</rule>
</grammar>
S->C:MRCP/2.0 ... 543258 200 COMPLETE
Channel-Identifier:32AECB23433801@speechrecog
Completion-Cause:000 success
Inline ABNF-Based Speech Recognition Grammar Specification (SRGS) Grammar:
When describing inline ABNF style SRGS, the grammar text is embedded within the data of the request.
In MRCPv1, the Content-Type for inline ABNF is application/grammar
C->S:DEFINE-GRAMMAR 543259 MRCP/1.0
Content-Type:application/grammar
Content-Id:helpgrammar@root-level.store
Content-Length:...
#ABNF 1.0;
//// the default grammar language is US English ////
language en-US;
////////////////////////////////////////////////////
$request =
I need help
;
S->C:MRCP/1.0 543259 200 COMPLETE
Completion-Cause:000 success
In MRCPv2, the Content-Type for inline ABNF is application/srgs
C->S:MRCP/2.0 ... DEFINE-GRAMMAR 543259
Channel-Identifier:32AECB23433801@speechrecog
Content-Type:application/srgs
Content-ID:<helpgrammar@root-level.store>
Content-Length:...
#ABNF 1.0;
//// the default grammar language is US English ////
language en-US;
////////////////////////////////////////////////////
$request =
I need help
;
S->C:MRCP/2.0 ... 543259 200 COMPLETE
Channel-Identifier:32AECB23433801@speechrecog
Completion-Cause:000 success
Fetching Grammars from URI Reference:
Grammar documents that are located on HTTP or file servers on the local or remote machines can use Content-Type of text/uri-list. This is the same for both MRCPv1 and MRCPv2
C->S:DEFINE-GRAMMAR 543260 MRCP/1.0
Content-Type:text/uri-list
Content-Id:helpgrammar@root-level.store
Content-Length:...
session:help@root-level.store
http://www.lumenvox.com/Directory-Name-List.grxml
http://www.lumenvox.com/Department-List.grxml
http://www.lumenvox.com/TAC-Contact-List.grxml
session:menu1@menu-level.store
S->C:MRCP/1.0 543260 200 COMPLETE
Completion-Cause:000 success
C->S:MRCP/2.0 ... DEFINE-GRAMMAR 543260
Channel-Identifier:32AECB23433801@speechrecog
Content-Type:text/uri-list
Content-ID:<helpgrammar@root-level.store>
Content-Length:...
session:help@root-level.store
http://www.lumenvox.com/Directory-Name-List.grxml
http://www.lumenvox.com/Department-List.grxml
http://www.lumenvox.com/TAC-Contact-List.grxml
session:menu1@menu-level.store
S->C:MRCP/2.0 ... 543260 200 COMPLETE
Channel-Identifier:32AECB23433801@speechrecog
Completion-Cause:000 success
Mixing inline URI References:
If there is a need to combine the use of both inline and URI references when specifying grammars, the Content-Type is mixed/multipart.Embedded within the multi-part content block for MRCPv1 there may be content for the text/uri-list, application/grammar or application/grammar+xml. Embedded within the multi-part content block for MRCPv2 there may be content for thetext/uri-list, application/srgs or application/srgs+xml
C->S:DEFINE-GRAMMAR 543263 MRCP/1.0
Content-Type:multipart/mixed; boundary="break"
Content-Length:...
--break
Content-Type:text/uri-list
Content-Length:...
http://www.example.com/Directory-Name-List.grxml
http://www.example.com/Department-List.grxml
http://www.example.com/TAC-Contact-List.grxml
--break
Content-Type:application/grammar+xml
Content-ID:<request1@form-level.store>
Content-Length:...
<?xml version="1.0"?>
<!-- the default grammar language is US English -->
<grammar xml:lang="en-US" version="1.0">
<rule id="request">
I need help
</rule>
</grammar>
--break--
S->C:MRCP/1.0 543263 200 COMPLETE
Completion-Cause:000 success
C->S:MRCP/2.0 ... DEFINE-GRAMMAR 543263
Channel-Identifier:32AECB23433801@speechrecog
Content-Type:multipart/mixed; boundary="break"
Content-Length:...
--break
Content-Type:text/uri-list
Content-Length:...
http://www.example.com/Directory-Name-List.grxml http://www.example.com/Department-List.grxml http://www.example.com/TAC-Contact-List.grxml --break Content-Type:application/srgs+xml Content-ID:<request1@form-level.store> Content-Length:... <?xml version="1.0"?> <!-- the default grammar language is US English --> <grammar xml:lang="en-US" version="1.0"> <rule id="request"> I need help </rule> </grammar> --break--
S->C:MRCP/2.0 ... 543263 200 COMPLETE
Channel-Identifier:32AECB23433801@speechrecog
Completion-Cause:000 success
Reference List with Weights:
An additional option for specifying grammars is to use the text/grammar-ref-list Content-Type, which is similar to the text/uri-list Content-Type, but additionally allows weights to be specified for each referenced grammar element in the list. Although this media type is not explicitly supported by MRCPv1, the LumenVox implementation supports this type for both MRCPv1 and MRCPv2 protocols.
C->S:DEFINE-GRAMMAR 543264 MRCP/1.0
Content-Type:text/grammar-ref-list
Content-Id:helpgrammar@root-level.store
Content-Length:...
<http://example.com/grammars/field1.gram>
<http://example.com/grammars/field2.gram>;weight="0.85"
<session:field3@form-level.store>;weight="0.9"
<http://example.com/grammars/universals.gram>;weight="0.75"
S->C:MRCP/1.0 543264 200 COMPLETE
Completion-Cause:000 success
C->S:MRCP/2.0 ... DEFINE-GRAMMAR 543264
Channel-Identifier:32AECB23433801@speechrecog
Content-Type:text/grammar-ref-list
Content-ID:<helpgrammar@root-level.store>
Content-Length:...
<http://example.com/grammars/field1.gram>
<http://example.com/grammars/field2.gram>;weight="0.85"
<session:field3@form-level.store>;weight="0.9"
<http://example.com/grammars/universals.gram>;weight="0.75"
S->C:MRCP/2.0 ... 543264 200 COMPLETE
Channel-Identifier:32AECB23433801@speechrecog
Completion-Cause:000 success