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

 

原创粉丝点击