XML学习之Xml Schema:七、派生复杂类型--扩展

来源:互联网 发布:stc51单片机和mcs 编辑:程序博客网 时间:2024/05/13 09:15

        当从简单类型或具有简单内容的复杂类型派生复杂类型时(注意:简单内容直接或间接派生出来的复杂类型也必须是简单内容,简单内容不能派生复杂内容),使用xs:simpleContent元素,如果是扩展派生,使用xs:extension元素,如果是限制派生,使用xs:restriction元素。

        扩展派生

        通过扩展派生的复杂类型,他的有效内容模型是基类型的内容模型加上扩展的内容模型。

        扩展简单内容

        扩展简单内容可以从简单类型或具有简单内容的复杂类型扩展。由于不能通过扩展简单内容来得到复杂内容,因此对简单内容的扩展只能是添加新的属性

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="employee" type="expandEmpType"/><xs:complexType name="empType"><xs:simpleContent><xs:extension base="xs:token"><xs:attribute name="number" type="xs:token" use="required"/></xs:extension></xs:simpleContent></xs:complexType><xs:complexType name="expandEmpType"><xs:simpleContent><xs:extension base="empType"><xs:attribute name="birthdate" type="xs:date" use="required"/></xs:extension></xs:simpleContent></xs:complexType></xs:schema>

从具有简单内容的复杂类型扩展

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="employee" type="expandEmpType"/><xs:complexType name="expandEmpType"><xs:simpleContent><xs:extension base="xs:string"><xs:attribute name="number" type="xs:string" use="required"/><xs:attribute name="birthdate" type="xs:date" use="required"/></xs:extension></xs:simpleContent></xs:complexType></xs:schema>

从简单类型扩展

        扩展纯元素内容

        从纯元素内容的复杂类型扩展,我们可以在基类型的内容模型最后添加新的与元素或属性。模式处理器会把基类型的内容模型和新增的内容模型合并到一个sequence中。注意不能对一个all组的基类型进行扩展添加新的元素(添加属性是可以的)。

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="fruit" type="expandedFruitType"/><xs:complexType name="fruitType"><xs:complexContent><xs:restriction base="xs:anyType"><xs:sequence><xs:element name="Apple" type="xs:string"/><xs:element name="Pear" type="xs:string"/></xs:sequence></xs:restriction></xs:complexContent></xs:complexType><xs:complexType name="expandedFruitType"><xs:complexContent><xs:extension base="fruitType"><xs:sequence><xs:element name="Banane" type="xs:string"/></xs:sequence></xs:extension></xs:complexContent></xs:complexType></xs:schema>

        扩展混合内容

        混合内容的扩展跟纯元素的扩展类似,唯一的要求是派生类型也必须具有混合内容,也就是mixed=true。

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="employee" type="expandedEmpType"/><xs:complexType name="empType" mixed="true"><xs:sequence><xs:element name="name" type="xs:string"/><xs:element name="age" type="xs:string"/></xs:sequence></xs:complexType><xs:complexType name="expandedEmpType" mixed="true"><xs:complexContent><xs:extension base="empType"><xs:sequence><xs:element name="salary" type="xs:integer"/></xs:sequence></xs:extension></xs:complexContent></xs:complexType></xs:schema>

        扩展空内容

        从空内容类型扩展,派生类型可以具有纯元素内容,也可以就混合内容。

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="employee" type="extendedEmpType"/><xs:complexType name="empType"><xs:attribute name="number" type="xs:string" use="required"/></xs:complexType><xs:complexType name="extendedEmpType" mixed="true"><xs:complexContent><xs:extension base="empType"><xs:sequence><xs:element name="name" type="xs:string"/><xs:element name="age" type="xs:integer"/></xs:sequence><xs:attribute name="remark" use="required"/></xs:extension></xs:complexContent></xs:complexType></xs:schema>
原创粉丝点击