Schema的一个简单实例

一个XML文件如下:
None.gif <? xml version = "1.0" encoding="GB2312" standalone = "no" ?>
None.gif
<! DOCTYPE 联系人列表  SYSTEM "fclml.dtd" >
None.gif
None.gif
< 联系人列表 公司=“大地公司” >
None.gif    
< 联系人 >
None.gif        
< 姓名 > 张三 </ 姓名 >
None.gif        
< ID > 001 </ ID >
None.gif        
< 公司 > A公司 </ 公司 >
None.gif        
< EMAIL > zhang@aaa.com </ EMAIL >
None.gif        
< 电话 > (010)62345678 </ 电话 >
None.gif        
< 地址 >
None.gif            
< 街道 > 五街1234号 </ 街道 >
None.gif            
< 城市 > 北京市 </ 城市 >
None.gif            
< 省份 > 北京 </ 省份 >
None.gif            
< ZIP > 100001 </ ZIP >
None.gif        
</ 地址 >
None.gif    
</ 联系人 >
None.gif
None.gif    
< 联系人 >
None.gif        
< 姓名 > 李四 </ 姓名 >
None.gif        
< ID > 002 </ ID >
None.gif        
< 公司 > B公司 </ 公司 >
None.gif        
< EMAIL > li@bbb.org </ EMAIL >
None.gif        
< 电话 > (021)87654321 </ 电话 >
None.gif        
< 地址 >
None.gif            
< 街道 > 南京路9876号 </ 街道 >
None.gif            
< 城市 > 上海 </ 城市 >
None.gif            
< 省份 > 上海 </ 省份 >
None.gif            
< ZIP > 200002 </ ZIP >
None.gif        
</ 地址 >
None.gif    
</ 联系人 >
None.gif
</ 联系人列表 >

它的DTD文件fclml.dtd如下:
None.gif <? xml version="1.0" encoding="GB2312" ?>
None.gif
None.gif
<! ELEMENT 联系人列表 (联系人)* >
None.gif
<! ELEMENT 联系人 (姓名,ID,公司,EMAIL,电话,地址) >
None.gif
<! ELEMENT 地址 (街道,城市,省份) >
None.gif
<! ELEMENT 姓名 (#PCDATA) >
None.gif
<! ELEMENT ID (#PCDATA) >
None.gif
<! ELEMENT 公司 (#PCDATA) >
None.gif
<! ELEMENT EMAIL (#PCDATA) >
None.gif
<! ELEMENT 电话 (#PCDATA) >
None.gif
<! ELEMENT 街道 (#PCDATA) >
None.gif
<! ELEMENT 城市 (#PCDATA) >
None.gif
<! ELEMENT 省份 (#PCDATA) >
None.gif
<! ATTLIST 联系人列表 
None.gif    公司 CDATA #REQUIRED
None.gif
>

同样的文档结构要用Schema来描述的话,可写做下面的样子。我们给这个文件取名fclmlschema.xml。也许你要问:"为什么以.xml作为扩展名,而不象DTD那样有个特殊的名字?"答案很明确,因为Schema本身就是XML文档实例,以.xml作为扩展名正是为了强调这一点。不过,这并不是说,就只能以.xml作为扩展名。如果你愿意,你完全可以给它取一个全新的名字,比如:.aaa、.schema、...,只要你的文件系统支持就行。

None.gif [1] <? xml version="1.0" encoding="GB2312"  ?>
None.gif[2]
< Schema  xmlns ="urn:schemas-microsoft-com:xml-data"  
None.gif               xmlns:dt
="urn:schemas-microsoft-com:datatypes" >
None.gif[3]    
< AttributeType  name ="公司" />
None.gif[4]    
< ElementType  name = "姓名" />
None.gif[5]    
< ElementType  name = "ID" />
None.gif[6]    
< ElementType  name = "公司" />  
None.gif[7]    
< ElementType  name = "EMAIL" />
None.gif[8]    
< ElementType  name = "电话"  dt:type ="fixed.14.4" />
None.gif[9]    
< ElementType  name = "街道" />  
None.gif[10]  
< ElementType  name = "城市" />
None.gif[11]  
< ElementType  name = "省份" />
None.gif[12]  
< ElementType  name = "地址"  content ="eltOnly" >  
None.gif[13]       
< element  type = "街道"   />  
None.gif[14]       
< element  type = "省份"   />  
None.gif[15]       
< element  type = "城市"   />
None.gif[16]  
</ ElementType >
None.gif[17]  
< ElementType  name = "联系人"  content ="eltOnly" >
None.gif[18]       
< element  type = "姓名"   />
None.gif[19]       
< element  type = "ID"   />
None.gif[20]       
< element  type = "公司"   />
None.gif[21]       
< element  type = "EMAIL"   />
None.gif[22]       
< element  type = "电话"   />
None.gif[23]       
< element  type = "地址"   />
None.gif[24]  
</ ElementType >
None.gif[25]  
< ElementType  name = "联系人列表"  content ="eltOnly" >
None.gif[26]       
< element  type = "联系人"   />
None.gif[27]       
< attribute  type ="公司" />
None.gif[28]  
</ ElementType >
None.gif[29]
</ Schema >

逐字逐句地分析一下这个fclmlschema.xml: 
 
        [1]是XML类型声明语句,指明该文档是一个XML文档,并且符合版本1.0规范。另外,该文档采用GB2312编码。
        [2]是Schema声明语句,它包含了Schema命名空间的声明。本例中用到了两个命名空间:一是xmlns="urn:schemas-microsoft-com:xml-data",它指定本文档是一个XML Schema文档;另一个是xmlns:dt="urn:schemas-microsoft-com:datatypes",它定义了在本文档中可用的数据类型URI
        [3]是属性定义语句,它定义了属性“公司”。
        [4]-[11]是元素定义语句,这里共定义了8个元素:姓名、ID、公司、EMAIL、电话、街道、城市、省份。其中为"电话"元素定义了数据类型:fixed.14.4。
       [12]-[16]定义了本Schema的二级元素:地址,指明该元素包含三个子元素:街道、城市、省份。
[17]-[24]定义了本Schema的三级元素:联系人,它指明该元素包含六个子元素:姓名、ID、公司、EMAIL、电话、地址。
[25]-[28]定义了本Schema的顶级元素:联系人列表,指明该元素包含一个子元素:联系人,以及一个属性:公司。
[29]是结束标记语句,它指明该Schema的描述到此为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值