采用VTD-XML对SVG图形进行高效地解析和处理

随着 SVG 在 Web 中的广泛应用,基于 VTD-XML 对 SVG 实现图形查询的技术,将给网络图形搜索引擎带来革命性的变化。

SVG 是基于 XML(可扩展标识语言)可缩放矢量图形的一个全新的标准开放的矢量图形和动画格式。SVG 支持:几何图形、文字标注、动画、色彩变化、滤镜、添加音效等众多的功能,可以显示出各种高质量的矢量图形,最为关键的是: SVG 不同于传统的二维图形和">动画制作,它完全是用普通文本来描述的,是一种非常适合网络的基于文本的矢量图形格式。SVG 基于纯文本的特性,使它具备像文字信息一样的可检索性,从而将使人们对 SVG 图形检索的梦想成为现实。 SVG 中的文字可以被网络搜索引擎作为关键词搜寻。利用这一性质,通过 SVG 中定义的文字,就可以制作出非常高效的图形搜索引擎。要对 SVG 进行检索必须先对其进行解析,因为 SVG 是一种标准的 XML 格式,所以可以采用 DOM、SAX 技术进行解析,但这两种解析技术在内存使用及解析速度方面都不尽人满意,这就限制了 SVG 文本检索的优势。

针对以上问题,本文采用 VTD-XML(Virtual Token Descriptor) ——虚拟令牌描述符技术对 SVG 进行解析。 VTD-XML 是一种新的开源的 XML 处理 API, 它能够克服 DOM 和 SAX 的一些问题。 VTD-XML 能够在内存中对 XML 进行快速搜索并提供 XPath 查询的支持,这为我们快速检索图形提供了可能。伴随着 SVG 在网络中越来越广泛的应用,针对 SVG 的解析效率及搜索速度自然成为大家关注的对象。VTD-XML 作为下一代的 XML 处理模型,提供超越 DOM 和 SAX 的广泛用途和更佳选择,不仅可以简化 XML 编程,也使选择 XML 处理模型更加容易。

SVG(Scalable Vector Graphics)概述

SVG(Scalable Vector Graphics,意为可缩放的矢量图型)。它是基于 XML 标记语言,是用来描述二维矢量图型的一种图形格式。SVG 由 W3C 制定的一个开放标准,正由于他的开放性,任何公司和个人都可以参与 SVG 的开发和推广,众多知名企业(例如微软)也都对它提供了支持。

由于 SVG 是 XML 的一个应用标准,严格遵从 XML 语法,采用文本格式的描述性语言来描述图像内容的特性,使 SVG 具备了许多优点。SVG 可以用任何文本工具打开易于修改和编辑。它是矢量图形格式,与栅格图像相比,它可以任意缩放而不影响图形的质量,文件的大小仅和图形的复杂度有关,因此它很适合网络传输,并具备像文字信息一样的可检索性,可以方便的建立文字索引,从而实现基于内容的图像搜索。SVG 图形格式可以用来动态生成图形。例如,可用 SVG 动态生成具有交互功能的地图,嵌入网页中,并显示给终端用户。除此之外,SVG 可以紧密地与现有技术相互结合,来支持给予 SMIL 标准的动态变化和基于 JavaScript 脚本的 SVG 对象控制等。SVG 图形格式还支持多种滤镜和特殊效果,在不改变图像内容的前提下可以实现位图格式中类似文字阴影的效果。

SVG 带有许多基本的图形元素,只要通过组合基本图形元素就可以构建出 SVG 文件。在现实世界中,空间地物的信息化可概括地划分为 5 类:点状物体、线状物体、面状物体、注记以及栅格物体。空间信息系统中,它们被定义为 5 大类空间对象,而 SVG 以此为基础定义了相应的图形图像对象,其对应关系如表 1 所示。

表 1,空间实体与 SVG 的对应表示

空间实体 SVG 中的表示 点 <ellipse>,<circle> 线 <polyline>,<path>,<line> 面 <polygon>,<circle>,<ellipse> 文本 <text> 栅格体 <image>

VTD-XML 解析 SVG

当我们选择解析处理 SVG 文件的时候,我们通常有两种选择:DOM,SAX。DOM 的官方规范是由 W3C 开发的,是独立于平台和语言应用程序接口,它的原理是将 XML 文件的信息以树形的方式构建,并提供了遍历这棵树的接口和方法。DOM 相比较 SAX 易用性强,并且遍历简单,支持 XPath,但 DOM 是以层次结构组织的节点的集合,分析该结构需要加载整个文档和构造层次结构,因此它的解析速度太慢,内存占用过高一般是源文件大小的 5~10,对于大文件来说几乎无法使用。SAX 是一个基于 XML 事件驱动的 API,它将 XML 文件以数据流的方式处理,即随着 XML 数据的顺序读入而依次处理数据。SAX 的特点正好与 DOM 相反,它的解析速度快,内存占用不与 XML 的文件大小相关联,但因为没有结构信息,所以易用性可维护性差,并且无法遍历,不支持 XPath。

基本上 DOM 与 SAX 是正好相反的两个极端,任何一个都不能很好的满足我们的大部分要求,因此我们需要找出另外一种解析方法。

VTD-XML 便是对以上问题的思考后给出的答案,它是一个新型的、开源的、非提取性的 (non-extractive)XML 解析技术,不同于现行的 XML 处理技术,VTD-XML 能够实现数据的随机存取,而不会导致过多的资源浪费。

由于它出色的机制,很好的避免了上面所提出的各种问题,并且还带来了非提取性的其他好处,如,快速的解析与遍历、对 XPath 的支持、增量更新等等。表 2 是 VTD-XML, DOM 和 SAX 之间的比较:

表 2,VTD-XML,DOM 和 SAX 之间的比较

比较内容 VTD-XML SAX DOM 内存占用 XML 源文件大小的 1.3 倍 ~1.5 倍 内存占用与源文件大小无关 XML 源文件大小的 5 倍 ~10 倍 解析速度 最快,是 SAX(在没有插入任何额外的处理逻辑时)的 1.5 倍 ~2.0 倍 慢于 VTD-XML, 快于 DOM 最慢 随机读取 支持 不支持 支持 增量更新 支持 不支持 不支持

通过将 VTD-XML 与现有的 DOM 和 SAX 技术比较得出,VTD-XML 克服了以上两种解析技术存在的问题,不论是在内存占用率,还是在解析速度等方面来看都能满足对 SVG 图形的快速搜索的要求。

时间: 2024-09-12 04:41:38

采用VTD-XML对SVG图形进行高效地解析和处理的相关文章

探讨SVG图形的基本概念和在HTML5中的使用

可缩放矢量图形 (SVG) 是基于矢量的图形家族的一部分.它们与基于光栅的图形不同,后者在一个数据数组中存储每个像素的颜色定义.如今,网络上使用的最常见的光栅图形格式包括 http://www.aliyun.com/zixun/aggregation/16701.html">JPEG.GIF 和 PNG,每种格式都具有优缺点. 相比任何基于光栅的格式,SVG 具有多项优势: SVG 图形是使用数学公式创建的,需要在源文件中存储的数据要少得多,因为您无需存储每个独立像素的数据. 矢量图形可更

jsp标签-想知道fld文件可以像xml文件一样用SAX或DOM解析吗

问题描述 想知道fld文件可以像xml文件一样用SAX或DOM解析吗 像通过java类解析配置jsp标签的fld文件获取自定义jsp标签的人 种类以及属性.去不知道该通过哪种方式进行解析,不知道fld文件可以像xml文件一样用SAX或DOM解析吗.求高手指点 解决方案 //Dompackage XML_homework;import java.io.File;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;i

Android从xml加载到View对象过程解析_Android

我们从Activity的setContentView()入手,开始源码解析, //Activity.setContentView public void setContentView(int layoutResID) { getWindow().setContentView(layoutResID); initActionBar(); } //PhoneWindow.setContentView public void setContentView(int layoutResID) { if (

Android从xml加载到View对象过程解析

我们从Activity的setContentView()入手,开始源码解析, //Activity.setContentView public void setContentView(int layoutResID) { getWindow().setContentView(layoutResID); initActionBar(); } //PhoneWindow.setContentView public void setContentView(int layoutResID) { if (

[Java]XML数据的请求和DOM技术解析

刚刚看到一条微博 今天距离2009级离校倒计时还有100天 借用"三国杀"里面张辽归天说的一句话--"真的没想到".这浑浑噩噩的四年没想到就快没了.没想到啊. 临近毕业季,虽说没课,但是繁琐的事情很多.工作,毕业设计,论文,实习报告--单单找工作就让焦头烂额.也就因为这诸多的原因,博客很久没有更新.这也算是给某公司面试官的回答吧. 言归正传,技术人终究讲技术.由于毕业设计的缘故,需要写Java解析XML文件.(说起毕业设计就想起坑爹的队友,三个人的小组就我一个人在奋

[译]如何高效的解析json P

原文地址 这篇文章主要是讲解javascript的技巧,一步步来分析如何解析jsonp返回的字符串内容更高效. 注意: 当然现在可以用CROS来解决跨域问题,不过仍然有大量的jsonp服务端api接口,一般是用来处理ajax请求 通过jsonp调用返回得到像这样的脚本foo({"id":42})字符串,如何高效的提取里面的内容呢? Classic JSON-P Handling 通常的做法是直接加载jsonp数据在附加的<script>元素中,假如下面的url可以直接获取数

基于XML配置的Spring MVC(所需jar包,web.xml配置,处理器配置,视图解析器配置)

1.添加jar 2.web.xml配置 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5"  xmlns="http://java.sun.com/xml/ns/javaee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocat

在Android移动终端使用HTML Parser方便、高效的解析HTML内容

随着移动互联网的发展,更多的内容需要从http://www.aliyun.com/zixun/aggregation/17301.html">传统互联网延伸到移动终端呈现.一般的做法有三种:1. Web APP:利用 HTML5 技术,例如 JQuery mobile.DojoX mobile,在服务器端对网页进行移动优化.2. Hybrid APP:利用 HTML5 技术,以及 phonegap 等框架生成 APP,可以通过 phonegap 直接调用手机操作系统的 API,比如传感器,

《JavaScript高效图形编程(修订版)》——6.4 画布与SVG的对比

6.4 画布与SVG的对比 有些人最初对苹果创建另一个浏览器图形标准持保留意见,他们可能认为SVG已经足够了.从表面上看SVG和画布提供类似的图形能力,但它们有一个根本的区别:SVG是一个高层的.基于XML的标记语言,可以通过创建XML元素属性来定义图像:而画布则提供了可以直接从JavaScript访问的绘图API. 你可以使用任何文本编辑器手动创建SVG XML,或将它从Adobe Illustrator或Inkscape等绘图软件中导出.以下的SVG例子显示了一个蓝色矩形: 要通过JavaS