定义规则集
用户可以在Schema规则编辑器中打开一个Schema规则集进行编辑(参见下方截图)。然后,您可以在该Schema规则集文件中创建、编辑和删除Schema规则。要在Schema规则编辑器中打开规则集,请执行以下操作:
1.在“信息”窗口的规则集列表中选择一个规则集。
2.单击该规则集的上下文菜单按钮。
3.在出现的上下文菜单中,选择编辑规则集。
“Schema规则编辑器”对话框有两个窗格:
•“规则列表”窗格(位于编辑器的顶部),您可以在其中添加和删除规则。通过单击窗格左上方的相应按钮(追加或插入),可以为一个规则追加或插入空行。要删除规则,请选中它并单击窗格右上方的删除按钮。此窗格中的每个规则都具有一个名称、一个描述性消息文本和一个严重性级别(如果规则相矛盾,则可以将验证设置为返回错误或警告)。
•“规则”窗格(位于编辑器的底部)。此窗格显示在其上方的“规则列表”窗格中被选中的规则的详细信息,并可以编辑该规则的详细信息。有关定义规则的详细信息,请参见下方的定义规则部分。
在编辑规则集文件中的规则后,单击保存以将规则保存到规则集文件。
定义规则
要定义或编辑规则,从上方“规则列表”窗格的列表中选择一个规则。该规则的定义将显示在“规则”窗格中并可以进行编辑。下方截图显示了一个规则,其定义如下:如果一个复杂类型是一个简单类型的扩展,则它必须具有一个子类型AttributeGroup。
验证条件集和过滤条件集
•每个规则都有一个验证条件集和一个过滤条件集(参见上方截图中的第一列)。
•过滤条件集最终必须评估为true,以便验证条件得到评估。
•每个条件集(验证或过滤)由一个或多个条件组组成,每个条件组包含一个或多个条件。在上方截图中,验证条件集包含一个条件组,其中包含一个条件,而过滤条件集包含三个条件组,每个条件组包含一个条件。在下方截图中,过滤条件集包含三个条件组:第一个条件组包含两个条件,第二个包含三个条件,第三个包含一个条件。
•选中Not复选框(位于条件左侧)可对每个单独的条件进行否定。
•在条件组中,逻辑连接符and或or分别表示组中的所有条件,或条件组中的一个条件是否必须计算为true,以便整个条件组计算为true。在用户界面中,这些逻辑运算符位于两列逻辑运算符的内部。
•每个条件组都可以通过选中其Not复选框(位于条件组的逻辑运算符的左侧)来进行否定。
•外部逻辑连接符and或or分别表示,条件集(验证或过滤)中的所有条件组或一个条件组是否必须计算为true,以便整个条件集(验证或过滤)计算为true。
•要更改逻辑连接符,请在外部逻辑连接符(条件组连接符)的组合框中选择适当的选项。内部逻辑连接符(条件组内的条件连接符)的值被切换为与外部逻辑连接符相反的值。
•可以相对于选定的条件追加或插入条件组或条件。为此,选中一个条件,单击追加或插入按钮(位于窗格的左上方),然后从菜单(参见下方截图)中选择所需的项(条件组或条件)。
条件种类
一个条件可以属于三个组中的一个(参见下方截图):
•组件种类(在下拉列表中,以Component开头的种类;参见下方截图)
•属性种类(Property Value)
•组件和属性种类的结合(名称中带有Property和Component的种类)
条件的种类是从该条件的条件列的下拉列表中选择的(参见上方截图)。下面详细描述了这三组条件。
组件种类的条件
对于组件种类(以Component开头的种类)的条件,必须在随后的组件列中指定组件(参见下方截图)。组件是从子条件的“组件”字段的下拉列表中选择的。由于没有为该组件种类的条件定义其他字段(属性、比较值),所有其他字段显示为灰色。
在上方截图中, 过滤条件指定了关于Element种类的组件的规则。如果验证条件指定该组件必须有一个种类为Notation的子级,则完整的规则可以表述为:Element组件必须具有一个种类为Notation的子级。如果验证条件的NOT选项被选中,则该规则将被表述为:Element组件不得具有种类为Notation的子级。
属性种类的条件
属性种类的条件是Property Value(参见下方截图)。这种条件指定了属性的性质。因此,它需要Property和Comparator列中的条目,以及(可选的)Value列中的条目。不需要在组件列中输入,因此显示为灰色。在Property列的下拉列表中列出的属性不仅包括XML特性(例如default和maxOccurs),还包括组件的逻辑属性(例如derivedBy)。
上方截图显示了一个规则,其中Model属性的值等于All,并且被否定了(通过选中Not复选框)。结合Model Group组件上的过滤条件,此规则表明了一个Schema不得包含任何xsd:all元素。
请注意以下几点: |
•使用IsQNameEqualTo比较运算符时,对应的值必须写成:{URI}localName。例如,值可以是:{http://www.w3.org/2001/XMLSchema}NOTATION。
•default属性可以存在且为空(<element name default=""/>)或不存在(<element name/>)。
结合组件和属性种类的条件
结合组件和属性种类的条件是:
•ComponentHasChildOfKindWithPropertyValue:指定子元素的组件种类和属性值。
•PropertyResolvesToComponentOfKind:指定解析为组件种类的属性。Comparator和Value列为空。
否定条件
通过选中条件左侧的Not复选框(内部Not复选框)可对该条件进行否定。一个条件组可通过选中该条件组中条件的逻辑连接符左侧的Not复选框来否定。