`

W3school 之 XML schema 摘录

    博客分类:
  • xml
阅读更多

XML Schema 学习笔记

XML Schema 是基于 XML DTD 替代者。

 

XML Schema 描述 XML 文档的结构。

 

XML Schema 语言也称作 XML Schema 定义(XML Schema DefinitionXSD)。

XML Schema DTD 的继任者

我们认为 XML Schema 很快会在大部分网络应用程序中取代 DTD

 

理由如下:

XML Schema 可针对未来的需求进行扩展

XML Schema 更完善,功能更强大

XML Schema 基于 XML 编写

XML Schema 支持数据类型,最重要的能力之一就是对数据类型的支持。

XML Schema 支持命名空间

 

XML Schema 是可扩展的,因为它们由 XML 编写。

 

通过可扩展的 Schema 定义,您可以:

在其他 Schema 中重复使用您的 Schema

创建由标准类型衍生而来的您自己的数据类型

在相同的文档中引用多重的 Schema

 

即使XML文档的形式良好,仍然不能保证它们不会包含错误,并且这些错误可能会产生严重的后果。

XML使用 XSD

<?xml version="1.0"?>

<note>

<to>George</to>

<from>John</from>

<heading>Reminder</heading>

<body>Don't forget the meeting!</body>

</note>

 

下面这个例子是一个名为 "note.xsd" XML Schema 文件,它定义了上面那个 XML 文档的元素:

<?xml version="1.0"?>

 

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

       targetNamespace="http://www.w3school.com.cn"

       xmlns="http://www.w3school.com.cn"

  elementFormDefault="qualified">

 

       <xs:element name="note">

           <xs:complexType>

             <xs:sequence>

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

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

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

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

             </xs:sequence>

           </xs:complexType>

       </xs:element>

</xs:schema>

note 元素是一个复合类型,因为它包含其他的子元素。

其他元素 (to, from, heading, body) 是简易类型,因为它们没有包含其他元素。

 

下面的这个例子对 XML Schema 的引用

<?xml version="1.0"?>

<note

       xmlns="http://www.w3school.com.cn"

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

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

      

       <to>George</to>

       <from>John</from>

       <heading>Reminder</heading>

       <body>Don't forget the meeting!</body>

</note>

XSD<Schema>

XSD schema 定义

<schema> 元素是每一个 XML Schema 的根元素。

<?xml version="1.0"?>

<xs:schema>

...

...

</xs:schema>

 

<schema> 元素可包含属性。一个 schema 声明往往看上去类似这样:

<?xml version="1.0"?>

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

       targetNamespace="http://www.w3school.com.cn"

       xmlns="http://www.w3school.com.cn"

       elementFormDefault="qualified">

       ...

       ...

</xs:schema>

 

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

说明 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"

同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs

【这里使用了标准的命名空间 (xs),与此命名空间相关联的 URI Schema 的语言定义(Schema language definition),其标准值是 http://www.w3.org/2001/XMLSchema。】

 

这个片断:

targetNamespace="http://www.w3school.com.cn"

说明被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: "http://www.w3school.com.cn"

 

这个片断:

xmlns="http://www.w3school.com.cn"

指出默认的命名空间是 "http://www.w3school.com.cn"

 

这个片断:

elementFormDefault="qualified"

指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。

XML 文档中引用 Schema

例此 XML 文档含有对 XML Schema 的引用:

<?xml version="1.0"?>

 

<note xmlns="http://www.w3school.com.cn"

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

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

      

       <to>George</to>

       <from>John</from>

       <heading>Reminder</heading>

       <body>Don't forget the meeting!</body>

</note>

 

代码解释:

下面的片断:

       xmlns="http://www.w3school.com.cn"

规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 "http://www.w3school.com.cn" 这个命名空间。

 

一旦您拥有了可用的 XML Schema 实例命名空间:

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

您就可以使用 schemaLocation 属性了。此属性有两个值。第一个值是需要使用的命名空间。

第二个值是供命名空间使用的 XML schema 的位置:

       xsi:schemaLocation="http://www.w3school.com.cn note.xsd"

XSD简易元素

简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性。

 

不过,“仅包含文本”这个限定却很容易造成误解。文本有很多类型。它可以是 XML Schema 定义中包括的类型中的一种(布尔、字符串、数据等等),或者它也可以是您自行定义的定制类型。

 

您也可向数据类型添加限定(即 facets),以此来限制它的内容,或者您可以要求数据匹配某种特定的模式。

 

定义简易元素的语法:

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

此处 xxx 指元素的名称,yyy 指元素的数据类型。

 

XML Schema 拥有很多内建的数据类型。最常用的类型是:

       xs:string

       xs:decimal

       xs:integer

       xs:boolean

       xs:date

       xs:time

 

例子:

这是一些 XML 元素:

       <lastname>Smith</lastname>

       <age>28</age>

       <dateborn>1980-03-27</dateborn>

 

这是相应的简易元素定义:

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

       <xs:element name="age" type="xs:integer"/>

       <xs:element name="dateborn" type="xs:date"/>

      

简易元素可拥有指定的默认值或固定值。当没有其他的值被规定时,默认值就会自动分配给元素。

 

在下面的例子中,缺省值是 "red"

       <xs:element name="color" type="xs:string" default="red"/>

 

固定值同样会自动分配给元素,并且您无法规定另外一个值。在下面的例子中,固定值是 "red"

       <xs:element name="color" type="xs:string" fixed="red"/>

XSD 属性

所有的属性均作为简易类型来声明。

 

简易元素无法拥有属性。假如某个元素拥有属性,它就会被当作某种复合类型。但是属性本身总是作为简易类型被声明的。

 

定义属性的语法是:

<xs:attribute name="xxx" type="yyy"/>

在此处,xxx 指属性名称,yyy 则规定属性的数据类型。XML Schema 拥有很多内建的数据类型。

最常用的类型是:

·        xs:string

·        xs:decimal

·        xs:integer

·        xs:boolean

·        xs:date

·        xs:time

实例

这是带有属性的 XML 元素:

<lastname lang="EN">Smith</lastname>

这是对应的属性定义:

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

属性可拥有指定的默认值或固定值

<xs:attribute name="lang" type="xs:string" default="EN"/>
<xs:attribute name="lang" type="xs:string" fixed="EN"/>

在缺省的情况下,属性是可选的。如需规定属性为必选,请使用 "use" 属性:

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

 

对内容的限定

XML 元素或属性拥有被定义的数据类型时,就会向元素或属性的内容添加限定。

假如 XML 元素的类型是 "xs:date",而其包含的内容是类似 "Hello World" 的字符串,元素将不会(通过)验证。

XSD 限定 / Facets

限定(restriction)用于为 XML 元素或者属性定义可接受的值。对 XML 元素的限定被称为 facet

对值的限定

下面的例子定义了带有一个限定且名为 "age" 的元素。age 的值不能低于 0 或者高于 120

<xs:element name="age">

 

<xs:simpleType>

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

    <xs:minInclusive value="0"/>

    <xs:maxInclusive value="120"/>

  </xs:restriction>

</xs:simpleType>

 

</xs:element>

对一组值的限定

如需把 XML 元素的内容限制为一组可接受的值,我们要使用枚举约束(enumeration constraint)。

下面的例子定义了带有一个限定的名为 "car" 的元素。可接受的值只有:Audi, Golf, BMW

<xs:element name="car">

 

<xs:simpleType>

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

    <xs:enumeration value="Audi"/>

    <xs:enumeration value="Golf"/>

    <xs:enumeration value="BMW"/>

  </xs:restriction>

</xs:simpleType>

 

</xs:element>

上面的例子也可以被写为:

<xs:element name="car" type="carType"/>

 

<xs:simpleType name="carType">

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

    <xs:enumeration value="Audi"/>

    <xs:enumeration value="Golf"/>

    <xs:enumeration value="BMW"/>

  </xs:restriction>

</xs:simpleType>

注释:在这种情况下,类型 "carType" 可被其他元素使用,因为它不是 "car" 元素的组成部分。

对一系列值的限定

如需把 XML 元素的内容限制定义为一系列可使用的数字或字母,我们要使用模式约束(pattern constraint)。

下面的例子定义了带有一个限定的名为 "letter" 的元素。可接受的值只有小写字母 a - z 其中的一个:

<xs:element name="letter">

 

<xs:simpleType>

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

<xs:pattern value="[a-z]"/>//值只有小写字母 a - z 其中的一个

<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>//可接受的值是大写或小写字母 a - z 其中的三个

<xs:pattern value="[xyz]"/>x,y,z三个值中的一个

<xs:pattern value="([a-z][A-Z])+"/>//以小写开头大写结尾的一对以上字符串

<xs:pattern value="male|female"/> // 值取其一

<xs:pattern value="[a-zA-Z0-9]{8}"/> //8个字符模式

 

  </xs:restriction>

</xs:simpleType>

 

</xs:element>

对空白字符的限定

如需规定对空白字符(whitespace characters)的处理方式,我们需要使用 whiteSpace 限定。

下面的例子定义了带有一个限定的名为 "address" 的元素。这个 whiteSpace 限定被设置为 "preserve",这意味着 XML 处理器不会移除任何空白字符(换行、回车、空格以及制表符),参见见注释:

<xs:element name="address">

 

<xs:simpleType>

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

<xs:whiteSpace value="preserve"/> // 将不会移除任何空白字符

    //<xs:whiteSpace value="replace"/> // 删除所有空白字符

//<xs:whiteSpace value="collapse"/> // XML 处理器将移除所有空白字符(换行、回车、空格以及制表符会被替换为空格,开头和结尾的空格会被移除,而多个连续的空格会被缩减为一个单一的空格):

  </xs:restriction>

</xs:simpleType>

 

</xs:element>

对长度的限定

如需限制元素中值的长度,我们需要使用 lengthmaxLength 以及 minLength 限定。

本例定义了带有一个限定且名为 "password" 的元素。其值必须精确到 8 个字符:

<xs:element name="password">

 

<xs:simpleType>

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

<xs:length value="8"/>

     //<xs:minLength value="5"/>//最大/小长度联合使用,值最小为 5 个字符

     //<xs:maxLength value="8"/>//最大为 8 个字符

  </xs:restriction>

</xs:simpleType>

 

</xs:element>

数据类型的限定

限定

描述

enumeration

定义可接受值的一个列表

fractionDigits

定义所允许的最大的小数位数。必须大于等于0

length

定义所允许的字符或者列表项目的精确数目。必须大于或等于0

maxExclusive

定义数值的上限。所允许的值必须小于此值。

maxInclusive

定义数值的上限。所允许的值必须小于或等于此值。

maxLength

定义所允许的字符或者列表项目的最大数目。必须大于或等于0

minExclusive

定义数值的下限。所允许的值必需大于此值。

minInclusive

定义数值的下限。所允许的值必需大于或等于此值。

minLength

定义所允许的字符或者列表项目的最小数目。必须大于或等于0

pattern

定义可接受的字符的精确序列。

totalDigits

定义所允许的阿拉伯数字的精确位数。必须大于0

whiteSpace

定义空白字符(换行、回车、空格以及制表符)的处理方式。

XSD 复合元素

复合元素是包含了其他的元素及/或属性的XML元素。

有四种类型的复合元素(均可包含属性):

·        空元素

·        包含其他元素的元素

·        仅包含文本的元素

·        包含元素和文本的元素

XML Schema 中,我们有两种方式来定义复合元素:

1. 通过命名此元素,可直接对"employee"元素进行声明,就像这样:

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

假如您使用上面所描述的方法,那么仅有 "employee" 可使用所规定的复合类型。请注意其子元素,"firstname" 以及 "lastname",被包围在指示器 <sequence>中。这意味着子元素必须以它们被声明的次序出现。

2. "employee" 元素可以使用 type 属性,这个属性的作用是引用要使用的复合类型的名称:

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

3.也可以在已有的复合元素之上以某个复合元素为基础,然后添加一些元素,就像这样:

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

复合空元素

一个空的 XML 元素:

<product prodid="1345" />

上面的 "product" 元素根本没有内容。为了定义无内容的类型,我们就必须声明一个在其内容中只能包含元素的类型,但是实际上我们并不会声明任何元素,比如这样:????

<xs:element name="product">

  <xs:complexType>

    <xs:complexContent>

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

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

      </xs:restriction>

    </xs:complexContent>

  </xs:complexType>

</xs:element>

在上面的例子中,我们定义了一个带有复合内容的复合类型。complexContent 元素给出的信号是,我们打算限定或者拓展某个复合类型的内容模型,而 integer 限定则声明了一个属性但不会引入任何的元素内容。

不过,也可以更加紧凑地声明此 "product" 元素:

<xs:element name="product">

  <xs:complexType>

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

  </xs:complexType>

</xs:element>

或者您可以为一个 complexType 元素起一个名字,然后为 "product" 元素设置一个 type 属性并引用这个 complexType 名称(通过使用此方法,若干个元素均可引用相同的复合类型):

<xs:element name="product" type="prodtype"/>

 

<xs:complexType name="prodtype">

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

</xs:complexType>

复合类型仅包含元素

XML 元素,"person",仅包含其他的元素:

<person>

<firstname>John</firstname>

<lastname>Smith</lastname>

</person>

您可在 schema 中这样定义 "person" 元素:

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

XSD 仅含文本复合元素

仅含文本的复合元素可包含文本和属性。

此类型仅包含简易的内容(文本和属性),因此我们要向此内容添加 simpleContent 元素。当使用简易内容时,我们就必须在 simpleContent 元素内定义扩展或限定,就像这样:

<xs:element name="某个名称">

  <xs:complexType>

    <xs:simpleContent>

      <xs:extension base="basetype">//文本内容类型

        ....

        ....

      </xs:extension>    

    </xs:simpleContent>

  </xs:complexType>

</xs:element>

或者:

<xs:element name="某个名称">

  <xs:complexType>

    <xs:simpleContent>

      <xs:restriction base="basetype">//文本内容类型

        ....

        ....

      </xs:restriction>    

    </xs:simpleContent>

  </xs:complexType>

</xs:element>

提示:请使用 extension restriction 元素来扩展或限制元素的基本简易类型。

这里有一个 XML 元素的例子,"shoesize",其中仅包含文本:

<shoesize country="france">35</shoesize>

下面这个例子声明了一个复合类型,其内容被定义为整数值,并且 "shoesize" 元素含有名为 "country" 的属性:

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

我们也可为 complexType 元素设定一个名称,并让 "shoesize" 元素的 type 属性来引用此名称(通过使用此方法,若干元素均可引用相同的复合类型)。

混合内容的复合类型

XML 元素,"letter",含有文本以及其他元素:

<letter>

Dear Mr.<name>John Smith</name>.

Your order <orderid>1032</orderid>

will be shipped on <shipdate>2001-07-13</shipdate>.

</letter>

下面这个 schema 声明了这个 "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>

注释:为了使字符数据可以出现在 "letter" 的子元素之间,mixed 属性必须被设置为 "true"

XSD 复合类型指示器

通过指示器,我们可以控制在文档中使用元素的方式。

有七种指示器:

Order 指示器(用于定义元素的顺序):

·        All

·        Choice

·        Sequence

Occurrence 指示器(用于定义某个元素出现的频率):

·        maxOccurs

·        minOccurs

Group 指示器(用于定义相关的数批元素)

·        Group name

·        attributeGroup name

注释:对于所有的 "Order" "Group" 指示器(anyallchoicesequencegroup name 以及 group reference),其中的 maxOccurs 以及 minOccurs 的默认值均为 1

Order指示器实例及说明

<xs:element name="person">

  <xs:complexType>

//--<all> 指示器规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次

//--可以把 <minOccurs> 设置为 0 或者 1,而只能把 <maxOccurs> 指示器设置为 1

<xs:all>

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

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

</xs:all>

//--<choice> 指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼)

//--如需设置子元素出现任意次数,可将 <maxOccurs>设置为 unbounded(无限次)

   <xs:choice>

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

      <xs:element name="member" type="member"/>

</xs:choice>

//--<sequence>规定子元素必须按照特定的顺序出现

<xs:sequence>

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

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

    </xs:sequence>

 

  </xs:complexType>

</xs:element>

Occurrence指示器实例及说明

xs:element name="person">

  <xs:complexType>

    <xs:sequence>

      <xs:element name="full_name" type="xs:string"/>//必须出现

      <xs:element name="child_name" type="xs:string"

      maxOccurs="10" minOccurs="0"/>// 子元素 "child_name" 可在 "person" 元素中出现最少 0 次,最多出现 10

//如需使某个元素的出现次数不受限制,请使用 maxOccurs="unbounded"

    </xs:sequence>

  </xs:complexType>

</xs:element>

Group 指示器

元素组通过 group 声明进行定义:

<xs:group name="组名称">

  ...

</xs:group>

您必须在 group 声明内部定义一个 allchoice 或者 sequence 元素。

在您把 group 定义完毕以后,就可以在另一个定义中引用它了,如下:

<xs:group name="persongroup">

  <xs:sequence>

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

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

    <xs:element name="birthday" type="xs:date"/>

  </xs:sequence>

</xs:group>

 

<xs:element name="person" type="personinfo"/>

<xs:complexType name="personinfo">

  <xs:sequence>

    <xs:group ref="persongroup"/>

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

  </xs:sequence>

</xs:complexType>

属性组通过 attributeGroup 声明来进行定义:

<xs:attributeGroup name="组名称">

  ...

</xs:attributeGroup>

在您已定义完毕属性组之后,就可以在另一个定义中引用它了,就像这样:

<xs:attributeGroup name="personattrgroup">

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

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

  <xs:attribute name="birthday" type="xs:date"/>

</xs:attributeGroup>

 

<xs:element name="person">

  <xs:complexType>

    <xs:attributeGroup ref="personattrgroup"/>

  </xs:complexType>

</xs:element>

XSD <any> 元素

<any> 元素使我们有能力通过未被 schema 规定的元素来拓展 XML 文档!

下面展示了一个针对 "person" 元素的声明。通过使用 <any> 元素,我们可以通过任何元素(在 <lastname> 之后)扩展 "person" 的内容:

<xs:element name="person">

  <xs:complexType>

    <xs:sequence>

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

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

      <xs:any minOccurs="0"/>

    </xs:sequence>

  </xs:complexType>

</xs:element>

现在,我们希望使用 "children" 元素来扩展 "person" 元素。这此种情况下我们就可以这么做,即使以上这个 schema 的作者没有声明任何 "children" 元素。

请看这个 schema 文件,名为 "children.xsd"

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

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

targetNamespace="http://www.w3school.com.cn"

xmlns="http://www.w3school.com.cn"

elementFormDefault="qualified">

 

<xs:element name="children">

  <xs:complexType>

    <xs:sequence>

      <xs:element name="childname" type="xs:string"

      maxOccurs="unbounded"/>

    </xs:sequence>

  </xs:complexType>

</xs:element>

 

</xs:schema>

下面这个 XML 文件(名为 "Myfamily.xml"),使用了来自两个不同的 schema 中的成分,"family.xsd" "children.xsd"

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

 

<persons xmlns="http://www.microsoft.com"

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

xsi:SchemaLocation="http://www.microsoft.com family.xsd

http://www.w3school.com.cn children.xsd">

 

<person>

<firstname>David</firstname>

<lastname>Smith</lastname>

<children>

  <childname>mike</childname>

</children>

</person>

 

<person>

<firstname>Tony</firstname>

<lastname>Smith</lastname>

</person>

 

</persons>

上面这个 XML 文件是有效的,这是由于 schema "family.xsd" 允许我们通过在 "lastname" 元素后的可选元素来扩展 "person" 元素。

<any> <anyAttribute> 均可用于制作可扩展的文档!它们使文档有能力包含未在主 XML schema 中声明过的附加元素。

XSD <anyAttribute> 元素

<anyAttribute> 元素使我们有能力通过未被 schema 规定的属性来扩展 XML 文档!

下面展示了针对 "person" 元素的一个声明。通过使用 <anyAttribute> 元素,我们就可以向 "person" 元素添加任意数量的属性:

<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:anyAttribute/>

  </xs:complexType>

</xs:element>

现在,我们希望通过 "gender" 属性来扩展 "person" 元素。在这种情况下我们就可以这样做,即使这个 schema 的作者从未声明过任何 "gender" 属性。

请看这个 schema 文件,名为 "attribute.xsd"

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

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

targetNamespace="http://www.w3school.com.cn"

xmlns="http://www.w3school.com.cn"

elementFormDefault="qualified">

 

<xs:attribute name="gender">

  <xs:simpleType>

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

      <xs:pattern value="male|female"/>

    </xs:restriction>

  </xs:simpleType>

</xs:attribute>

 

</xs:schema>

下面这个 XML(名为 "Myfamily.xml"),使用了来自不同 schema 的成分,"family.xsd" "attribute.xsd"

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

 

<persons xmlns="http://www.microsoft.com"

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

xsi:SchemaLocation="http://www.microsoft.com family.xsd

http://www.w3school.com.cn attribute.xsd">

 

<person gender="female">

<firstname>Jane</firstname>

<lastname>Smith</lastname>

</person>

 

<person gender="male">

<firstname>David</firstname>

<lastname>Smith</lastname>

</person>

 

</persons>

上面这个 XML 文件是有效的,这是因为 schema "family.xsd" 允许我们向 "person" 元素添加属性。

 

分享到:
评论

相关推荐

    W3C school XML schema中文教程

    W3C school XML schema中文教程,主页为*/schema/index.html

    XML文件XML Schema.docXML Schema.doc

    XML Schema是W3C定义的标准,于2001年5月2日成为W3C推荐使用的标准。 XML Schema的优点包括: 1. 可扩展性强 2. 支持数据类型 3. 支持名称空间 4. 可以代替DTD XML Schema的应用场景包括: 1. 验证XML文档是否...

    W3C XML Schema

    Description of the W3C XML Schema.

    理解XML Schema XML Schema进阶

    XML Schema是目前国际标准的XML建模工具,本文将对XML Schema进行详细的介绍,帮助读者初步掌握XML Schema的使用方法和XML Schema文档实例的具体语义。 1. 命名空间的使用 XML Schema中命名空间的使用是非常重要的...

    XML Schema简明教程-W3C.rar

    XML Schema 是基于 XML 的 DTD 替代者。 XML Schema 描述 XML 文档的结构。 XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 在此教程中,你将学习如何在应用程序中读取和创建 XML ...

    XML与XMLSchema

    XML发展历史概述 XML文档组成元素 XML Schema组成元素 XML相关API

    W3C_xml-schema.zip

    xml-schema.zip W3C的XML schema教程

    XmlSchema-1.1.jar

    XmlSchema-1.1.jar XmlSchema-1.1.jar

    XML Schema教程

    XML Schema 教程 XML Schema 是基于 XML 的 DTD 替代者。 XML Schema 描述 XML 文档的结构。 XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 在此教程中,你将学习如何在应用程序中读取和...

    XmlSchema-1.4.7 jar包

    好不容易找到的XmlSchema-1.4.7 jar包,需要的同学速度下载吧。不黑心,只要1分~~~

    xmlschema-core-2.1.0-API文档-中文版.zip

    赠送jar包:xmlschema-core-2.1.0.jar; 赠送原API文档:xmlschema-core-2.1.0-javadoc.jar; 赠送源代码:xmlschema-core-2.1.0-sources.jar; 赠送Maven依赖信息文件:xmlschema-core-2.1.0.pom; 包含翻译后的API...

    xmlschema-core-2.0.3.jar

    xmlschema-core-2.0.3.jar;xmlschema-core-2.0.3.jar;xmlschema-core-2.0.3.jar

    W3C XML Schema 模式的设计方法研究.pdfW3C XML Schema 模式的设计方法研究.pdf

    W3C XML Schema 模式的设计方法研究.pdfW3C XML Schema 模式的设计方法研究.pdf

    一个简单的XML Schema的例子

    Schema相对于DTD的明显好处是XML Schema文档本身也是XML文档,而不是像DTD一样使用自成一体的语法。...Schema 的概念提出已久,但W3C的标准最近才出来,相应的应用支持尚未完善,但采用Schema已成为XML发展的一个趋势。

    XmlSchema-1.2.jar,xmlschema-1.2.jar,xml.jar

    XmlSchema-1.2.jar,xmlschema-1.2.jar,xml.jar

    xmlschema-core-2.0.jar

    cxf jar xmlschema-core-2.0.jar

    xmlschema-core-2.2.1.jar

    如果是maven依赖,可以在pom.xml中引入以下配置 &lt;groupId&gt;org.apache.ws.xmlschema &lt;artifactId&gt;xmlschema-core &lt;version&gt;2.2.1 &lt;/dependency&gt;

    XmlSchema标准参考手册.chm

    XML Schema是以XML语言为基础的,它用于可替代DTD。 一份XML schema文件描述了XML文档的结构。 XML Schema语言也被称为XML Schema Definition (XSD)(XML Schema定义). --------------------------------------...

    xml schema 的使用

    xml schema 的使用xml schema 的使用xml schema 的使用xml schema 的使用

Global site tag (gtag.js) - Google Analytics