XML Schema基本用法
Schema与DTD一样,都是对xml文件的规范和约束,但是Schema比DTD更加细粒度、数据类型更多、功能更加强大,所以现在大多数都选择Schema。Schema也是一个XML文件,因此编写Schema也需要按照xml的规范进行编写,因此我们会思考那么schema是有什么来规范和验证的呢?其实Schema也是有DTD进行规范和验证的。 Schema按照xml文件的规范,所以需要添加:<?xml version="1.0" encoding="utf-8" standalone="yes"?>。 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace=“”>......</xs:schema>使用命名空间:xmlns:xs ="..." 其中命名空间的地址是固定不变的。 targetNamespace表示将当前的元素或类型或属性放到指定的空间中(有全局和局部之分,通过elementFormDefault和attributeFormDefault来指定),如果指定了targetNamespace的值,就需要通过使用xmlns定义命名空间指向该空间,如果不指定targetNamespace的值,则表示缺省,那么在使用元素或者类型或者属性时就不需要加上命名空间前缀, 此时elementFormDefault和attributeFormDefault将不起作用。 elementFormDeafult和attributeFormDefault有 unqualified和qualified两个选择值,当elementFormDefault取值qualified时,表示此时的全局元素或者属性将被定义的指定的命名空间中,在此文件中使用时需要加上命名前缀,并且全局元素的子元素将被以缺省方式放到目标命名空间,当elementFormDefault取值unqualified时,表示全局的置于命名空间中,在此文件中使用时仍需要加上命名前缀,而局部的置于无名空间中,这些特性也就决定的我们在生成xml文件实例是否需要在子元素前面加上命名前缀,当取值qualified表示在父元素和子元素上都需要加上前缀,当取值unqualified是表示不需要再子元素前面加上前缀。 在这里我们还需要注意一点就是在局部的元素中如果我们使用form属性时,form取值qualified和unqualified,当前的限定范围就会覆盖指定的范围,例如elementFormDefault取值qualified,form取值unqualified时,那么当前的就会定义在无名空间中,即在xml实例中该子元素时,就不需要加上前缀。 attributeFormDefault与elementFormDefault类似。
一、定义元素 <xs:element name=" " type=" "/> 二、定义属性 <xs:attribute name=" " type=" "/> 三、简单类型simpleType,对属性或者元素的约束,简单类型中不能包含属性或者元素,只是简单的文本 <xs:simpleType name=""> 例如:<xs:simpleType name="type"> 在simpleType中除了除了restriction之外还可以取list、union <xs:simpleType> xs:simpleType>
四、复合类型complexType,也是对属性或者元素的约定,complexType包含元素或者属性或者二者都包含。 <xs:complexType name=""> <xs:element name=" " type=" "/> maxOccurs="unbounded"表示无上限 </xs:sequence> <xs:all>.....</xs:all>表示其下面的元素整体按照任意的顺序出现,可出现一次或者零次 <xs:group>....</xs:group>表示按照组的形式出现 <xs:choce>....</xs:choice>表示每次选择其下的一个元素,maxOccurs="" minOccurs=""选择的最大、最小次数
另外complexType 下面还可以使用simpleContent和complexContent,其中simpleContent表示该复合类型没有元素,包含文本,还可以包含属性。 <xs:complexType name=""> 五、group和attributeGroup group表示对元素进行分组,attributeGroup表示对属性进行分组,在其它地方可以通过ref属性对其进行 六、unique 表示在一定的范围内对属性或者元素的唯一性进行限定 例如:<xs:element name="books"> -------------------------------------------------------------------------------------------------------- <xs:element name="books">
7、 key元素 用于对元素或者属性的唯一性进行限定 key的用法与unique的用法相同 另外还有一个refkey元素,它与key元素一起使用 <xs:keyref refer="sortKey" name="sortKeyRef"> //refer表示引用一个key元素 ---------------------------------------------------------------------------------------------------------------------------------------------------------- <xs:element name="学生名册" type="students"/> <xs:complexType name="students"> <xs:sequence minOccurs="1" maxOccurs="unbounded"> <xs:element ref="student"/> </xs:sequence> </xs:complexType> <xs:element name="student" type="s"/> <xs:complexType name="s"> <xs:sequence minOccurs="1" maxOccurs="1"> <xs:element ref="name"/> <xs:element ref="gender"/> <xs:element ref="age"/> </xs:sequence> <xs:attribute name="id" type="xs:int" use="required"/> </xs:complexType> <xs:element name="name" type="xs:string"/> <xs:element name="gender"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="男"/> <xs:enumeration value="女"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:int"> <xs:minExclusive value="0"/> <xs:maxInclusive value="150"/> </xs:restriction> </xs:simpleType> </xs:element> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |