Altova XMLSpy 2023 Enterprise Edition

用户可以在Schema规则编辑器中打开一个Schema规则集进行编辑(参见下方截图)。然后,您可以在该Schema规则集文件中创建、编辑和删除Schema规则。要在Schema规则编辑器中打开规则集,请执行以下操作:

 

1.在“信息”窗口的规则集列表中选择一个规则集。

2.单击该规则集的上下文菜单ContextMenuButton按钮。

3.在出现的上下文菜单中,选择编辑规则集。

SchemaRuleEditorOview

“Schema规则编辑器”对话框有两个窗格:

 

“规则列表”窗格(位于编辑器的顶部),您可以在其中添加和删除规则。通过单击窗格左上方的相应按钮(追加插入),可以为一个规则追加或插入空行。要删除规则,请选中它并单击窗格右上方的删除按钮。此窗格中的每个规则都具有一个名称、一个描述性消息文本和一个严重性级别(如果规则相矛盾,则可以将验证设置为返回错误或警告)。

“规则”窗格(位于编辑器的底部)。此窗格显示在其上方的“规则列表”窗格中被选中的规则的详细信息,并可以编辑该规则的详细信息。有关定义规则的详细信息,请参见下方的定义规则部分。

 

在编辑规则集文件中的规则后,单击保存以将规则保存到规则集文件。

 

定义规则

要定义或编辑规则,从上方“规则列表”窗格的列表中选择一个规则。该规则的定义将显示在“规则”窗格中并可以进行编辑。下方截图显示了一个规则,其定义如下:如果一个复杂类型是一个简单类型的扩展,则它必须具有一个子类型AttributeGroup。

SchemaRuleEditorDefinition

验证条件集和过滤条件集

 

每个规则都有一个验证条件集和一个过滤条件集(参见上方截图中的第一列)。

过滤条件集最终必须评估为true,以便验证条件得到评估。

每个条件集(验证或过滤)由一个或多个条件组组成,每个条件组包含一个或多个条件。在上方截图中,验证条件集包含一个条件组,其中包含一个条件,而过滤条件集包含三个条件组,每个条件组包含一个条件。在下方截图中,过滤条件集包含三个条件组:第一个条件组包含两个条件,第二个包含三个条件,第三个包含一个条件。

SchemaRuleEdCondGrps1

选中Not复选框(位于条件左侧)可对每个单独的条件进行否定。

在条件组中,逻辑连接符andor分别表示组中的所有条件,或条件组中的一个条件是否必须计算为true,以便整个条件组计算为true。在用户界面中,这些逻辑运算符位于两列逻辑运算符的内部。

每个条件组都可以通过选中其Not复选框(位于条件组的逻辑运算符的左侧)来进行否定。

外部逻辑连接符andor分别表示,条件集(验证或过滤)中的所有条件组或一个条件组是否必须计算为true,以便整个条件集(验证或过滤)计算为true。

要更改逻辑连接符,请在外部逻辑连接符(条件组连接符)的组合框中选择适当的选项。内部逻辑连接符(条件组内的条件连接符)的值被切换为与外部逻辑连接符相反的值。

可以相对于选定的条件追加或插入条件组或条件。为此,选中一个条件,单击追加插入按钮(位于窗格的左上方),然后从菜单(参见下方截图)中选择所需的项(条件组或条件)。

SchemaRuleEditorAppendInsert

 

条件种类

一个条件可以属于三个组中的一个(参见下方截图):

 

组件种类(在下拉列表中,以Component开头的种类;参见下方截图)

属性种类(Property Value

组件和属性种类的结合(名称中带有PropertyComponent的种类)

SchemaRuleEditorSubConditionsKind

条件的种类是从该条件的条件列的下拉列表中选择的(参见上方截图)。下面详细描述了这三组条件。

 

组件种类的条件

对于组件种类(Component开头的种类)的条件,必须在随后的组件列中指定组件(参见下方截图)。组件是从子条件的“组件”字段的下拉列表中选择的。由于没有为该组件种类的条件定义其他字段(属性、比较值),所有其他字段显示为灰色。

SchemaRuleEditorSubCondComp

在上方截图中, 过滤条件指定了关于Element种类的组件的规则。如果验证条件指定该组件必须有一个种类为Notation的子级,则完整的规则可以表述为:Element组件必须具有一个种类为Notation的子级。如果验证条件的NOT选项被选中,则该规则将被表述为:Element组件不得具有种类为Notation的子级。

 

属性种类的条件

属性种类的条件是Property Value参见下方截图)。这种条件指定了属性的性质。因此,它需要PropertyComparator列中的条目,以及(可选的)Value列中的条目。不需要在组件列中输入,因此显示为灰色。在Property列的下拉列表中列出的属性不仅包括XML特性(例如defaultmaxOccurs),还包括组件的逻辑属性(例如derivedBy)。

SchemaRuleEditorSubCondProp

上方截图显示了一个规则,其中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:指定解析为组件种类的属性。ComparatorValue列为空。

 

否定条件

通过选中条件左侧的Not复选框(内部Not复选框)可对该条件进行否定。一个条件组可通过选中该条件组中条件的逻辑连接符左侧的Not复选框来否定。

 

© 2017-2023 Altova GmbH