Altova XMLSpy 2023 Professional Edition

定义了元素的内容模型后,您可能希望在Schema的其他地方使用它。例如,如果您为美国和英国地址定义内容模型,就可能出现这种情况。这两种地址格式中的某些部分是通用的,例如街道和城市部分。但是,其他部分是不同的。因此,建议在每个地址内容模型(美国和英国)中重复使用通用的部分,然后用特定于国家/地区的部分(例如,美国的ZIP和英国的邮政编码)来补充每个内容模型。为此,我们可以将通用的部分创建为全局复杂类型(或者将每个通用组件创建为全局元素),然后在每个地址类型的内容模型中重复使用全局复杂类型(或全局元素)。

 

在这一部分,您将使用全局复杂类型。复杂类型是一种对包含其他元素和/或特性的元素的类型定义。我们将首先在全局级别创建一个复杂类型,然后将其导入到内容模型并对其进行扩展。您将在本教程后面部分了解有关全局元素的更多信息。

 

创建全局复杂类型

我们定义的基本元素Address(包含NameStreetCity元素)可以在各种地址格式中重复使用。因此,让我们将此元素定义创建为可被重复使用的复杂类型。

 

要创建全局复杂类型,请执行以下操作:

 

1.在内容模型视图中,在Address元素上右键单击。

2.在出现的上下文菜单中,选择设置为全局 | 复杂类型。这将创建一个名为AddressType的全局复杂类型,然后将此类型分配给Company内容模型中的Address元素。Address元素的内容是AddressType的内容模型,显示在黄色框中。请注意,Address的数据类型现在是AddressType

tut_17a

3.单击“显示所有全局组件”图标ic_back2global。它会带您进入Schema概览,您可以在其中查看Schema的所有全局组件。

4.单击“组件”输入助手中的elementcomplexType条目的展开图标,可以看到它们各自的Schema结构。现在Schema概览中显示了两个全局组件:元素Company和复杂类型AddressType。此外,复杂类型AddressType会显示在“组件”输入助手中。

complextypes_schema_ovw

5.单击AddressType的“内容模型视图”图标ic_component以查看其内容模型(参见下方截图)。请注意复杂类型容器的形状。

tut_18a

6.单击“显示所有全局组件”图标ic_back2global以返回到Schema概览。

 

扩展复杂类型定义

现在我们将使用全局组件AddressType来创建两种类型的国家特定地址。 我们将首先基于AddressType组件定义一个新的 复杂类型 ,然后扩展其定义。

 

为此,请执行以下操作:

 

1.切换到Schema概览。(如果您在内容模型视图中,请单击“显示所有全局组件”图标ic_back2global。)

2.单击组件窗口左上方的追加图标ic_tbl_append_row。这将打开以下菜单

tut_18b

3.从菜单中选择ComplexType。组件列表中会追加一个新的空白行,您可以在其中输入组件的名称。

4.输入US-Address,然后按Enter键确认。(如果您忘记输入连字符“-”,而使用空格代替,元素名称将显示为红色,表示使用了无效字符。)

complextypes_ext_schema_ovw

5.单击US-Address行中的“内容模型视图”图标ic_component以查看新的复杂类型的内容模型。该内容模型是空的(参见下方截图)。

6.在“详细信息”输入助手中,单击base组合框,然后选择AddressType条目。

complextypes_ext_contmod_view

在内容模型视图中,AddressType内容模型现在显示为US-Address的内容模型(参见下方截图)。

complextypes_ext_contmod_view_2

7.我们现在可以将ZIP邮政编码元素添加到US-Address复杂类型的内容模型中。为此,在US-Address组件上右键单击,然后从出现的上下文菜单中选择添加子级 | Sequence。一个新的Sequence排序符将出现在AddressType框外(参见下方截图)。这是一种视觉指示,表示这是一个元素的扩展。

tut_20a

8.在新的Sequence排序符上右键单击,然后选择添加子级 | 元素

9.将新创建的元素命名为Zip,然后按Tab键。这会将光标置于类型描述行的值字段中。

10.从出现的下拉菜单中选择xs:positiveInteger,然后按Enter键确认。

tut_20b

您现在有一个名为US-Address的复杂类型,它基于复杂类型AddressType并使用ZIP邮政编码对其进行扩展。

 

全局简单类型

正如复杂类型US-Address基于复杂类型AddressType一样,元素也可以基于简单类型。好处与全局复杂类型相同:简单类型可以重复使用。要重复使用简单类型,必须将简单类型定义为全局元素。在本教程中,我们将为美国各州定义一个简单类型的内容模型。这个简单类型将用作另一个元素的基础。

 

创建全局简单类型

创建全局简单类型包括以下步骤:将新的简单类型追加到全局组件列表中、对其命名以及定义其数据类型。

 

要创建全局简单类型,请执行以下操作:

 

1.切换到Schema概览。(如果您在内容模型视图中,单击显示所有全局组件图标ic_back2global。)

2.单击追加图标,然后从出现的上下文菜单中选择SimpleType

3.输入US-State作为新创建的simpleType的名称。

4.Enter键确认。简单类型US-State被创建并添加到“组件”输入助手的简单类型列表中(单击SimpleType条目的展开图标以查看它)。

simpletypes_schema_ovw

5.在“详细信息”输入助手(参见下方截图)中,将光标置于restr的值字段中并输入xs:string,或从restr值字段的下拉菜单中选择xs:string

simpletypes_details_eh

这将创建一个名为US-State的简单类型,其数据类型为xs:string。现在我们可以在US-Address的内容模型中使用此全局组件。

 

在内容模型中使用全局简单类型

全局简单类型可以在内容模型中用来定义一个组件的类型。我们将在US-Address的内容模型中使用US-State定义一个名为State的元素。

 

请执行以下操作:

 

1.在Schema概览中,单击US-Address的“组件模型视图”图标ic_component

2.在下方的Sequence排序符上右键单击,然后选择添加子级 | 元素

3.输入State作为元素名称。

4.Tab键将光标置于类型描述行的值字段中。

5.从此组合框的下拉菜单中选择US-State

tut_21b

State元素现在基于US-State简单类型。

 

基于AddressType创建第二个复杂类型

我们现在将为英国地址创建一个全局复杂类型。该复杂类型将以AddressType为基础,并进行扩展以便对应于英国的地址格式。

 

请执行以下操作:

 

1.在Schema概览中,创建一个名为UK-Address的全局复杂类型,然后将其基于AddressTypebase=AddressType)。

2.UK-Address的内容模型视图中,添加Postcode元素,并为其指定类型xs:string。成功创建后的UK-Address内容模型应如下所示:

complextypes_ext_contmod_view_3
备注:在本节中,您创建了全局简单类型和全局复杂类型,然后在内容模型定义中使用它们。全局类型的优点是它们可以在多个定义中重复使用。

 

© 2017-2023 Altova GmbH