XML学习之做过的实验——实验三

实验三 XML文档中使用Schema

一、实验目的

通过本实验,使学生能够了解并掌握XML Schema的定义方法及其用途

(1)了解并掌握Schema的基本结构

(2)了解并掌握Schema的数据类型

(3)了解并掌握Schema的元素声明

(4)了解并掌握Schema的属性声明

二、实验条件

配置有windows记事本、写字板 或 XMLSpy开发环境的计算机设备。

三、实验原理及相关知识

XML Schema的语法规范

四、实验内容及步骤

1、对以下“book.xml”进行Schema定义(设Schema文件名为“bookinfo.xsd”)

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

<!-- 这是一个用XML描述的例子 -->

<bookcase>

   <book type="教育">

          <b-name>XML实用培训教程</b-name>

          <author>

                 <name>张健飞</name>

                 <E-mail>zjf@163.com</E-mail>

          </author>

          <price>27元</price>

          <publishing-house>

                 <p-name>科学出版社</p-name>

                 <address>北京东皇城根北街16号</address>

                 <zipcode>100717</zipcode>

                 <E-mail>yanmc@bhp.com.cn</E-mail>

          </publishing-house>

   </book>

   <book type="科技">

          <b-name> XML网页制作彻底研究</b-name>

          <author>

                 <name>陈会安</name>

                 <E-mail>cha@163.com</E-mail>

          </author>

          <price>47元</price>

          <publishing-house>

                 <p-name>中国铁道出版社</p-name>

                 <address>北京市宣武区右安门西街8号</address>

                 <zipcode>100054</zipcode>

                 <E-mail>bjb@tqbooks.com.cn</E-mail>

          </publishing-house>

   </book>

</bookcase>

(1)在XMLSpy中新建XML Schema文档“bookinfo.xsd”,其内容如下:

XML Schema定义头部:

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

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

   […………]

</xs:schema>

(2)定义bookcase元素(添加在[…………]处)

<xs:element name="bookcase">

    <xs:complexType>

        <xs:sequence minOccurs="1" maxOccurs="unbounded">

                 <xs:element name="book" type="bookType"/>

        </xs:sequence>  

    </xs:complexType>

</xs:element>

(3)定义bookType类型(里面引用定义authorType, pub-houseType,添加在bookcase元素定义之后)

 <xs:complexType name="bookType">

       <xs:sequence>

                 <xs:element name="b-name" type="xs:string"/>

                 <xs:element name="author" type="authorType"/>

                 <xs:element name="price" type="xs:string"/>

                 <xs:element name="publishing-house" type="pub-houseType"/> 

          </xs:sequence>

    <xs:attribute name="type">

       <xs:simpleType>

                 <xs:restriction base="xs:string">

                <xs:enumeration value="科技"/>

                <xs:enumeration value="教育"/>                  

                 </xs:restriction>

          </xs:simpleType> 

    </xs:attribute>

</xs:complexType>

(4)定义authorType及pub-houseType元素类型(添加在bookType类型定义之后)

    <xs:complexType name="authorType">

          <xs:sequence>

                 <xs:element name="name" type="xs:string"/>

                 <xs:element name="E-mail" type="xs:string"/>

          </xs:sequence>  

   </xs:complexType>

   <xs:complexType name="pub-houseType">

          <xs:sequence>

                 <xs:element name="p-name" type="xs:string"/>

                 <xs:element name="address" type="xs:string"/>

                 <xs:element name="zipcode" type="xs:string"/>

                 <xs:element name="E-mail" type="xs:string"/>

          </xs:sequence>  

   </xs:complexType>

(5)在XMLSpy中创建一个基于“bookinfo.xsd”的XML文件“book-onschema.xml”。

(6)在IE中打开XML Schema文件“bookinfo.xsd”和带有Schema定义的“book-onschema.xml”,观察带有Schema的XML文件显示。

验证:

2、XML文档如下:

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

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

xsi:noNamespaceSchemaLocation="e3-2.xsd">

   <orderItem>

          <id>7-5005-6450-1</id>

          <quatity>3</quatity>

   </orderItem>

   <orderItem>

          <id>7-5005-6450-2</id>

          <customer>xyz</customer>

          <quatity>5</quatity>

   </orderItem>

   <orderItem>

          <id>7-5005-6450-3</id>

          <quatity>7</quatity>

   </orderItem>

</order>

请为以上XML文档编写合适的XML Schema,并根据创建的XML Schema文档对XML进行有效性验证。其中,元素id的取值格式为:

1位数字-4位数字-4位数字-1位数字

e3-2.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="order">
		<xs:complexType>
			<xs:sequence minOccurs="3" maxOccurs="3">
				<xs:element name="orderItem" type="orderItemType"/>
			</xs:sequence>   
		</xs:complexType>
	</xs:element>
	<xs:complexType name="orderItemType">
		<xs:sequence>
			<xs:element name="id" type="idType"/>
			<xs:element name="customer" type="xs:string" minOccurs="0"/>
			<xs:element name="quatity" type="xs:integer"/>
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name="idType">
		<xs:restriction base="xs:string">
			<xs:length value="13"/>
			<xs:pattern value="\d{1}-\d{4}-\d{4}-\d{1}"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>


e3-2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///F:/测试/XML/e3-2.xsd">
	<orderItem>
		<id>7-5005-6450-1</id> 
		<quatity>3</quatity>
	</orderItem>
	<orderItem>
		<id>7-5005-6450-2</id> 
		<customer>xyz</customer>
		<quatity>5</quatity>
	</orderItem>
	<orderItem>
		<id>7-5005-6450-3</id> 
		<quatity>7</quatity>
	</orderItem>
</order>

验证:

3、根据实验一中的“person.xml”文件,编写对应的“person.xsd”文件,并使用XMLSpy 对“person.xsd”和“person.xml”进行有效性性验证,若有错误,按照提示进行修改。

person.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="Persons">
		<xs:complexType>
			<xs:sequence minOccurs="5" maxOccurs="5">
				<xs:element name="person" type="personType"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="personType">
		<xs:sequence>
			<xs:element name="name" type="xs:string"/>
			<xs:element name="age" type="age_type"/>
			<xs:element name="address" type="address_type"/>
			<xs:element name="telephonenumber" type="telephonenumber_type"/>
			<xs:element name="e-mail" type="xs:string"/>
		</xs:sequence>
		<xs:attribute name="sex">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="男"/>
					<xs:enumeration value="女"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:simpleType name="age_type">
		<xs:restriction base="xs:integer">
			<xs:minInclusive value="0"/>
			<xs:maxInclusive value="110"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="address_type">
		<xs:sequence>
			<xs:element name="province" type="xs:string"/>
			<xs:element name="city" type="xs:string"/>
			<xs:element name="street" type="xs:string"/>
			<xs:element name="zip-code" type="zip-code_type">
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name="zip-code_type">
			<xs:restriction base="xs:string">
				<xs:length value="6"/>
				<xs:pattern value="\d{6}"/>
			</xs:restriction>
		</xs:simpleType>
	<xs:simpleType name="telephonenumber_type">
		<xs:restriction base="xs:string">
			<xs:length value="11"/>
			<xs:pattern value="\d{11}"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>



person_onxsd.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///F:/测试/XML/person.xsd">
	<person sex="男">
		<name>小黑</name>
		<age>18</age>
		<address>
			<province>河南省</province>
			<city>郑州市</city>
			<street>文化路街道</street>
			<zip-code>450000</zip-code>
		</address>
		<telephonenumber>18888888888</telephonenumber>
		<e-mail>66667777@qq.com</e-mail>
	</person>
	<person sex="女">
		<name>小红</name>
		<age>17</age>
		<address>
			<province>陕西省</province>
			<city>西安市</city>
			<street>汉城街道</street>
			<zip-code>710000</zip-code>
		</address>
		<telephonenumber>17777777777</telephonenumber>
		<e-mail>55556666@qq.com</e-mail>
	</person>
	<person sex="男">
		<name>小明</name>
		<age>22</age>
		<address>
			<province>湖北省</province>
			<city>武汉市</city>
			<street>金银湖街道</street>
			<zip-code>430000</zip-code>
		</address>
		<telephonenumber>13263637878</telephonenumber>
		<e-mail>77778888@qq.com</e-mail>
	</person>
	<person sex="女">
		<name>小紫</name>
		<age>19</age>
		<address>
			<province>山西省</province>
			<city>太原市</city>
			<street>桥东街道</street>
			<zip-code>030000</zip-code>
		</address>
		<telephonenumber>15566669999</telephonenumber>
		<e-mail>32152659@qq.com</e-mail>
	</person>
	<person sex="男">
		<name>李某某</name>
		<age>20</age>
		<address>
			<province>河南省</province>
			<city>某某市</city>
			<street>某某大街</street>
			<zip-code>456200</zip-code>
		</address>
		<telephonenumber>17355669988</telephonenumber>
		<e-mail>26068823@qq.com</e-mail>
	</person>
</Persons>

验证:

五、思考题及其它

(1)Schema与DTD的共同点和区别是什么?

共同点:都是通过对文档结构的定义和描述来约束XML文件,使之实现规格化的

区别:

①Schema本身也是XML文档,DTD定义跟XML没有什么关系,Schema在理解和实际应用有很多的好处。

②DTD文档的结构是“平铺型”的,如果定义复杂的XML文档,很难把握各元素之间的嵌套关系;Schema文档结构性强,各元素之间的嵌套关系非常直观。

③DTD只能指定元素含有文本,不能定义元素文本的具体类型,如字符型、整型、日期型、自定义类型等。Schema在这方面比DTD强大。

④Schema支持元素节点顺序的描述,DTD没有提供无序情况的描述,要定义无序必需穷举排列的所有情况。Schema可以利用xs:all来表示无序的情况。

⑤对命名空间的支持。DTD无法利用XML的命名空间,Schema很好满足命名空间。并且,Schema还提供了include和import两种引用命名空间的方法。

(2)Schema符合XML语法有什么优点?

①不必学习新的语言

②可使用 XML 编辑器来编辑 Schema 文件

③可使用 XML 解析器来解析 Schema 文件

④可通过 XML DOM 来处理 Schema

⑤可通过 XSLT 来转换 Schema

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[实验目的] 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、付费专栏及课程。

余额充值