XML与Web_12 XML(五)

1. XML数据库

1.1关系型数据库

  • 基本概念:
    – 关系:一张二维表,关系名即表名。
    – 元组:二维表中的一行,记录。
    – 属性:二维表中的一列,字段。
    – 域:属性的取值范围. – 关键字:可以唯一标识元组的属性,主键
    – 关系模式:表结构。
  • 优点:
    – 容易理解:二维表结构。
    – 使用方便:通用的SQL语言使得操作关系型数据库非常方便。
    – 易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大降低了数据冗余和数据不一致的概率

1.2XML文档类型

  • 面向文档处理的XML文档
    以复杂或无规则的结构和混合内容为特征
    文档处理侧重于给用户提供信息的最终表示
  • 面向数据处理的文档
    特征是高度有序的结构,并且同时带有那些数据结构的多个副本
    文档处理通常侧重于应用程序间的数据交换

1.3三种XML数据库

XML Enabled Database(XEDB) :在原有的数据库系统上扩充对XML数据的处理
Native XML Database(NXD):以自然的方式处理XML数据,以XML文档作为基本的逻辑存储单位,专门设计适用的数据模型和处理方法
Hybrid XML Database(HXD),即混合XML数据库

1.3.1XML Enabled Database(XEDB)

  • 原理
    – 把XML查询要求转换为数据库的查询表达,如SQL,由数据库的查询引擎优化查
    询表达,产生查询执行计划并执行,最后再将查询的结果转换为XML数据。
    – 一定程度上解决了查询复杂性的要求
    – 多次转换带来效率的降低和查询语义的混淆,即阻抗失配的问题
    – 一些现有的商业数据库管理系统(如SQL Server、 Oracle等)扩充了处理XML数据的功能。
  • 优点
    – 沿用原有传统数据库技术,只是稍加改变,就可以支持XML应用。
    – 传统数据库技术很成熟 ,例如并发控制、事务等
    – 传统数据库知识和经验依然有效,用户不需要为了应用XML而再去学习一套新的数据库技术
  • 缺点
    – XML文档和数据库之间的模式转换复杂,在前期开发阶段需要投入很大
    – XML文档存入到数据库时需要将其"打碎",取出时需要"组合",不仅耗时,而且文档的格式可能会不同
    – 对"以文档为中心"、格式复杂的XML文档处理性能较差
    – 在采纳XML技术标准方面较落后

1.3.2Native XML Database(NXD)

  • 原理
    – 系统直接存储XML数据;
    – 支持XML数据的自描述性、半结构化和有序性;
    – 直接支持XML查询语言,如XQuery,XPath
  • 优点
    – XML文档存取无需模式转换,存取速度快
    – 对格式复杂的XML文档支持比XED要好
    – 支持大部分的最新的XML技术标准
  • 缺点
    – 在传统数据库技术方面比较薄弱,没有经过时间的考验
    – 知识比较新,相应的支持人员和文档资源都比较少
    – 应用范围仅局限在XML应用领域中

1.4四个主流的Native-XML数据库

  • Tamino数据库系统
  • eXist数据库系统
  • Xindice数据库
  • Berkeley DB XML嵌入式数据库

2. 数据岛

  • XML 数据岛(XML Data Islands)是嵌入 HTML 页面中的 XML 数据
  • XML 数据岛只在 Internet Explorer 浏览器中有效
  • 可以在 HTML 中使用 JavaScript 和 XML DOM 来解析并显示 XML,从而代替数据岛

2.1XML 数据岛的应用

把 XML 文档绑定到 HTML 文档中的一个 标签,id 属性定义数据岛的标识符,而 src 属性指向 XML 文件

<html>
<body>
<xml id="ac" src="12-2.xml"></xml> 
<table border="1" datasrc="#ac"> <tr>
<td><span datafld="name"></span></td>
<td><span datafld="location"></span></td>
<td><span datafld="size"></span></td>
<td><span datafld="activity"></span></td>
</tr>
</table>
</body>
</html>

2.2行为机制(behaviors)

– Behaviors 是通过使用 CSS 样式向 XML (或 HTML )元素添加行为的一种方法
– 只有 Internet Explorer 支持 behavior 属性
– 可以使用 JavaScript 和 XML DOM (或 HTML DOM)来代替

<html>
<head>
<style type="text/css">
h1 { behavior: url(12-3.htc) }
</style>
</head>
<body>
<h1>Mouse over me!!!</h1>
</body>
</html>
<attach for="element" event="onmouseover" handler="hig_lite" />
<attach for="element" event="onmouseout" handler="low_lite" />
<script type="text/javascript">
function hig_lite(){
element.style.color='red';
}
function low_lite(){
element.style.color='blue';
}
</script>

2.3数据岛的好处

  • 提供给客户结构化的数据视图
  • 集成不同来源的结构化数据
  • 通过粒度更新来提高性能
  • 网页界面修改不易破坏数据

2.4将HTML元素和XML文档绑定

  • 首先,并非每个HTML元素都能绑定
  • 其次,并非每个HTML元素都能更新数据岛
  • 第三,并非每个HTML元素都能将数据岛的节点文本呈现为HTML
  • 可供绑定的HTML元素共分为两大类:
    – 单值对象(Single-valued Consumer)
    – 表对象(Tabular Consumer)

2.5支持DSO的HTML元素

在这里插入图片描述
在这里插入图片描述

2.6DSO和XSL切换样式

  • 数据岛可以作为XML数据的容器
  • 数据岛还可以作为XSL的容器
  • 使用脚本将数据源对象与样式单相关联

3. JSON

  • JavaScript Object Notation(JSON)
  • 一种基于JavaScript语言的轻量级的数据交换格式
  • JSON 是存储和交换文本信息的语法
  • JSON 比 XML 更小、更快,更易解析
<script type="text/javascript">
function loadjson(){
var JSONObject= {
	"name":"香鱼",
	"location":"河流",
	"size":"中偏小",
	"activity":"00:00-23:59"};
document.getElementById("fname").innerHTML=JSONObject.name;
document.getElementById("flocation").innerHTML=JSONObject.location;
document.getElementById("fsize").innerHTML=JSONObject.size;
document.getElementById("factivity").innerHTML=JSONObject.activity; 
} 
</script>

3.1与XML相似之处

  • JSON 是纯文本
  • JSON 具有“自我描述性”(人类可读)
  • JSON 具有层级结构(值中存在值)
  • JSON 可通过 JavaScript 进行解析
  • JSON 数据可使用 AJAX 进行传输

3.2与XML的不同之处

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 能够使用内建的 JavaScript eval() 方法进行解析
  • 使用数组
  • 不使用保留字

3.3JSON 语法

  • 数据在键/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组
  • JSON 数据的书写格式是:键/值对
    例如:“surname” : “Zhao”
  • JSON 值
  • – 数字(整数或浮点数)
    – 字符串(在双引号中)
    – 逻辑值(true 或 false)
    – 数组(在方括号中)
    – 对象(在花括号中)
    – null
  • JSON 对象
    – JSON 对象在花括号中编写
    – 对象可以包含多个键/值对
    – { “surname”:“Zhao” , “firstname”:“Chun” }
  • JSON 数组
    – JSON 数组在方括号中编写
    – 数组可包含多个对象
{"employees": [
{ "surname":"Zhao" , "firstname":"Chun" },
{ "surname":"Zhang" , "firstname":"San" },
{ "surname":"Li" , "firstname":"Si" }
]}
  • JSON 文本转换为 JavaScript 对象
    – eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,并生成 JavaScript对象,例:
var text1='{"employees": [
{ "surname":"Zhao" , "firstname":"Chun" },
{ "surname":"Zhang" , "firstname":"San" },
{ "surname":"Li" , "firstname":"Si" }
]}';
var obj=eval("(" + text1 + ")");
alert(obj.employees[1].surname);
  • JSON 解析器
    – eval() 函数可编译并执行任何 JavaScript 代码,这隐藏了一个潜在的安全问题
    – 使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法
    – JSON 解析器只能识别 JSON 文本,而不会编译脚本
    – 在浏览器中,这提供了原生的 JSON 支持,而且 JSON 解析器的速度更快
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值