【问题标题】:Invalid rule reference error when compiling Windows Speech Recognition Macros编译 Windows 语音识别宏时出现无效的规则引用错误
【发布时间】:2013-05-14 06:37:43
【问题描述】:

最近我对使用 Windows 语音识别宏尝试一些 XML 和 Javascript 产生了兴趣。这是我对这两种语言的第一次体验,但由于我的编程历史很短,我认为我可以深入研究。到目前为止,它进展顺利。但是现在我正在尝试对我的宏实现更深层次的交互性,我开始遇到错误,我无法在网上找到解释,所以我来这里寻求您的帮助。

这是给我带来问题的宏:

<command>
    <listenFor>Whats the weather like in [CityName]</listenFor>
    <script language="JScript">
        <![CDATA[
            var xml_doc = new ActiveXObject("Microsoft.XMLDOM");
            xml_doc.async = false;
            xml_doc.load("http://api.openweathermap.org/data/2.5/weather?q={[CityName]}&mode=xml");

            var city = xml_doc.getElementByTagName("city").getAttribute("name");
            var temperature = xml_doc.getElementByTagName("temperature");

            Application.Speak(city);
        ]]>
    </script>
</command>

这是错误信息:

Error compiling grammar for speech Macros:
"AI-base.WSRMac"
==========
Line 40: 80045048 - Invalid rule reference to <RULEREF NAME="CityName" REFID=""/>
==========
00001:
00002: <GRAMMAR LANGID="0409">
...
...
...
00038: <RULE NAME="Rule_8">
00039:  <P>
00040:   <p>Whats the weather like in </p><ruleref name="CityName" propname="CityName" />
00041:  </P>
00042: </RULE>
00043: <RULE name="build:namedDictation"><dictation min="1" max="10"/></RULE>
00044: </GRAMMAR>

我试图用这个宏做的是从用户那里获取一个城市名称并获取该位置的天气,将它放在几个变量中,然后让它以我喜欢的格式告诉我天气。

谁能解释我做错了什么以及如何解决它?

在此先感谢 :) -德克

【问题讨论】:

    标签: javascript xml speech-recognition


    【解决方案1】:

    据我所知,WSR 宏没有预定义的“CityName”属性。我见过的使用“CityName”的例子定义了一个具有适当属性的命名城市列表。例如,Weather.WSRMac 示例有

    <listenForList name="CityName" propname="zipCode"> 
        <item propval="45255">Cincinnati</item> 
        <item propval="98075">Sammamish</item> 
        <item propval="98052">Redmond</item> 
        <item propval="98004">Bellevue</item> 
        <item propval="98101">Seattle</item> 
    </listenForList> 
    

    你需要做类似的事情。

    如果你需要一个未解释的字符串,你可以试试

     <rule name="CityName">
          <Dictation PROPID="Dictation" Min="1" Max="5"/>
     </rule>    
    

    要在运行时检索内容,您应该能够使用

     xml_doc.load("http://api.openweathermap.org/data/2.5/weather?q={[CityName.Dictation]}&mode=xml");
    

    几乎所有这些都可以在WSR Macros Wiki 上找到,尤其是Rule Generators 上的部分; SAPI 5 XML 语法的详细信息也在MSDN

    【讨论】:

    • 那我如何在不使用变量的情况下将城市名称放入变量中?
    • 已编辑答案以演示如何嵌入听写规则。
    • 非常感谢您的回答:)
    • 对此我还有一个问题,那就是我如何在 javascript 中使用该规则,因为它在这一行给我一个错误提示:“对象不支持此属性或方法” :xml_doc.load("http://api.openweathermap.org/data/2.5/weather?q={[Spoken.CityName]}&amp;mode=xml");
    • 您需要在听写标签中添加PROPID属性,然后您应该可以检索听写内容。更新了答案以说明。
    猜你喜欢
    • 2014-06-08
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多