xml spy
上一页  首页  下一页
使用复杂类型和简单类型

您已经为Company元素定义了内容模型,也许您需要在schema中的别处对该内容模型进行重用。那么您就要将该元素作为复杂类型或全局元素来定义。本节,您将要使用全局复杂类型。您将首先创建一个全局的复杂类型,然后将它扩展用于内容模型。在本教程的后面部分,您还会学到有关全局元素的使用。

创建一个全局复杂类型
前面我们曾定义了一个简单的Address 元素(包含NameStreetCity元素),它是不能在需要地址格式的地方被重用的。下面,我们将把Address元素定义一个复杂类型,以便进行重用。步骤如下:
 
1.在内容模型视图中,右击Address元素。 
2.在上下文菜单中选择Make Global | Complex type。这将创建一个名为AddressType的全局复杂类型(global complex type),而Company的内容模型中的Address元素的类型被自动指定为AddressType。在内容模型视图中可以看出,Address元素的内容为AddressType的内容模型,并且是在一个黄色方框中显示的。注意:现在Address元素的数据类型是AddressType。  

tut_17a  
 
3.点击ic_back2global图标。这时将出现Schema概要视图,其中列出了所有的全局成分。 
4.在Components窗口中,点击ElementcomplexType条目左侧的“+”以展开列表,其中可以看到schema中的所有元素和复杂类型。 
现在Schema概要视图中列出了两个全局成分:一个Company元素以及一个复杂类型AddressType。在Components窗口中也可以看到复杂类型AddressType。  

complextypes_schema_ovw  

5.点击AddressType左侧的ic_component图标查看其内容模型(如下图)。请注意复杂类型方框的形状(方框的左上角和左下角是钝的)。  

tut_18a  

6.点击图标ic_back2global以返回Schema概要视图。 

扩展复杂类型的定义
我们现在要用复杂类型
AddressType来创建两种特定国家的地址。为此,我们先基于AddressType定义一个新的复杂类型,然后再对它的定义加以扩展。具体步骤如下:
 
1.切换到Schema概要视图。(如果您正处于内容模型视图中,则点击图标ic_back2global既可。) 
2. 点击全局成分列表左上角的ic_schem_app图标,出现菜单:  
 
tut_18b  
 
3. 在菜单中选择ComplexType。此时,全局成分列表中将添加一个新行,光标停留在该行的名称栏。 
4.输入US-Address后以回车键确认。(如果您没有输入连字符“-”,而是以一个空格代替的话,那么元素名将显示为红色,表明其中包含非法字符。)  

complextypes_ext_schema_ovw  
 
5.点击US-Address左侧的ic_component图标,查看其内容模型。现在US-Address的内容模型视图显示为空(如下图)。 
6.在Details窗口,点击base组合框,在下拉菜单中选择AddressType。  

complextypes_ext_contmod_view  

现在,US-Address具有和AddressType一样的内容模型(如下图)。  

complextypes_ext_contmod_view_2  

7.我们可以对US-Address的内容模型加以扩展:在其中添加一个邮政编码元素。具体做法是,右击US-Address,在上下文菜单中选择Add Child | SequenceAddressType方框外将出现一个新的Sequnce容器(如下图),表明它是对该元素的一个扩展。  

tut_20a  

8.右击Sequence容器,然后选择Add Child | Element来加入元素。 
9.将新创建的元素命名为Zip,然后按一下Tab键,把光标移到type字段的值域上。 
10.在下拉菜单(双击type字段的值域即可出现)中选择(也可以直接输入)xs:positiveInteger,然后以回车键确认。 

   tut_20b

现在,基于
AddressType的复杂类型
US-Address可以包含一个邮政编码元素了。

全局简单类型
与复杂类型
US-Address 基于AddressType一样,我们也可以令一个元素基于某个简单类型。定义全局简单类型的优点与定义全局复杂类型一样:利于重用。要重用一个简单类型,必须将它定义为全局的。下面,您将为US states定义简单类型的内容模型。该简单类型将被作为其他元素的基准。

创建一个全局简单类型
要创建一个全局简单类型,需要先在全局成分列表中添加新的简单类型,然后为之命名,并定义其数据类型。具体步骤如下:
 
1.首先切换到Schema概要视图。(如果您正处于内容模型视图中,则点击图标ic_back2global既可。) 
2.点击全局成分列表左上角的ic_schem_app图标,然后在弹出菜单中选择SimpleType。 
3.将新添加的简单类型命名为US-State。 
4.回车键确认。这样便创建了一个名为US-State的简单类型,我们可以在Components窗口中的simpleTypes下看到它。  
 
simpletypes_schema_ovw  
 
5.在Details窗口中(如下图),在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容器,然后选择Add Child | Element来加入元素。 
3.输入State作为元素名称。 
4.按一下Tab键,将光标移到该元素的type字段的值域上。 
5.在组合框的下拉菜单中选择US-State,并以回车键确认。  

   tut_21b
 
现在State元素是基于简单类型US-State的了。  


创建第二个基于
Address的复杂类型
下面我们来创建一个用于存放英国地址的全局复杂类型。我们将创建一个基于AddressType的复杂类型,然后将它扩展为符合英国的地址格式。步骤如下(详细步骤请参见前面US-Address的定义过程):
 
1.在Schema概要视图中,创建一个名为UK-Address并基于AddressTypebase=AddressType)的复杂类型。 
2.UK-Address的内容模型视图中,添加一个名为Postcode、类型为xs:string的元素。  

现在,UK-Address的内容模型应是下面这样:  

complextypes_ext_contmod_view_3  


注:您在本节创建了全局简单类型和全局复杂类型,并将它们用于内容模型的定义。全局类型的优点是,它们可在多个定义中被重用。

上一页  首页  下一页

© 2005 Altova

本文档由中国XML论坛Collin Hsu翻译。