-- 作者:calmness
-- 发布时间:4/27/2007 12:10:00 AM
-- 关于schema中unique遇到的问题
今天在写一个schema时,使用unique遇到个问题,xml文件使用noNamespaceSchemaLocation指定schema的时候,遇到重复的数据就会正常报错,然而如果使用命名空间的话就可以保存,不会报重复值的错误,但是其他验证却又正常,仅仅只有验证unique时候才有问题,schema代码如下: 以下内容为程序代码:
<?xml version="1.0" encoding="UTF-8"?> <!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by wxb (nudt) --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.easyjfweb.com/easyjf-test" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="easyjf-web"> <xs:complexType> <xs:sequence> <xs:element name="forms"> <xs:annotation> <xs:documentation> Forms标签定义,可包含一个或多个form标签 </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="form" minOccurs="0" maxOccurs="unbounded"> <xs:annotation> <xs:documentation> form标签定义 </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="property" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="initial" type="xs:string"/> <xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="notNull" type="xs:string" default="no"/> <xs:attribute name="size" type="xs:integer"/> <xs:attribute name="type" type="xs:string" default="java.lang.String"/> <xs:attribute name="event" type="xs:string"/> <!--属性type类型默认为java.lang.String--> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="name" type="xs:string"/> <xs:attribute name="alertType" type="xs:string"/> <xs:attribute name="bean" type="xs:string"/> <xs:attribute name="clientValidate" type="xs:boolean" default="false"/> <xs:attribute name="serverValidate" type="xs:boolean" default="false"/> <xs:attribute name="event" type="xs:string"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:unique name="EOneKeyU"> <xs:selector xpath=".//form"/> <xs:field xpath="@name"/> </xs:unique> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
使用命名空间的XML: 以下内容为程序代码:
<?xml version="1.0" encoding="UTF-8"?> <easyjf-web xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.easyjfweb.com/easyjf-test" xsi:schemaLocation="http://www.easyjfweb.com/easyjf-test testunique.xsd"> <forms> <form name="aaa"> <property name=""/> </form> <form name="aaa"> <property name=""/> </form> </forms> </easyjf-web> |
上面这一个XML就会直接保存,不会报错,而下面不使用命名空间的XML就会正常报错: 以下内容为程序代码:
<?xml version="1.0" encoding="UTF-8"?> <easyjf-web xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="testunique.xsd"> <forms> <form name="aaa"> <property name=""/> </form> <form name="aaa"> <property name=""/> </form> </forms> </easyjf-web> |
注:当使用第二个XML时,需要把schema的targetNamespace删除掉。 上面两个XML除了引用schema的方式不一样以外,其他都是一样的,可是验证的结果却不相同,请教schema高手,这是什么原因???
|