XML SCHEMA教程

本教程是笔者学习W3C的《XML Schema Tutorial》的笔记。如果你对原教程感兴趣,可以浏览http://www.w3schools.com/schema/default.asp

XML Schema是W3C制定的基于XML格式的XML文档结构描述标准。作为一种文档描述语言,通常我们将其简写为XSD(XML Schema Define)。XSD作为DTD(文档类型定义)的替代者,已经广泛地应用到各种商业应用。使用XSD,我们不仅可以描述XML文档的结构以便颁布业务标准,而且可以使用支持XSD的通用化XML解析器对XML文档进行解析并自动地检查其是否满足给定的业务标准。应用XSD校验XML文档的结构后,我们不仅验证了XML文档的有效性(Well-Formed Document),还验证了XML文档的合法性,甚至验证了XML文档各域的值合法性(数据类型与编码值),而且这些验证工作不必我们编写任何代码,只需使用支持XSD的通用化XML文档解析器即可完成。这就给应用软件带来了巨大的灵活性,以前需要借助数据库或配置文件才能完成的参数化管理,现在只需按照新的业务需求发布新的XML Schema即可。

作为一个入门,下面列出一个XML文档及其XSD文档,使我们对XSD有个简单的认识:

XML:

<?xml version="1.0"?>

<note xmlns="http://www.w3schools.com"

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

xsi:schemaLocation="http://www.w3schools.com note.xsd">

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don't forget me this weekend!</body>

</note>

XSD:

<?xml version="1.0"?>                                       (1)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"      (2)

targetNamespace="http://www.w3schools.com"

xmlns="http://www.w3schools.com"

elementFormDefault="qualified">

<xs:element name="note">                                (3)

<xs:complexType>                                    (4)

<xs:sequence>                                     (5)

<xs:element name="to" type="xs:string"/>      (6)

<xs:element name="from" type="xs:string"/>    (7)

<xs:element name="heading" type="xs:string"/> (8)

<xs:element name="body" type="xs:string"/>    (9)

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

说明如下:

(1)<?xml version="1.0" ncoding="UTF-8"?>

XML文档定义,描述本文档使用的XML标准版本及文档编码标准。

(2)<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.w3schools.com"

xmlns="http://www.w3schools.com"

elementFormDefault="qualified">

l         <xs:schema> 是所有XSD文档的根元素,其属性描述文档的名空间及文档引用;

l         xmlns:xs="http://www.w3.org/2001/XMLSchema" 指示使用xs:作前缀的元素、属性、类型等名称是属于http://www.w3.org/2001/XMLSchema名空间的。

l         targetNamespace="http://www.w3schools.com" 指示本文档定义的元素、属性、类型等名称属于http://www.w3schools.com名空间;

l         xmlns="http://www.w3schools.com" 指示缺省的名空间是http://www. w3schools.com,即没有前缀的元素、属性、类型等名称是属于该名空间的。

l         elementFormDefault="qualified" 指示使用本XSD定义的XML文档所使用的元素必须在本文档中定义且使用名空间前缀。

(3)<xs:element name="note">

定义一个元素,该元素的名称是note,即XML中的<note>;

(4)<xs:complexType>

<note>元素的类型是复杂类型,具体格式由子元素定义;

(5)<xs:sequence>

<note>元素的子元素必须按顺序出现。具体的顺序由子元素的定义顺序决定;

(6)<xs:element name="to" type="xs:string"/>

定义一个元素<to>,其类型是string,且其是<note>的第1个子元素;

(7)<xs:element name="from" type="xs:string"/>

定义一个元素<from>,其类型是string,且其是<note>的第2个子元素;

(8)<xs:element name="heading" type="xs:string"/>

定义一个元素<heading>,其类型是string,且其是<note>的第3个子元素;

(9)<xs:element name="body" type="xs:string"/>

定义一个元素<body>,其类型是string,且其是<note>的第4个子元素;

上面的说明可以看出我们描述的XML文档应满足这些要求:根元素是<note>;<note>可以包含四个子元素,分别是<to>、<from>、<heading>、<body>,且必须按<to>、<from>、<heading>、<body>的顺序出现;四个子元素都是string类型的。

1          格式良好文档

满足下列要求的XML文档,称为格式良好的文档(Well-Formed Document):

(1)       使用XML定义打头,如:<?xml version="1.0" encoding="UTF-8"?>;

(2)       文档仅包含一个唯一的根元素;

(3)       起始标记(<xxx>)必须与结束标记(</xxx>)匹配;

(4)       大小写敏感;

(5)       所有元素是闭合的(<必须与>配套);

(6)       所有元素嵌套是正确的;

(7)       所有属性使用""或’’括;

(8)       entities must be used for special characters。

应注意到,满足上述要求的文档只能算是有效的文档,但不能算是合法的文档。例如,业务标准要求文档中必须包含5个<SEG>元素,如果文档中仅包含了4个,它仍是格式良好的文档,但不满足业务标准要求,是一个非法的文档。

2          XSD应用的场合

(1)       定义文档中可以出现的元素;

(2)       定义文档中可以出现的属性;

(3)       定义元素包含哪些子元素;

(4)       定义元素出现的顺序;

(5)       定义元素出现的次数;

(6)       定义哪些元素是空或可以包含text;

(7)       定义元素与属性的数据类型;

(8)       定义元素与属性的缺省值或固定值或值范围、值列表。

3          XSD相对于 DTD的优势

(1)XSD支持数据类型;

l         易于描述许可的文档组成;

l         易于校验数据的合法性;

l         易于使用数据库中的数据;

l         易于定义数据的约束;

l         易于定义数据的模式;

l         易于在不同数据类型间进行格式转换

(2)XSD使用XML语法;

(3)XSD使数据交换更安全,因为它描述了数据的格式,避免了歧义;

(4)XSD可以扩展,支持类型的扩展和结构的扩展。

4          文档引用

XSD支持名空间(NameSpace)和文档引用。通过名空间,可以避免文档引用中可能导致的名称重复问题。W3C规定XSD的名空间使用URI作为名称。以前面的XML为例:

<note xmlns="http://www.w3schools.com"

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

xsi:schemaLocation="http://www.w3schools.com note.xsd">

l         xmlns="http://www.w3schools.com" 指示本文档缺省的名空间,即没有前缀的所有的元素应在该空间中定义;

l         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 指示本文档要引用http://www.w3.org/2001/XMLSchema-instance名空间定义的名称,其前缀是xsi;

l         xsi:schemaLocation="http://www.w3schools.com note.xsd" 指示本文档要引用的http://www.w3schools.com 名空间的XSD文档是note.xsd。如果要引用多个名空间的XSD文档,则使用空格分隔多个‘Namespace xsd’对。例如:http://www.acom.com a.xsd http://www.bcom.com b.xsd...。如果XSD文档没有使用名空间,则使用xsi:noNamespaceSchemaLocation="note.xsd"代替xsi:schemaLocation。

5          简单元素描述

简单元素指只包含text的XML元素,它没有任何子元素或属性,如:<sex>男</sex>。简单元素可以附加地定义其缺省值或固定值。XSD定义简单元素的格式是:<xs:element name="xxx" type="ttt" [default="defval"] [fixed="fixedval"]>。其中ttt使用XSD标准定义的基本类型,即:xs:string、xs:decimal、xs:integer、xs:boolean、xs:date、 xs:time等。例如:<xs:element name=”sex” type=”xs:string” default=”男”>。

使用上述方式定义的简单元素只能限定元素的数据类型、缺省值、固定值。如果希望限定该简单元素的取值范围等约束,则应使用简单类型定义,并在简单类型中嵌套值约束子元素。如:

<xs:element name="sex">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:enumeration value="男"/>

<xs:enumeration value="女"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

其中,约束的定义方式参考第6节。

6          复杂元素描述

复杂元素指包含属性或子元素的XML元素,如:<student name=”Li” sex=”男”>,主要包括下列四类:

l         空元素:只包含属性的元素。如:<student name=”li” />;

l         只包含属性与子元素的元素。如:

<name type=”realname”>

<firstname>Jack</firstname>

<lastname>Tom</lastname>

</name>

l         只包含属性与text的元素。如:

<name type=”firstname”>Jack</name>

l         只包含属性、text和子元素的元素。如:

<name type=”realname”>

Your name is:

<firstname>xxx</firstname>

<lastname>xxx</lastname>

</name>

复杂元素是一种复杂类型,可以使用下面两种描述方式,一是复合结构,二是分离结构。复合结构,则直接将复杂类型定义为复杂元素的子元素;分离结构则是将复杂类型定义在外部,由复杂元素引用。

l         复合结构

<xs:element name="xxx">

<xs:complexType>

...

</xs:complexType>

</xs:element>

l         分离结构

<xs:element name="xxx" type=”yyy” />

<xs:complexType name=”yyy”>

...

</xs:complexType>

这两种描述结构也适合于属性、简单元素的描述。如果XSD元素中存在大量可复用的自定义数据类型时,建议使用分离式的定义结构。

6.1    数据类型

XSD的数据类型包括基本数据类型、简单数据类型、复杂数据类型三类。基本数据类型指W3C标准定义的数据类型,主要包括xs:integer、xs:string、xs:date、xs:boolean等。简单数据类型是基本数据类型的扩展,对取值进行约束;复杂数据类型则是一个复杂的数据结构,通常包含了属性或子元素定义。

(1)       简单类型

简单类型扩展基本数据类型,并对值施加一定的约束。如:

<xs:simpleType name="XSDSimpleType">

<xs:restriction base="dateTime">

<xs:enumeration value="value1" />

<xs:enumeration value="value2" />

<xs:enumeration value="value3" />

</xs:restriction>

</xs:simpleType>

<xs:simpleType name="XSDSimpleType">

<xs:list itemType="dateTime">

<xs:enumeration value="value1" />

<xs:enumeration value="value2" />

<xs:enumeration value="value3" />

</xs:list>

</xs:simpleType>

<xs:simpleType name="XSDSimpleType">

<xs:union memberTypes="dateTime">

<xs:enumeration value="value1" />

<xs:enumeration value="value2" />

<xs:enumeration value="value3" />

</xs:union>

</xs:simpleType>

(2)       复杂类型

复杂类型通常是复杂元素的数据类型或复杂元素的子元素,描述复杂元素的子元素、属性以及子元素与属性的类型。参看后续各小节的描述。

6.2    约束

约束指对简单类型的元素或属性施加的值约束条件,主要包含范围约束、长度约束、枚举值、模式匹配、空白处理等,是XSD元素或属性值限制的基础。

(1)       范围约束

范围约束主要施加到数值型、日期型等类型,限制取值的范围。如:

<xs:restriction base="xs:integer">
        <xs:minInclusive value="0"/>
        <xs:maxInclusive value="120"/>
    </xs:restriction>

上述范围约束限定的取值范围是:0<=值<=120。

其他的值范围约束元素主要包括:

l         fractionDigits 设置最大小数位数

l         totalDigits 指定精确的数值位数

l         maxExclusive 设置数值型的最大值(val < xxx)

l         maxInclusive 设置数值型的最大值(val <= xxx)

l         minExclusive 设置数值型的最小值(val > xxx)

l         minInclusive 设置数值型的最小值(val >= xxx)

(2)       长度约束

长度约束施加到任何类型上限制值的长度,包括<xs:length>固定长度、<xs:maxLength>最大长度、<xs:minLength>最小长度三个限定元素。如:

<xs:restriction base="xs:string">

<xs:length value="8"/>

</xs:restriction>

<xs:restriction base="xs:string">

<xs:minLength value="5"/>

<xs:maxLength value="8"/>

</xs:restriction>

(3)       枚举值约束

枚举值约束限制元素或属性的值只能在给定的值列表中取值,并使用base属性指示值的数据类型。如:

<xs:restriction base="xs:string">

<xs:enumeration value="CNY"/>

<xs:enumeration value="USD"/>

<xs:enumeration value="JPY"/>

</xs:restriction>

(4)       模式匹配约束

模式匹配约束限制元素或属性的值应满足给定的模式要求,并使用base属性指示值的数据类型。如:

<xs:restriction base="xs:string">

<xs:pattern value="[a-z]"/>

</xs:restriction>

以下是些模式匹配的示例:

l         [a-z] a-z间的单个字符;

l         [A-Z][A-Z] 两个字符,每个字符都在A-Z间;

l         [a-zA-Z] a-z或A-Z间的单个字符;

l         [abc] 单个字符 a或b或c;

l         ([a-z])* 零个或任意个字符a-z;

l         ([a-z][A-Z])+ 一个或任意个字符对,每对字符大小写间隔出现;

l         "a"|"b" 值只能是a或b,与枚举类似;

l         [a-zA-Z0-9]{8} 精确的八个a-z或A-Z或0-9间的字符。

(5)       空白处理约束

空白处理约束限制XML文档解析器如何处理值的组成空白字符,使用<xs:whitespace>限定元素指示。如:

<xs:restriction base="xs:string">

<xs:whiteSpace value="replace"/>

</xs:restriction>

value可能的取值包括:

l         replace 删除内容中的全部空白;

l         preserve 保留内容中的全部空白;

l         collapse 删除前导、后导空白,替换内容中的一个或多个空白为一个空格;

6.3    属性

属性本身总是定义为简单类型的。属性可以指定缺省值、固定值、强制项、约束等属性。属性定义格式是:<xs:attribute name="xxx" type="ttt" [default="ddd"] [fixed="fff"] [use="required"] >。

如:

<xs:attribute name="orderid" type="xs:string" use="required"/>

<xs:attribute name="orderid" >

<xs:simpleType name="orderIdType">

<xs:restriction base="string">

<xs:pattern value="[A-Z]"d{8}" />

</xs:restriction>

</xs:simpleType>

</xs:attribute>

<xs:attribute name="orderid" type="orderIdType" />

<xs:simpleType name=" orderIdType">

<xs:restriction base="string">

<xs:pattern value="[A-Z]"d{8}" />

</xs:restriction>

</xs:simpleType>

6.4    空元素描述

空元素通常使用<xs:complexType>描述:

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

或使用<xs:simpleContent>描述,这种格式通常在元素包含属性和文本时使用。

<xs:element name="product">
    <xs:complexType>
        <xs:simpleContent>
            <xs:restriction base="xs:integer">
                 <xs:attribute name="prodid" type="xs:positiveInteger"/>
            </xs:restriction>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

或者使用分离结构描述。

6.5    只包含子元素的元素描述

<xs:element name="name">

<xs:complexType>

<xs:sequence>

<xs:element name="firstname" type="xs:string"/>

<xs:element name="lastname" type="xs:string"/>

</xs:sequence>

</xs:complexType>

</xs:element>

或使用分离结构描述。

6.6    只包含text的元素描述

Text总是基本类型或简单类型的,因此其描述使用扩展基本类型。

<xs:element name="somename">

<xs:complexType>

        <xs:simpleContent>

            <xs:extension base="basetype">

            ...

            </xs:extension>

       </xs:simpleContent>

</xs:complexType>

</xs:element>

使用<xs:extension>扩展基本类型;

或:

<xs:element name="somename">

<xs:complexType>

        <xs:simpleContent>

            <xs:restriction base="basetype">

            ...

            </xs:restriction>

        </xs:simpleContent>

</xs:complexType>

</xs:element>

使用xs:restriction 扩展类型。

如果元素包含属性和文本,则描述格式如下:

<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>

6.7    混合结构的元素描述

如果子元素间夹杂了text,则text总被认为是xs:string的,因此只需描述子元素的组成,并使用mixed="true"指示本元素是混合结构的元素。如下列描述:

.xml

<letter>
    Dear Mr.<name>John Smith</name>:
        Your order <orderid>1032</orderid>will be shipped on <shipdate>2001-07-13</shipdate>.

Thanks.
</letter>

.xsd

<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>

6.8    类型扩展

XSD使用<xs:extension>扩展一个基本类型、简单类型或复杂类型。扩展简单类型主要是增加附加的一些约束,扩展复杂类型则可以增加新的组成元素或属性。如:

(1)基本类型扩展

<xs:complexType>

        <xs:simpleContent>

            <xs:extension base="xs:integer">

<xs:attribute name="country" type="xs:string" />

</xs:extension>

</xs:simpleContent>

</xs:complexType>

(2)复杂类型扩展

<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>

对复杂类型进行扩展,使用<xs:complexContent>,对简单类型进行扩展使用<xs:simpleContent>。

6.9    复杂类型指令

复杂类型指令控制子元素如何在复杂元素中使用,包括三类指令:顺序、次数、分组。

(1)       顺序

顺序指令控制子元素是否按顺序出现,包含三种类型:

l         <xs:all>

指示这些子元素最多出现一次,且顺序无关(minOccurs=0,maxOccurs=1)。

<xs:complexType name="fullpersoninfo">

<xs:all>

<xs:element name="address" type="xs:string"/>

<xs:element name="city" type="xs:string"/>

<xs:element name="country" type="xs:string"/>

    </xs:all>

</xs:complexType>

l         <xs:sequencs>

指示这些子元素必须按顺序出现。

<xs:complexType name="fullpersoninfo">

<xs:sequencs>

<xs:element name="address" type="xs:string"/>

<xs:element name="city" type="xs:string"/>

<xs:element name="country" type="xs:string"/>

    </xs:sequence>

</xs:complexType>

l         <xs:choice>

指示这些子元素只能出现其中一个。

<xs:complexType name="fullpersoninfo">

    <xs:choice>

<xs:element name="address" type="xs:string"/>

<xs:element name="city" type="xs:string"/>

<xs:element name="country" type="xs:string"/>

    </xs:choice>

</xs:complexType>

(2)       次数

次数指令作为元素的属性,控制元素可以出现的次数,包含两个指令:minOccurs、maxOccurs。如:<element name="B2C" type="string" minOccurs="3" maxOccurs="4"></element>

(3)       组

组指令指示一个元素或属性集合。

元素组使用<xs:group name="xxx">嵌套一个all、choice、sequence指令;定义后,使用<xs:group ref="name">引用元素组。

属性组使用<xs:attributeGroup name="xxx">嵌套多个<attribute>属性定义。定义后,使用<xs:attributeGroup ref="name">引用属性组。

复杂类型还可以使用一些特殊的标记扩展文档。

l         <xs:any minOccurs = "0" > 指示可以在此位置包含任何其他元素;(这些元素也必须在Schema文档中进行定义)

l         <xs:anyAttribute> 指示可以在此位置包含任何其他的属性。(这些属性也必须在Schema文档中进行定义)

6.10              置换组

置换组可以根据用户需要选择使用一组元素,其实际的效果相当于给一个元素取了一个别名。如:

<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>

navn是name的置换,因此文档中使用<name>的位置均可以使用<navn>且<navn>的类型和<name>类型一致。

如果想禁止置换某个元素,可以在定义元素时使用 block="substitution" 属性。

置换元素和被置换元素必须是全局元素。所谓全局元素就是<xs:schema>元素的直接子元素。嵌套在全局元素中的元素称为本地元素。(因此,复杂类型定义中总是使用<xs:element ref="name"/>的形式引用全局元素)

6.11              最佳实践

(1)将可能被共享的元素创建为全局基本元素;(或将全部元素创建为全局元素);

(2)根据各元素的类型创建全局的类型,并设置必要的约束;

(3)组合(引用)全局基本元素形成元素集合(复杂类型);

(4)组合复杂类型为最终的模型。

使用这种模式,适合大型项目,可以共享大量的元素定义,但缺点是由于共享大量的元素定义,可能导致模型比较复杂。

7          实例

下面我们对给定的xml建模其xsd文档,使用的工具是myEclipse。

.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<shiporder orderid="889923"

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

xsi:noNamespaceSchemaLocation="shiporder.xsd">

<orderperson>John Smith</orderperson>

<shipto>

<name>Ola Nordmann</name>

<address>Langgt 23</address>

<city>4000 Stavanger</city>

<country>Norway</country>

</shipto>

<item>

<title>Empire Burlesque</title>

<note>Special Edition</note>

<quantity>1</quantity>

<price>10.90</price>

</item>

<item>

<title>Hide your heart</title>

<quantity>1</quantity>

<price>9.90</price>

</item>

</shiporder>

(1)       整理文档的基本格式要求:

l         没有使用名空间;

l         根元素是shiporder;

l         shiporder有一个属性orderid,类型是整型的;

l         shiporder有三个子元素:

n         orderperson 是字符串型的;

n         shipto是个复杂类型的,且只能出现一次;

n         item是复杂类型的,可以出现1次或多次;

l         shipto有四个子元素:

n         name是字符串型的;

n         address是字符串型的;

n         city是字符串型的;

n         country是字符串型的;

l         item有三个子元素:

n         title是字符串型的;

n         quantity是整型的;

n         price是数值型的。

(2)       创建全部元素、属性为全局元素、


     
    (3)创建各自定义类型的描述;由于我们将全部元素均创建为全局元素,因此在创建类型的组成元素时,我们均创建为对全局元素的引用。另外,注意指定组成元素的出现次数。

(4)       修改xsd的名空间;

(5)       最终形成的文档如下:

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

<xsd:schema elementFormDefault="qualified"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<!-- 元素建模 -->

<xsd:element name="shiporder" type="shiporderType"></xsd:element>

<xsd:element name="orderperson" type="xsd:string"></xsd:element>

<xsd:element name="shipto" type="shiptoType"></xsd:element>

<xsd:element name="name" type="xsd:string"></xsd:element>

<xsd:element name="address" type="xsd:string"></xsd:element>

<xsd:element name="city" type="xsd:string"></xsd:element>

<xsd:element name="country" type="xsd:string"></xsd:element>

<xsd:element name="title" type="xsd:string"></xsd:element>

<xsd:element name="quantity" type="xsd:int"></xsd:element>

<xsd:element name="price" type="xsd:decimal"></xsd:element>

<xsd:element name="item" type="itemType"></xsd:element>

<!-- 属性建模 -->

<xsd:attribute name="orderid" type="xsd:long"></xsd:attribute>

<!-- 类型建模 -->

<xsd:complexType name="shiporderType">

<xsd:sequence>

<xsd:element ref="orderperson"></xsd:element>

<xsd:element ref="shipto" minOccurs="1" maxOccurs="1"></xsd:element>

<xsd:element ref="item" minOccurs="1"

maxOccurs="unbounded">

</xsd:element>

</xsd:sequence>

<xsd:attribute ref="orderid"></xsd:attribute>

</xsd:complexType>

<xsd:complexType name="shiptoType">

<xsd:sequence>

<xsd:element ref="name"></xsd:element>

<xsd:element ref="address"></xsd:element>

<xsd:element ref="city"></xsd:element>

<xsd:element ref="country"></xsd:element>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name="itemType">

<xsd:sequence>

<xsd:element ref="title"></xsd:element>

<xsd:element ref="quantity"></xsd:element>

<xsd:element ref="price"></xsd:element>

</xsd:sequence>

</xsd:complexType>

</xsd:schema>

注意:xsd中,xmlns:xsd="http://www.w3.org/2001/XMLSchema"指示全部引用XSD标准定义的名称使用xsd作为前缀,而前面文章描述中我们使用的前缀是xs,这个差异是工具形成的,都是合法的,甚至我们可以定义前缀是任何我们想要的,换句话说xs并非强制要求的前缀。

W3C XML Schema 教程的更多相关文章

  1. XML 与 XML Schema的使用教程

    引言:我写本文的宗旨在于给需要使用XML,而又对XML不是很熟悉的人们提供一种使用思路,而不没有给出具体的     使用方法,至于下文中提到的使用方法,还未尝试过,都是从网上整理而来! 一.概述 什么 ...

  2. MyEclipse XML & XML架构教程:XML Schema (XSD)编辑器

    [MyEclipse CI 2019.4.0安装包下载] 1. MyEclipse中的XSD编辑 本文档介绍MyEclipse XML Schema(XSD)编辑器中的一些可用函数.XML Schem ...

  3. XML Schema命名空间解析

    URI Web中汇集了各种资源.资源可以是具有标识的任何事物, 如文档. 文件. 菜单项. 计算机. 服务等, 甚至可以包括人. 组织和概念[BernersLee 1998].在Web体系结构中, ...

  4. XML Schema 简介

    XML Schema 是基于 XML 的 DTD 替代者. XML Schema 可描述 XML 文档的结构. XML Schema 语言也可作为 XSD(XML Schema Definition) ...

  5. XML学习教程

    XML学习进阶1-- 什么是XML. 为什么使用 XML?... 什么是 XML?... 数据的结构表示... XML 文档... 数据是从表示和处理中分离出来的... 使XML数据自描述... XM ...

  6. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  7. Eclipse Maven pom.xml 警告No grammar constraints (DTD or XML schema)

    消除警告方案: <?xml version="1.0" encoding="UTF-8" standalone="no"?> & ...

  8. XML——Schema

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  9. Spring可扩展的XML Schema机制

    可扩展的XML Schema机制 从Spring2.0开始,Spring提供了XML Schema可扩展机制,用户可以自定义XML Schema文件,并自定义XML Bean解析器,并集成到Sprin ...

随机推荐

  1. 限制波尔兹曼机(Restricted Boltzmann Machines)

    能量模型的概念从统计力学中得来,它描述着整个系统的某种状态,系统越有序,系统能量波动越小,趋近于平衡状态,系统越无序,能量波动越大.例如:一个孤立的物体,其内部各处的温度不尽相同,那么热就从温度较高的 ...

  2. CSS基础(背景、文本、列表、表格、轮廓)

    CSS 背景属性 属性 描述 background 简写属性,作用是将背景属性设置在一个声明中. background-attachment 背景图像是否固定或者随着页面的其余部分滚动. backgr ...

  3. ArcMap10.1无法保存编辑的内容

    问题描述:在arcMap10.1中编辑SDE库中要素,保存编辑内容时报错: 无法保存编辑内容.基础DBMS错误[ORA-29877:failed in the execution of the ODC ...

  4. SQL Server 中的三种分页方式

    USE tempdb GO SET NOCOUNT ON --创建表结构 IF OBJECT_ID(N'ClassB', N'U') IS NOT NULL DROP TABLE ClassB GO ...

  5. Codeforces 599C Day at the Beach(想法题,排序)

    C. Day at the Beach One day Squidward, Spongebob and Patrick decided to go to the beach. Unfortunate ...

  6. VirtualBox虚拟磁盘扩容

    1. cmd中运行 VBoxManage modifyhd D:\我的资料库\Documents\VirtualBox VMs\ubuntu\ubuntu.vdi --resize 提示错误  Syn ...

  7. 解决安装SQL Server2008失败的问题

    安装SQL Server2008时遇到"2008安装错误  必须重新启动计算机才能安装 SQL Server". 解决办法:HKEY_LOCAL_MACHINE\SYSTEM\Cu ...

  8. Docker基本命令

    1.搜索Docker镜像 docker search <镜像名> 2.获取镜像 docker pull <镜像名> 3.查看本地镜像 docker images 4.删除镜像 ...

  9. Codeforces Gym 100002 B Bricks 枚举角度

    Problem B Bricks" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100002 ...

  10. 怎样在osg中动态的设置drawable的最近最远裁剪面

    // draw callback that will tweak the far clipping plane just    // before rendering a drawable.    s ...