XML详解----Schema
有人会问,DTD和Schema都是对XML文档的一种约束,为什么不就选其中之一,而又有 Schema呢。因为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>定义实例文档中的元素,如greeting。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:noNamespaceSchemaLocation="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属性是默认值。
引用:http://bbs.xml.org.cn/dispbbs.asp?boardID=23&ID=23819
分享到:
相关推荐
XML Schema Definition (XSD) 是一个用于定义XML文档结构和数据类型的规范,它为XML文档提供了形式化的约束和验证机制。XSD元素是构建XML模式的核心组成部分,它们...因此,深入学习XSD对于XML相关的开发工作至关重要。
标题中的“Xsd的使用命令”指的是XML Schema Definition(XSD)文件的使用方法,它是一种用于定义XML文档结构和数据类型的规范。...通过学习XSD,可以更好地维护数据的完整性和一致性,提高软件的稳定性和可维护性。
**XSD(XML Schema)教程** ...通过学习XSD教程,开发者不仅能理解XML Schema的原理,还能掌握创建和应用XSD的能力,从而提高XML文档的质量和互操作性。在实际项目中,XSD是确保XML数据交换准确无误的重要工具。
学习XSD和Java的结合应用,不仅可以提高XML数据处理的精确性,还能为程序添加安全性和稳定性。对于初学者来说,理解XSD的结构和规则,学会在Java中使用XSD进行数据验证,是迈进XML开发领域的基础步骤。通过实践,你...
生成XML文件的定义规范文件XSD,能够严格定义XML文件的内容样式,对于刚学习XSD的人有一定的帮助。
总的来说,"xsd生成xml工具"是一个方便的开发辅助工具,它简化了基于XSD的XML文档创建过程,并为学习和实践XML相关技术提供了实际操作的平台。通过深入研究其源代码,开发者可以增强对XML Schema和XML处理的理解,...
### XSD学习笔记 #### XML Schema Definition (XSD) 的基本概念与作用 XML Schema Definition (XSD) 是一种用于定义 XML 文档结构的语言。它主要用于描述 XML 文档中的元素、属性及其数据类型,帮助确保 XML 数据...
6. **学习和教学工具**:对于初学者,XSD的可视化工具是很好的学习辅助,因为它以直观的方式展示了XML Schema的概念和构造。 7. **版本控制**:在版本管理中,可视化的差异对比可以帮助开发者轻松识别不同版本XSD...
《Dubbo的.xsd文件详解》 Dubbo作为一款高性能、轻量级的Java开源服务框架,其在设计和实现过程中广泛使用了XML Schema(简称XSD)来...因此,对于使用或研究Dubbo的开发者来说,深入学习`dubbo.xsd`是非常必要的。
【代码生成XSD】是一种编程技术,用于通过代码自动生成XML Schema Definition (XSD) 文件。XSD文件是XML文档的结构定义,它定义了XML文档的元素、属性、数据类型以及它们之间的关系,用于验证XML文档是否符合预设的...
这对于离线环境或学习理解Dubbo配置规则非常有帮助。 总的来说,"dubbo.xsd.zip"是Dubbo开发中的一个重要工具,它提供了Dubbo服务配置的规范,使得开发过程更加有序和可控。掌握并利用好这个资源,可以有效地避免因...
### dubbo.xsd 下载与应用解析 ...同时,也学习了如何下载并配置 `dubbo.xsd` 文件,以便更好地进行 Dubbo 应用的开发和维护。对于使用 Dubbo 进行微服务开发的开发者来说,掌握这些基础知识将大有裨益。
Spring 3.0是Spring框架的一个重要版本,它引入了许多新特性和改进,极大地提升了开发效率和灵活性。...通过深入学习和应用这些XSD文件,开发者能够更好地掌握Spring框架,并提升其在实际项目中的应用能力。
9. **学习资源**:为了深入学习和使用Castor,可以查阅官方文档、在线教程和论坛讨论,以获取示例代码和常见问题解答。 通过以上知识点,我们可以了解到,Castor 1.4版本为XML Schema到Java类的转换提供了一个高效...
DTD(Document Type Definition)文件和XSD(XML Schema Definition)文件是XML文档结构的重要定义工具,它们用于规范XML文档的结构和数据类型。在给定的压缩包文件中,我们看到的是与Java Web开发框架Struts 2和...
XML(eXtensible Markup Language)是一种用于标记数据的语言,它允许用户自定义标签来描述数据,使得数据具有结构和语义。...通过提供的压缩包文件,你可以学习到具体的DTD和XSD实例,加深对这些概念的理解。
标题 "spring xsd文件" 涉及到的是Spring框架中的XML配置文件和XSD(XML Schema Definition)...同时,学习和熟悉Spring的文档、社区资源和开发者工具,如IDE的错误提示和自动补全,都能帮助我们更有效地处理这类问题。
XML(可扩展标记语言)是一种用于标记数据的语言,它允许数据以结构化的方式表示,便于交换和处理。...为了进一步学习,你可以打开这个文件查看具体的内容,结合上述知识,理解并实践XML和XSD的验证过程。
通过这个例子,开发者可以学习如何正确地使用XSD来构建和验证符合IEC61131-10标准的程序代码。 其他如`Extension_NamedEventTask.xsd`、`Extension_JumpStep.xsd`等扩展XSD文件进一步细化了标准,分别针对命名事件...
使用CXF开发Web服务的一般步骤包括:创建XSD文件以定义服务接口,使用CXF工具生成Java类,编写服务实现,配置CXF和Spring,最后部署和测试服务。 6. **源码分析**: "apache-cxf-3.1.4-src.tar.gz"包含的源代码...