xml schema

XML Schema入门

XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性

 

XML Schema VS DTD

XML Schema符合XML语法结构。 

DOMSAXXML API很容易解析出XML Schema文档中的内容。 

XML Schema对名称空间支持得非常好。 

XML SchemaXML DTD支持更多的数据类型,并支持用户自定义新的数据类型。 

XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。

XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD

 

Schema约束快速入门

XML Schema 文件自身就是一个XML文件,但它的扩展名通常为.xsd

一个XML Schema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档。

XML文件一样,一个XML Schema文档也必须有一个根结点,但这个根结点的名称为Schema

编写了一个XML Schema约束文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,在XML Schema技术中有一个专业术语来描述这个过程,即把XML Schema文档声明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URI(即名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束。

 

Schema入门案例

book.xsd文件

<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
					  targetNamespace="http://www. itcast.cn"
					  elementFormDefault="qualified">
	<xs:element name='书架' >
		<xs:complexType>
			<xs:sequence maxOccurs='unbounded' >
				<xs:element name='书' >
					<xs:complexType>
						<xs:sequence>
							<xs:element name='书名' type='xs:string' />
							<xs:element name='作者' type='xs:string' />
							<xs:element name='售价' type='xs:string' />
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

<?xml version="1.0" encoding="UTF-8"?>

<itcast:书架 xmlns:itcast="http://www.itcast.cn"
				xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
				xsi:schemaLocation=“http://www.itcast.cn book.xsd">

	<itcast:书>
		<itcast:书名>JavaScript网页开发</itcast:书名>
		<itcast:作者>张孝祥</itcast:作者>
		<itcast:售价>28.00元</itcast:售价>
	</itcast:书>
</itcast:书架>

 

 

XML Schema中,每个约束模式文档都可以被赋以一个唯一的名称空间,名称空间用一个唯一的URIUniform Resource Identifier,统一资源标识符)表示。 在Xml文件中书写标签时,可以通过名称空间声明(xmlns),来声明当前编写的标签来自哪个Schema约束文档。如:

<itcast:书架 xmlns:itcast=http://www.itcast.cn>

<itcast:>……</itcast:>

</itcast:书架>

 此处使用itcast来指向声明的名称,以便于后面对名称空间的引用。

注意:名称空间的名字语法容易让人混淆,尽管以 http:// 开始,那个 URL 并不指向一个包含模式定义的文件。事实上,这个 URLhttp://www.itcast.cn根本没有指向任何文件,只是一个分配的名字。

 

 

为了在一个XML文档中声明它所遵循的Schema文件的具体位置,通常需要在Xml文档中的根结点中使用schemaLocation属性来指定,例如:

<itcast:书架 xmlns:itcast="http://www.itcast.cn"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation=http://www.itcast.cn book.xsd">

schemaLocation此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置,两者之间用空格分隔。

注意,在使用schemaLocation属性时,也需要指定该属性来自哪里。

 

使用默认名称空间 :

基本格式:

xmlns="URI"  

举例:

	<书架 xmlns="http://www.it315.org/xmlbook/schema"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation=“http://www.itcast.cn book.xsd">
		<书>
		<书名>JavaScript网页开发</书名>
		<作者>张孝祥</作者>
		<售价>28.00元</售价>
		</书>
	<书架>


 

使用名称空间引入多个XML Schema文档 :

文件清单:xmlbook.xml

<?xml version="1.0" encoding="UTF-8"?>

<书架 xmlns="http://www.it315.org/xmlbook/schema" 
	xmlns:demo="http://www.it315.org/demo/schema"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.it315.org/xmlbook/schema 				http://www.it315.org/xmlbook.xsd 
		http://www.it315.org/demo/schema http://www.it315.org/demo.xsd">
	<书>
		<书名>JavaScript网页开发</书名>
		<作者>张孝祥</作者>
		<售价 demo:币种=”人民币”>28.00元</售价>
	</书>
</书架>


 

不使用名称空间引入XML Schema文档 :

件清单:xmlbook.xml

<?xml version="1.0" encoding="UTF-8"?>
<书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="xmlbook.xsd">
	<书>
		<书名>JavaScript网页开发</书名>
		<作者>张孝祥</作者>
		<售价>28.00元</售价>
	</书>
</书架>


 

 

XML Schema文档中声明名称空间:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

       targetNamespace="http://www. itcast.cn"

       elementFormDefault="qualified">

<xs:schema>

 

targetNamespace元素用于指定schema文档中声明的元素属于哪个名称空间。

elementFormDefault元素用于指定,该schema文档中声明的根元素及其所有子元素都属于targetNamespace所指定的名称空间。

 

具体文档可以查询w3cxml schema文档

 

 

  

 

XML SchemaXML模式,是一种基于XML语法的用于定义XML文档结构和数据类型的机制。 ### 语法规则 XML Schema语法基于XML,需要遵循XML的基本规则。例如一个简单的XML Schema示例如下: ```xml <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="age" type="xs:integer"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> ``` 此示例定义了一个名为`person`的元素,它包含`name`(字符串类型)和`age`(整数类型)两个子元素 [^2]。 ### DTD对比优势 在数据类型支持方面,尽管DTD在早期XML应用中发挥了重要作用,但随着XML技术的发展,XML Schema逐渐成为数据类型定义的首选。XSD的强大功能和灵活性使得它能够在广泛的业务场景中满足复杂的数据处理需求 [^3]。 ### 局限性 XML Schema 1.0没有提供任何支持共同约束的功能。在将XML文档加载到内存后,用户有时必须编写Java™或C代码来进行检查,这会损害可维护性,并使架构的互操作性降低。一些用户从其他XML验证语言(例如Schematron和Relax NG)寻求帮助,以获取共约束支持,这使他们本来基于XSD的体系结构变得复杂 [^4]。 ### 使用意义 在实际开发中,理解并熟练应用XML Schema和JAXB,可以极大地提高数据处理的效率和质量。同时,合格XML的使用习惯也能避免在数据交换中可能出现的混淆和错误 [^1]。 ### 使用方法 使用XML Schema时,首先要编写符合其语法规则的模式文件,然后在XML文档中引用该模式文件,以验证XML文档是否符合模式定义。例如在XML文档中可以通过`xsi:schemaLocation`属性来引用对应的Schema文件。 ### 应用场景 XML Schema适用于需要精确控制XML文档结构和数据类型的场景,如企业级应用的数据交换、Web服务的数据传输等,能够确保数据的准确性和一致性,满足复杂的数据处理需求 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值