dinghao

记录成长点滴

 

Xsd入门

看下面这段简单的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分析:

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

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

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

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

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

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

验证器是走一步看一步的,它只要求当前对象符合xsd就可以了,不会去预测子级。

这样我们根据xsd就可以写出符合要求的xml了。

posted on 2007-03-02 21:16  思无邪  阅读(9561)  评论(2编辑  收藏  举报

导航