`
sw1982
  • 浏览: 511529 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

XML知识3--Schema

阅读更多
发信人: zkxx (为白云骄傲,为白云自豪!), 信区: XML
标  题: XML详解----Schema(推荐)
发信站: 武汉白云黄鹤站 (2006年10月19日17:20:18 星期四)

有人会问,DTD和Schema都是对XML文档的一种约束,为什么不就选其中之一,而又有Sche
ma呢。因为DTD安全度太低了,也就是说它的约束定义能力不足,无法对XML实例文档做出
更细致的语义限制。其实细心的人会发现,在DTD中,只有一个数据类型,就是PCDATA(用
在元素中)和CDATA(用在属性中),在里面写日期也行,数字还行,字符更是没问题。而
Schema正是针对这些DTD的缺点而设计的,Schema是完全使用XML作为描述手段,具有很强
的描述能力,扩展能力和处理维护能力等。下面让我们看一个简单的例子吧:
hello.xml
-------------------
<?xml version="1.0"?>
<greeting>Hello World!!</greeting>

说明:
一个根元素:greeting;且这个元素不含属性,无子元素,内容是字符串。

hello.xsd
----------
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="greeting" type="xsd:string"/>
</xsd:schema>
说明:
XML Schema文档后缀名是.xsd,完全符合XML语法,根元素是schema,命名空间xmlns:xsd
="http://www.w3.org/2001/XMLSchema,用元素<element>定义实例文档中的元素,如gre
eting。xsd:string就是定义的数据类型了,其中的数据类型有很多,比如:int,double,
dateTime,Boolean,long,integer,float,等,总之Java等语言里有的数据类型它都有,但
要以“xsd:”开头。
让我们再看一个里面有子无素的例子:
customer.xml
-----------
<customer>
<name>teiki</name>
<address>No.237, Road Waitan, Shanghai</address>
</customer>
则可以写出以下的XML Schema文档:
customer.xsd
----------------
1: <?xml version="1.0"?>
2: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3: <xsd:element name="customer">
4: <xsd:complexType>
5: <xsd:sequence>
6: <xsd:element name="name" type="xsd:string"/>
7: <xsd:element name="address" type="xsd:string" />
8: </xsd:sequence>
9: </xsd:complexType>
10: </xsd:element>
11: </xsd:schema>
说明:
实例文档customer.xml中,<customer>元素含有两个子元素,在Schema中凡是有两个以上
的子元素,就认为是复杂类型的,所以我们在Schema文档中采用ComplexType来定义该元素
。表示有多个XML子元素。
sequence表示子元素依次出现的顺序。
如果有多层子元素怎么办呢,同样的道理,有几层写几层,一直往下嵌就OK了,这里我要
说的是另一种方法,结构看上去会清晰一些。
address.xml
---------------
<customer>
<name>Teiki</name>
<address>
<!-- address追加一个地址子元素 -->
<prefecture>Zhejiang</prefecture>
<city>Hangzhou</city>
<street>Xilu Road, No.121, 7F</street>
</address>
</customer>
下面就是采用ref元素来编写的这个Schema文档:
address2.xsd
----------------------
1: <?xm l version="1.0"?>
2: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3:
4: <xsd:element name="customer">
5: <xsd:complexType>
6: <xsd:sequence>
7: <xsd:element name="name" type="xsd:string"/>
8: <xsd:element ref="address"/>
9: </xsd:sequence>
10: </xsd:complexType>
11: </xsd:element>
12:
13: <xsd:element name="address">
14: <xsd:complexType>
15: <xsd:sequence>
16: <xsd:element name="prefecture" type="xsd:string"/>
17: <xsd:element name="city" type="xsd:string" />
18: <xsd:element name="street" type="xsd:string" />
19: </xsd:sequence>
20: </xsd:complexType>
21: </xsd:element>
22:
23: </xsd:schema>
说明:
如果按正常的写法,应该把13-21行的内容替换到每8行去,但这里使用ref元素可以直接
将其指向另一个模块,使文档更加具有可读性。
如果元素中包含属性怎么办呢?一样简单,只要在定义完子元素的后面再着定义属性就行
了。定义属性用“attribute”,还是举个例子吧
customer2.xml
---------------
<customer id="001718">
<name>Teiki</name>
<address>No.237, Road Waitan, Shanghai</address>
</customer>
这个例子和上面的一个例子差不多,只是在元素customer中设了一个属性id。
customer2.xsd
------------------
1: <?xml version="1.0"?>
2: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3:
4: <xsd:element name="customer">
5: <xsd:complexType>
6: <xsd:sequence>
7: <xsd:element name="name" type="xsd:string"/>
8: <xsd:element name="address" type="xsd:string" />
9: </xsd:sequence>
10: <!-- 增加属性定义 -->
11: <xsd:attribute name="id" type="xsd:string"/>
12: </xsd:complexType>
13: </xsd:element>
14:
15: </xsd:schema>
说明:
需要注意的一点是,属性和元素不是一家的,所以要把它放在sequence外面写,但它们都
在customer的孩子,所以要写在complexType的里面。
下面再看一个例子:
order4-1.xsd
----------------------
1:<?xml version="1.0"?>
2:<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3:
4: <xsd:element name="order">
5: <xsd:complexType>
6: <xsd:sequence>
7: <xsd:element ref="orderItem" maxOccurs="10"/>
8: </xsd:sequence>
9: </xsd:complexType>
10: </xsd:element>
11:
12: <xsd:element name="orderItem">
13: <xsd:complexType>
14: <xsd:sequence>
15: <xsd:choice>
16: <xsd:element name="id" type="idType"/>
17: <xsd:element name="name" type="xsd:string"/>
18: </xsd:choice>
19: <xsd:element name="quantity" type="quantityType"/>
20: </xsd:sequence>
21: </xsd:complexType>
22: </xsd:element>
23:
24: <xsd:simpleType name="idType">
25: <xsd:restriction base="xsd:string">
26: <xsd:enumeration value="7-5058-3496-7"/>
27: <xsd:enumeration value="7-5005-6450-3"/>
28: <xsd:enumeration value="7-3020-6069-7"/>
29: </xsd:restriction>
30: </xsd:simpleType>
31:
32: <xsd:simpleType name="quantityType">
33: <xsd:restriction base="xsd:integer">
34: <xsd:minInclusive value="1"/>
35: <xsd:maxInclusive value="10"/>
36: </xsd:restriction>
37: </xsd:simpleType>
38:
39:</xsd:schema>
上面的例子中,maxOccurs代表:相同元素最多出现的次数,与些相反的是minOccurs代表:
出现的最少次数。默认情况下两个都为“1”,如果把minOccurs设为“0”,表示该元素可
有可无。choice代表:可选的元素,也就是在这里面写的元素只能选其中之一,不能全写
。simpleType代表自定义数据类型,也就是name里的并不是真正的数据类型,而是根据自
己的意愿定制的。restriction代表对某一数据类型做约束,也就是只能取其中范围之内符
合要求的,比如第25-29行中,里面又有个元素enumeration代表枚举,也就是只能在枚举
的那几个中选一个,而下在的36-36行,里面又有一对元素minInclusive和maxInclusive
代表类型的取值范围,也就是只能取大于等于minInclusive并且小于等于maxInclusive的
数。
把这个Schema用在XML中是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSc
hemaLocation="D:\ProgramCode\Year2\XML\practice\temp.xsd">
<orderItem>
<id>7-5005-6450-3</id>
<quantity>3</quantity>
</orderItem>
<orderItem>
<name>xyb</name>
<quantity>3</quantity>
</orderItem>
<!-- 注意下面这个是错的,因为超出了规定的范围 -->
<orderItem>
<id>7-5005-6450-3</id>
<quantity>13</quantity>
</orderItem>
<!? 从上面的注释到此,是错误的 -->
</order>
说明:
红色的部分是导入Schema的命令,绿色的是Schema文件的路径,如果用XMLSPY写时,会自
动加上。
对属性的设置,基本上和元素的差不多。比如:
<xsd:element name="orderItem">
<xsd:complexType>
<xsd:sequence></xsd:sequence>
<xsd:attribute name="id" type="idType" use="required"/>
<xsd:attribute name="quantity" type="xsd:integer" default="1"/>
</xsd:complexType>
<xsd:simpleType name="idType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{1}-\d{4}-\d{4}-\d{1}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
这里我们讲id属性类型作为一种自定义数据类型idType。它的格式就是上面用到的也就是
类似于“7-5005-6450-3”样的。
而且,用attribute元素的use属性来定义是否是必须的属性。
required是必须值,optional是可选值,prohibited是无属性值。default属性是默认值。
分享到:
评论

相关推荐

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

    `json-schema-inferrer`库的使用可以分为以下几个关键知识点: 1. **JSON Schema基本概念**:理解JSON Schema的基础概念,包括属性(properties)、类型(type)、枚举(enum)、最大值(maximum)、最小值...

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

    XML Schema教程

    ### XML Schema 教程知识点详解 #### 一、XML Schema 概述 - **XML Schema 定义**:XML Schema 是一种基于 XML 的语言,用于描述 XML 文档的结构。它定义了 XML 文档中可以出现的元素、属性及其结构,并且指定了...

    W3C_xml-schema.zip

    3. **命名空间支持**:XML Schema支持命名空间,这使得在XML文档中使用相同的元素和属性名但来自不同来源成为可能。通过使用命名空间前缀,可以避免命名冲突。 4. **模式约束**:XML Schema提供了模式约束,如必须...

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

    总结来说,这个实验要求你深入理解XML Schema的概念和应用,掌握生成XML文档的编程技巧,以及与SOA相关的数据交换知识。在实践中,你需要解析XML Schema,生成符合Schema的XML文档,这将涉及到编程、XML处理和数据...

    XML文件XML Schema.docXML Schema.doc

    "XML Schema知识点" XML Schema是XML语言为基础的,它用于可替代DTD。它用于描述XML文档的结构。XML Schema语言也被称为XML Schema Definition(XSD)。XML Schema的作用是定义一份XML文档的合法组件群,就像DTD的...

    XmlSchema标准参考手册.chm

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

    Schema教程 xml

    3. XML Schema的关键特性 - 数据类型:允许定义元素和属性的数据类型,如字符串、整数、日期等,确保数据的一致性和准确性。 - 语义约束:通过数据约束(facets)定义数据的允许范围,如长度、精度、最大值等。 - 可...

    Introduction to XML Schema

    在深入学习XML Schema之前,建议读者具备以下基础知识: - 对XML有基本的理解。 - 对XML Namespaces有一定的了解。 - 对DTD有一定认识。 如果读者对以上知识点不熟悉,建议先阅读相关教程。 ### XML Schema是什么...

    XMLSchema.chm

    下面我们将深入探讨XML Schema的相关知识点。 1. **XML Schema的作用**:XML Schema的主要功能是规范XML文档的结构,确保数据的一致性和有效性。它通过定义元素、属性、数据类型等规则,使得XML文档能够遵循统一的...

    XML Schema xsd XML Schema xsd

    &lt;note xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://example.com/note.xsd"&gt; &lt;to&gt;George &lt;from&gt;John &lt;heading&gt;Reminder &lt;body&gt;Don't forget the meeting! ``` 对应的 ...

    XMLSchema经典例题

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

    xml课程设计---xml留言板

    以下是关于XML在留言板应用中的相关知识点: 1. XML基础: - XML语法:XML文档由元素、属性、文本节点等组成,遵循严格的规则,如元素必须有关闭标签,属性值需加引号等。 - XML文档结构:XML文档通常包含声明(`...

    运用XML Spy新建XML Schema的教程

    压缩包里详细介绍了如何利用XML Spy这个软件新建一个XML Schema文档,内容非常充实,在网上找了很久自己整理好的,只要按照文档的步骤就可以很快学会如何使用XML Spy了,非常适合初次接触XML知识和XML Spy这个软件的...

    XML Schema

    ### XML Schema核心知识点详解 #### 一、XML Schema概述与应用价值 XML Schema是一种用于定义XML文档结构和内容的有效工具,由W3C组织制定。它不仅提供了强大的功能来规范XML文档,还允许开发者通过一系列复杂的...

    Pass4side XML Master I10-001

    #### 4.3 题目3:XML Schema定义 题目要求选择正确的XML Schema定义,以确保`MarketPrice`元素只能包含正整数值。 - **选项A**:定义`MarketPrice`元素为负整数类型。这不符合要求。 - **选项B**:定义`MarketPrice`...

    前端开源库-xml-conformance-suite

    3. **DTD和XML Schema**:XML文档可以使用DTD(Document Type Definition)或XML Schema定义其结构和数据类型。XML-conformance-suite会测试解析器是否能正确解析和验证基于这些规范的XML文档。 4. **处理指令...

    XML技术书籍--大集合

    5. **DTD(Document Type Definition)或XML Schema**:用于定义XML文档的结构和数据类型,确保文档的合法性。 6. **解析方式**:XML解析有DOM(Document Object Model)和SAX(Simple API for XML)两种主要方式。...

Global site tag (gtag.js) - Google Analytics