tag Element
A tag element contains semantic information, either as a string or as ECMAScript (JavaScript, JScript), which returns additional information when an element or series of elements is recognized. A tag element does not affect the legal word patterns defined by the grammars or the process of recognizing speech or other input given a grammar. For more information, see Using the tag Element.
Syntax
<tag> "string" </tag>
OR
<tag> out="value"; </tag>
OR
<tag> $="value"; </tag>
OR
<tag> out.Property="value"; </tag>
OR
<tag> $.Property="value";</tag>
Attributes
None.
Remarks
A tag element is a direct child of an item or a rule element. A tag element can contain one of two types of content: string literals or ECMAScript. The content type of the tag elements within a grammar must be declared in the tag-format attribute of the grammar Element. Grammars of greater complexity typically use the ECMAScript content type (tag-format="semantics/1.0" or tag-format="semantics-ms/1.0").
Script expressions or string literals in tag elements generate semantic values for the content of an item element or the target of a ruleref element within a rule element. See Grammar Rule Name Referencing and Grammar Rule Reference Referencing for more information.
A tag element can contain an individual script expression or a concatenated series of multiple script expressions. Script expressions contained in tag elements follow the syntax of ECMA-327. Script expressions cannot assign values to reserved words. The content of the tag element is CDATA.
Note
Using the string literal syntax when the value for tag-format is semantics/1.0 or semantics-ms/1.0 will generally result in a runtime error. However, using the ECMAScript syntax when the value for tag-format is properties-ms/1.0 will not produce a runtime error, but will erroneously populate Rule Variables with ECMAScript code.
Examples
The following provides examples for using tag elements to assign semantic meaning to item elements and to ruleref elements.
Using Tag Elements with Item Elements
The following example shows a use of string literals in the tag element. The tag element assigns a string value to the Rule Variable of the rule destAirport. When "Heathrow" is recognized, the string "Destination" is returned as a semantic result.
<?xml version="1.0" encoding="utf-8"?>
<grammar version="1.0" xml:lang="en-US" root="destAirport"
xmlns="http://www.w3.org/2001/06/grammar" tag-format="properties-ms/1.0">
<rule id="destAirport">
<item> Heathrow <tag> "Destination" </tag> </item>
</rule>
</grammar>
The next example uses script in the tag element to assign a string value to the Rule Variable of the rule "destAirport".
When "Heathrow" is recognized, the string "Destination" is returned as a semantic result.
<?xml version="1.0" encoding="utf-8"?>
<grammar version="1.0" xml:lang="en-US" root="destAirport"
xmlns="http://www.w3.org/2001/06/grammar" tag-format="semantics/1.0">
<rule id="destAirport">
<item> Heathrow <tag> out="Destination"; </tag> </item>
</rule>
</grammar>
The following example is the same as the preceding example, but uses the syntax of the tag-format="semantics-ms/1.0".
If the value for tag-format attribute of the grammar element is semantics/1.0, the Rule Variable is named "out".
If the value for tag-format is semantics-ms/1.0 the Rule Variable is named "$".
<?xml version="1.0" encoding="utf-8"?>
<grammar version="1.0" xml:lang="en-US" root="destAirport"
xmlns="http://www.w3.org/2001/06/grammar" tag-format="semantics-ms/1.0">
<rule id="destAirport">
<item> Heathrow <tag> $="Destination"; </tag> </item>
</rule>
</grammar>
In the following example, the script expression contained in the tag element creates a property named "code" for the Rule Variable of the rule named destAirport and assigns the value "LHR" to the created property. When "Heathrow" is recognized, the string "LHR", which is the airport code for Heathrow, is returned as a semantic result.
<?xml version="1.0" encoding="utf-8"?>
<grammar version="1.0" xml:lang="en-US" root="destAirport"
xmlns="http://www.w3.org/2001/06/grammar" tag-format="semantics/1.0">
<rule id="destAirport">
<item> Heathrow <tag> out.code = "LHR"; </tag> </item>
</rule>
</grammar>
Using Tag Elements with RuleRef Elements
The examples above show the use of the tag element as a child of the item element to assign a semantic value to the item element's contents. Another common use for the tag element is to assign a semantic meaning to the recognition result from a rule that is the target specified by a ruleref element.
The following example creates a grammar for choosing the cities for a flight. The speech recognition engine will return an airport code when a city or airport name is recognized, and whether the city is the "LeavingFrom" city or the "GoingTo" city for the flight.
The example uses the tag element to create properties ("LeavingFrom" and "GoingTo") on the Rule Variable for the rule named flightBooker. The tag element that follows each ruleref element assigns the semantic results from the rule reference to a property on the Rule Variable. The Rule Variable is identified by "out".
In the rule named flightCities, the tag element within each item element assigns a semantic value (an airport code) to each item element that contains the name of a city or a city's airport. The speech recognition engine returns the semantic value (the contents of the tag element) as well as the recognized speech (the textual contents of an item element) when it recognizes the name of a city or airport.
Note that the rule flightCities accepts multiple speech inputs for the Seattle and Dallas city/airports, but returns only one semantic result for each. Here is a sample recognition result from the grammar that follows:
Recognized phrase:
- I want to fly from Boston to Sea-Tac
Semantic results:
Leaving from: BOS
Going to: SEA
<?xml version="1.0" encoding="utf-8"?>
<grammar xml:lang="en-US" root="flightBooker"
tag-format="semantics/1.0" version="1.0"
xmlns="http://www.w3.org/2001/06/grammar">
<rule id="flightBooker" scope="public">
<item> I want to fly from </item>
<ruleref uri="#flightCities" />
<tag> out.LeavingFrom=rules.latest(); </tag>
<item> to </item>
<ruleref uri="#flightCities" />
<tag> out.GoingTo=rules.latest(); </tag>
</rule>
<rule id="flightCities" scope="private">
<one-of>
<item> <tag> out="SEA"; </tag>
<one-of>
<item> Seattle-Tacoma </item>
<item> Sea-Tac </item>
<item> Seattle </item>
</one-of>
</item>
<item> Boston <tag> out="BOS"; </tag> </item>
<item> Miami <tag> out="MIA"; </tag> </item>
<item> <tag> out="DFW"; </tag>
<one-of>
<item> Dallas </item>
<item> Fort Worth </item>
<item> Dallas-Fort Worth </item>
</one-of>
</item>
</one-of>
</rule>
</grammar>
The preceding example uses the latest() function on the rules object to reference the last ruleref element to be used in the rule that matches the utterance.
The following example is the same as the preceding example, but uses the syntax of tag-format="semantics-ms/1.0". In the syntax of semantics-ms/1.0, the result from the latest referenced rule that matches the utterance can be represented by the shorthand symbol "$$". The Rule Variable of the rule that contains the rule reference is identified by "$".
<?xml version="1.0" encoding="utf-8"?>
<grammar xml:lang="en-US" root="flightBooker"
tag-format="semantics-ms/1.0" version="1.0"
xmlns="http://www.w3.org/2001/06/grammar">
<rule id="flightBooker" scope="public">
<item> I want to fly from </item>
<ruleref uri="#flightCities" />
<tag> $.LeavingFrom=$$; </tag>
<item> to </item>
<ruleref uri="#flightCities" />
<tag> $.GoingTo=$$; </tag>
</rule>
<rule id="flightCities" scope="private">
<one-of>
<item> <tag> $="SEA"; </tag>
<one-of>
<item> Seattle-Tacoma </item>
<item> Sea-Tac </item>
<item> Seattle </item>
</one-of>
</item>
<item> Boston <tag> $="BOS"; </tag> </item>
<item> Miami <tag> $="MIA"; </tag> </item>
<item> <tag> $="DFW"; </tag>
<one-of>
<item> Dallas </item>
<item> Fort Worth </item>
<item> Dallas-Fort Worth </item>
</one-of>
</item>
</one-of>
</rule>
</grammar>
Note
Scripts in tag elements are executed only if the item or rule containing it provides a match.
For an example of an event handler that will retrieve semantic results, see SpeechRecognizedEventArgs.
See Also
Concepts
Referencing Grammar Rule Variables