一段时间以来,我一直在用头撞墙,但我并没有比一开始更接近答案。
我正在尝试基于AIML 1.0.1 规范创建一个 XML Schema 文件以允许更准确地验证 AIML 文件,但我遇到了障碍。根据规范,<pattern>
and(输入端)<that>
标签只能允许几个子元素(<bot>
和/或<eval
>) -或- CDATA 只能包含:
- 字母数字字符(az、AZ 或 0-9)
- 空间
- 两个“通配符”字符之一(或两者)( * 或 _ )
有效和无效<pattern>
标签的示例可能如下所示:
<!-- valid PATTERN -->
<pattern>HELLO</pattern>
<pattern>HELLO *</pattern>
<pattern>_ IS FOR SALE</pattern>
<!-- invalid PATTERN -->
<pattern>HOW ARE YOU TODAY?</pattern> <!-- note the question mark -->
<pattern>50%</pattern> <!-- note the percent sign -->
顺便说一下,<pattern>
标签的 XSD 的当前状态如下,并且可以将 CDATA 限制为所需的字符列表:
<xs:element name="pattern">
<xs:complexType mixed="true">
<xs:simpleContent>
<xs:extension base="aiml:InputPatternType">
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name="InputPatternType">
<xs:restriction base="xs:string">
<xs:pattern value="[\w| |_|\*]*"/>
</xs:restriction>
</xs:simpleType>
但是,这不允许使用必要的子元素,代码如下:
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="aiml:bot"/>
<xs:element ref="aiml:eval"/>
</xs:choice>
当我尝试将此位合并到模式元素的声明中时,我会遇到各种错误,具体取决于我尝试添加此代码的方式,从“意外的子元素”到有关“如果<complexType>
选择了替代方案.. .”等。我已经阅读了几篇文章(最有帮助的是这篇文章,但正如我所提到的,我没有比上周开始时更接近解决这个问题。我知道我只是错过了一些简单的东西,但我只是看不到它,与此相关的许多 SO 文章都没有给我带来任何可用的结果,因为它们大多只处理子元素,而不是如何将 CDATA 限制为某些字符。
我很清楚上面的代码使用simpleType
andsimpleContent
而不是complexType
and的事实complexContent
,但是我使用这些代码的努力根本没有成功,所以我发布了当前(部分)工作的内容。对此的任何帮助将不胜感激。谢谢。