您已经在Schema概要视图中创建了一个叫做Company的全局元素(global element)。该元素应具有以下内容模型:包含一个Address元素和任意多个Person元素。能够具有内容模型的全局成分是元素(element)、复杂类型(complex type)和元素组(element group)。
在XMLSpy 2005中,全局成分的内容模型可以在Schema/WSDL视图的内容模型视图中显示。要查看或编辑全局成分的内容模型,您可以点击全局成分左边的图标

本节您将为Company元素定义内容模型。
创建一个简单的内容模型
要创建Company元素的内容模型,需要以下步骤:
1. |
在Schema概要视图中,点击Company元素左边的
|
|
![]() |
|
2. | 内容模型由容器(compositor)和成分(component)组成。容器(compositor)用于指定两个成分(component)之间的关系。在Company内容模型中,您必须先在Company元素下添加一个容器,然后在该容器中添加子元素(child
element)[译注//是不能直接在一个元素中添加另一个元素的]。要添加容器,首先右击Company元素,在上下文菜单中选择Add Child | Sequence。(内容模型中可以使用三种容器:Sequence、Choice和All。) |
|
![]() |
|
此时一个Sequence容器被插入到内容模型中,表明加入该容器中的成分在实例文档中必须按它们在容器中的顺序出现。 |
![]() |
3. | 右击Sequence容器,然后选择Add Child | Element来加入元素。这样,一个未命名的元素成分(element component )就被添加到Sequence容器中了。 |
4. | 输入Address 作为该元素成分的名称,并以回车键确认。 |
![]() |
5. | 再次右击Sequence容器,然后选择Add Child | Element。为新加入的元素成分输入名称:Person。
|
![]() |
目前,在您所定义的schema中,每个Company可以各有一个Address和一个Person。现在,我们需要增加Person元素的数量。 |
6. |
右击Person 元素,然后在上下文菜单中选择Unbounded。现在图中标出了Person元素允许出现的次数:1到无穷大。
|
![]() |
设定允许出现次数的另一个途径是:在Details窗口[译注//其位置是可以调整的,缺省位置在主窗口的右边,有时需要点击Details选项卡才能显示出来。]中,分别将minOcc和maxOcc字段设为1和infinity。
|
为内容模型的结构添加层次
到目前为止,您所创建的是一个简单的内容模型,它只有一层:即company元素的一个子层次,它包含Address和Person等元素。现在我们来定义Address元素的内容,使它包含Name、Street以及City等元素。这样,该内容模型便具有一个二层的结构。接着,我们要为Address元素添加一个子容器,并在其中增加元素成分。具体步骤如下:
1. | 右击Address 元素,在上下文菜单中选择Add Child | Sequence添加一个Sequence容器。 |
2. | 右击该Sequence容器,然后选择Add Child | Element来加入元素。为新加入的元素成分输入名称:Name。
|
|
![]() |
复杂类型、简单类型以及XML Schema数据类型
到目前为止,我们还没有显式定义任何元素类型(element type)。如果您现在用Text视图看一下schema(如下所示),您将发现对于已加入的每个Sequence容器,其xs:sequence元素都被一个xs:complexType元素包围着。简言之,Company和Address元素都是复杂类型(complex type),因为它们的内容中包含子元素。复杂类型(complex type)元素泛指那些包含子元素或/和具有属性的元素。[译注//复杂类型和简单类型都只是针对元素而言的。]
<xs:element name="Company">
<xs:annotation>
<xs:documentation>Root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Address">
<xs:complexType>
<xs:sequence>
<xs:element name="Name"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Person"/>
</xs:sequence>
</xs:complexType>
</xs:element>
而简单类型(simple type)元素指的是那些仅包含文本(不能包含子元素)、并且没有属性的元素。文本(text)可以是字符串、日期、数字等。我们希望让Address 的子元素Name为仅包含文本的简单类型,而且其文本内容被限定为字符串。我们可以利用XML Schema数据类型xs:string来进行上述定义。下面,我们将Name元素定义为该数据类型。
|
1. | 点击Name 元素并选中它。 |
2. | 在Details窗口中的type组合框的下拉菜单中选择xs:string 项。
|
![]() |
此时,内容模型视图中的Name元素的左上角会显示一个图标![]() |
Name 元素的文本表示如下:
<xs:element name="Name" type="xs:string"/> |
注:简单类型元素可以选择任意一个允许的XML Schema数据类型作为其数据类型。无论选择何种数据类型,元素方框中都会显示上述表明包含文本内容的图标。