方面
一个新的简单类型(命名或匿名)可以通过限制简单类型的基类型(即现有的简单类型)来创建。这是通过添加方面以限制基类型的值来实现的。在Schema视图中,“方面”输入助手(参见下方截图)使您能够以图形方式轻松编辑简单类型的方面。可用的方面在“方面”输入助手的选项卡中,如下表所列。
选项卡 | 可用的方面 |
minInclusive, maxInclusive, minExclusive, maxExclusive, length, minLength, maxLength, totalDigits, fractionDigits, whiteSpace, explicitTimezone | |
pattern | |
enumeration | |
assertion | |
altova:exampleValues是注解,不是方面。该注解用于在XMLSpy从XML Schema生成的XML实例文档中生成示例值。 |
以下部分介绍了各个选项卡。
在设计中选择简单类型
可以在以下设计环境中选择简单类型(命名或匿名):
•在Schema概览中(在全局组件列表或全局组件列表下方的“特性”选项卡中),或
•在内容模型视图中(在图表中或图表下方的“特性”选项卡中)。
当在上方列出的任何一个设计环境中选择了简单类型时,其适用的方面将在“方面”输入助手中显示并可进行编辑。
“方面”选项卡
在“方面”选项卡中,仅显示适用于设计中所选类型的方面。例如,如果xs:string类型被限制,则不会显示像totalDigits这样的不适用的方面。
•四个限制方面(minInclusive、maxInclusive、minExclusive、maxExclusive)仅适用于数值和日期/时间类型以及其派生类型。
•三个长度方面(length、minLength、maxLength)仅适用于基于字符串的类型、二进制类型以及anyURI。
•totalDigits方面适用于xs:decimal和整数类型以及其派生类型。fractionDigits方面仅适用于xs:decimal。
要输入值,请从组合框(如果存在)的下拉列表中选择一个值,或双击值字段并输入一个值。如果输入了一个无效值,则产生的冲突将显示为红色。有效值显示为蓝色。例如,minInclusive方面和maxInclusive方面不能同时存在;因此,当为这些方面中的第二个输入值时,这两个方面的值都将显示为红色。
要指定一个固定方面(为该方面指定一个fixed="true”特性值),请单击该方面右侧的开锁符号,使该符号变为闭锁。在上方截图中,totalDigits方面被设置为固定方面。您还可以将多个方面设为固定。要取消固定方面,请单击闭锁符号以使其变为开锁符号。
“模式”选项卡
在“模式”选项卡(参见下方截图)中,您可以向限制添加一个或多个pattern方面。(pattern方面的)模式是使用正则表达式语法指定的。下方截图中的模式指定了电子邮件地址的模式。
如果指定了多个pattern方面,则XML实例值必须匹配其中一个指定的模式。例如,用于限制邮政编码的模式可能有两个pattern方面,一个针对美国,一个针对欧盟。因此,要使XML实例值有效,它必须匹配其中一个模式。
单击左上角的追加或插入图标来添加pattern方面,然后输入正则表达式来定义所需的模式。要删除pattern,请将其选中,然后单击选项卡右上角的删除图标。
“枚举”选项卡
在“枚举”选项卡(参见下方截图)中,您可以向限制添加一个或多个enumeration方面。每个enumeration方面都为该类型指定一个有效值。一组enumeration方面共同指定了允许值的范围。在下方截图中,enumeration方面指定了限制的允许大小值范围。
单击左上角的追加或插入图标来添加enumeration方面,然后输入enumeration值。要删除enumeration,请将其选中,然后单击选项卡右上角的删除图标。
“断言”选项卡
断言是XSD 1.1中的一项功能。因此,“断言”选项卡仅在XSD 1.1模式下启用。在“方面”输入助手的“断言”选项卡中定义的断言方面是针对简单类型的断言—,这不同于针对复杂类型的断言(它可以在Schema概览或内容模型视图中定义和编辑,而不是在“方面”输入助手中)。
在设计中选择一个简单类型(具有简单内容的元素或特性)时,可以通过以下方式来指定断言:先切换到“断言”选项卡(参见下方截图),单击左上角的追加或插入图标,然后输入要用于定义assertion的XPath 2.0表达式。在XPath表达式中必须使用一个名为\$value的特殊变量以保存简单类型的值。(请注意,由于没有后代要测试,只有一个值,因此不能在XPath表达式中使用正常的self::node()路径步骤(或此路径步骤'.’的期间缩写)。)
例如,XPath表达式string-length(\$value) = 6(参见下方截图)测试简单类型的值是否有六个字符。如果实例文档中的元素或特性确实有六个字符,则它根据断言是有效的。
请注意: | XPath表达式中的语法错误将被标记为红色。但是,由于数据类型仅在运行时确定,因此在输入XPath表达式时不会标记类型错误。您必须根据需要来构造类型。有关类型构造的示例,请参阅上方截图中的第三个XPath表达式,它(假设断言是在xs:string简单类型上定义的)在执行数值比较之前将字符串值转换为数字。 |
正如上方截图所示,可以在单个简单类型上指定多个断言。在这种情况下,必须满足所有断言才能使实例文档中的元素或特性有效。上方截图中的断言指定了实例文档值必须是一个包含六个字符的字符串,以EU字符开头,最后四个字符是一个范围介于0000到4999的数值。 要编辑断言的详细信息,请右键单击“方面”输入助手中的断言,然后在弹出的菜单中单击详细信息。这将打开“断言详细信息”窗口(参见下方截图)。
如果在定义断言的同时提供对断言的解释,这是非常有用的,这样在验证XML实例文档时,如果断言没有得到满足,就可以显示一个适当的消息。由于XML Schema规范未对这类消息作出规定,因此XMLSpy允许Altova xml-schema-extensions命名空间https://www.altova.com/zh/xml-schema-extensions(或任何其他命名空间)中的消息与断言的定义一起提供,并用于XML实例文档的验证。例如:
<xs:assert test="count(//MyNode) ge 1" altova:message="There must be at least one MyNode element"/> or
<xs:assertion test="count(//MyNode) ge 1" altova:message="There must be at least one MyNode element"/>
如果断言中指定的限制没有得到满足,则XMLSpy的验证引擎将显示与该断言相关的消息作为提示,同时还显示验证错误消息。验证器将报告assert/@message特性或assertion/@message特性的值,而不考虑message特性所在的命名空间。然而,在Schema视图中,您仅可以编辑Altova xml-schema-extension命名空间中的message特性。要编辑其他命名空间中的message特性,请使用文本视图。
有关详细信息,请参见断言消息。
提示: | 经验表明,最好尽可能使用其他方面而不是断言。例如,上方截图中第一个断言指定的限制最好由(“方面”选项卡中的)length方面指定。 |
“示例”选项卡
在“示例”选项卡(参见下方截图)中,您可以指定在从XML Schema生成XML文件(这可以通过使用菜单命令DTD/Schema | 生成示例XML文件来实现)时可以使用的示例值。如果示例值无效,它将显示为橙色作为警告。在下方截图中,第一个值无效,因为它与为电子邮件指定的pattern方面不匹配(参见上方的模式选项卡)。
请注意: | 单击工具栏中的显示验证警告图标以显示有关无效示例值的警告。如果XSD文件的其他方面有效,则无效的示例值不会使该文件无效。 |
示例值位于https://www.altova.com/zh/xml-schema-extensions命名空间中的altova:example注解元素中。要添加altova:example注解,请单击左上角的追加或插入图标并输入altova:example值。要删除altova:example注解,请将其选中,然后单击右上角的删除图标。