XML学习之Xml Schema:九、派生复杂类型
来源:互联网 发布:淘宝链接怎么做 编辑:程序博客网 时间:2024/05/13 10:51
在文档中引用派生类型
可以使用xsi:type属性来显示的标识类型,告诉模式处理器你使用哪个派生类型。xsi:type属性是XML Schema实例空间http://www.w3.org/2001/XMLSchema-instance。下面是一个例子,商店里的商品有图书和音像品之分。图书有页数,音像品有格式。他们都是一个共同的基类。
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="NetStore" type="storeType"/><xs:complexType name="storeType"><xs:sequence><xs:element name="Items"><xs:complexType><xs:sequence><xs:element ref="Item" minOccurs="0" maxOccurs="unbounded"/></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType><xs:element name="Item" type="itemType"/><xs:complexType name="itemType"><xs:sequence><xs:element name="id" type="xs:string"/><xs:element name="title" type="xs:string"/><xs:element name="bookconcern" type="xs:string"/></xs:sequence></xs:complexType><xs:complexType name="bookType"><xs:complexContent><xs:extension base="itemType"><xs:sequence><xs:element name="pageCount" type="xs:integer"/></xs:sequence></xs:extension></xs:complexContent></xs:complexType><xs:complexType name="videoType"><xs:complexContent><xs:extension base="itemType"><xs:sequence><xs:element name="format"><xs:simpleType><xs:restriction base="xs:token"><xs:enumeration value="VCD"/><xs:enumeration value="DVD"/></xs:restriction></xs:simpleType></xs:element></xs:sequence></xs:extension></xs:complexContent></xs:complexType></xs:schema>
xs_instance.xsd
<?xml version="1.0" encoding="UTF-8"?><NetStore xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XS_Instance.xsd"><Items><Item xsi:type="bookType"><id>123</id><title>XML</title><bookconcern>北京出版社</bookconcern><pageCount>751</pageCount></Item><Item xsi:type="videoType"><id>456</id><title>C#</title><bookconcern>上海出版社</bookconcern><format>DVD</format></Item><Item xsi:type="itemType"><id>789</id><title>C++</title><bookconcern>杭州出版社</bookconcern></Item></Items></NetStore>
实例xml
替换组
XML Schema提供了一种机制,称为替换组(substitution group),允许在内容模型中声明的某个元素被其他元素所替换。替换组有头元素(head element)和替换成员组成,头元素和替换成员都必须是全局元素,有相同的类型,或都有头元素派生。替换成员需要使用一个特殊的属性sbustitutionGroup,用于指定要替换的头元素的名字。在内容模型中引用头元素,在实例文档中则用任意的替换组成员来替换头元素。
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="NetStore" type="storeType"/><xs:complexType name="storeType"><xs:sequence><xs:element name="Items"><xs:complexType><xs:sequence><xs:element ref="Item" minOccurs="0" maxOccurs="unbounded"/></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType><!--全局声明的item元素作为替换组的头元素--><xs:element name="Item" type="itemType"/><!--全局声明的book和viedo元素作为替换组的成员。 使用substitutionGroup属性指定要替换的头元素--> <xs:element name="book" type="bookType" substitutionGroup="Item"/><xs:element name="video" type="videoType" substitutionGroup="Item"/><xs:complexType name="itemType"><xs:sequence><xs:element name="id" type="xs:string"/><xs:element name="title" type="xs:string"/><xs:element name="bookconcern" type="xs:string"/></xs:sequence></xs:complexType><!--bookType从itemType派生--><xs:complexType name="bookType"><xs:complexContent><xs:extension base="itemType"><xs:sequence><xs:element name="pageCount" type="xs:integer"/></xs:sequence></xs:extension></xs:complexContent></xs:complexType><!--videoType从itemType派生--><xs:complexType name="videoType"><xs:complexContent><xs:extension base="itemType"><xs:sequence><xs:element name="format"><xs:simpleType><xs:restriction base="xs:token"><xs:enumeration value="VCD"/><xs:enumeration value="DVD"/></xs:restriction></xs:simpleType></xs:element></xs:sequence></xs:extension></xs:complexContent></xs:complexType></xs:schema>
xs_substitution.xsd
<?xml version="1.0" encoding="UTF-8"?><NetStore xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XS_Substitution.xsd"><Items><Item><id>123</id><title>C</title><bookconcern>北京人民出版社</bookconcern></Item><book><id>456</id><title>C++</title><bookconcern>上海人民出版社</bookconcern><pageCount>123</pageCount></book><video><id>789</id><title>C#</title><bookconcern>广州人民出版社</bookconcern><format>DVD</format></video></Items></NetStore>
xml_substitution.xml
- XML学习之Xml Schema:九、派生复杂类型
- XML学习之Xml Schema:七、派生复杂类型--扩展
- XML学习之Xml Schema:八、派生复杂类型--限制
- XML学习之Xml Schema:五、复杂类型--Attribute
- XML学习之Xml Schema:六、复杂类型--模型组
- 学习笔记——XML Schema复杂类型
- XML学习之Xml Schema:三、自定义简单类型--facet
- XML学习之Xml Schema:四、自定义简单类型
- XML学习之 schema
- XML学习之Schema
- [XML]学习笔记(六)——XML Schema复杂类型
- Xml Schema 之 简易类型
- Xml Schema 之 复合类型
- XML学习之Xml Schema:一、Xml Schema概述
- 学习XML之九:查看 XML 文件
- JavaWeb学习笔记之xml&DTD&schema
- XML::XML SCHEMA学习一
- XML::XML SCHEMA学习二
- NSString 与 wchar_t*之间转化
- CSS排版浮动小技巧
- linux下安装java
- [LeetCode] Binary Tree Maximum Path Sum
- firefox abp屏蔽优酷黑屏
- XML学习之Xml Schema:九、派生复杂类型
- ios 真机setlocale失败问题解决
- 阿里巴巴-心里的一座山
- 关于安装vimgdb的感想
- loadrunner监控weblogic
- 3Sum Closest
- GCC动态库和静态库混合使用
- 合并排序(归并排序 MergeSort)
- 揭开linux内核中container_of的神秘面纱