全局组件
全局组件是作为顶级xs:schema元素的子级添加的组件(而局部组件是在其他组件中创建的)。一些全局组件,例如复杂类型、元素和特性,可以被Schema中的其他组件引用。
在Schema概览中创建全局组件
全局组件通常是在Schema概览中创建和编辑的。在Schema概览中,单击追加或插入图标可添加组件。全局组件的内容模型(如果有,参见下表)是在该组件的内容模型视图中创建和编辑的。(单击组件名称左侧的切换到内容模型视图图标可转至内容模型视图。)
一些全局组件在Schema概览中创建时也会被添加到“组件”输入助手中。如果一个组件具有内容模型,则在“组件”输入助手中双击其名称将在内容模型视图中打开其内容模型以供编辑。
如果全局组件有一个类型定义(简单类型或复杂类型),则单击组件的上下文菜单命令转至类型定义将带您进入类型定义。对于内置简单类型,将出现一个消息框,其中包含有关简单类型的信息。
注意: | 在内容模型视图中编辑时,还可以创建一些全局组件(元素、特性、简单类型、复杂类型和模型组)。为此,请在窗口中的任意位置右键单击并选择新建全局项|< 全局组件的类型 >。 |
注意: | 在内容模型视图中编辑时,您可以将局部元素设为全局元素——或全局复杂类型(如果该元素具有元素或特性子级)。为此,请选择局部元素,在窗口中的任意位置右键单击并选择设置为全局 | 元素或设置为全局 | 复杂类型。 |
全局组件 | Schema中的位置 | 内容模型 |
include | 开头 | 不支持 |
import | 开头 | 不支持 |
redefine | 开头 | 不支持 |
override 1.1 | 开头 | 不支持 |
defaultOpenContent 1.1 | 在include、import、redefine、override之后;在其他组件之前 | 支持 |
element | defOpenCont之后的任何位置 | 支持 |
group | defOpenCont之后的任何位置 | 支持 |
simpleType | defOpenCont之后的任何位置 | 不支持 |
complexType | defOpenCont之后的任何位置 | 支持 |
attribute | defOpenCont之后的任何位置 | 不支持 |
attributeGroup | defOpenCont之后的任何位置 | 不支持 |
notation | defOpenCont之后的任何位置 | 不支持 |
annotation | defOpenCont之后的任何位置 | 不支持 |
Comment | 任何位置 | 不支持 |
Processing instruction | 任何位置 | 不支持 |
下文给出了在Schema视图中编辑这些组件的要点。
包括、导入、重新定义和覆盖
这四个全局组件允许您在当前Schema文档中复用其他Schema文档。
•include将复用与当前文档具有相同的目标命名空间的文档。
•import将复用与当前文档具有不同的目标命名空间的文档。
•redefine和override是include的类型,因为它们与当前文档具有相同的目标命名空间,但它们修改了所包括的Schema的部分内容。redefine是1.0的一项功能,在1.1中已弃用。override则是1.1的一项功能,更加灵活,旨在取代1.1中的redefine。
所有四个组件都具有一个schemaLocation特性,指向要复用的Schema。在Schema视图中,双击这些组件的loc字段可以浏览要复用的文件并设置其相对于当前文档的路径。import组件还有一个namespace特性,用于保存被导入的Schema的目标命名空间。
在当前Schema文档中(通过include、import、redefine或override)复用Schema时,其全局组件、命名空间和标识约束将显示在当前文档的“组件”输入助手中。
重新定义
在redefine组件中,您可以修改复杂类型、简单类型、模型组和特性组。需要重新定义的组件将在redefine组件的loc字段中指定的Schema中(在下方截图中,需要重新定义的组件在ExpReport.xsd中)。添加redefine组件后,您需要在全局组件列表中redefine和end of redefine行之间的某个位置添加要重新定义的组件(参见下方截图,其中组件New和emailType被重新定义了)。这两个组件来自ExpReport.xsd,正在为当前Schema重新定义。
要重新定义一个组件,请执行以下操作:
1.选择end of redefine行。
2.单击“Schema概览”左上角的插入图标。
3.选择要定义的组件类型(复杂类型、简单类型、模型组或特性组)。该组件将被添加到重新定义组件中。
4.将其命名为与要重新定义的组件相同的名称。该组件现在将具有正在复用的Schema中组件的所有属性。
5.通过选择组件并在“详细信息”和“方面”输入助手中修改其属性,或通过在内容模型视图中修改其内容模型(如果有)来重新定义组件。
注意: | 您还可以按如下方式插入要重新定义的组件:从全局组件列表中的其他位置或从“组件”输入助手,使用拖放或复制粘贴。 |
重新定义的组件可以被Schema中的其他组件引用。
覆盖
在override元素中,您可以定义以下组件:复杂类型、简单类型、全局元素、全局特性、模型组、特性组和符号。如果在override元素中定义了这些组件之一,则该组件将替换被覆盖的Schema中与覆盖组件具有相同名称的所有同类组件。被覆盖的Schema在override的loc字段中指定。
override元素与redefine元素的不同之处(参见上文)在于它们是从头开始定义的组件,而不是基于任何被复用的组件。在Schema视图中,添加覆盖组件的方式与添加重新定义组件相似。在end of override行的上方插入覆盖组件,然后定义其属性。请参见上文“重新定义”部分。override元素与redefine元素之间的主要区别在于,添加到override元素的组件不是基于被重用的Schema中的任何组件。
默认开放内容
defaultOpenContent元素是XSD 1.1中的新元素,它指定一个或多个未定义的元素可以被添加到任何复杂类型的混合或仅元素内容中。它类似于openContent元素(也是XSD 1.1的新元素),主要区别在于openContent元素适用于Schema中的单个复杂类型,而defaultOpenContent元素适用于所有复杂类型。
defaultOpenContent元素在文档中只出现一次(参见下方截图),在include、import、redefine和override之后并且在组件的定义之前。它有一个mode特性,其值可以是interleave或suffix。默认为interleave。
defaultOpenContent元素具有一个内容模型,您可以在内容模型视图中对其进行编辑。声明后,defaultOpenContent元素将应用于Schema中的所有复杂类型。在下方截图中,您可以看到defaultOpenContent已自动应用于OfficeType和Desc复杂类型。
要在应用于特定复杂类型时覆盖defaultOpenContent元素,请将openContent子元素添加到该复杂类型。在下方截图中,一个openContent元素已添加到带有defaultOpenContent元素的Desc元素(参见上方截图),它覆盖了defaultOpenContent元素。
全局元素(element)
在Schema概览中,您可以创建一个全局元素。如果它有一个内容模型,则会在该全局元素的内容模型视图中定义。在任一视图中选择此元素后,您可以在AAIDC窗格的相应选项卡中定义特性、断言和标识约束。方面和其他属性可以在元素的方面和详细信息输入助手中进行定义。然后可以通过复杂类型引用全局元素。
模型组(group)
在Schema概览中,您可以创建命名模型组,然后在复杂类型中引用这些模型组。命名模型组(xs:group元素)允许您预定义可以复用的内容模型。它可以包含三个子模型组之一: sequence组、choice组,或all组。
要在Schema概览中创建命名模型组,请添加“group”组件,为其命名并在内容模型视图中定义其内容模型。然后可以将命名模型组添加到复杂类型的内容模型中。
命名简单类型(simpleType)
在Schema概览中,您可以创建命名简单类型(参见下方截图),然后可以在元素和特性声明中引用这些类型。
为此,在“详细信息”输入助手中指定简单类型的内容(restriction、list、union)和相应的类型:基类型、项类型和成员类型。例如,在下方截图中,简单类型的restriction的基类型是xs:integer。有关更多信息,请参见“详细信息”输入助手部分。要使用方面约束简单类型,请使用“方面”输入助手中的选项。
注意: | 匿名类型可以在Schema概览或内容模型视图中对具有简单内容的元素或特性声明。当您将derivedBy属性(在“详细信息”输入助手中)设为restriction、list或union时,您在该元素或特性声明中创建了一个匿名的简单类型。您可以在“方面”输入助手中定义限制方面,并在“详细信息”输入助手中定义其他属性。 |
命名复杂类型(complexType)
在Schema概览中,您可以创建命名复杂类型,然后可以在元素声明中引用这些类型。在任一视图中选择命名复杂类型后,您可以在AAIDC窗格的相应选项卡中定义其特性和断言。
复杂类型可以具有四种内容类型(参见下方列表)。如下所述,您可以在“详细信息”输入助手中指定内容类型,并在内容模型视图中指定内容模型(如果需要且允许的话)。
•简单内容:定义简单内容的基类型(参见下方截图)。mixed 特性(用于混合内容)的值必须为false(默认值);因此,true在下方截图中显示为红色。不允许使用任何内容模型。
•仅元素内容:在内容模型图表中创建子元素。没有基类型。
•混合内容: mixed特性必须设为true。字符数据可以出现在子元素节点中元素内的任何位置。字符数据不具有任何数据类型,因此不得有基类型(参见上方截图)。可以在内容模型图表中创建子元素。
•空内容:该元素既不包含字符数据,也不包含子元素。不得有基类型,并且mixed必须为false。空内容元素中的数据通常存储在特性中。
注意: 可以在所有四种内容类型上定义特性和断言(在AAIDC窗格中)。
注意: | 要在元素中创建匿名复杂类型,需要在内容模型视图中为该元素创建内容模型。 |
全局特性和特性组(attribute, attributeGroup)
全局特性和特性组都是在Schema概览中添加的。
•全局特性的属性在特性的“详细信息”输入助手中定义。
•创建全局特性组后,您可以按以下方式将特性添加到组:(i) 在全局组件列表中选择全局特性组;(ii) 在AAIDC窗格的“特性”选项卡中添加特性;以及(iii) 在所选特性的“详细信息”输入助手中定义每个特性的属性。
创建全局特性和特性组后,可以在元素和复杂类型的声明中引用它们。
符号(notation)
符号总是全局的;没有局部符号。符号的属性是在符号的“详细信息”输入助手中指定的。符号的名称可以直接在全局组件列表中定义。Schema中的所有符号都显示在“组件”输入助手中。
全局注解
全局注解是全局组件,与某些全局组件可用的可选注解不同。您可以在“注解”对话框(参见下方截图)中编辑全局注解。为此,请在注解全局组件上右键单击并选择全注解数据。
每个注解都可以有一个id特性和多个documentation和/或appinfo子元素。要添加documentation或appinfo元素,请单击对话框左上角的追加或插入按钮并从相应的组合框中选择doc或app项。在对话框的顶部窗格中选择doc或app项,并在内容窗格中输入其内容。如果您希望在内容中创建新行(从而使内容成为多行内容),则按Enter键。在上方截图中,documentation元素被选中,您可以看到它包含的两行内容。对于每个documentation或appinfo元素,您还可以输入可选的source 和xml:lang特性。
在Schema概览中,仅显示全局注解的第一个documentation或appinfo元素,并可以直接在全局组件列表中对其进行编辑。如果该内容是多行的,将光标悬停在它上方将在多行弹出框中显示所有行的内容。要显示或编辑其他documentation和/或appinfo元素的内容,请转至该全局注解的“注解”对话框。
注意: | 对于某些全局组件可用的可选注解,也可以通过“注解”对话框进行编辑,方式与上述全局注解完全相同。 |
注释和处理指令
注释和处理指令可以添加到Schema概览的全局组件列表中的任何位置,但不能添加到内容模型视图中。如果简单类型或复杂类型中有一个或多个注释或处理指令,它们将被收集并移动到封闭对象的末尾。因此,在这种情况下,建议您使用注解,而不是注释。