0

我正在构建一个具有语音识别功能的 UWP 应用程序。我想从另一个 -root- 文件中引用一个外部语法文件。以下是根语法文件(名为RootGrammar.xml)的代码:

<?xml version="1.0" encoding="utf-8"?>
<grammar version="1.0" xml:lang="en-us" 
         root="topLevel" 
         xmlns="http://www.w3.org/2001/06/grammar" 
         tag-format="semantics/1.0"
         mode="voice">

<rule id="topLevel">
  <item>Hello</item>
  <ruleref uri="words.xml"/>
</rule>

</grammar>

而外部语法文件(名为words.xml)是:

<?xml version="1.0" encoding="utf-8"?>
<grammar version="1.0" xml:lang="en-us" root="words"
         xmlns="http://www.w3.org/2001/06/grammar" 
         tag-format="semantics/1.0" 
         mode="voice">

  <rule id="words" scope="public">
    <one-of>
      <item>world</item>
      <item>universe</item>
      <item>galaxy</item>
    </one-of>
  </rule>

</grammar>

这两个文件位于同一个文件夹(名为Grammar)中,该文件夹位于解决方案的顶层。

我为根语法文件中的 URI 属性尝试了许多值,例如:

  • uri= "/words.xml"
  • uri= "\words.xml"
  • uri = "../words.xml"
  • uri = "..\words.xml"
  • uri = "ms-appx:///Grammar///words.xml"

我还尝试将外部文件重命名为words.grxml,还尝试显式识别 uri 中的规则(即uri = "/words.xml#words"),但所有这些都导致GrammarCompilationFailure.

4

2 回答 2

0

您需要将文件设置为内​​容文件。在解决方案资源管理器中选择该文件,然后在“属性”窗口中将“构建操作”设置为“内容” 。

那么,正确的 URI 应该是:

ms-appx:///Grammar/words.xml

只有根是三个正斜杠 ( ///),然后您只需使用单斜杠 ( /)。

于 2018-10-06T15:01:06.413 回答
0

这是设计使然。检查文件路径引用时,唯一受支持的 URI 方案是file://http://https://. 目前,唯一的解决方案可能是没有外部参考文件。您还可以在WPDev UserVoice上提交功能请求

于 2018-11-09T06:21:29.250 回答