DTD和Schema都是对XML文档的一种约束,为什么不就选其中之一,而又有 Schema呢。因为DTD安全度太低了,也就是说它的约束定义能力不足,无法对XML实例文档做出更细致的语义限制。其实细心的人会发现,在DTD中, 只有一个数据类型,就是PCDATA(用在元素中)和CDATA(用在属性中),在里面写日期也行,数字还行,字符更是没问题。而Schema正是针对这 些DTD的缺点而设计的,Schema是完全使用XML作为描述手段,具有很强的描述能力,扩展能力和处理维护能力等。还有DTD不遵守xml语法(写xml文档实例时候用一种语法,写DTD的时候用另外一种语法),下面让我们看一个简单的例子吧
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属性是默认值。
1如何定义一个简单元素
<xs:element 此处表示要定义一个元素
name=”color” 表示要定义元素的名称
type=”xs:string” 表示要定义元素的数据类型
default=”red” 表示定义元素的默认值
fixed=”red”/> 表示要定义元素的固定值,此元素只可以取“red”值
以上定义了一个简单元素,元素实例:<color>red</color>
如何定义一个属性
<xs:attribute
name=”birthday” 表示要定义属性的名字
type=”xs:date” 表示要定义属性的数据类型
default=”2001-01-11” 表示要定义属性的默认值
fixed=”2001-01-11” 表示要定义属性的固定值
use=”required”/> 表示此属性是否是必须指定的,即如果不指定就不符合Schema,默认没有use=”required”属性表示属性可有可无
如何定义元素或者属性值的限制
1.最大值最小值限制
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/> 大于等于0,<xs: minExclusive>表示最小值但是不包括指定值
<xs:maxInclusive value="120"/> 小于等于120,<xs: maxExclusive>
</xs:restriction>
</xs:simpleType>
</xs:element>
2.枚举限制,指只能在指定的几个值中取值
<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>
4.字符串长度的限制
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
长度必须是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>
表示长度在5-8之间
分享到:
相关推荐
二、dubbo.xsd概述 Dubbo的`dubbo.xsd`文件,全称为"Dubbo配置scheme文件",其URI为"http://code.alibabatech.com/schema/dubbo",是Dubbo配置的核心文件。它定义了所有Dubbo相关的XML元素和属性,如服务提供者 `...
#### 四、XSD概述 **XSD (XML Schema Definition) 定义:** - **定义:** XSD是一种XML架构定义语言,专门用于描述XML文档的数据结构。 - **作用:** 允许应用程序在处理数据时读取并使用模式信息,控制XML文档中...
以下是一个基本的步骤概述: 1. 加载XSD文件:使用DOM4J的DocumentHelper类的parse方法,传入XSD文件的路径,得到一个SchemaFactory对象。 ```java SchemaFactory schemaFactory = DocumentHelper.createSchema...
RSpec::XSD概述RSpec 匹配器,用于确保针对给定 XSD 验证 XML安装将此行添加到应用程序的 Gemfile 中: group :test do gem 'rspec-xsd'end 然后执行: $ bundle或者自己安装: $ gem install rspec-xsd用法在你的 ...
#### 二、dubbo.xsd 文件概述 在 Dubbo 框架中,`dubbo.xsd` 文件扮演着至关重要的角色。它是一个 XML 架构定义文件,用于验证 Dubbo 配置文件(通常是 `applicationContext.xml` 或者 `dubbo.xml`)的有效性。通过...
#### XSD 概述 **XSD**(XML Schema Definition)是 XML 架构定义语言,用于描述 XML 文档的结构和内容。它是 XML 的一个重要组成部分,可以帮助开发者确保 XML 数据符合预定的格式和规则。 **XSD** 的主要特点...
### XML Schema (XSD) 简明教程知识点概述 #### 第1讲:简介 - **XML Schema**:作为DTD的替代品,XML Schema被设计用于精确描述XML文档的结构和内容。它提供了比DTD更丰富的功能集,尤其是在数据类型支持方面。 - ...
#### 一、概述 XSD(XML Schema Definition)是一种用于验证XML文档格式和结构的标准。它通过定义XML文档的结构来确保文档符合预定的模式,从而帮助开发者检查XML数据的有效性和一致性。XSD文件本身也是基于XML编写...
#### 一、概述 在Eclipse等IDE中开发基于XML技术的应用时,为了提高编码效率和代码质量,我们通常会利用IDE提供的智能提示功能。这需要我们将相关的DTD(Document Type Definition,文档类型定义)或XSD(XML ...
1. **产品概述** SPB-XSD4多通道数显表是一款具有高精度和多功能性的仪表,它可以同时监测和显示多个输入信号,如电流、电压、频率等,适用于各种工业环境中的实时数据监控。这款设备的设计理念是简化操作,提高...
1. **铝合金车梯概述**:介绍铝合金车梯在交通设备中的作用,包括其设计目的、适用场景和优势,如轻质、耐腐蚀、高强度等特性。 2. **XSD-23型号详解**:详细解析XSD-23车梯的结构特点、承载能力、使用范围,以及与...
- **API概述**: 提供了详细的API文档,涵盖了多个包和类,这些API可以帮助开发者利用Schema Infoset Model进行模式的分析和处理。 - **包与类**: - `org.eclipse.emf.mapping.xsd2ecore`: 用于将XSD转换为EMF模型。...
#### 概述 在软件开发过程中,特别是涉及Web服务或需要处理XML数据的应用程序中,经常需要用到XMLBeans工具来将XML Schema (XSD) 文件转换成Java代码并进一步打包成JAR文件。这一过程能够极大地简化应用程序对XML...
通常,描述会包含关于博客内容的简短概述,比如实现的关键技术、步骤或使用场景。 标签“源码”表明博客中可能包含了实际的Java代码片段,读者可以参考这些代码进行学习或者直接应用于自己的项目中。“工具”标签则...
2.1. DTD 的概述 DTD 是一种机制,用于约束 XML 文档的内容。DTD 可以定义元素、属性、实体等内容,从而确保 XML 文档的正确性。 2.2. DTD 的语法 DTD 的语法主要包括两部分:ELEMENT 声明和ATTRIBUTE 声明。...
#### 一、概述 Web Services Description Language (WSDL) 是一种用于描述网络服务的 XML 格式。它定义了服务提供的消息格式、消息如何被交换、服务端点地址以及抽象接口等内容。WSDL 文件是 SOAP 服务的基础之一,...
### XSD(XML Schema Definition)概述 XSD是一种用于描述XML文档结构的语言。通过XSD,我们可以指定XML文档中的元素、属性、数据类型等规则,从而确保XML文档按照预期的方式构建。例如,在提供的XSD文件中,我们...
**SDO概述** SDO(Service Data Object)是Oracle公司推出的一种数据访问接口标准,全称为Service Data Objects,主要用于简化企业级应用中的数据处理。它提供了一种统一的方式来访问和管理来自不同数据源的数据,...