Home > Articles > Web Services > XML

  • Print
  • + Share This
This chapter is from the book

This chapter is from the book

3.46 rule

Element type

rule

Attributes

id | scope

Parents

grammar

Children

example | item | one-of | ruleref | tag | token

Description

Defines a grammar rule by associating a rule expansion with an identifier.

DTD

<!ELEMENT rule (%rule-expansion; | example | tag)* >
<!ATTLIST rule
  id    ID                 #REQUIRED
  scope (private | public) "private" >

Language model

Attributes

  • id : ID

    A unique identifier for this rule. It is used to refer to this rule from ruleref or grammar elements.

  • scope : (public | private) = private

    Indicates the visibility of this rule. If this attribute is set to private, this rule is only visible within the grammar element in which it is defined. If it is set to public, the rule can be imported and accessed by rules defined elsewhere.

Children

A rule expansion that represents this rule.

Examples

The form-level grammar element defines two rules, flight and city. The flight rule is designed to match phrases like "I'd like to fly from Toronto to London" or "to London from Toronto." It uses the city rule to recognize the specific city names like "London" and "Toronto." Some older interpreters might not understand the repeat attribute on item. In this situation you would use the count attribute as explained in 3.24, “item,”.

Example 3-57 A GRXML rule for scheduling a flight

<?xml version="1.0" encoding="iso-8859-1"?>
<vxml version="2.0">
  <form id="airlines">
    <initial name="itinerary">
      Where would you like to fly?
      <catch event="nomatch noinput">
        <prompt>I didn't get that.</prompt>
        <assign name="itinerary" expr="true"/>
        <reprompt/>
      </catch>   
    </initial>

    <grammar xml:lang="en-US" version="1.0" root="flight">
      <rule id="flight" scope="public">
        <one-of>
          <item>
            <item repeat="0-1">I'd like to fly</item> from 
            <ruleref uri="#city"> 
              <tag>depart=city.returnvalue;</tag>
            </ruleref>  
            to 
            <ruleref uri="#city"> 
              <tag>arrive=city.returnvalue;</tag>
            </ruleref>
          </item>

          <item>
            <item repeat="0-1">I'd like to fly</item>
            to 
            <ruleref uri="#city"> 
              <tag>arrive=city.returnvalue;</tag>
            </ruleref>  
            from 
            <ruleref uri="#city"> 
              <tag>depart=city.returnvalue;</tag>
            </ruleref>
          </item>

        </one-of>
      </rule>

      <rule id="city" scope="public">
        <one-of>
          <item> <tag>returnvalue='New York';</tag>New York</item>
          <item>
            <tag>returnvalue='Los Angeles';</tag>Los Angeles
          </item>
          <item> <tag>returnvalue='Los Angeles';</tag>L A</item>
          <item> <tag>returnvalue='Toronto';</tag>Toronto</item>
          <item> <tag>returnvalue='London';</tag>London</item>
          <item> <tag>returnvalue='Paris';</tag>Paris</item>
        </one-of>  
      </rule>
    </grammar>

    <field name="depart">
    </field>

    <field name="arrive">
    </field>

    <filled>
      <prompt>
        I have you flying from 
        <value expr="depart"/> to <value expr="arrive"/>.
      </prompt>
    </filled>
  </form>
</vxml>
  • + Share This
  • 🔖 Save To Your Account