XML技术分析05

一、DOM

使用DOM扫描器程序:DOM扫描器是一种非常通用的程序,它不需知道用户定制的XML标记的确切含义。DOMAPI具有某些能把任何数据存储到树形结构中的接口。扫描器具有一组实现了这些接口的类,可以实例化这些类的对象。      

这些接口和类允许插入和卸下不同的扫描器,不会影响应用程序,也可以调用DOMAPI的主要数据类型。它提供几种方法,可以引导到子节点。其他许多接口如Document、ELement、Entity和Attr都扩展了Node。

 局限性:DOM适合处理少量及中等数据量的数据,但不适合处理非常大的数据。因为DOM处理文档时,只要一开始,必须到结束才能停止返回,对于非常大的数据,效率则比较低,当我们所需要的只不过是文件中的某些少量元素时,它却要浪费大量的时间处理整个文档。

二、SAX

SAX 扫描器:SAX与DOM工作方式有所不同,当它发现了所需要的元素时,会立即把XML元素返回给调用程序。也就是说,当SAX扫描器开始读取XML数据时,无论何时遇到给定元素的起始标记符,它将立即通知通用程序,而不需要每次都处理整个文档。遇到结束标记符也是如此。SAX扫描器与调用程序的通信方式是通过回调来实现的。又由于SAX不必在内存中建立语法树,从而节省了内存。    

 SAX扫描能够非常有效而方便地利用计算机资源,灵活地处理比较大的数据,但也有不足。与DOM扫描器相比,必须编写较多的接口代码才能调用SAX扫描器,而且一旦需要,程序员还必须增加代码以便跟踪它己经扫描到什么位置了。

三、XML查询语言XQuery

   XML Query:通常缩写为 XQuery,是一种能灵活地从 XML 文档中抽取数据的查询语

(1) 字符表达式          

字符表达式包括字符字符串和数字字符串二种,字符字符串是由所有schema中类型为xs:sting的字符组成,数字字符串是由数字0~9以及“·”“e”和“E”组成。

(2) 变量          

变量表达式为:“$变量名”,如“$book”表达变量为book,它是区分属性、节点等其他元素的标志。变量通常直接使用,既可在for语句中给变量赋值,又可在条件限定语句和函数调用时给变量赋值;若变量没有赋值,则值为error。

(3)路径

 用以确定每个节点在树中的位置。分为绝对路径和相对路径。      

绝对路径——从文档的根目录开始,直到目标的子节点或属性,之间用“//”隔开。      

相对路径——是直接从当前路径的下一级开始,然后至目标子节点或属性。路径是一个表达式,有前向和后向表达式。

四、前后向表达式

前向表达式有:

child:: 子节点名——表示当前节点的子节点,如child::book ;child::* 表示当前节点的所有子节点。

descendant:: 子孙节点名——表示当前节点的子孙节点,如descendant::book ;

attribute:: 属性名——表示当前节点的属性,如attribute::title ;

self:: 节点名——表示节点自身,如self::auther;

descendant-or-self:: 节点名——表示当前节点自身或它的子孙节点,如descendant-or-self:: auther 。

后向表达式有:

parent:: 父节点名——表示当前节点的父节点,如parent::price 。

前向、后向表达式每次运行时,都会返回一个元素,并对这个元素系列进行检查,具体有:①节点名的合法性检查。 ②节点类型检查。包括文本类型测试text()、注释类型测试comment()、节点类型测试node()、处理信息类型测试processing-instruction等。

简略写法

“child::”可以完全省略,“attribute::”可以省略为“@”,“descendant-or-self::node()/”可省为“//”,self:: node()的省略写法是“.”,parent:: node()的缩写为“..”。又,para代表当前节点的子节点,*代表当前节点的所有子节点,text()代表当前节点的所有文本类型的子节点,name代表当前节点的name属性。

五、各种类型的查询

Xquery要查找的信息可以包含在一个或多个表达式中,Xquery可以用XML表现查询结果;Xquery又可根据查询的不同,用各种不同的语句表达式,如FLWR表达式、[条件]表达式、及排序表达式等,并允许各个表达式相互嵌套。

(1) 用XML表现查询结果         Xquery可以用XML表现查询结果,即通过构造XML结构的方法,使结果表现出XML的结构方式。在查询结果中制定节点、属性、注释、处理指针及CDATA(其中的数据照原样输出)。

(2) 指出查找范围       可以用FOR语句将查找的对象限定为某个文档或节点。

(3) 限定查找条件       通过WHERE语句限定查找条件。

(4) if-then-else语句      用于需要分条件判断的情况。

(5) 对查询结果进行排序          按照需要对查询的结果进行排序,如按书名排序,按作者排序等。

六、FLWR表达式

     XQuery 中最强大的新特性是 FLWR 表达式。FLWR(发音为 flower)是 For-Let-Where-Return 的首字母缩略词,每个 FLWR 表达式都有一个或多个 for 子句、一个或多个 let 子句、一个可选的 where 子句以及一个 return 子句,这些子句都允许在这些表达式的任何一个中。    

FLWR的语句格式为:

for 变量1 in 表达式1,变量2 in 表达式2,……变量n in 表达式n 。

let 变量1:=1,变量2:=2,……

where条件

return 返回的内容

(1) for 子句        for 子句对表达式中的变量进行范围限定,若没有for 子句,则变量在当前文档的范围内。

(2) let 子句        let子句为for子句中所有的变量进行赋值,通常一个变量赋一个值或一个序列。 (3) where子句       where条件语句对变量作进一步的限制。如果特定的元组不能满足特殊条件,那么where 子句命令程序废弃这些元组。

(4) return 子句         return 子句定义每个元组要返回的内容,它指定了返回的结果及形式。Return语句可以嵌套FLWR语句。

七、XML与数据库的关系

数据库在XML应用中的角色        

XML作为数据交换的标准,更着重于统一数据格式,而不是提供数据库的特性,数据库作为数据管理的地位没有改变!

XML数据库                

XML作为数据交换的标准,更着重于统一数据格式,而不是提供数据库的特性,数据库作为数据管理的地位没有改变!

XML数据库的类型

目前XML数据库有三种类型:

(1)XMLEnabledDatabase(XEDB),即能处理XML的数据库。其特点是在原有的数据库系统上扩充对XML数据的处理功能,使之能适应XML数据存储和查询的需要。一般的做法是在数据库系统之上增加XML映射层,这可以由数据库供应商提供,也可以由第三方厂商提供。映射层管理XML数据的存储和检索,但原始的XML元数据和结构可能会丢失,而且数据检索的结果不能保证是原始的XML形式。XEDB的基本存储单位与具体的实现紧密相关。

(2)NativeXMLDatabase(NXD),即纯XML数据库。其特点是以自然的方式处理XML数据,以XML文档作为基本的逻辑存储单位,针对XML的数据存储和查询特点专门设计适用的数据模型和处理方法。

(3)HybridXMLDatabase(HXD),即混合XML数据库。根据应用的需求,可以视其为XEDB或NXD的数据库。

XML数据库的优势        

1、XML数据库能够对半结构化数据进行有效的存取和管理

2、提供对标签和路径的操作。

3、当数据本身具有层次特征时,由于XML数据格式能够清晰表达数据的层次特征,因此XML数据库便于对层次化的数据进行操作。

XML数据库的典型应用 :数据交换、 Web应用和服务、 信息集成、 内容管理、 电子商务、 电子政务。  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/301127.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GEE数据集——Cloud Score+ S2_HARMONIZED数据集

简介 Cloud Score 是一种用于中高分辨率光学卫星图像的质量评估(QA)处理器。Cloud Score S2_HARMONIZED数据集是由统一的哨兵-2 L1C数据集制作的,Cloud Score的输出可用于识别相对清晰的像素,并有效去除L1C(大气顶部&…

2024.1.3力扣每日一题——从链表中移除节点

2024.1.3 题目来源我的题解方法一 递归方法二 栈方法三 反转链表方法四 单调栈头插法 题目来源 力扣每日一题;题序:2487 我的题解 方法一 递归 当前节点对其右侧节点是否删除无影响,因此可以对其右侧节点进行递归移除。 若当前节点为空&am…

ElasticSearch 性能优化

提升写入性能 使用 bulk 接口批量写入 节省重复创建连接的网络开销通过进行基准测试来找到最佳的批处理数量 延长 refresh 的时间间隔 通过延长 refresh(刷新)的时间间隔可以降低段合并的频率,段合并十分耗费资源默认的刷新频率为1s&…

论文阅读记录SuMa SuMa++

首先是关于SuMa的阅读,SuMa是一个完整的激光SLAM框架,核心在于“基于面元(surfel)”的过程,利用3d点云转换出来的深度图和法向量图来作为输入进行SLAM的过程,此外还改进了后端回环检测的过程,利用提出的面元的概念和使…

LeetCode-加一(66)

题目描述: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 思路: 这里主要分…

java 生成一个当前时间的时间搓

开发过程中 用时间搓数值格式存储 会更加精准 那么 我们在一些日常增删查改中就可以用时间搓来记录操作时间 就一行代码 long timestamp System.currentTimeMillis();他就能生成当前时间的时间搓 运行结果如下 然后 我们可以在 http://shijianchuo.wiicha.com/ 上进行转换查…

自动驾驶apollo9.0 Dreamview Debug方法

Apollo 9.0 安装&编译方法 # 拉取源码 git clone gitgithub.com:ApolloAuto/apollo.git git checkout v9.0.0# 启动docker bash docker/scripts/dev_start.sh bash docker/scripts/dev_into.sh# 编译project ./apollo.sh build默认启动方式 default mode wget https:…

QT:单例

单例的定义 官方定义:单例是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。 单例的写法 抓住3点: 构造函数私有化(确保只有一个实例)提供一个可以获取构造实例的接口(提供唯一的实…

Nginx 搭建可道云网盘

目录 1.安装php-fpm 2. 建站点根目录与配置 2.1 建站点根目录 2.2 配置 3. 搭建成功 1.安装php-fpm nginx 需要使用php 需要安装php-fpm yum install php-fpm php-mbstring php-mysqlnd php-gd -y 修改 www.conf 文件的配置29行和41行,将用户会让用户组改成n…

Python笔记07-异常、模块和包

文章目录 异常及捕获方法python模块python包安装第三方包 异常及捕获方法 当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”, 也就是我们常说的BUG 例如:以r方式打开一个不存在的…

NI基于PC的测量和控制系统

基于PC的测量和控制系统为工程师提供了电气和物理测量功能,使其能够以可自定义、准确且经济实惠的方式进行台式测量. 什么是基于PC的测量和控制系统? 在基于PC的测量和控制系统中,NI硬件产品通过USB或以太网连接到PC或笔记本电脑。这种系统具…

mysql高可用方案之MHA

mysql集群高可用方案: 单主:keepalived、MHA、MMM 多主:MySQL cluster 、PXC MHA的工作原理 MHA node 运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自…

C语言.不同数据类型之间相互赋值_强制类型转换_非强制类型转换

不同数据类型之间相互赋值 这个问题是 C/c的,Java 等其他语言会报错,这里不会报错 当 int i2147483647;时,可以正常输出。 当 int i2147483648;时会变成-2147483648。 在大多数现代计算机系统中,整数通常采用补码表示法。这意味着…

【Emgu.CV教程】2.13、基本方法之MinMaxLoc()最大值最小值查找

我们可以简单的把图像看成是一个矩阵,图像算法就转换成对这个矩阵的各种操作,比如加减乘除、矩阵转置、归一化等等,这样对以后的函数理解会更直观。 在图像分割、颜色处理过程中,经常需要统计出图像内的最大值、最小值&#xff0c…

详解Java中@Accessors注解(全)

目录 前言1. 概念2. 属性2.1 fluent属性2.2 chain属性2.3 prefix属性 前言 关于该注解的学习,主要来源项目中涉及,对此进行查漏补缺 Accessors 注解通常用于简化实体类的代码,使其更加简洁和易读。 1. 概念 Accessors 是 Lombok&#xff…

快手面经总结(2024最新)

快手 面经1-一面 开始先是手撕算法两道 自我介绍两道手撕 将字符串转化为整数 (这里当时出现溢出值问题,进行了思考解决,写了两种方式)synchronize , 可以使用的几种形式,代码写出 操作系统 和 数据结构 hash解决冲突 &#xff…

【认知计算】《智能追踪》

故事背景科技相关: 认知计算 意在使计算机系统能够像人的大脑一样学习、思考,并做出正确的决策。 模仿大脑从经验中学习,发现不同事物之间的联系,进而实现逻辑推理和记忆等功能。 认知计算是一种类脑计算模式,源自模…

我的创作纪念日——redis的历史纪录

机缘 最开始只想存留点Redis的操作信息,后来写着写着也就写多了,虽然后面很长时间由于忙就没继续写,但是还是偶尔登录看一下,有好几篇文章的浏览量还是很多的呢。 收获 收获不多,粉丝也才三十多个,浏览量感…

html 原生网页使用ElementPlus 日期控件el-date-picker换成中文

项目: 原生的html,加jQuery使用不习惯,新html页面导入vue3,element plus做界面,现在需要把日历上英文切成中文。 最终效果: 导入能让element plus日历变成中文脚本: elementplus, vue3对应的js都可以通过创建一个vu…

修改 docker /dev/shm 的大小

修改 docker /dev/shm 的大小 1,获取完整id: docker inspect 245| grep Id rootlynxi:~# docker inspect 245| grep Id"Id": "245ab167ed9a79873b31b3a38df2053870fe72f267c3c1a660df25c63e37e88b",2,修改 ShmSize&…