Xml Schema命名空间

最近总接触Xml.所以写了一个Schema来验证客户端的Xml文件.
None.gif <? xml version = " 1.0 "  encoding = " utf-8 " ?>
None.gif
< xs:schema elementFormDefault = " qualified "   targetNamespace = " urn:xx-schema "  xmlns:xs = " http://www.w3.org/2001/XMLSchema "    xmlns = " urn:xx-schema " >
None.gif    
< xs:element name = " Client_Info " >
None.gif        
< xs:complexType >
None.gif            
< xs:sequence >
None.gif                
<!-- 只能有一个 -->
None.gif                
< xs:element name = " User_Info "  maxOccurs = " 1 "  minOccurs = " 1 " >
None.gif                    
< xs:complexType >
None.gif                        
< xs:sequence >
None.gif                            
< xs:element name = " CompanyName "  type = " xs:string " />
None.gif                            
< xs:element name = " Address "  type = " xs:string "   />
None.gif                            
< xs:element name = " PostCode "  type = " xs:integer "   />
None.gif                            
< xs:element name = " ContactMan "  type = " xs:string "   />
None.gif                            
< xs:element name = " Telephone "  type = " xs:string "   />
None.gif                            
< xs:element name = " MobilePhone "  type = " xs:string "   />
None.gif                            
< xs:element name = " Email "  type = " xs:string "   />
None.gif                            
< xs:element name = " Fax "  type = " xs:string "   />
None.gif                            
< xs:element name = " Province "  type = " xs:integer "   />
None.gif                            
< xs:element name = " City "  type = " xs:integer " />
None.gif                            
< xs:element name = " UserType "  type = " xs:unsignedByte "   />
None.gif                        
</ xs:sequence >
None.gif                    
</ xs:complexType >
None.gif                
</ xs:element >
None.gif            
</ xs:sequence >
None.gif        
</ xs:complexType >
None.gif    
</ xs:element >
None.gif
</ xs:schema >

如果客户端的文件如下就可以通过Schema的验证了.
None.gif < Client_Info xmlns = " urn:xx-schema " >
None.gif    
<User_Info>
None.gif        
< CompanyName >* </ CompanyName >
None.gif        
< Address >* </ Address >
None.gif        
< PostCode > * </ PostCode >
None.gif        
< ContactMan >* </ ContactMan >
None.gif        
< Telephone >* </ Telephone >
None.gif        
< MobilePhone >* </ MobilePhone >
None.gif        
< Email >*@*.* </ Email >
None.gif        
< Fax >* </ Fax >
None.gif        
< Province >* </ Province >
None.gif        
< City >* </ City >
None.gif        
< UserType >* </ UserType >
None.gif    
</ User_Info >
None.gif
</ Client_Info >
None.gif
上面的等价于:
None.gif < Client_Info xmlns = " urn:xx-schema " >
None.gif     <User_Info xmlns="urn:xx-schema">
None.gif        
< CompanyName >*</ CompanyName >
None.gif        
< Address >*</ Address >
None.gif        
< PostCode >*</ PostCode >
None.gif        
< ContactMan >*</ ContactMan >
None.gif        
< Telephone >*</ Telephone >
None.gif        
< MobilePhone >*</ MobilePhone >
None.gif        
< Email >* @ * . *</ Email >
None.gif        
< Fax >*</ Fax >
None.gif        
< Province >*</ Province >
None.gif        
< City >*</ City >
None.gif        
< UserType >*</ UserType >
None.gif    
</ User_Info >
None.gif
</ Client_Info >
None.gif

但是客户端如果是下面的情况就无法通过Schema的验证!
None.gif < Client_Info xmlns = " urn:xx-schema " >
None.gif    
<User_Info xmlns="">
None.gif        
< CompanyName >*</ CompanyName >
None.gif        
< Address >*</ Address >
None.gif        
< PostCode >*</ PostCode >
None.gif        
< ContactMan >*</ ContactMan >
None.gif        
< Telephone >*</ Telephone >
None.gif        
< MobilePhone >*</ MobilePhone >
None.gif        
< Email >* @ * . *</ Email >
None.gif        
< Fax >*</ Fax >
None.gif        
< Province >*</ Province >
None.gif        
< City >*</ City >
None.gif        
< UserType >*</ UserType >
None.gif    
</ User_Info >
None.gif
</ Client_Info >
原因是 User_Info节点多了一个属性为 xmlns.这样就无法通过Schema的验证.

本来想在Schema的定义时候给User_Info多定义一个xmlns的属性.在Altova XMLSpy验证文件:提示为"不能命名为"xmlns".试了其他的名字都是可以的.看来是关键字的原因吧.

最后把elementFormDefault="qualified"修改为elementFormDefault="unqualified"就可以通过验证了.

关于elementFormDefault,MSDN是这样写的:

在该架构的目标命名空间中声明的属性的形式。该值必须是下列字符串之一:qualified 或 unqualified。默认值为 unqualified。

如果该值是 unqualified,则无须通过命名空间前缀限定目标命名空间的属性。

如果该值是 qualified,则必须通过命名空间前缀限定目标命名空间的属性。

在"chnking"的XSD schema文件中elementFormDefault 属性探讨 里面有这个方面的详细说明.

MSDN的描述不完整,完整的应该是:<?XML:NAMESPACE PREFIX = O />

如果该值是 unqualified,实例xml的根元素必须有命名空间的的限定,这个命名空间必须是schema中定义的targetNameSpace。但是其下子元素无须也不允许用命名空间前缀限定目标命名空间。 子元素的命名空间为空命名空间。

如果该值是 qualified,实例xml根元素及其下所有子元素都必须通过命名空间前缀限定目标命名空间。这个命名空间必须是schema中定义的targetNameSpace


转载于:https://www.cnblogs.com/diego0404/archive/2007/07/06/808145.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值