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

XML-Schema

阅读更多
XSDL(XML Schema定义语言)由元素、属性、命名空间和XML文档种的其他节点构成的。
一、XSD中的元素

XSD文档至少要包含:schema根元素和XML模式命名空间的定义、元素定义。

1、schema根元素

语法如下:
<xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”>

</xsd:schema>

在XSD中必须定义一个且只能定义一个schema根元素。根元素中包括模式的约束、XML模式命名空间的定义,其他命名空间的定义、版本信息、语言信息和其他一些属性。

2、元素

语法如下:
<xsd:element name=”user” type=”xsd:string” />

XSD中的元素是利用element标识符来声明的。其中name属性是元素的名字,type属性是元素值的类型,在这里可以是XML Schema中内置的数据类型或其他类型。

例子:
<xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”>
    <xsd:element name=”user” type=”xsd:string” />
</xsd:schema>
以上文档对应的有效XML文档如下:
<?xml version=”1.0”?>
<user>string</user>

在元素的定义中还有2个属性:minOccurs和maxOccurs。其中minOccurs定义了该元素在父元素中出现的最少次数(默认为1,值为大于等于0的整数),maxOccurs定义了该元素在父元素中出现的最多次数(默认为1,值为大于等于0的整数)。在maxOccurs中可以把值设置为unbounded,表示对元素出现的最多次数没有限制。

例子:
<xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema>
    <xsd:element name=”user” type=”xsd:string” minOccurs=”0” maxOccurs=”unbounded” />
</xsd:schema>

表示为元素user的类型为string,出现的次数最少为0(也就是可选),最多不限制。

3、引用元素和替代

语法如下:
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
    <xsd:element name=”user” type=”xsd:string” />
    <xsd:element name=”name”>
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref=”user” />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

引用是利用element标记符的ref属性实现的。主要适用于避免在文档中多次定义同一个元素,应当将经常使用的元素定义为根元素的子元素,以便在文档的任何地方引用它。

在这里还可以为某个定义的元素起一个别名(偶的理解^o^),方法如下:

<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
    <xsd:element name=”yonghu” type=”xsd:string” substitutionGroup=”user” />
    <xsd:element name=”user” type=”xsd:string” />
    <xsd:element name=”name”>
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref=”user” />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

以上文档对应的有效XML文档如下:

<?xml version=”1.0”?>
<name>
    <user>string</user>
</name>
或者:
<?xml version=”1.0”?>
<name>
    <yonghu>string</yonghu>
</name>

主要是利用element标识符中的属性substitutionGroup实现的。

4、设置默认值和固定值

语法如下:
<xsd:element name=”city” type=”xsd:string” default=”xian” />
<xsd:element name=”country” type=”xsd:string” fixed=”china” />

通过default属性的设置,可以在XML文档中没有对city元素定义时赋予默认值。而使用fixed属性,可以给元素country设定一个固定的值china,并且不允许改变!

5、利用组合器控制结构

sequence组合器,定义了一列元素必须按照模式中指定的顺序显示(如果是可选的,也可以不显示)。语法如下:

<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
    <xsd:element name=”name”>
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name=”first” type=”xsd:string” />
                <xsd:element name=”middle” type=”xsd:string” />
                <xsd:element name=”last” type=”xsd:string” />
           </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

all组合器,允许所定义的元素可以按照任意顺序显示,all元素的子元素在默认情况下是必须的,而且每次最多显示一次。语法如下:

<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
    <xsd:element name=”name”>
        <xsd:complexType>
            <xsd:all minOccurs=”0”>
                <xsd:element name=”first” type=”xsd:string” />
                <xsd:element name=”middle” type=”xsd:string” />
                <xsd:element name=”last” type=”xsd:string” />
            </xsd:all>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

choice组合器,允许指定多组声明中的一个,用于互斥情况。语法如下:

<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
    <xsd:element name=”name”>
        <xsd:complexType>
            <xsd:choice>
                <xsd:element name=”first” type=”xsd:string” />
                <xsd:element name=”middle” type=”xsd:string” />
                <xsd:element name=”last” type=”xsd:string” />
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

二、定义属性

在XML Schema文档中可以按照定义元素的方法定义属性,但受限制的程度较高。它们只能是简单类型,只能包含文本,且没有子属性。可以应用在attribute元素定义中的属性如下:
default    初始默认值
fixed      不能修改和覆盖的属性固定值
name     属性的名称
ref         对前一个属性定义的引用
type      该属性的XSD类型或者简单类型
use        如何使用属性
form      确定attributeFormDefault的本地值
id          模式文档中属性唯一的ID

Default、fixed、name、ref和type属性与在element标记中定义的对应属性相同,但type只能是简单类型。Use属性的值可以是:optional(属性不是必须的,此为默认属性)、prohibited或者required(属性是强制的)。

1、创建属性

语法如下:
<xsd:attribute name=”age” type=”xsd:integer” />

该语句定义了一个名为age的属性,它的值必须是一个整数。把它添加到模式中时,它必须时schema元素、complexType元素或者attributeGroup元素的子元素。

例子:
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
    <xsd:element name=”name”>
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name=”first” type=”xsd:string” />
            </xsd:sequence>
            <xsd:attribute name=”age” type=”xsd:integer” use=”optional” />
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

以上文档对应有效的XML文档如下:

<?xml version=”1.0”?>
<name age=”27”>
    <first>string</first>
</name>

如上所示,要把属性附加在元素上,属性应该在complexType定义中的组合器之后定义或引用。

三、总结

1、含有其他子元素的元素叫做复合元素。

2、<schema> 元素是每一个 XML 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>
表示本schema用的的元素和数据类型来自命名空间 http://www.w3.org/... ,且下面
使用xs:为前缀表示。

为什么使用名字空间?

Xml文档很多时候被用于数据交换,Xml为标记那些可以在应用程序之间以平台无关的方式进行交换的数据提供了一种非常有用而且可以扩展的框架。它被广泛地用于在应用程序对象之间、不同平台应用中,甚至是Internet上交换数据。这个时候,创建你自己的Xml文档元素和属性名字的能力确实需要付出一定的代价,当你想要与其他的不熟悉你的文当结构的客户或者应用程序交换Xml文档时,这种代价尤为突出。所有这些参与者(平台、应用程序及人)都能正确使用这些Xml文档吗?它们中的自定义标记能够被识别吗?

命名空间前缀只是一个别名,起代替的作用,为了不要写一个URI那么麻烦。可任意取名,没什么意思,就像取一个变量名。命名空间的值用URI表示可以在全球范围内代表唯一性,这是W3C的建议,用一般字符串从技术讲是没问题的。

由于xml允许你自己定义自己的标识,你定义的标识和其他人定义的标识有可能相同,但表示不同的意义。当文件交换或者共享的时候就容易产生错误。为了避免这种错误发生,XML采用名字空间声明,允许你通过一个网址指向来识别你的标识。例如:

小王和小李都定义了一个<book>标识,如果小王的名字空间是"http://www.xiaowang.com",小李的名字空间是"http://www.xiaoli.com",那么当两个文档交换数据时,也不会混淆<book>标识,因为它属于不同的名字空间。

更通俗的解释是:名字空间就是给文档做一个标记,告诉别人,这个文档是属于谁的。只不过这个"谁"用了一个网址来代替。

<xsd:schema targetNamespace='http://www.SampleStore.com/Account'
       xmlns:xsd='http://www.w3.org/2000/08/xmlSchema'
       xmlns:ACC= 'http://www.SampleStore.com/Account'>

一个给定的XML Schema定义了一系列的元素名称,类型名称,属性名称和属性组名称。比如上面的代码中的订单号码、商品编号、商品编号类型等。而这些名称都有它一定的作用范围,类似于C++中的局部变量的概念。而它们的作用范围是什么呢?就是在他们的目标名字空间(target namespace)中是有效的,在上面的代码中,我们可以看到它的目标名字空间为http://www.SampleStore.com /Account

3、简易元素指那些只包含文本的元素。它不会包含任何其他的元素或属性。假如某个元素拥有属性,它就会被当作某种复合类型。
<xs:element name="xxx" type="yyy"/>

4、简单元素可以指定默认值或者固定值:
    <xs:element name="color" type="xs:string" default="red"/>
    <xs:element name="blue_color" type="xs:string" fixed="blue"/>

5、<xs:attribute name="xxx" type="yyy"/> 定义属性。属性也有默认值和固定值。

6、可选的和必需的属性:在缺省的情况下,属性是可选的。如需规定属性为必选,请使用 "use" 属性:
<xs:attribute name="lang" type="xs:string" use="required"/>

7、属性取值限制:
<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>
规定了age必须是0-120之间的整数值。

<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>
规定了car只能是“audi”,“golf”,“BMW”三个值之一。

上面的例子也可以被写为:
<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" 元素的组成部分。

<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
    <xs:pattern value="[a-z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
规定了letter只能取值小写字母。

<xs:element name="性别">
<xs:simpleType>
<xs:restriction base="xs:string">
    <xs:pattern value="男|女"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
规定了性别只能区“男”或者“女”。


<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z0-9]{8}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
规定了password是长度为8的字母或者数字的组合。

<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
    <xs:minLength value="5"/>
    <xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
规定了password的长度必须是5个到8个字符长度。


8、复合元素:复合元素指包含其他元素及/或属性的 XML 元素。
8.1、定义复合元素方式一:
<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子元素,必须按照所定义的次序排列。

8.2、附和元素定义方式二:
<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="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>

9、指示器:
9.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>

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>

9.2、Occurrence 指示器:Occurrence 指示器用来定义某个元素出现的频率。
注释: maxOccurs 以及 minOccurs 的默认值均为 1。
       如需使某个元素的出现次数不受限制,请使用 maxOccurs="unbounded" 这个声明。

10、全局元素:全局元素指 "schema" 元素的直接子元素!本地元素(Local elements)指嵌套在其他元素中的元素。

11、属性是不能包含其他元素的命名的简单类型定义。属性也可以被分配一个可选默认值,且必须出现在复杂类型定义的底部。此外,如果声明了多个属性,它们可以任意顺序出现。

12、 应使用元素还是属性?
元素用于封装数据,而属性通常用于提供有关元素的伴随信息,而不是封装原始数据本身。实际使用元素还是属性取决于应用程序的需要。

当您的信息需要简单类型的数据并且存在以下情况时,请使用属性:

信息需要默认值或固定值。
信息需要的数据是现有元素的元数据
如果 XML 文件的大小很重要,那么属性所需的字节数往往比元素要少
下面的列表从架构角度描述元素和属性之间的主要差异:

架构可以定义元素的排序是否有效,但属性可以任意顺序出现。
元素可以用 <choice> 标记嵌套,这意味着列出的元素中有一个且仅有一个可以显示。
元素可以出现不止一次,但属性不能。
分享到:
评论

相关推荐

    Xerces-xml-schema

    Xerces-J 是该项目针对 Java 语言的实现,而 "Xerces-J-tools.2.11.0-xml-schema-1.1-beta.zip" 是这个解析器的一个特定版本,包含了支持 XML Schema 1.1 beta 版本的功能。 **1. XML Schema** XML Schema 是 W3C ...

    Xerces-J-tools.2.11.0-xml-schema-1.1-beta.zip下载

    Xerces-J-tools.2.11.0-xml-schema-1.1-beta.zip为apache开源xml相关,可用于xml解析 Xerces是由Apache组织所推动的一项XML文档解析开源项目,它目前有多种语言版本包括JAVA、C++、PERL、COM等。[1] Xerces是一个...

    xml-schema.ppt

    * 数据类型的标准位于 w3.org/TR/xmlschema-2,它定义了一些常用数据类型以及创建新类型的规则 XML Schema 的软件以及工具支持情况: * Apache 的 Xerces XML 解析器 * XML Spy 的支持情况 * 其他软件实现,包括将...

    JSON Schema 生成库——json-schema-inferrer(java版).rar

    `json-schema-inferrer`是针对Java平台的一个工具库,它的主要功能是从JSON实例数据生成对应的JSON Schema,方便开发者快速构建符合规范的数据模型。 `json-schema-inferrer`库的使用可以分为以下几个关键知识点: ...

    W3C_xml-schema.zip

    XML Schema,全称为XML Schema Definition,是W3C(World Wide Web Consortium)组织制定的一种用于描述XML(eXtensible Markup Language)文档结构和数据类型的规范。它为XML文档提供了强大的验证机制,确保XML文档...

    castor-1.2-xml-schema castor转化XML需要的jar包

    Castor 项目采用 BSD 类型的证书,因此可在任何类型的应用程序(包括完整版权的项目)中使用。 Castor 实际上仅仅有 XML 数据绑定,它还支持 SQL 和 LDAP 绑定

    JSON Schema 校验库——json-schema-validator(java版本).rar

    在给定的压缩包中,`JSON Schema 校验库——json-schema-validator(java版本).pdf`可能是该库的使用指南或API文档,可以帮助开发者深入理解如何在Java项目中有效利用`json-schema-validator`进行JSON数据验证。...

    rust-xml-schema:[WIP](自生成)基于XML模式的XML解析器生成器

    《基于XML模式的XML解析器生成器:rust-xml-schema详解》 在IT行业中,XML(eXtensible Markup Language)作为一种数据交换和存储格式,广泛应用于数据序列化、配置文件以及网络通信等领域。XML Schema(XSD)则是...

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

    xml-schema

    &lt;root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xsd 文件的路径"&gt; &lt;!-- XML 内容 --&gt; ``` XML Schema元素是XML Schema文档的核心,它是所有其他定义元素的容器。例如,`&lt;xs:...

    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框架是基于合同优先...

    XML - 实验(2) -- Schema

    《XML》实验任务书 【2】 XML Schema [实验目的] 1、学习如何使用XMLSPY集成开发环境完成XML Schema相关的开发工作。 2、掌握XML Schema与DTD之间的区别,能够完成两者之间的转换;掌握在XML Schema中如何定义元素...

    XML详解----Schema(精讲)

    XML_schema_详解 XML Schema是XML文档的约束机制,用于定义XML文档的结构和内容。它是XML 1.0规范的一部分,提供了一个强大的工具来描述和验证XML文档。 XML Schema的优点是: * 强大的描述能力:XML Schema可以...

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

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

    xmlschema-core-2.0.3.jar

    xmlschema-core-2.0.3.jar;xmlschema-core-2.0.3.jar;xmlschema-core-2.0.3.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-1.4.6.jar

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

    XmlSchema-1.4.7 jar包

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

    xml-apis-1.4.01.jar.zip

    - **XML Schema API**:处理XML Schema定义,用于验证XML文档是否符合指定的模式。 了解并熟练使用这些API,对于Java开发者来说至关重要,因为它们可以帮助我们有效地读取、写入、验证和处理XML数据。在处理XML问题...

    XmlSchema-1.1.jar

    XmlSchema-1.1.jar XmlSchema-1.1.jar

Global site tag (gtag.js) - Google Analytics