• Xsd入门 - [学习]

    2008-04-14

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://zlfoxy.blogbus.com/logs/19042371.html

     

    看下面这段简单的xsd:

    <?xml version="1.0" encoding="UTF-8"?>

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"


    attributeFormDefault="unqualified">

    <xs:element name="ddd">

    <xs:annotation>

    <xs:documentation>Comment describing your root


    element</xs:documentation>

    </xs:annotation>

    <xs:complexType>

    <xs:sequence>

    <xs:element name="bbb">

    <xs:complexType>

    <xs:choice>

    <xs:element name="t"/>

    </xs:choice>

    </xs:complexType>

    </xs:element>

    <xs:group ref="eg" minOccurs="0"/>

    <xs:element name="eee" minOccurs="0"/>

    </xs:sequence>

    </xs:complexType>

    </xs:element>

    <xs:group name="eg">

    <xs:choice>

    <xs:element name="a"/>

    <xs:element name="b" minOccurs="0"/>

    <xs:element name="c"/>

    </xs:choice>

    </xs:group>

    </xs:schema>

    下面是符合此xsd的一种xml格式:

    <?xml version="1.0" encoding="UTF-8"?>

    <!--Sample XML file generated by XMLSpy v2005 rel. 3 U (http://www.altova.com)-->

    <ddd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


    xsi:noNamespaceSchemaLocation="D:\WordML\testchoice.xsd">

    <bbb>

    <t></t>

    </bbb>

    <a></a>

    <eee></eee>

    </ddd>

    xsd分析:

    1、xsd包含一个元素和一个组

    2、ddd是复杂类型包含一个sequence,采用的是minocc、maxocc的默认值1,这要求sequence的每个子元素仅且只能呈现一次(但是这并不是说ddd中的bbb、eg、eee只能出现一次,他们可以出现0次或者多次,这要靠这些子级的定义决定,但是验证器在此时确只知道“sequence的子元素必须呈现一次,不多不少”)

    3、sequence的子元素,第一个bbb也是CT类型,并且包含默认值同样是1的choice,因此ddd必须包含类似“<bbb><t></t></bbb>”的结构

    4、第二个子级是group,group的minocc=0;这就决定了eg组是可以省略掉的。这也说明符合此xsd的xml文档的从这此开始变化,可以有不同的xml了。(再往下可以看到b元素可以为0次,这也说明即使eg组的minocc不等于0,eg组也是可以不被呈现出来的。)

    5、最后是eee元素,minocc=0,这也说明eee是可以省略的。(同样,如果把它的maxocc改为大于1,这样ddd就可以包含多个eee了)

    从此可以看出符合此xsd架构的最简单xml其实只要求必须包含一次bbb以及它的子元素。

    验证器是走一步看一步的,它只要求当前对象符合xsd就可以了,不会去预测子级。
    这样我们根据xsd就可以写出符合要求的xml了。

    收藏到:Del.icio.us




发表评论

您将收到博主的回复邮件
记住我