XML Schema
1.XML Schema 的基本概念 2.XML Schema 的数据类型 3.XML Schema 的根元素的声明 4.XML Schema 的元素及属性声明 5.XML Schema 对值的限制 6.综合练习 7.schema验证方式
1.XML Schema 的基本概念XML Schema 语言有两种类型:MIcosoft开发的Microsoft XML Schema 和 W3C 开发的W3C XML Schema 。 最为正式的XML Schema 语言是由W3C制定的XML Schema规范简称为XSD (XML Schema Definition) DTD 与XML schema 的适用情况: DTD适合以下情形: 1.文件是叙述性的,并有混合内容。 2.需要有约束标记之间的关系,特别是子标记的顺序关系,而不是标记本身的文本内容 3.需要使用实体 4.XML文件的使用者对使用的DTD达成一致。 XML Schema 则非常适合下列情形: 1,需要定义数据类型,以便约束标记的文本内容的内部结构 2.不强调子标记的顺序,而是强调其数量 3.标记约束不限于父子关系,还需要考虑祖先及子孙的关系 4.跨越多个文件,命名空间前缀不一致 (XML Schema 是 W3C 标准)(注明:以上摘自《XML基础教程与实验指导》)
2.XML Schema 的数据类型分为简单类型和复杂类型: 1)简单类型: string decimal 十进制数型,包含任意精度和位数 integer float boolean date 日期型,格式 YYYY-MM-DD month 日期型,格式YYYY-MM year 日期型,格式YYYY time 时间型,格式为HH:MM:SS datetime 日期时间型,格式为YYYY-MM-DD hh:mm:ss uri-reference 元素包含了一个URL 2)复杂类型
复杂类型的元素有子元素和属性,也可以有字符内容。共有4种:
3.XML Schema根元素的声明(内容来自w3c)<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified"> ... ... </xs:schema> 代码解释:下面的片断: xmlns:xs="http://www.w3.org/2001/XMLSchema" 显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs: 这个片断: targetNamespace="http://www.w3school.com.cn" 显示被此 schema 定义的元素 (note,to,from,heading,body) 来自命名空间: "http://www.w3school.com.cn"。 xmlns="http://www.w3school.com.cn" 指出默认的命名空间是 "http://www.w3school.com.cn"。 elementFormDefault="qualified" 指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。 4.XML元素及属性声明1)定义简单元素格式:<xs:element name="xxx" type="yyy"/> <xs:element name="lastname" type="xs:string"/> <xs:element name="age" type="xs:integer"/> <xs:element name="dateborn" type="xs:date"/> 简易元素的默认值和固定值简易元素可拥有指定的默认值或固定值。 当没有其他的值被规定时,默认值就会自动分配给元素。 在下面的例子中,缺省值是 "red": <xs:element name="color" type="xs:string" default="red"/> 固定值同样会自动分配给元素,并且您无法规定另外一个值。 在下面的例子中,固定值是 "red": <xs:element name="color" type="xs:string" fixed="red"/> 下面的例子定义了带有一个限定且名为 "age" 的元素。age 的值不能低于 0 或者高于 120:<xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="120"/> </xs:restriction> </xs:simpleType> </xs:element>
更多例子:http://www.w3school.com.cn/schema/schema_facets.asp
定义属性的语法是:<xsd:attribute name="属性名" type="基本数据类型" use="条件" /> use的取值可以有:required 、optional、fixed和default 2)复合元素类型(内容参考自:http://www.runoob.com/schema/schema-complex-mixed.html)1.空元素 <product prodid="1345" />
方法一: <xs:element name="product"> 方法二: <xs:element name="product" type="prodtype"/>
2.仅含元素: <person> 解: <xs:element name="person"> 3.仅含文本 <shoesize country="france">35</shoesize>
解: <xs:element name="shoesize">
其中 <xs:extension base="xs:integer"> 可以换成: <xs:restriction base="xs:integer"> 4.混合内容 <letter> 解 <xs:element name="letter">
6.综合练习题目如下:
<?xml version="1.0" encoding="utf-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qulified" > <!-- 逻辑结构 --> <xs:element name="cars" > <xs:complexType> <xs:sequence> <xs:element ref="car" /> </xs:sequence> </xs:complexType> </xs:element> <!--元素的定义 --> <xs:element name="car" > <xs:complexType> <xs:sequence> <xs:element ref="make"/> <xs:element ref="model" /> <xs:element ref="year" /> <xs:element ref="color"/> <xs:element ref="engine" /> <xs:element ref="number_of_doors"/> <xs:element ref="transmission_type" /> <xs:element ref="accessories" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="make" type="xs:string"/> <xs:element name="model" type="xs:string" /> <xs:element name="year" type="xs:date" /> <xs:element name="color" type="xs:string" /> <xs:element name="engine" > <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute ref="number_of_cylinders" use="required"/> <xs:attribute ref="fuel_system" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="number_of_doors" type="integer" /> <xs:element name="transmission_type" type="xs:string" /> <xs:element name="accessories" > <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute ref="radio" use="required" /> <xs:attribute ref="air_conditioning" use="required" /> <xs:attribute ref="power_windows" use="required"/> <xs:attribute ref="power_steering" use="required" /> <xs:attribute ref="power_brakes" use="required" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <!--属性的定义 --> <xs:attribute name="number_of_cylinders" type="xs:integer" /> <xs:attribute name="fuel_system" > <xs:simpleType> <xs:restriction base="xs:string" > <xs:enumeration value="carbureted" /> <xs:enumeration value="fuel-injected" /> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="radio" type="yesOrNoType" /> <xs:attribute name="air_conditioning" type="yesOrNoType" /> <xs:attribute name="power_windows" type="yesOrNoType" /> <xs:attribute name="power_steering" type="yesOrNoType" /> <xs:attribute name="power_brakes" type="yesOrNoType"/> <xs:simpleType name="yesOrNoType" > <xs:restriction base="xs:string" > <xs:enumeration value="yes" /> <xs:enumeration value="no" /> </xs:restriction> </xs:simpleType> </xs:schema>
依据该schema,在myeclipse里自动生成的模板如下: <?xml version="1.0" encoding="UTF-8"?> <cars xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.w3.org/2001/XMLSchema"> <car> <make>make</make> <model>model</model> <year>2001-01-01</year> <color>color</color> <engine fuel_system="carbureted" number_of_cylinders="0">engine</engine> <number_of_doors>0</number_of_doors> <transmission_type>transmission_type</transmission_type> <accessories air_conditioning="yes" power_brakes="yes" power_steering="yes" power_windows="yes" radio="yes">accessories</accessories> </car> </cars> 7.schema验证的方式暂时只找到在myeclipse 添加xml shcema ,然后根据其定义的规则自动生成xml模板。过查看生成的模板判断schema是否书写正确。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |