xml基于Schema的XML文档有效性验证

实验环境:xmlspy2013 firefox;

1、问题:

    

   对于下列XML文档

        <?xml version="1.0" encoding="GB2312" ?>

        <Orders>

<Order orderID="A001" orderDate="2009-01-20">

<name>玩具</name>

<number>10</number>

<city>北京</city>

<zip>100000</zip>

</Order>

<Order orderID="A002" orderDate="2009-03-20">

<name>文具</name>

<number>5</number>

<city>青岛</city>

<zip>266000</zip>

</Order>

</Orders>

       创建一个Schema文档,并应用于给定的XML文档。要求如下:

l  Order元素在XML文档中可以出现多次,但是至少要出现一次。

l  OrderID的值的格式必须是AXXX,其中X为0~9的数字。

l  number的值的格式要在1~99之间。

l  zip元素的内容的格式必须是XXXXXX,其中X为0~9的数字。

 

2、解决方案步骤:

    

NO.1:将该实验内容用xmlspy2018建立xml文件

NO.2:用xmlspy的DTD/Schema菜单项中的GenerateDTD/Schema功能,选择W3C Schema单选按钮,单击ok,自动生成后缀名为xsd的的Schema文件。

NO.3:Order元素在文档中出现一次或多次,即在Orders的元素中设置

minOccurs=”1” maxOccurs=”unbounded”。

NO.4:OrderID是属性,必须在attribute中设置。<xs:patternvalue=”A\d{3}”>

NO.5:number是元素内容的值,在element中设置<xs:minInclusive=”1”>

<xs:maxInclusice=”99”>

NO.6:设置zip元素的内容的值,在element中设置为<xs:patternvalue=”\d{6}”>


3、调试过程及其显示结果:

    


输出schema文件*.xsd的显示结果:

    

<?xml version="1.0" encoding="UTF-8"?>
<!-- W3C Schema generated by XMLSpy v2018 (http://www.altova.com) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	
	<xs:element name="Orders">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Order" minOccurs="1" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	
	
	<xs:element name="Order" >
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="name"/>
				<xs:element ref="number"/>
				<xs:element ref="city"/>
				<xs:element ref="zip"/>
			</xs:sequence>
			<xs:attribute name="orderID" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:pattern value="A\d{3}"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="orderDate" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:date">
						<xs:enumeration value="2009-01-20"/>
						<xs:enumeration value="2009-03-20"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	
	
	
	
	<xs:element name="zip">
		<xs:simpleType>
			<xs:restriction base="xs:int">
				<xs:pattern value="\d{6}"/>
				<xs:enumeration value="266000"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
	<xs:element name="city">
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="北京"/>
				<xs:enumeration value="青岛"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
	<xs:element name="name">
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="文具"/>
				<xs:enumeration value="玩具"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
	<xs:element name="number">
		<xs:simpleType>
			<xs:restriction base="xs:byte">
				<xs:minInclusive value="1"/>
				<xs:maxExclusive value="99"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
</xs:schema>

至此,基于schema的xml格式验证成功。


4、调试过程中所要记住的问题:    

XML Schema的数据类型

包括Primitive原始数据类型(string,dateTime等)

包括Derived派生数据类型(intrger,int,time,date等)

包括simpleType元素的常用字元素(enumeration枚举,maxInclusive,Pattern等)

了解Schema的文档结构及其定义。

命名空间为:http://www.w3c.org/2001/XMLSchema

[实验目的] 1、学习如何使用XMLSPY集成开发环境完成XML Schema相关的开发工作。 2、掌握XML Schema与DTD之间的区别,能够完成两者之间的转换;掌握在XML Schema中如何定义元素和属性,如何使用限制、列表和合并派生自己的简单数据类型,如何定义复杂数据类型,全局/局部元素和数据类型之间的区别;如何将XML Schema文档关联到XML实例数据文档,并完成文档有效性验证。 3、掌握如何准确定义数据之间的参照完整性约束,如何在模式中使用多态性支持,如何在文档中定义空值等等。 [实验内容和步骤] 1、使用XMLSPY集成开发环境,新建XML Schema文档,在各种不同的编辑视图中尝试采用不同的方式完成XML Schema文档的编辑和查看;并使用XMLSPY提供的便利,建立XMLSchema两者之间的关联,进行XML文档的良构以及有效性验证。 2、严格按照下图给出的文档模型,在XML Schema编辑环境的Schema视图中完成book.xsd的编写(不要使用Text视图进行编写): 在上图中,没有指定简单类型元素和属性的数据类型,请根据合理的情况,完成数据类型的创建(至少使用到限制方式中的三种以上的限制方面),请在IDE的Details视图->type和Facets中完成上述任务。 在上图中,有三个title元素分别表示book、section和figure的标题,请定义下述类型: titleType:1-100个字符的文本; bookTitleType:titleType类型限制派生的子类型,要求取枚举值“Data On the Web”、“TCP/IP Illustrated”等; sectionTitleType:titleType类型限制派生的子类型,要求必须形如“1.xxxx”、“1-1.xxxx”等等(表示第一节、第一节下面的第一节等等,注意section是递归的形式); figureTitleType:titleType类型限制派生的子类型,要求必须形如“1-1.xxxx” 、“1-1-1.xxxx”(表示第一节中的第一个图、第一节下面的第一节的第一个图等等); 然后编写book.xml,并使用多态性(即所有title的类型均为titleType,而数据实例中指明具体类型),请确保通过文档有效性验证。 3、在上次的DTD实验中,我们编写了SpyBase1.xml、SpyBase2.xml、以及SpyBase1.dtd和SpyBase2.dtd,这次需要完成SpyBase1.xsd和SpyBase2.xsd,建立模式与数据之间的关联,并进行文档有效性验证。在编写的XSD文档SpyBase1.xsd中,要求使用key/keyref描述数据的实体完整性以及数据之间的参照完整性(SpyBase2.xml不需要,因为已经使用嵌套消除了参照关系)。 [实验思考] 与ID/IDREF相比,key/keyref有哪些优点,在使用上有何不同? 假设SpyBase1.xml中的alias、mission、spy来自不同的命名空间中,如何在Schema中对其进行限定,请在XMLSPY中完成相应的xsd文档?修改SpyBase1.xml,并验证新的SpyBase1_2.xsd是否正确? [提交时间及内容] 最后提交时间 2013年?月?日 提交内容 提交book.xsd、book.xml(使用多态)。 提交SpyBase1. xsd、SpyBase2. xsd。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值