加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml配置

发布时间:2020-12-16 06:02:13 所属栏目:百科 来源:网络整理
导读:转载地址:http://jackma.cnblogs.com/ 详细学习资料:http://www.w3schools.com/schema/default.asp Preface:本文是W3Schools上《Schema指南》的学习笔记。其中大部分内容是对指南的翻译总结。由于原文的例子更详尽生动,如果各位想阅读原文可以到这个网址

转载地址:http://jackma.cnblogs.com/

详细学习资料:http://www.w3schools.com/schema/default.asp


Preface:本文是W3Schools上《Schema指南》的学习笔记。其中大部分内容是对指南的翻译总结。由于原文的例子更详尽生动,如果各位想阅读原文可以到这个网址http://www.w3schools.com/schema/default.asp。同时,W3Schools提供了测试,大家可以测试一下自己的理解程度。

所谓的复杂类型Complex Type其实就是指ComplexElement。概括的说,包含有属性或其他元素的Element,就称为ComplexElement。ComplexElement可分为四种:

  • empty elements
    <product pid="1345"/>
    自闭合的Element,同时由于包含有Attribute的关系所以属于ComplexElement。

  • 只包含其他Elements的元素
    <employee>
    <firstname>John</firstname>
    <lastname>Smith</lastname>
    </employee>

  • 只包含Text的Element
    <food type="dessert">Ice cream</food>
    说明这里与SimpleElement不同的是,“type”是自定义的数据类型而且是一个ComplexType,而不是Schema内置的。同时这个Element是带有属性的。

  • 同时包含有其他Element和Text的元素
    <description>
    It happened on <date lang="norwegian">03.03.99</date> ....
    </description>

一、概览ComplexElement

定义一个ComplexElement
例如在XML中有如下元素

< employee >
< firstname > John </ firstname >
< lastname > Smith </ lastname >
</ employee >

使用Schema定义就是

< xs:element name ="employee" >
< xs:complexType >
< xs:sequence >
< xs:element name ="firstname" type ="xs:string" />
< xs:element name ="lastname" type ="xs:string" />
</ xs:sequence >
</ xs:complexType >
</ xs:element >

注意这里的ComplexType不能被其他元素使用,所以如果要考虑重用,可以使用下面的方式。

< xs:element name ="employee" type ="personinfo" />
< xs:complexType name ="personinfo" >
< xs:sequence >
< xs:element name ="firstname" type ="xs:string" />
< xs:element name ="lastname" type ="xs:string" />
</ xs:sequence >
</ xs:complexType >

这里的格式与之前定义约束的时候很相似。不过约束是使用<xs:simpleType>定义的。

重用已定义的ComplexElement
说到重用,你还可以在现有的ComplexType基础上进行扩展,形成新的ComplexType。如下:

< xs:element name ="employee" type ="fullpersoninfo" />

< xs:complexType name ="personinfo" >
< xs:sequence >
< xs:element name ="firstname" type ="xs:string" />
< xs:element name ="lastname" type ="xs:string" />
</ xs:sequence >
</ xs:complexType >

< xs:complexType name ="fullpersoninfo" >
< xs:complexContent >
< xs:extension base ="personinfo" >
< xs:sequence >
< xs:element name ="address" type ="xs:string" />
< xs:element name ="city" type ="xs:string" />
< xs:element name ="country" type ="xs:string" />
</ xs:sequence >
</ xs:extension >
</ xs:complexContent >
</ xs:complexType >

注意关键的是用“base”属性指出是对哪个元素进行扩展。这里fullpersioninfo将包含firstname,lastname,address,city,country的信息。

二、Empty Element

有一个EmptyElement如下

< product prodid ="1345" />

那么使用定义应为

< xs:element name ="product" >
< xs:complexType >
< xs:attribute name ="prodid" type ="xs:positiveInteger" />
</ xs:complexType >
</ xs:element >

注意,你仍然可以使用“name”属性为complexType指定名称,然后在element中使用“type”属性指定类型。从而能够在多个element中使用这个类型定义。

三、Elements Only

以下的ComplexType是只包含其他元素的。

< person >
< firstname > John </ firstname >
< lastname > Smith </ lastname >
</ person >

在Schema中定义如下

< xs:element name ="person" >
< xs:complexType >
< xs:sequence >
< xs:element name ="firstname" type ="xs:string" />
< xs:element name ="lastname" type ="xs:string" />
</ xs:sequence >
</ xs:complexType >
</ xs:element >

这里要注意的是<xs:sequence>的意义,是指里面包含的元素(firstname,lastname)在XML中(person)必须按照定义的顺序出现。

四、Complex Text-Only Elements

<shoesize country="france">35</shoesize>
定义如下

< xs:element name ="shoesize" >
< xs:complexType >
< xs:simpleContent >
< xs:extension base ="xs:integer" >
< xs:attribute name ="country" type ="xs:string" />
</ xs:extension >
</ xs:simpleContent >
</ xs:complexType >
</ xs:element >

这里要注意的是由于Element包含简单的内容和属性,所以要使用<xs:simpleContent>将其括住。同时,因为使用了<xs:simpleContent>就必须定义一个扩展(extension)或约束(restriction)。

五、同时包含有其他Element和Text的元素(mix属性)

< letter >
DearMr.
< name > JohnSmith </ name > .
Yourorder
< orderid > 1032 </ orderid >
willbeshippedon
< shipdate > 2001-07-13 </ shipdate > .
</ letter >

< xs:element name ="letter" >
< xs:complexType mixed ="true" >
< xs:sequence >
< xs:element name ="name" type ="xs:string" />
< xs:element name ="orderid" type ="xs:positiveInteger" />
< xs:element name ="shipdate" type ="xs:date" />
</ xs:sequence >
</ xs:complexType >
</ xs:element >

注意,由于有字符出现在元素之间,所以要设定complexType的mixed属性为true。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读