`
ronry
  • 浏览: 40064 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

XML Schema (2)

    博客分类:
  • xml
阅读更多

2.2       杂项数据类型

2.4.1 逻辑数据类型

逻辑数据性用于规定 true false 值。

下面是一个关于某个 scheme 中逻辑声明的例子:

<xs:attribute name="disabled" type="xs:boolean"/>

文档中的元素看上去应该类似这样:

<prize disabled="true">999</prize>

注释:合法的布尔值是 truefalse1(表示 true 以及 0(表示 false)。

2.4.2 二进制数据类型

二进制数据类型用于表达二进制形式的数据。可使用两种二进制数据类型有:

  • base64Binary (Base64 编码的二进制数据)
  • hexBinary (十六进制编码的二进制数据)

下面是一个关于某个 scheme hexBinary 声明的例子:

<xs:element name="blobsrc" type="xs:hexBinary"/>

<!--[if !supportLists]-->2.2.3    <!--[endif]-->AnyURI数据类型

anyURI 数据类型用于规定 URI

下面是一个关于某个 scheme anyURI 声明的例子:

<xs:attribute name="src" type="xs:anyURI"/>

文档中的元素看上去应该类似这样:

<pic src="http://www.w3school.com.cn/images/smiley.gif" />

注释:假如某个 URI 含有空格,请用 %20 替换它们。

3 XSD元素和属性定义

3.1 XSD简易元素定义

简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性。不过,仅包含文本这个限定却很容易造成误解。文本有很多类型。它可以是 XML Schema 定义中包括的类型中的一种(布尔、字符串、数据等等),或者它也可以是您自行定义的定制类型。您也可向数据类型添加限定(即 facets),以此来限制它的内容,或者您可以要求数据匹配某种特定的模式。(关于facets的内容稍后介绍)

定义简易元素的语法为:

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

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

简易元素可拥有指定的默认值或固定值。当没有其他的值被规定时,默认值就会自动分配给元素。在下面的例子中,缺省值是 "red"

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

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

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

3.2 XSD属性

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

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

在此处,xxx 指属性名称,yyy 则规定属性的数据类型。

属性可拥有指定的默认值或固定值。当没有其他的值被规定时,默认值就会自动分配给元素。、在下面的例子中,缺省值是 "EN"

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

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

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

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

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

复合元素指包含其他元素及/或属性的 XML 元素。有四种类型的复合元素:

<!--[if !supportLists]-->·         <!--[endif]-->空元素

<!--[if !supportLists]-->·         <!--[endif]-->包含其他元素的元素

<!--[if !supportLists]-->·         <!--[endif]-->仅包含文本的元素

<!--[if !supportLists]-->·         <!--[endif]-->包含元素和文本的元素

注释:上述元素均可包含属性!

我们有两种方式来定义复合元素:

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>

如果您使用了上面所描述的方法,那么若干元素均可以使用相同的复合类型,比如这样:

<xs:element name="employee" type="personinfo"/>
<xs:element name="student" type="personinfo"/>
<xs:element name="member" 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: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>

 

(当只有属性时使用sequence或者其他指示器元素即可,若还有其他内容,则需要先用complexContext元素)

3.3 XSD复合元素

3.3.1 XSD复合空元素

空的复合元素不能包含内容,只能含有属性。例如:

<product prodid="1345" />

其申明可能为:

<xs:element name="product" type="prodtype"/>
<xs:complexType name="prodtype">
  <xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>
3.3.2 仅含元素的XSD复合元素

仅含元素的复合类型含有一个仅包含其他元素的元素。例如XML 元素,"person",仅包含其他的元素:

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

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

<xs:element name="person" type="persontype"/>
 
<xs:complexType name="persontype">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>
3.3.3 仅含文本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" type="shoetype"/>
 
<xs:complexType name="shoetype">
  <xs:simpleContent>
    <xs:extension base="xs:integer">
      <xs:attribute name="country" type="xs:string" />
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>
3.3.4 带有混合内容的XSD复合元素

         为了申明可以包含子元素、属性和文本的混合复杂元素,需要设置mixed属性为true

<xs:element name="letter" type="lettertype"/>
<xs:complexType name="lettertype" 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>

3.4 XSD复合类型指示器

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

Order 指示器:

<!--[if !supportLists]-->·         <!--[endif]-->All

<!--[if !supportLists]-->·         <!--[endif]-->Choice

<!--[if !supportLists]-->·         <!--[endif]-->Sequence

Occurrence 指示器:

<!--[if !supportLists]-->·         <!--[endif]-->maxOccurs

<!--[if !supportLists]-->·         <!--[endif]-->minOccurs

Group 指示器:

<!--[if !supportLists]-->·         <!--[endif]-->Group name

<!--[if !supportLists]-->·         <!--[endif]-->attributeGroup name

3.4.1 Order指示器

Order 指示器用于定义元素的顺序。

All 指示器

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

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

注释:当使用 <all> 指示器时,你可以把 <minOccurs> 设置为 0 或者 1,并仅可把 <maxOccurs> 指示器设置为 1(稍后将讲解 <minOccurs> 以及 <maxOccurs>)。

Choice 指示器

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

<xs:element name="person">
  <xs:complexType>
    <xs:choice>
      <xs:element name="employee" type="employee"/>
      <xs:element name="member" type="member"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

Sequence 指示器

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

<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>
3.4.2 Occurrence指示器

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

maxOccurs 指示器

<maxOccurs> 指示器可规定某个元素可出现的最大次数:

<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"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

上面的例子表明,子元素 "child_name" 可在 "person" 元素中最少出现一次(其中 minOccurs 的默认值是 1),最多出现 10 次。

minOccurs 指示器

<minOccurs> 指示器可规定某个元素能够出现的最小次数:

<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"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

上面的例子表明,子元素 "child_name" 可在 "person" 元素中出现最少 0 次,最多出现 10 次。

注释:对于所有的 "Order" "Group" 指示器(anyallchoicesequencegroup namegroup reference),的 maxOccurs minOccurs 的默认值均为 1使用 maxOccurs="unbounded" ,则某个元素的出现次数不受限制。

3.4.3 Group指示器

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

元素组

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

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

您必须在 group 声明内部定义一个 allchoice 或者 sequence 元素。下面这个例子定义了名为 "persongroup" 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>

在您把 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="组名称">
  ...
Courier New

  


  
分享到:
评论

相关推荐

    根据xml schema生成xml

    &lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt; &lt;/xs:schema&gt; ``` 这个例子定义了一个`person`元素,包含`firstName`和`lastName`两个子元素,都是字符串类型。 2. **验证XML文档**:...

    XmlSchema-1.4.6.jar

    `XmlSchema-1.4.6.jar` 是一个包含Java绑定的XML Schema API的库,它为处理XML Schema文档提供了支持。在开发Web服务客户端时,尤其是与基于SOAP(简单对象访问协议)的Web服务交互时,这个库扮演了至关重要的角色。...

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

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

    XML与XMLSchema

    【XML与XMLSchema】 XML,全称可扩展标记语言(eXtensible Markup Language),是一种基于标准通用标记语言SGML的简化版本,由万维网联盟(W3C)于1996年开始制定,并在1998年2月10日发布了XML 1.0规范。它的设计...

    理解XML Schema XML Schema进阶

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

    XML文件XML Schema.docXML Schema.doc

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

    xmlschema-core-2.0.3的jar

    `xmlschema-core-2.0.3.jar` 是一个Java库,专门用于解析和操作XML Schema文档,它支持XML Schema 1.1标准。 在Spring Web服务中,XML Schema Core库扮演着关键角色。Spring Web Service框架是基于合同优先...

    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-1.4.7.jar

    XmlSchema-1.4.7.jar 是一个Java库,它实现了W3C的XML Schema标准,用于处理XML Schema文档。这个版本(1.4.7)可能是该库的一个稳定版本,提供给用户免费使用。XML Schema是XML的一种规范,定义了如何验证XML文档的...

    西工大服务计算实验2-1_XML Schema

    在本实验"西工大服务计算实验2-1_XML Schema"中,你的任务是编写一个程序,生成符合特定XML Schema定义的XML文档。这涉及到对XML Schema的理解、XML文档的创建以及编程技术的应用。 首先,我们需要理解XML Schema的...

    XmlSchema-1.1.jar

    XmlSchema-1.1.jar XmlSchema-1.1.jar

    XML Schema 的简介

    XML Schema 简介 XML Schema 是一种基于 XML 的 DTD 替代者,它可以描述 XML 文档的结构。XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。为了学习 XML Schema,需要具备的基础知识包括 HTML、XHTML...

    XMLSchema.chm

    这个“XMLSchema.chm”文件很可能是一个帮助文档,旨在为学习XML Schema的用户提供详细的指导和参考资料。下面我们将深入探讨XML Schema的相关知识点。 1. **XML Schema的作用**:XML Schema的主要功能是规范XML...

    XMLSchema经典例题

    在“XMLSchema经典例题”中,我们可以深入探讨以下几个核心知识点: 1. **基本元素和类型定义**:XML Schema允许定义基本数据类型,如字符串、整数、浮点数等,并且可以自定义复杂的数据类型。例如,你可以创建一个...

    XmlSchema-1.4.7 jar包

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

    xmlschema实验及答案.doc

    2. 文档验证:XML Schema可以用于验证XML文档的结构和内容,确保了文档的正确性和一致性。 3. 数据存储:XML Schema可以用于定义数据存储的格式,确保了数据的正确性和一致性。 4. 应用集成:XML Schema可以用于集成...

    apache xmlschema api文档

    2. **XMLSchema**:这个类代表一个XML Schema定义。它可以用于验证XML文档,获取Schema中的元素、属性和其他组件的信息。 3. **XSModelGroup**:表示XML Schema中的模式组,用于组合其他模式元素,如选择(`...

    xmlschema-core-2.0.3.jar

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

    XML Schema简明教程-W3C.rar

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

Global site tag (gtag.js) - Google Analytics