schema规范中:
1. namespace : schema文件的标识属性,相当于id,每个schema文件需要有一个唯一的namespace值;
2. targetNameSpace :指定当前schema文件的namespace值,它的值是一个url(很有可能不存在);
3. xmlns :引入一个schema约束,它的值为一个schema的namespace值
属性? : 用xmlns属性
属性值: 对应的schema文件的id(namespace值)
4.schemaLocation:如果引入的schema不是w3c组织定义,必须指定schema文件的位置;
5.element :定义标签(常用类型:string,decimal,integer,boolean,date,time)
6.elementFormDefault:控制元素。有两个取值:"qualified"-在XML文档中使用局部元素时,必须使用限定短名作为前缀;unqualified-在XML文档中使用局部元素时,可以省略限定短名;
7.attributeFormDefault:控制属性的。用法与elementFormDefault一样;
8.如果引入了N个约束,需要给n-1个取别名(如下:xsd为w3c约束的别名);
复杂类型:一个元素如有属性或者包含子元素,那么这个元素就是复杂类型。复杂类型使xsd:complexType定义。复杂类型要么具有简单内容,要么具有复杂内容。内容是指在开始标签和结束标签之间的字符数据和子元素。简单内容是指内容只具有字符数据没有子元素,简单内容是用xsd:simpleContent元素来定义(简单内容要有属性,否则等同于简单类型)。除此之外的就是复杂内容,使用xsd:complexContent来定义。
xsd:attribute元素的use、default、fixed属性
use属性指示xsd:attribute元素是否需要出现,其有效值为:optional(可选的,use属性的默认值)、prohibited(禁止使用属性)、required(属性是必须的)。对全局声明的属性不能使用use属性。
例子:book.xsd
<?xmlversion="1.0"encoding="UTF-8"?> <xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ciyo.com/bookSchema" elementFormDefault="qualified"> <xsd:elementname="bookrack"> <xsd:complexType> <xsd:sequence> <!--maxOccurs:限定元素个数,一个书架最多基本书--> <xsd:elementname="book"maxOccurs="3"> <!--complexType:复杂类型--> <xsd:complexType> <!--sequence:有顺序--> <xsd:sequence> <xsd:elementname="name"type="xsd:string"/> <xsd:elementname="author"> <xsd:complexType> <xsd:sequence> <xsd:elementname="firstname"type="xsd:string"/> <xsd:elementname="lastname"type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:elementname="price"> <!--simpleType:简单类型--> <xsd:simpleType> <!--restriction:限定--> <xsd:restrictionbase="xsd:integer"> <!--minInclusive:最小值;pattern:正则;length:长度;enumeration:枚举;--> <xsd:minInclusivevalue="0"/> <!--maxInclusive:最大值--> <xsd:maxInclusivevalue="120"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:elementname="desc"type="remark"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <!--具有简单内容的复杂类型扩展--> <!--complexType:复杂类型--> <xsd:complexTypename="remark"> <!--simpleContent:简单内容--> <xsd:simpleContent> <xsd:extensionbase="xsd:string"> <!--use属性:optional:可选;required:必填;prohibited:禁用属性--> <!--default属性:默认值EN;--> <!--fixed属性:指示固定值,不管该属性出现不出现,该属性的值都是EN--> <xsd:attributename="lang"use="required"default="EN"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:schema>
book.xml
<?xmlversion="1.0"encoding="UTF-8"?> <!--书架--> <bookrackxmlns="http://www.ciyo.com/bookSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:schemaLocation="http://www.ciyo.com/bookSchemabook.xsd"> <!--书--> <book> <!--书名--> <name>JavaScript开发</name> <!--作者--> <author> <firstname>John</firstname> <lastname>Smith</lastname> </author> <!--价格--> <price>100</price> <!--描述--> <desclang="EN">EN</desc> </book> </bookrack>
派生复杂类型--扩展
当从简单类型或具有简单内容的复杂类型派生复杂类型时(注意:简单内容直接或间接派生出来的复杂类型也必须是简单内容,简单内容不能派生复杂内容),使用xs:simpleContent元素,如果是扩展派生,使用xs:extension元素,如果是限制派生,使用xs:restriction元素。
1.扩展简单内容
扩展简单内容可以从简单类型或具有简单内容的复杂类型扩展。由于不能通过扩展简单内容来得到复杂内容,因此对简单内容的扩展只能是添加新的属性。
employee.xsd (标签employee属性number扩展了属性birthdate)
(1).从具有简单内容的复杂类型扩展
<?xmlversion="1.0"encoding="UTF-8"?> <xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ciyo.com/employeeSchema" elementFormDefault="qualified"> <xsd:elementname="employee"type="expandEmpType"/> <xsd:complexTypename="empType"> <xsd:simpleContent> <xsd:extensionbase="xsd:token"> <xsd:attributename="number"type="xsd:token"use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> <xsd:complexTypename="expandEmpType"> <xsd:simpleContent> <xsd:extensionbase="empType"> <xsd:attributename="birthdate"type="xsd:date"use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:schema>
(2).从简单类型扩展
<?xmlversion="1.0"encoding="UTF-8"?> <xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ciyo.com/employeeSchema" elementFormDefault="qualified"> <xsd:elementname="employee"type="expandEmpType"/> <xsd:complexTypename="expandEmpType"> <xsd:simpleContent> <xsd:extensionbase="xsd:string"> <xsd:attributename="number"type="xsd:string"use="required"/> <xsd:attributename="birthdate"type="xsd:date"use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:schema>
employee.xml
<?xmlversion="1.0"encoding="UTF-8"?> <employeexmlns="http://www.ciyo.com/employeeSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:schemaLocation="http://www.ciyo.com/employeeSchemaemployee.xsd" number="100"birthdate="2017-12-25"/>
2.扩展纯元素内容
从纯元素内容的复杂类型扩展,我们可以在基类型的内容模型最后添加新的与元素或属性。模式处理器会把基类型的内容模型和新增的内容模型合并到一个sequence中。注意不能对一个all组的基类型进行扩展添加新的元素(添加属性是可以的)。
fruit.xsd
<?xmlversion="1.0"encoding="UTF-8"?> <xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ciyo.com/fruitSchema" elementFormDefault="qualified"> <xsd:elementname="fruit"type="expandedFruitType"/> <xsd:complexTypename="fruitType"> <xsd:complexContent> <xsd:restrictionbase="xsd:anyType"> <xsd:sequence> <xsd:elementname="Apple"type="xsd:string"/> <xsd:elementname="Pear"type="xsd:string"/> </xsd:sequence> </xsd:restriction> </xsd:complexContent> </xsd:complexType> <xsd:complexTypename="expandedFruitType"> <xsd:complexContent> <xsd:extensionbase="fruitType"> <xsd:sequence> <xsd:elementname="Banane"type="xsd:string"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:schema>
fruit.xml
<?xmlversion="1.0"encoding="UTF-8"?> <fruitxmlns="http://www.ciyo.com/fruitSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:schemaLocation="http://www.ciyo.com/fruitSchemafruit.xsd"> <Apple>apple</Apple> <Banane>banane</Banane> <Pear>pear</Pear> </fruit>
3.扩展混合内容
混合内容的扩展跟纯元素的扩展类似,唯一的要求是派生类型也必须具有混合内容,也就是mixed=true。
employee.xsd
<?xmlversion="1.0"encoding="UTF-8"?> <xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ciyo.com/employeeSchema" elementFormDefault="qualified"> <xsd:elementname="employee"type="expandedEmpType"/> <xsd:complexTypename="empType"mixed="true"> <xsd:sequence> <xsd:elementname="name"type="xsd:string"/> <xsd:elementname="age"type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:complexTypename="expandedEmpType"mixed="true"> <xsd:complexContent> <xsd:extensionbase="empType"> <xsd:sequence> <xsd:elementname="salary"type="xsd:integer"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:schema>
employee.xml
<?xmlversion="1.0"encoding="UTF-8"?> <employeexmlns="http://www.ciyo.com/employeeSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:schemaLocation="http://www.ciyo.com/employeeSchemaemployee.xsd"> <name>Jon</name> <age>28</age> <salary>15</salary> </employee>
4.扩展空内容
从空内容类型扩展,派生类型可以具有纯元素内容,也可以就混合内容。
employee.xsd
<?xmlversion="1.0"encoding="UTF-8"?> <xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ciyo.com/employeeSchema" elementFormDefault="qualified"> <xsd:elementname="employee"type="extendedEmpType"/> <xsd:complexTypename="empType"> <xsd:attributename="number"type="xsd:string"use="required"/> </xsd:complexType> <xsd:complexTypename="extendedEmpType"mixed="true"> <xsd:complexContent> <xsd:extensionbase="empType"> <xsd:sequence> <xsd:elementname="name"type="xsd:string"/> <xsd:elementname="age"type="xsd:integer"/> </xsd:sequence> <xsd:attributename="remark"use="required"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:schema>
employee.xml
<?xmlversion="1.0"encoding="UTF-8"?> <employeexmlns="http://www.ciyo.com/employeeSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:schemaLocation="http://www.ciyo.com/employeeSchemaemployee.xsd" number="1"remark="普通员工"> <name>Tom</name> <age>27</age> </employee>
restriction数据类型的限定:
30134909154">
参考:http://blog.csdn.net/tuolingss/article/details/8541687
原文链接:https://www.f2er.com/xml/294190.html