<?xml version="1.0" encoding="ISO-8859-1" ?>
<system-report name="Microsoft SAPI">
	<testimonial>
		<html>
			<body>
				<p>(This report corresponds to the updated SRGS test set 
				found at <a href="http://www.w3.org/2002/06/srgs-irp/">http://www.w3.org/2002/06/srgs-irp/</a> 
				and supersedes previous Microsoft SRGS Implementation Reports.)</p>
				<p>
				Microsoft has implemented the XML Form of the Speech Recognition Grammar Specification (SRGS) 
				in a developmental version of the Microsoft Speech API (SAPI). </p>
				<p>
				SAPI is an API which allows developers to use speech recognition 
				and/or speech synthesis in their applications. 
				To conduct the tests specified in the implementation report, 
				a text-input interface was used with SAPI's core grammar processor. 
				Given SAPI's ability to use the core grammar processor in 
				speech, DTMF and text environments, 
				we believe this successfully demonstrates coverage of SRGS 
				in the following agents required by the Implementation Report Plan : 
					<ul>
						<li> XML Grammar Processor for ASR </li>
						<li> XML Grammar Processor for DTMF </li>
						<li> XML text parser </li>
					</ul>
				Previous versions of SAPI may be found at 
				<a href="http://www.microsoft.com/speech/download/sdk51/">http://www.microsoft.com/speech/</a>.
				</p>
				<p>
					As a founding member of the Speech Application Language Tags (SALT) Forum 
					(<a href="http://www.saltforum.org">http://www.saltforum.org</a>) 
					and an active member of the W3C Voice Browser and Multimodal Interaction Working Groups, 
					Microsoft believes speech standards will play a key role in the growing market for speech applications. 
					We consider SRGS a thorough, well-designed specification which, 
					by providing a common syntax for speech recognition grammars, 
					should help promote interoperability and portability in speech application development. 
					Microsoft intends to support SRGS in its suite of forthcoming SALT products: 
					<ul>
						<li><b>.Net Speech SDK</b>, 
							a set of speech application development tools 
							and speech controls integrated with Visual Studio.NET 
							that enables rapid incorporation of speech into web applications 
							(a Beta 2 version of the SDK is available at 
							<a href="http://www.microsoft.com/speech/">http://www.microsoft.com/speech/</a>);</li>
						<p />
						<li><b>.Net Speech platform</b>, 
							an integrated multimodal and telephony platform 
							for multiple clients such as PCs, telephones, 
							wireless personal digital assistants (PDAs), and Tablet PCs. </li>
					</ul>
				</p>
				<p>
					As required by the Implementation Report plan, 
					some technical details of the SAPI implementation are as follows:
					<ol>
						<li><i>Relationship of SAPI output to LPS </i><br />
							SAPI's XML representation of recognition output 
							was mapped explicitly to the LPS defined in Appendix H 
							by a recursive traversal of the parse tree. 
							In some tests a complete mapping into LPS was not always possible, 
							for example, 
							the content of the tag element and the exact path of external rules 
							are not copied directly. 
							However, since these are minor aspects of only the surface form of LPS 
							(itself an informative part of the specification) 
							and they in no way affect the behaviour of the grammar processor 
							as defined in the specification, 
							we do not consider these an unsuccessful implementation of the tests.
						</li>
						<li> <i>Weights and probabilities</i><br />
							As noted in the Implementation Report Plan, 
							pass/fail testing of weights on alternatives and probabilities on repeats is not possible. 
							We believe these features are implementable and useful. 
							We have implemented support for both weights and repeat probabilities 
							into our ASR grammar processor. 
							We believe that, when properly estimated, 
							weights and repeat probabilities have a positive effect in maximizing recognizer performance.
						</li>
						<li><i>Language support</i><br />
							Speech recognition engines were not available for certain languages required by the tests. 
							For those tests where a single language is used in the grammar 
							and a recognition engine was not available for that language, 
							SAPI's text input mechanism was used with the grammar processor 
							to compile the grammar, parse the input and produce successful output, 
							and we have considered this a successful implementation. </li>
						<li><i>Test set version</i><br />
							The SAPI implementation was run on the set of tests posted at: 
							<a href="http://www.w3.org/2002/06/srgs-irp/">http://www.w3.org/2002/06/srgs-irp/</a>
							on 24 October 2002 (see 
							<a href="http://lists.w3.org/Archives/Public/www-voice/2002OctDec/0039.html">http://lists.w3.org/Archives/Public/www-voice/2002OctDec/0039.html</a> 
							for details).</li>
						<li><i>Unimplemented features</i> <br />
							As noted in the results of the tests, 
							the following features of the specification have not been implemented. 
							<ul>
								<li> <i>multiple languages within the same grammar</i><br />
									This appears to be a useful feature for certain deployment scenarios.</li>
								<li> <i>lexicon content </i><br />
									Although we have implemented the syntax of &lt;lexicon&gt; 
									(and thereby the correct test set behaviour), 
									we have not implemented the semantics of lexicon look-up. 
									The ability to specify pronunciations is clearly a very useful feature.</li>
								<li> <i>repetition of tag elements equivalent to a single tag element 
									(tag-repetition.grxml.) </i><br />
									In our belief, where tag elements are repeated without tokens for input, 
									this is a developer error, and platforms should not be required to resolve 
									the repetition to a single tag. </li>
							</ul>
						</li>
					</ol>
				</p>
			</body>
		</html>
	</testimonial>
	<feature id="alternative-null.grxml" res="pass" />
	<feature id="alternative-one-item.grxml" res="pass" />
	<feature id="alternative-one-tag.grxml" res="pass" />
	<feature id="alternatives-all-weights.grxml" res="pass" />
	<feature id="alternatives-no-weights.grxml" res="pass" />
	<feature id="alternatives-one-no-weight.grxml" res="pass" />
	<feature id="alternatives-one-with-weight.grxml" res="pass" />
	<feature id="alternatives-some-weights.grxml" res="pass" />
	<feature id="base-declaration.grxml" res="pass" />
	<feature id="base-metabase.grxml" res="pass" />
	<feature id="comment-xml.grxml" res="pass" />
	<feature id="common.grxml" res="pass" />
	<feature id="conformance-1.grxml" res="pass" />
	<feature id="conformance-2.grxml" res="pass" />
	<feature id="conformance-3.grxml" res="no-lang" />
	<feature id="conformance-4.grxml" res="pass" />
	<feature id="conformance-5.grxml" res="pass" />
	<feature id="conformance-6.grxml" res="pass" />
	<feature id="conformance-7.grxml" res="pass" />
	<feature id="doctype.grxml" res="pass" />
	<feature id="dtmf-full.grxml" res="pass" />
	<feature id="dtmf-pound-star.grxml" res="pass" />
	<feature id="dtmf-sequence.grxml" res="pass" />
	<feature id="dtmf-simple.grxml" res="pass" />
	<feature id="duplicated-rulenames.grxml" res="pass" />
	<feature id="duplicated-special-rulenames.grxml" res="pass" />
	<feature id="example-1.grxml" res="pass" />
	<feature id="example-2-booking.grxml" res="pass" />
	<feature id="example-2-places.grxml" res="pass" />
	<feature id="example-3-korean-yesno-unicode.grxml" res="pass" />
	<feature id="example-3-korean-yesno-utf8.grxml" res="pass" />
	<feature id="example-4-chinese-digits-unicode.grxml" res="pass" />
	<feature id="example-4-chinese-digits-utf8.grxml" res="pass" />
	<feature id="example-5-swedish-boolean.grxml" res="pass" />
	<feature id="example.grxml" res="pass" />
	<feature id="header-encoding-none.grxml" res="pass" />
	<feature id="korean-yesno-utf16-be.grxml" res="pass" />
	<feature id="korean-yesno-utf16-le.grxml" res="pass" />
	<feature id="korean-yesno-utf8.grxml" res="pass" />
	<feature id="lang-ruleref.grxml" res="no-lang" />
	<feature id="lang-sequence.grxml" res="no-lang" />
	<feature id="language-dtmf-ignore.grxml" res="pass" />
	<feature id="language-en-us.grxml" res="pass" />
	<feature id="language-missing.grxml" res="pass" />
	<feature id="language-other.grxml" res="pass" />
	<feature id="lexicon-many.grxml" res="pass" />
	<feature id="lexicon-none.grxml" res="pass" />
	<feature id="lexicon-one.grxml" res="pass" />
	<feature id="meta-http.grxml" res="pass" />
	<feature id="meta.grxml" res="pass" />
	<feature id="metabase-declaration.grxml" res="pass" />
	<feature id="mode-dtmf.grxml" res="pass" />
	<feature id="mode-none.grxml" res="pass" />
	<feature id="mode-voice.grxml" res="pass" />
	<feature id="more_english_names.grxml" res="pass" />
	<feature id="no-doctype.grxml" res="pass" />
	<feature id="no-language-no-mode.grxml" res="pass" />
	<feature id="no-namespace.grxml" res="pass" />
	<feature id="no-rules.grxml" res="pass" />
	<feature id="no-version.grxml" res="pass" />
	<feature id="polite.grxml" res="pass" />
	<feature id="politeness.grxml" res="pass" />
	<feature id="rdf-metadata.grxml" res="pass" />
	<feature id="recursion.grxml" res="pass" />
	<feature id="repeat-0-times.grxml" res="pass" />
	<feature id="repeat-m-n-times.grxml" res="pass" />
	<feature id="repeat-m-or-more.grxml" res="pass" />
	<feature id="repeat-many-null.grxml" res="pass" />
	<feature id="repeat-n-exact.grxml" res="pass" />
	<feature id="repeat-optional-void.grxml" res="pass" />
	<feature id="repeat-optional.grxml" res="pass" />
	<feature id="repeat-with-probs.grxml" res="pass" />
	<feature id="root-rule-decl-missing.grxml" res="pass" />
	<feature id="root-rule-decl.grxml" res="pass" />
	<feature id="rule-basic-def.grxml" res="pass" />
	<feature id="rule-empty-item.grxml" res="pass" />
	<feature id="rule-no-empty.grxml" res="pass" />
	<feature id="rule-null.grxml" res="pass" />
	<feature id="rule-private.grxml" res="pass" />
	<feature id="rule-public.grxml" res="pass" />
	<feature id="rule-tag.grxml" res="pass" />
	<feature id="ruleref-ext-private-root.grxml" res="pass" />
	<feature id="ruleref-ext-private-rule.grxml" res="pass" />
	<feature id="ruleref-ext-root-mediatype.grxml" res="pass" />
	<feature id="ruleref-ext-root.grxml" res="pass" />
	<feature id="ruleref-ext-rule-mediatype.grxml" res="pass" />
	<feature id="ruleref-ext-rule.grxml" res="pass" />
	<feature id="ruleref-local.grxml" res="pass" />
	<feature id="ruleref-mismatch-mediatype.grxml" res="pass" />
	<feature id="ruleref-mismatch-modes.grxml" res="pass" />
	<feature id="ruleref-nonexistent-local.grxml" res="pass" />
	<feature id="sequence-item-empty.grxml" res="pass" />
	<feature id="sequence-item-whitespace.grxml" res="pass" />
	<feature id="sequence-ruleref-token.grxml" res="pass" />
	<feature id="sequence-ruleref.grxml" res="pass" />
	<feature id="sequence-token.grxml" res="pass" />
	<feature id="special-garbage.grxml" res="pass" />
	<feature id="special-null.grxml" res="pass" />
	<feature id="special-void.grxml" res="pass" />
	<feature id="tag-format-decl-missing.grxml" res="pass" />
	<feature id="tag-format-decl.grxml" res="pass" />
	<feature id="tag-many.grxml" res="pass" />
	<feature id="tag-repetition.grxml" res="fail">
		Not implemented (grammar rejected). 
		We believe that implementation behavior should not be defined 
		in this case.
	</feature>
	<feature id="tag-standalone.grxml" res="pass" />
	<feature id="token-basic.grxml" res="pass" />
	<feature id="token-element.grxml" res="pass" />
	<feature id="token-quoted.grxml" res="pass" />
	<feature id="token-unicode.grxml" res="pass" />
	<feature id="undefined-root.grxml" res="pass" />
	<feature id="uri-ref-undefined-root-referenced.grxml" res="pass" />
	<feature id="uri-ref-undefined-root-referring.grxml" res="pass" />
	<feature id="xml_lang-item-single-lang.grxml" res="no-lang" />
	<feature id="xml_lang-one-of-single-lang.grxml" res="no-lang" />
	<feature id="xml_lang-token-single-lang.grxml" res="no-lang" />
</system-report>