Recognizer DEFINE-GRAMMAR

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            



Was this article helpful?
Copyright (C) 2001-2024, Ai Software, LLC d/b/a LumenVox