编号:
XML技术与应用实验报告
系别:管理学院
专业:电子商务
学生姓名:李伟
学号:20074682
指导教师:
2009年6月1日
实验一创建良构的XML文档和验证XML文档合法性一、实验目的
通过本实验,使学生
(1)掌握XML文档的基本语法;
(2)熟悉XML文档编辑、解析、浏览工具;
(3)能够得到格式良好的XML文档并进行有效性验证。
二、实验要求
(1)能熟练下载并安装XML Spy ;
(2)能在记事本、XML Spy中创建学生信息的XML文件;
(3)能在XML Spy中验证XML文件格式的良构性、有效性;
(4)能在浏览器中打开XML文件,体会其良构性。
三、实验原理
(1)XML命名空间是XML文档中的所有标记定义的来源说明;
(2)XML元素定义不能交叉,必须完全嵌套或完全不嵌套;
(3)XML元素标记最好使用与内容相关的定义。
四、实验内容
题目二
根据下列要求,编写XML文档:
(1)文档内容要求:08届(班级(学生信息(学号、姓名、电子邮件、QQ、通信地址(省份(或州)、城市、街道、邮政编码))));
(2)要求建立至少2个班级,每个班级至少2个学生的信息;
(3)XML文档中包含以下技术的使用:
a、5个预定义字符实体的使用;
b、CDATA字符定界符的使用;
c、属性的简单使用;
d、注释的使用;
e、空元素的使用。
相关代码:
href="file:///D:/My_Program/XML/TEST_2010/TEST_MY/student.css"?>
Grid:
五、思考练习
(1)如果允许XML中的元素相互交叉,其缺点是什么?
缺点:使得XML文档结构混乱,不便于交互和阅读。
(2)XML的标记与关系数据库中的列名有什么区别?
区别:①XML标记可以嵌套另一个标记,数据库列名不可以嵌套。
②XML标记存一个元素信息,数据库存多个。
③XML标记是标记符号,数据库列名是索引名。
六、实验总结
通过这节课,初步掌握了XML文档的格式,以及XMLSPY的使用。认识到XML文档可以视为一张二维表,是不同数据库平台之间的数据交互通道。
实验二在XML文档中使用DTD
一、实验目的
通过本实验,使学生
(1)能够了解并掌握XML DTD的定义方法及其用途;
(2)掌握DTD元素声明的基本语法;
(3)掌握DTD属性声明的基本语法;
(4)掌握DTD实体声明的基本语法;
(5)掌握DTD标记声明的基本语法;
(6)掌握XML Spy中基于DTD的XML文件输入。
二、实验要求
(1)能参照示例XML文件进行对应的XML DTD定义;
(2)能利用DTD对XML文件进行验证。
三、实验原理
(1)XML DTD是对XML结构进行定义的机制;
(2)XML DTD本身不符合XML语法。
四、实验内容
2.题目二
为实验一的题目二设计的XML文档,编写DTD文档;使得XML文档中包含以下技术
的使用:
(1)内部一般实体的使用;
(2)外部参数实体的使用;
(3)属性声明的使用(如:CDATA类型、枚举类型、ID类型、IDREF类型、ENTITIS类型)。相关代码:
DTD文档Gird
五、思考练习
(1)为什么要定义DTD?
为了验证XML文档的良构性,方便规格化XML文档。
(2)DTD不符合XML语法有什么缺点?
DTD不遵守XML语法,写XML一个语法,DTD又一个语法,这样就加大了XML 开发的复杂度。在写复制的XML时,DTD的开发成为一种累赘。
六、实验总结
通过本节课,学会了DTD文档的书写,以及知道了DTD对于早期XML的作用,同时也了解了DTD文档的局限性,并文下一节课Schema做了准备。
实验三在XML文档中使用XML Schema
一、实验目的
通过本实验,使学生能够
(1)了解并掌握XML Schema的定义方法及其用途;
(2)了解并掌握Schema的基本结构;
(3)了解并掌握Schema的数据类型;
(4)了解并掌握Schema的元素声明;
(5)了解并掌握Schema的属性声明;
(6)了解并掌握XML Spy中基于Schema的XML文件输入。
二、实验要求
(1)能参照示例XML文件进行对应的XML Schema定义;
(2)能利用Schema对XML文件进行验证。
三、实验原理
(1)XML Schema是对XML结构进行定义的另一种机制;
(2)XML Schema本身符合XML语法。
四、实验内容
题目二
为实验一的题目二设计的XML文档,编写Schema文档;使得Schema文档中包含以下技术的使用:
(1)简单类型元素的定义与应用;
(2)复杂类型元素的定义与应用;
(3)属性声明的使用。
相关代码:
elementFormDefault="qualified" attributeFormDefault="unqualified"> element
Schema树形图
五、思考题
(1)Schema与DTD的共同点和区别是什么?
XMLSchema和DTD都是用来定义各种文件中XML标记的使用规范.
XMLSchema是标准的XML文件,而DTD则使用自己的特殊语法,因此,只需要知道XML的语法规则就可以编写Schema了,不需要再学习其它语法规则. 可以使用相同的处理器来解读, XML文件与XML Schema文件. XML Schema 利用命名空间将文件中特殊的节点与Schema说明相联系,一个XML文件可以有多个对应的Schema ,若是DTD 的话,一个XML文件只能有一个相对应的DTD文件. XMLSchema 的内容模型是开放的,可以随意扩充,而DTD则无法解读扩充的内容. DTD只能把文件类型定义为一个字符串,而XML Schema 却允许把文件类型定义为整数,浮点数,字符串,布尔值或其他各各数据类型,而无须重新定义. XMLSchem 相对DTD的明显优势是XMLSchema 文件本身也是XML文件,而不是像DTD那样使用。
(2)Schema符合XML语法有什么优点?
只需要知道XML的语法规则就可以编写Schema了,不需要再学习其它语法规则.
可以使用相同的处理器来解读XML文件与XML Schema文件.
(3)命名空间和属性的作用。
为了识别不同路径或不同文档中相同的标记。
六、实验总结
经过这节课,学会了Schema的书写格式,同时也了解了Schema和DTD的异同点,相信,不久Schema会代替DTD的。
实验四XML的样式单XSLT
一、实验目的
通过本实验,使学生能够
(1)掌握使用XSL显示XML文件的基本方法;
(2)理解CSS与XSL 的区别。
二、实验要求
(1)能参照示例XML文件进行对应的XML Schema定义;
(2)能利用Schema对XML文件进行验证。
三、实验原理
(1)XSL实际包含三方面的内容:XSLT,XPath以及XSL格式化对象;
(2)XSL的定义最终是由XSLT来执行完成的;
(3)XPath对XML文件片段进行查找、定位;
(4)格式化对象将XSL转换结果进行显示。
四、实验步骤
题目二
为实验一的题目二设计的XML文档,编写XSL文档;要求以表格的形式输出学生姓名、学号、电子邮件、QQ和通信地址。
相关代码:
xmlns:fn="https://www.wendangku.net/doc/982988539.html,/2005/xpath-functions">
stuID | name | address | ||
效果图:
五、思考题
(1)XSLT处理上述“booklist.xsl”的过程是什么?IE中有XSLT处理器吗?
XSL在转换XML文档时分为明显的两个过程,第一转换文档结构;其次将文档格式化输出。在转换过程中,XSLT 使用XPath 来定义源文档中可匹配一个或多个预定义模板的部分。一旦匹配被找到,XSLT 就会把源文档的匹配部分转换为结果文档。IE中不存在处理XSLT。
(2)如果只需要显示其中计算机类图书,则对应XSL应怎样实现?价格高于12元的呢?
六、实验总结
通过本实验,学习到了XSLT的书写格式,和XSLT是怎么把XML格式显示的。XSL T 用于将一种XML 文档转换为另外一种XML 文档,或者可被浏览器识别的其他类型的文档,比如HTML 和XHTML。通常,XSLT 是通过把每个XML 元素转换为(X) HTML 元素来完成这项工作的。通过XSLT,您可以向或者从输出文件添加或移除元素和属性。您也可重新排列元素,执行测试并决定隐藏或显示哪个元素,等等。
实验五级联式样式表CSS
一、实验目的
(1)了解并掌握CSS文档的基本语法及创建步骤;
(2)了解并掌握XML文档中使用CS S文档的引入式方法;
(3)了解并掌握XML文档中使用CSS文档的嵌入式方法。
二、实验要求
(1)能基于示例XML文件进行所要求的CSS定义;
(2)能利用CSS文档对XML文档进行显示。
三、实验原理
(1)CSS是对XML元素的显示进行定义的方法;
(2)CSS不符合XML语法。
四、实验内容
由于先前的实验五题目二已经不知所踪,下面给出的CSS是基于实验一student. xml的:
grade
{
border: solid;
border-color:Silver;
border-width: 10px;
width:400px;
height:220px;
cursor:move;
background:url(F:\Ph otos\0003.jpg) no-repeat; }
class
{
border: solid;
border-color:black;
border-width: 2px;
font-size: 14pt;
width:100%;
display:table;
}
student
{
width:100%;
height:25%;
}
stuID
{
font-family:Georgia,
serif;
font-size:25pt;
color:yellow;
width:2;
width:25%;
}
name
{
font-family:
Trebuchet MS;
font-size:20pt;
color:#FF99FF;
border: solid;
border-color:Silver;
border-width: 2px;
width:25%;
}
{
border: solid;
border-color:
#FFFFFF;
border-width: 2px;
font-family:Times,
TimesNR;
width:40%;
}
{
width:25%;
}
address
{
border: solid;
border-color:Silver;
border-width: 2px;
font-family:
Trebuchet MS;
font-size:14pt;
color:#FFFFFF;
width:25%;
height:20%;
}
五、思考题
(1)CSS 的基本作用是什么? 设置XML 文档的显示格式。
(2)CSS 中元素显示定义之间有嵌套关系吗?
就是嵌套关系的。如果子属性没有设置,就默认父属性。
六、实验总结
经过这节课,基本了解了CSS 的书写格式。比较遗憾的是在设计班级特色非规格化表格的时候没有打到预想的效果。
实验六 DOM 技术应用
一、实验目的
1、了解DOM 技术的基本对象;
2、掌握DOM 技术的常用对象的基本属性及方法;
3、掌握DOM 技术在Java 、C#语言里的简单使用。
二、实验要求
1、能使用DOM 接口对XML 文档进行解析;
2、能使用DOM 接口创建XML 文档。
三、实验原理
1、DOM 模型在内存中为XML 文档建立逻辑形式的节点树;
2、DOM 接口是W3C 组织提供的操作XML 文档的接口。
四、实验内容
// DOMSample.java
效 果 图
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import https://www.wendangku.net/doc/982988539.html,dNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import https://www.wendangku.net/doc/982988539.html,.apache.xerces.internal.parsers.DOMParser;
public class DOMSample {
public static void main(String[] argv) {
try {
if (argv.length != 1) {
System.err.println("Usage: java DOMSample filename");
System.exit(1);
}
BufferedReader in = new BufferedReader(new FileReader(argv [0]));
DOMParser parser = new DOMParser();
parser.parse(new InputSource(in));
Document doc = parser.getDocument();
System.out.println("元素是: ");
printElements(doc);
System.out.println();
System.out.println("每个元素的属性是: ");
printElementAttributes(doc);
} catch (SAXException s) {
System.out.println(s.toString());
} catch (IOException e) {
System.out.println(e.toString());
}
}
static void printElements(Document doc) {
NodeList nl = doc.getElementsByTagName("*");// “*”表示匹配所有标记。
Node n;
for (int i = 0; i < nl.getLength(); i++) {
n = nl.item(i);
System.out.print(n.getNodeName() + " ");
}
}
static void printElementAttributes(Document doc) {
NodeList nl = doc.getElementsByTagName("*");
Element e;
Attr attr;
NamedNodeMap nnm;
String attrname;
String attrval;
int i, len;
len = nl.getLength();
for (int j = 0; j < len; j++) {
e = (Element) nl.item(j);
System.out.println(e.getTagName() + ":"
+ e.getFirstChild().getNodeValue());
nnm = e.getAttributes();
if (nnm != null) {
for (i = 0; i < nnm.getLength(); i++) {
attr = (Attr) nnm.item(i);
attrname = attr.getName();
attrval = attr.getValue();
System.out.println(" 属性是:" + attrname + " = " + att rval);
}
}
}
}
}
//DOMGenerate.java
//实验6_2在Eclipse平台编译时会产生部分类或接口无法解析的问题,
//现将指导书上的代码更正如下,主要改动了前面import的内容
import org.w3c.dom.*;
import https://www.wendangku.net/doc/982988539.html,.apache.xerces.internal.dom.DocumentImpl;
import https://www.wendangku.net/doc/982988539.html,.apache.xml.internal.serialize.OutputFormat;
import https://www.wendangku.net/doc/982988539.html,.apache.xml.internal.serialize.XMLSerializer;
import java.io.*;
public class DOMGenerate {
public static void main( String[] argv ) {
try {
Document doc= new DocumentImpl();
Element root = doc.createElement("person"); // Create Roo t Element
Element item = doc.createElement("name"); // Create ele ment
item.appendChild( doc.createTextNode("Jeff") );
root.appendChild( item ); // atach element to Root e lement
item = doc.createElement("age"); // Create another E lement
item.appendChild( doc.createTextNode("28" ) );
root.appendChild( item ); // Attach Element to previous e lement down tree
item = doc.createElement("height");
item.appendChild( doc.createTextNode("1.80" ) );
root.appendChild( item ); // Attach another Element - grandaugther
doc.appendChild( root ); // Add Root to Document OutputFormat format = new OutputFormat( doc ); //Seriali ze DOM
// 创建一个File对象,代表DOM Tree所包含的数据的输出介质,这是一个XML文件。
File f = new File ("xuser.xml");
// 创建文件输出流对象fos,请留意构造函数的参数。
FileOutputStream fos=new FileOutputStream(f);
XMLSerializer serial = new XMLSerializer(format );
serial.setOutputByteStream(fos);
// 串行化输出结果。
serial.asDOMSerializer().serialize(doc);
} catch ( Exception ex ) {
ex.printStackTrace(); }
}
}
五、思考题
(1)如何为题目2所建立的XML文档增加学生节点的子节点“专业”?
在跟结点下添加。
(2)DOM解析器与SAX阅读器的原理与性能有何不同?
sax是事件驱动;适用于大型的xml文档,文档使用频率较小;标准功能比较少;dom易于进行xml文档的增删减;适用中小型的XML文档,文档使用比较频繁;拥有较全面的标准功能。
六、实验总结
经过这次实验,学习到了怎么实验DOM,知道了怎么把数据库的数据取出来和怎么样把XML的数据存到数据库里。
实验七数据岛
一、实验目的
(1)了解并掌握内部数据岛的定义及使用方法;
(2)了解并掌握外部数据岛的定义及使用方法。
二、实验要求
(1)实现一个内部数据岛访问的HTML网页;
(2)实现一个有外部数据岛访问的HTML网页。
三、实验原理
(1)数据岛是存在于HTML网页中的XML代码段;
(2)数据岛通过在HTML网页中使用
四、实验步骤
///XML文件
输入以下访问外部数据岛的HTML文件friends.html
实验总结:
经过本实验,进一步了解了数据岛的用法,包括外部数据岛和内部数据岛。
内部数据岛,内嵌于HTML里,查询速度快,适合小量常用的数据,且这些数据为公开数据。
内部数据岛,作为一个单独的XML存储数据,其查询速度有所降低,适合量大的数据集合,且隐藏数据多数存储在外部数据岛。
实验八使用XML开发Web Service
一、实验目的
(1)了解并掌握Web Service的创建方法;
(2)了解并掌握Web Service的调用方法。
二、实验要求
(1)创建一个带有多个参数的Web服务;
(2)创建Web窗体来调用已创建的Web服务。
三、实验原理
(1)Web服务一种部署在Web上的对象;
(2)Web服务是用标准的、规范的基于XML的WSDL语言描述的。四、实验步骤
Web服务代码:
在SumAddService.cs中输入以下代码:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
[WebService(Namespace = "https://www.wendangku.net/doc/982988539.html,/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class SumAddService : System.Web.Services.WebService { public SumAddService() {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
//Web服务方法Add返回两个整型参数之和
[WebMethod]
Public int add(int x,int y)
{
return (x+y);
}
//Web服务方法Average返回三个整型参数的平均值
[WebMethod]
Public float Average(float x,float y,float z)
{
Return (x+y+z)/3;
}
}
Web客户端:
WSCustomer.aspx如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WSCustomer.aspx.cs" Inherits="webdemo.WSCustomer" %>
"https://www.wendangku.net/doc/982988539.html,/TR/xhtml1/DTD/xhtml1-transitional.dtd">
(5) WSCustomer.aspx.cs如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections;
using https://www.wendangku.net/doc/982988539.html,ponentModel;
using System.Drawing;
using System.Web.SessionState;
namespace webdemo
{
public partial class WSCustomer : System.Web.UI.Page {
myws.SumAddService customer; //声明Web服务代理类
protected void Page_Load(object sender, EventArgs e) {
customer = new myws.SumAddService(); //实例化Web服务代理类
if (!Page.IsPostBack) {
Label5.Visible = false; TextBox3.Visible = false;
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e) {
// CODEGEN: 该调用是https://www.wendangku.net/doc/982988539.html, Web 窗体设计器所必需的。
InitializeComponent();
base.OnInit(e);
}
/// 设计器支持所需的方法- 不要使用代码编辑器修改此方法的内容。
private void InitializeComponent() {
this.DropDownList1.SelectedIndexChanged += new
System.EventHandler(this.DropDownList1_SelectedIndexChanged);
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Button1_Click(object sender, System.EventArgs e) {
if (DropDownList1.SelectedIndex == 0)
//当选择运算为加法时,调用Web服务方法Add。注意进行数据类型的转换
Label7.Text = customer.Add(Convert.ToInt32(TextBox1.Text),
Convert.ToInt32(TextBox2.Text)).ToString();
else //当选择运算为平均值时,调用Web服务方法Average。注意进行数据类型的转换Label7.Text = customer.Average(Convert.ToInt32(TextBox1.Text),
Convert.ToInt32(TextBox2.Text), Convert.ToInt32(TextBox3.Text)).ToString();
}
private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e) { if (DropDownList1.SelectedIndex == 0) { //当选择运算为加法时,隐藏第3个文本框Label5.Visible = false; TextBox3.Visible = false;
}
else { //当选择运算为平均值时,显示第3个文本框
TextBox3.Visible = ture;
}
}
} }