您好,欢迎来到测品娱乐。
搜索
您的当前位置:首页SVG元素&代码解释

SVG元素&代码解释

来源:测品娱乐
SVG元素和代码解释

SVG中图形元素(graphics element)是可以用来在目标画布上画出图形的元素,包括定义的标准形状,特别是矩形、圆形、椭圆形、直线、折线和多边形等。文章介绍了SVG元素的代码及其含意。SVG元素分为图形元素、容器元素、图形引用元素、文本、SVG文档片断内容。

来源:SVG中国(ChinaSVG.COM)

1 图形元素

SVG中图形元素(graphics element)是可以用来在目标画布上画出图形的元素,包括定义的标准形状,特别是矩形、圆形、椭圆形、直线、折线和多边形等。

(1) 矩形

矩形用元素rect来表达

代码:

含意:绘制宽200像素,高100像素,填充色为绿色的矩形

(2) 圆形

圆形用元素circle来表达

代码:

含意:绘制半径为50像素,填充色为蓝色的圆形

(3) 线段

线段用元素line来表达

代 码: 含意:从点(50,50)到点(200,200)绘制一条蓝色10像素宽的线段

(4) 椭圆

椭圆用元素ellipse来表达

代码:

含意:绘制x轴半径为100像素,y轴半径为50像素,边线为绿色的椭圆

(5) 折线

折线用元素polyline来表达

代码:

含意:从点(100,0)开始,经过点(93,16), (72,26), (43,25), (13,11),(-11,-13),(-16,-93),(0,-100), (16,-93),(26,72),(25,-43),(11,43),(-13,11), (-43,25),( -72,26),( -93,16),最后到点(-100,0)绘制一条线宽为1像素的绿色折线

(6) 多边形

多边形用元素polygon来表达

代码:

含意:以(100,100) (150,100) (300,200) (50,200)四个点为顶点绘制填充色为蓝色的多边形,该多边形是一个梯形

(7) 路径

路径用元素path来表达

代码:

含意:按 动作定义一条填充色为绿色的路径“移动原点到(200,200),向Y方向直线运动100,向X方向直线运动200,向Y的反方向直线运动100,向X的反方向直线运动200\",该路径表达了一个矩形

2 容器元素

容器元素用于将不同的元素组合起来使用。

元素作为一个容器元素使用,可以将稍后要使用的元素集合起来。它通常和元素结合使用。

元素作为一个容器对象使用,将相关的图形对象组合起来。在一个大型或复杂的图形中使用元素非常有用。

3 图形引用元素

图形引用元素(graphics referencing element)用对不同文档或元素的引用作为其图形内容的图形元素。

元素用于将其它图像文件包括在一个已定义的矩形中。

元素可以与这样的元素配合使用,来实例化前面定义但还没有表现的图形对象。

4 文本内容

元素文本内容元素(text content element)是一个可以定义文本串的画在画布上的SVG元素,SVG文本内容元素有:,,,等。

5 SVG文档片断

SVG文档片断(SVG document fragment)是以元素开头的XML文档子树。SVG文档片断可以包含的SVG文档,或是另一个SVG文档片断。当一个元素是另一个元素的子元素,就会有两个SVG文档片断,每个元素拥有一个片断。以下用元素来代表SVG文档片断。 与元素相比较,元素有一些特别有用的属性:

(1) 可以 拥有自己的位置属性

即x和y属性,所有元素的子元素的位置完全相对于元素的位置。这样只要改变元素的x或y就可以让所有子元素同时发生偏移。

(2) 可以拥有自己的高宽属性

即width和height属性,所有超出元素高宽的子元素是不会显示出来的。这样一些拉幕动画就可以实现了。

(3) 可以拥有显现属性

即display属性,修改该属性可以让所有元素的子元素一起出现或隐藏。这样整体一起的出现和消失就方便很多。

SVG鼠标事件响应的四种写法

SVG有四种常用的鼠标响应的脚本写法(SMIL方式、Attributes方式、JavaScript+SMIL方式、EventListener方式),根据不同的需要让大家有更多的选择。本文介绍了四种实现SVG鼠标事件的例子。 来源:SVG中国(ChinaSVG.COM)

SVG鼠标事件实现方式的例子效果是:单击一个红色的矩形后,它的填充颜色会变成蓝色

1 SMIL方式

例程1 鼠标事件之SMIL方式

在前面有关“动画”效果的章节中我们使用过类似的方法,也就是在单击后触发一个动画效果,此例中被改变的是“fill”属性,由红变蓝,中间没有渐变的过程,一次到位。

2 Attributes方式

例程2 鼠标事件之Attributes方式

xmlns:a3=\"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/\" a3:scriptImplementation=\"Adobe\">

onclick= \"changeColor(evt)\"/> u

这种事件触发方式想必大家已经很熟悉了,在上一节中,满眼尽是这种事件触发方式,即把事件触发作为元素的属性与其它其他属性写在一起。事件属性在u处,“onclick”事件调用的是“changeColor”函数,参数是“evt”,这样使得函数内部脚本可以从“evt”获得事件相关信息。这种方式比较常用。

3 JavaScript+SMIL方式

例程3 鼠标事件之JavaScript+SMIL方式

这个例子没有图形元素的事先定义,所有定义都是通过脚本完成的,包括事件的定义也都是动态脚本完成的,最后在内存中的SVG DOM机构与例程1是类似的。例程3中,v处的“createElementNS”方法,有了一个后缀“NS”是需要添加命名空间参数的,这里的命名空间定义在u处。

4 EventListener方式

例程4 鼠标事件之EventListener方式

这种方法也是经常用到的,W3C为是DOM元素绑定事件处理函数唯一真正的标准方式。原理就是使用“addEventListener”方法来注册事件方法,而且一次性可以很方便地注册很多事件,“EventListener”被称为“事件”。

“addEventListener”这个方法的参数依次是:事件的名称(如:click)、处理该事件的函数名和是否启用事件捕获的布尔量(一般是false)。

例程4中,u处调用了“addEventListener”方法来注册“onclick”事件,事件处理函数是“changeColor”。值得注意的是写在参数里的事件名称,要去掉“on””,所以填写的是“click”,而不是“onclick”。

在“addEventListener”的方法中有一个参数表示是否启用事件捕捉,要理解这个变量的作用,我们需要了解一下在DOM2事件模型中,事件传播的三个阶段。

首先,在捕获阶段(capturing phase),事件是从文档对象(Document object)开始,沿着文档树向下一直到目标对象传播.。如果任何目标对象的祖辈(不包括目标对象本身)也有一些指定注册的捕获事件的处理程序,在事件传播的这个阶段(捕获阶段)将运行它们,是否启用事件捕捉的变量的意义也就在于此。

事件传播的下一个阶段发生在目标对象本身:所有注册到目标对象的对应事件处理程序都被运行。

事件传播的第三阶段是冒泡阶段,或者说按文档层次倒序进行,从目标元素到文档对象(Document object)。尽管所有的事件都受事件传播的捕获阶段(capturing phase)的影响,但是并不是所有类型的事件都冒泡,像“mousedown”这样的一般事件对文档中的其它其他元素是有意义的,所以这些事件才沿着文档层次向上冒泡,并且触发目标元素的祖元素的相应事件的处理程序。通常情况下,原始的输入事件冒泡,而高级的语义事件不会。

SVG DOM常用属性和方法介绍

2008.09.14 黄凯伟

12.2 SVG DOM常用属性和方法介绍

http://book.csdn.net/bookfiles/605/10060519574.shtml

将以Adobe SVG Viewer提供的属性和方法为准,因为不同解析器对

JavaScript以及相关的属性和方法支持的程度不同,有些方法和属性是某个解析器所特有的。SVG支持DOM2标准。

12.2.1 文档初始化相关

evt属性

evt表示事件本身,可以通过evt获取与当前事件相关的信息,用户可以在script中定义响应函数,进行相应的处理。它与普通JavaScript脚本中的event基本相同,只不过在普通JavaScript的脚本中简写成“e”。

ownerDocument属性

通过引用该属性获得当前SVG文件的文档对象,也就是得到SVG的DOM结构。

使用举例:svgdoc = evt.target.ownerDocument

getOwnerDocument()方法

通过调用该方法获得当前SVG文件的文档对象,也就是得到SVG的DOM结构。

使用举例:svgdoc = evt.target.getOwnerDocument()

target属性

通过引用该属性获得事件产生于哪个SVG元素,有时可能是该元素的父元素。

使用举例:object = evt.target

getTarget()方法

通过调用该方法获得事件产生于哪个SVG元素,有时可能是该元素的父元素。

使用举例:object = evt.getTarget()

例程12-1 获得SVG文档对象

该例展示了如何在SVG文档被载入后,调用初始化程序,以获得SVG的DOM结构,为后续的编程做好准备。

例程12-1中,①处表示在SVG文档载入时激活的“onload”事件中执行“init”函数;“init”函数先是得到SVG Document对象,然后获得该对象的根元素(也就是“SVG”元素),最后的效果是弹出一个消息框,上面显示“SVG”。

②处的代码可以替换为“svgDoc = evt.getTarget().getOwnerDocument;”,得到的效果是一样的。

12.2.2 DOM对象操作相关

前面我们已经介绍过,DOM对象是一个树型的结构,并且经过载入后就放在内存中供我们读写。如何对这棵树进行操作,也就成为发挥SVG交互性很关键的一步。下面所示的方法中,有些是文档对象(Document)的方法,有些是文档元素(Element)的方法,需要区别开来。DOM可以分为三大部分:文档基本元素、文档对象和各种类型的从文档基本元素派生出的文档元素。文档对象是文档对象模型的顶级对象,它包含了整个文档的内容。各种类型的文档元素派生自文档基本元素类型,用于描述文档中各种实际存在的元素。其中可以定义一种文档元素,它们可以容纳其他的文档元素,这些元素就是容器元素,实际上文档对象就是最大的容器元素。由于文档对象模型中存在容器元素,因此所有的对象都组成一个树状结构,称为文档对象树或者DOM树,其中根节点就是文档对象。

SVG动画介绍

2008.08.29 万里

文章对SVG动画属性进行了详细了介绍,首先介绍基本的SVG动画类型:

移动和旋转动画、拉幕和缩放动画、色彩渐变动画、沿路径动画、顺序与同步动画;之后介绍了内嵌脚本和外部脚本的SVG脚本动画。

来源:SVG中国(ChinaSVG.COM)

SVG提供了多种方法来实现各种复杂动画,SVG自身定

义的属性动画是基础,SVG支持的DOM是手段,再加上脚本动态运行,这样无论多么绚丽的动画效果都可以通过SVG基本的属性动画加脚本来完成。 本文章侧重介绍SVG动画属性,你还可以结合“SVG动态与动画”及“SVG动画编程及应用”两篇文章的内容来更详细了解SVG动画知识。

1 SVG属性动画

SVG动画一般通过更改对象属性值来实现。SVG工作组与W3C组织的SYMM(Synchronized MultiMedia WorkingGroup,同步多媒体工作组)合作推出了SVG动画元素的定义规范。SVG中用于定义动画的元素有5个。其中元素允许数量属性或样式参数随时间而变化,元素可设定非数量属性或样式参数随时间而变化,元素可以沿着指定的路径移动元素以产生动画效果;元素用来设定元素的某些与颜色有关的属性或样式参数随时间而变化;元素可以控制对可视化元素进行坐标变换时的动画效果。

移动和旋转动画

移动和旋转动画可以用元素来实现。

元素用于可视化元素的动态坐标变换,其主要属性除通用属性外还有两个attributeName和type,其中attributeName属性值必须指明为’'transform\",type属性指明动态坐标变化的类型,其值可以为\"translate\"(表示平移变换)、\"scale\"(表示拉伸变换)、\"rotate\"(表示旋转变换)、\"skewX\",及”skewY\"(表示沿X和Y方向上的歪斜变换)。

拉幕和缩放动画

拉幕和缩放动画都是对图形对象的宽度和高度进行改变而引起的动画效果,可以用元素来实现,利用from和to属性来定义图形的起始和终止值。元素没有其特有的属性。

色彩渐变动画

色彩渐变动画是由对象的填充色彩变化而引起的动画效果,可以用

元素来实现。元素也没有其特有的属性,只是在使用from,to,by和values等属性时,其属性值必须是颜色值。

沿路径动画

沿路径动画是指对象沿一定的路径移动,可以用SVG的元素来实现。除了通用属性外,元素还具有path、rotate及keyPoints属性,其中path指明动画路径,rotate指明可视化元素在沿着路径运动过程中是否随路径而转动,keyPoints表示各个关键点所在的位置在路径方向上与路径起点间的距离,它和key-Times属性共同决定一系列关键点以精确控制路径动画中时间与运动路程的关系。

顺序与同步动画

同步动画就是多个对象同时进行动作,顺序动画则是根据时间上的先后顺序进行动作。两种动画根据不同的动画类型可以映射为不同的SVG动画元素,最关键的地方在于动画元素中的begin属性值的设定。设置动画顺序通常要将动画元素的id和begin属性值结合起来,如果第二个对象动画(id=\"anim1\")在第一个对象动画(id=\"anim2)结束后2秒才开始,那么可以设置第二个动画的begin属性为’'animl.end+2s\",如果是同步动画则设置为’'animl.begin\"。

2 SVG脚本动画

SVG标准允许将JavaScript脚本代码以两种方式来实现:一个是内嵌脚本方式;另一个是外部脚本方式。

内嵌脚本

元素内嵌脚本属性type=\"contentype”用MIME的方式指明所用的Script语言的类型。

外部脚本

SVG文档结构主要包含以下几个方面:

1 XML声明

所有SVG文档都必须是一个XML文档,所以每个SVG文档首行必须有一个XML声明。XML声明是以下面的内容符合XML语法。XML声明可以包含version、encoding和standalone三个属性。version属性必须有而且必须是第一个属性,它指明文档遵循哪个版本的XML。encoding属性指明文档字符使用的编码标准,SVG可以用

UTF-8,UTF-16和iso-8859-1三种编码标准。standalone属性表明文档是否和一个外部的文档类型定义文档配套使用。

2 文档类型声明

文档类型声明(Document Type Declaration)指出两件事情:跟随的XML数据的根元素、标识;用于解析XML的DTD的位置。

\"htip://www.w3.org/Graphics/SVG/I.I/DTD/svg11-flat-20030114.dtd',提供了解析XML的DTD的URL地址。DTD包括一系列标记、attributes和

properties,用于标记文档的内容,DTD还包括一些规则,规定了哪些标记能出现在其他哪些标记中。假如SVG文档中的标记不遵循所指定的DTD的规则的话,那么这个文档将不能通过校验,也无法在程序中正确处理。

3 SVG元素

接下来,SVG文档的所有SVG元素、标记和数据都将放在根元素的起始标签和结束标签之间。SVG文档元素通常都是层次结构的(hierarchical),表达的数据信息都包含在元素和属性中,一个元素就代表一项信息。元素通常包括元素名称、起始标签和结束标签,元素中还包含属性,属性为描述元素提供了额外信息。

上面的示例SVG文档包含了8个元素,其中元素是定义SVG图像必不可少的元素,它代表SVG文档内容的开始,通常指定高宽、文档视口范围等。元素使用纯文本描述图像的大致内容。元素中定义可以被引用的元素,其中定义了用于在以后的元素中被引用。接下来的元素中定义的元素,引用定义元素时采用URI资源定位标识,如元素的style=\"fil:url(#radgral)\"。最后定义

下面看一个利用SVG DOM产生动画的例子,:

\"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\">

http://lucky.myrice.com

上面的例子中,首先找到要进行动画的元素的容器元素,即g;然后每隔50px高产生一个50*50的正方形,并把他们添加到g的节点中,最后每隔80毫秒,动态改变其位置和透明度,就可以看到动态的效果了!上面例子的效果如下图所示:

***3

注意:在测试以上的例子时,要保存成UTF-8的文件格式,否则,可能看不到效果! (THE END)

利用XSLT生成SVG格式的数据统计图

2008.07.05 孟宪会

可升级矢量图象(SVG)是新一代的图象标准,它具有矢量化、符合XML规范、可样式单化、文字可搜索、开放源代码等特性,正在逐渐被世界各大计算机 软件厂商所支持。由于SVG图象完全符合XML标准,因此,我们就可以利用XSLT来生成SVG图象。下面,我们就某公司一年中的所有产品的月销售额来看 看如何利用XSLT来生成SVG格式的数据统计

图。数据统计图的样式非常多,有柱状图、饼图、折线图、三维立体效果图等等,我们这里将介绍簇状柱形图、堆 积柱形图和饼图。由于篇幅所限,我们这次仅介绍簇状柱形图,我们会在以后文章中介绍其它两种数据统计图的生成方法。 来源:计算机世界网

目前,没有一个浏览器完全支持SVG图象的显示,为了能够看到本例子中效果,您必须安装SVG Viewer 3.0插件,下载地址:

http://www.adobe.com/svg/viewer/install/main.html。在Windows XP平台上,自带了Microsoft Internet Explorer 6,但是它是Adobe SVG Viewer 2.0的插件,对中文的支持不好,但可以直接浏览没有中文文字的SVG图象,把本例中的中文换成英文,也可以浏览本例中的代码。我们的例子在支持UTF- 16的平台上可以很好地显示,我们就以中文为例。

首先,我们准备所需要的数据,格式是XML的。由于目前许多大型数据库都提供了对XML查询结果的支持,因此,您可以直接利用数据库来生成XML数据文件,也可以经过查询,再用编写组件的方法来生成需要的XML数据文件。 我们的XML数据文件Data.xml格式如下:

下面,我们看看最关键的XSLT部分,由于在这里用到了XSLT,请把您的MsXML2文件升级到最新的MsXML3.0 SP2或MsXML4.0,可以到微软的网站下载:http://www.microsoft.com/xml/。文中每一代码段都进行了注释说明。 XSLTToGraph.xsl:

xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">

月销售纪录

stroke-width=\"1\" stroke-linecap=\"square\" stroke-miterlimit=\"1\" style=\"text-anchor:start\" shape-rendering=\"crispEdges\">

某公司每月产品销售纪录

select=\"floor(($max_week_sales_value + 99) div 100) * 100\"/>

{$left_margin},{$graph_height + 20} h{$actual_width} v-{$graph_height + 10} h-{$actual_width} v{$graph_height +10}\"/>

0

= $legend_threshold\">

10},{$graph_height + 20 - floor($vert_posn)} h{$actual_width + 10}\"/>

$max_graph_height) * $graph_height)\"/>

$left_margin},{$graph_height + 19} h{$bar_width} v-{$bar_height} h-{$bar_width} v{$bar_height}\"

onmouseover=\"On_MouseOver(evt,'HideShow_{@Month_no}')\" onmouseout=\"On_MouseOut(evt,'HideShow_{@Month_no}')\"/>

最后,要在页面中看到SVG格式的统计图,有两种办法: 直接在客户端转换,在Data.xml使用XSL样式单即可;  利用ASP在服务器端先进行转换,再输出到客户端。

我们这里采用ASP来完成,因为,如果有多种统计图样式的话,这样可以让用户进行选择显示,调用不同的XSL文件即可。 DataToSVG.asp文件如下:

<%@ Language=\"VBScript\"%>

<%

Response.Clear

Response.Buffer = True

Dim xmlDom, xslDom, strResult

Set xmlDom = Server.CreateObject(\"Msxml2.DOMDocument\")

Set xslDom = Server.CreateObject(\"Msxml2.FreeThreadedDOMDocument\") xmlDom.async = False xslDom.async = False

xmlDom.load Server.MapPath(\"Data.xml\")

xslDom.load Server.MapPath(\"XSLTToGraph.xsl\") Response.ContentType = \"image/svg+xml\" strResult = xmlDom.transformNode(xslDom)

' 在不支持UTF-16编码的饿平台上,替换成UTF-8 strResult = Replace(strResult,\"UTF-16\Response.Write strResult %>

结果如下图:

XSLT生成SVG数据统计图的实例

想了解更多SVG动态生成的文章,你还可以阅读”SVG及基于XML+XSL的动态生成“一文,以及后面两篇也分别介绍了用Apache Batik及JSP生成SVG统计图文章:“用Apache Batik生成SVG统计图表”及“使用JSP动态生成SVG统计图”。通过本文及相关文章,相信你已经对动态生成SVG的内容有了更进深一步的了解。 (THE END)

SVG fill填充与fill-rule填充规则属性

2008.06.26 Vicos

fill属性可以对指定的填充对象内部的区域进行色彩填充,fill-rule属性则指定了决定那一部分是图形的内部的运算规则,文件还介绍了nonzero、evenodd及inherit的解释以及他们的对比实例。

来源:SVG中国(ChinaSVG.COM) [SVG中国翻译资料]

原文:http://www.w3.org/TR/SVG/painting.html (11.3 Fill Properties)

1 SVG fill(填充)介绍

'fill'

Value: (See Specifying paint) Initial:black

Applies to:shapes and text content elements Inherited:yes Percentages:N/A Media:visual Animatable:yes

fill(填充)属性可以对指定的填充对象内部的区域进行色彩填充,它可以在任何轮廊形形状的区域内进行,以及按规则设置数值产生不同的填充效果,宽度值为0的几何形状轮廊线是包括在内的。

在大多数情况下,fill填充属性只是一种颜色,但它也可以是渐变或图案(SVG中国会在SVG图案填充相关内容中专门介绍)。fill(填充)属性填充规则属性定义对所有路径区域填充或者只是对交叉部分填充。

大家还可以参考“第六课 SVG填充(fill)”一文来更详细理解SVG fill填充,后面介绍SVGfill-rule填充规则。

2 SVG fill-rule填充规则

介绍fill-rule填充规则的evenodd、nonzero及inherit的应用。

'fill-rule'

Value:nonzero | evenodd | inherit Initial:nonzero

Applies to:shapes and text content elements Inherited:yes Percentages:N/A Media:visual Animatable:yes

'fill-rule'属性指定了决定那一部分是图形的内部的运算规则。对一个没有交叉的路径来说,那一部分属于它的内部是很显然的,但是对于复杂一点的路径来说,内部的阐明并不明显。

'fill-rule'属性提供了两种怎样决定图形内部的两种选择:

2.1 nonzero

本规则决定一个点是否在图形内部的方法是从该点向任意方向画直线,然后检查直线与图形的交叉。如果该点左右与图形交叉点数相同,则该点在图形外,否则在图形内。

查看图1的SVG实例

2.2 evenodd

本规则通过从一点向任意方向画直线然后计算该直线与图形的交叉电的数量来决定该点是否在图形内。如果交叉点数为奇数,则该点在图形内,否则在图形外。

查看图2的SVG实例

2.3 inherit

\"inherit\" 指的是当前物件的填充属性和围绕它的物件(或物件组)的属性一致。

3 SVG fill-rule属性:nonzero与evenodd的比较

nonzero与evenodd的比较,见图3。

查看图3的SVG实例 (THE END)

SVG及基于XML+XSL的动态生成

2008.06.12 杨晴雯,周宇,李晓

介绍了一种新的网络图形格式SVG及其优点。根据SVG的特点,研究了利用XML和XSL动态生成SVG图形的技术,为动态生成WEB图像提供了一种参考模型。

来源:SVG中国(ChinaSVG.COM)

1 引言

以Web的形式实现高质量的图表一直是目前急需解决的难点问题。大多数此类编程技术都是在服务器端进行,首先在内存中产生图表的图像,然后转换为位图再传送给浏览器显示,大多采用位图方式或Java Applet的方式。位图方式无论在文件大小和文件内容上都是固定的,难以实现动态内容的更新。相较之下,Java Applet是一个较好的解决方案,但其在速度、可重用性方面也存在缺点。当SVG格式的倡议书公布之后,引起了业界的强烈反响。使用SVG,可以在WEB上显示各种各样高质量的、占用空间小的矢量图形,包括几何图形、动画、渐变效果、滤镜等效果,并且SVG图形可以方便的动态产生,以展示所需的动态图形。

2 SVG

2.1 什么是SVG

SVG是可升级矢量图形(Scalable Vector Graphics)的简称,是一种基于XML的用来描述二维矢量图形和矢量/点阵混合图形的置标语言,SVG格式的文件也由元素和属性等标记标注的纯文本组成,SVG图像是与XML 1.0兼容的文档,SVG元素是指示如何绘制图像的一些指令,由浏览器解释执行这些指令,把SVG图像显示出来。使用SVG可以在网页上显示出各种各样的高质量的矢量图形:几何图形、动画、渐变色、滤镜效果等。是一种全新的专门为网络而设计的开放标准的矢量图形规范。与传统的图形格式特别是JPEG,GIF相比,具有许多优势。

2.2 SVG相对于位图文件的优势

纯文本格式:许多文本工具都可编写、修改,且与GIG、GPEG相比,文件更小。 基于XML技术:具有XML格式的所有优点,国际性开放标准,可通过标准API(如DOM API)轻松操作图像。

SVG格式的图像可自由缩放:SVG对图像的描绘是通过指定每个像素的值所需的指令而不是指定这些值本身,于分辨率,可以随意缩放图像的任何一部分,缩放后,丝毫不影响图像的显示质量,特别适合打印机输出;

SVG图形中的文字于图像:基于XML技术,SVG文件由元素和属性等标记标注的纯文本组成,便于修改、选择和进行搜索(特别适合于图形文件的搜索); 支持滤镜效果:不仅支持多种滤镜效果,而且可通过几个滤镜语法语句的修改,完成对滤镜效果的修改;

具有交互性:SVG中的对象可以通过脚本语言接受外部事件的驱动,如鼠标、键盘动作,完成用户对其中对象的控制,实现交互性;

可由程序语言方便地动态生成:如用Javascript,Perl,Java,JSP等,实现图形数据的实时更新。

3 如何动态生成SVG

SVG图像可以由程序动态生成,比如“使用JSP动态生成SVG统计图”,\"使用ASP.NET构建灵活、轻量的SVG图像\",以及采用Java、servlet、perl等生态的高效的生成SVG图像,下面就是一个利用JSP动态生成简单的矩形SVG图像的例子:

<%@page contentType=\"image/svg-xml\"%>

<%int width=300,height=200; string strcolor=\"#eeeeff\"%> \" height=\"<%=height%>\">

\" stroke=\"red\" stroke-width=\"1\"/>

这种动态生成SVG图像的方式简单实用,但在这种结构的Web文件中,代码、数据和表示相混合,不利于修改和理解。而下面介绍中用XML+XSL生成SVG图像的方法能将图形数据与显示相分离,可更好地描述表示数据,且可以创作出良好视觉效果的XML动态数据,通过改变内容的结果可以改变图像的外观。

4 如何用XML+XSL动态生成SVG

4.1 XSL介绍

XSL(Extensible Stylesheet Language)是可扩展样式标语言的缩写,它定义了如何转换和表示XML文档。其中第一个处理过程是转化,定义如何操作文档,第二个处理过程是表示,定义如何在不同的用户代理中显示XML文档。现在XSL包含3个规范文档:

XSL一种高级的格式化语言,用于定义如何显示数据。

XSLT一种转换语言,用于提供一套规则,把XML文档转换成另一种XML文档、HTML文档或其他格式的文档(如PDF、TXT、SVG、WML等)。

Xpath一种表达式语言,它为识别和寻址XML数据提供语法。

4.2 XML+XSL动态生成SVG图形

XSL在对XML进行数据格式转换的重要思想是要把XML文档视为一种树结构,转换的过程就是从源树生成结果树的过程。XSL样式单定义了源树和结果树中对应部分的转换规则,每条规则中包含了一个模板,并对应着一种模式。模板定义了转换的结果,而模式则规定了需要进行转换的元素或属性对象,由XSL处理器根据XSL中的规则来处理输入的XML文档,并产生一个新的输出文档。

采用XML+XSL生成SVG图形时,首先,在服务器端,从各种数据源中提取数据,生成XML文件,再通过XSL Processor将包含了SVG中动态数据的XML文档,根据XSL中定义的规则,转换为SVG-XML文档。在客户端由浏览器插件负责解释SVG-XML并在浏览器中具体绘制图形。这类插件之一可以是Adobe公司提供的SVG View如图1所示。

图1 用XML+XSL生成SVG图形

下面就是一个利用XML+XSL动态生成柱状SVG图像的例子:

包含柱状图数据的XML文档 :

网站访问量统计 x1次

2001年

23

2002年

42

2003年

55

转换XML到SVG图像文档的XSL文档:

xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">

......略.........

............略............

name=\"xMin\"select=\"$space+(count(preceding-sibling::stat) * ($col-width + $col-gap) )\"/>

width=\"{$col-width}\" height=\"{$item-height}\" style=\"fill:blue; stroke:black;\"/>

textLength=\"{$col-width}\" style=\"font:宋体;font-size:12\">

体 ;font-size :12\">

使用J2SDK 1.4 api接口解析xml的代码如下:

//创建一个类transformer的类厂

TransformerFactory tFactory=TransformerFactory.newInstance(); //用该类厂创建一个transformer的实例

Transformer transformer=tFactory.newTransformer(new StreamSource(\"xsl/pie1xsl\")) ;

/ / 调用 transformer 类的 transform 函数完成转换

transformer1transform(new StreamSource(\"xml/flow1xml\"),

newStreamResult(new FileOutputStream(\"svg/flow1svg\"))); 得到的SVG文档如下:

............略............

23

2001 ............

在客户端,浏览器插件负责解释SVG-XML并在浏览器中具体绘制图形。这类插件之一可以是Adobe公司提供的Adobe SVG Viewer。

5 应用

在最近开发的信息发布系统项目中,在考虑了多种方法后,采用了由

XML+XSL动态生成SVG图像的技术,实现了网站统计信息的图表表示。由于XML、SVG比较新,在很多方面仍有许多工作要做。

6 结束语

SVG目前已是W3C的一个标准,统一的标准和开放性是SVG的强大生命力所在,虽然目前主浏览器对它的本地支持仅限于插件,但可预言,所有主浏览器在不久都会提供对它的本地支持。

应用SVG实现基于Web的UML图形编辑

2008.06.04 董东,马丽,高峰

在XML技术的基础上,应用SVG技术实现了一种基于Web的UML图形编辑方法。该方法是以XML数据文件表示UML图,然后通过XSLT变换程序把 XML数据文件在服务器端变换为SVG代码,SVG代码在浏览器中显示。对图形的编辑操作包括放大、缩小和移动等,该方法的最大优势在于允许用户随时随地 通过Web进行编辑。

来源:SVG中国(ChinaSVG.COM)

传统的UML(unified modeling language)图形编辑工具,如Microsoft Visio,是单用户单机使用的,这种模式极大了对UML图形编辑的多用户不同地点并发操作。UML图可以看作1个XML(extensible markup language)数据库,并可以通过浏览器编辑和显示UML图。本文中,笔者介绍通过SVG(scalable vector graphics)实现UML图形在浏览器中编辑和显示的方法。

1 UML与SVG

1.1 UML

UML是用来对软件系统进行描述、构造、可视化和文档编制的工业标准语言,它通过蓝图设计简化了软件工程过程。UML试图成为标准的统一语言,使得IT专业人员能够进行计算机应用程序的建模。UML的主要创始人(Jim

Rumbaugh,Ivar Jacobson和Grady Booch)最初都有自己的建模方法(OMT,OOSE和Booch),彼此之间存在着竞争,但最终,他们联合起来创造了这种开放的标准。UML成为“标准”建模语言的原因之一在于它与程序设计语言无关,如IBM Rational的UML建模工具被广泛应用于J2EE和.NET开发。

1.2 UML图

UML规范定义了3类图,即结构的、行为的和模型管理的图,本文中,笔者只讨论结构图中的类图,有关SVG与UML图的详细解释可阅读\"SVG与UML图详解\"一文。类图表示不同的实体(人、事物和数据)如何彼此相关,它显示了系统的静

态结构。类在类图上使用分成3个部分的矩形来描述:最上面的部分显示类的名称,中间部分包含类的属性,最下面的部分包含类的操作(方法)。

图1 UML Activity Diagram

1.3 SVG

SVG是实现文本数据图形化表示的XML的子语言。SVG不仅仅局限于静态图,还可以通过脚本(scripting)或者嵌入SVG动画元素来定义和触发动画建立动态图,通过JavaScript和SVG DOM(SVG document object model)还能够建立用户可以改变图形布局的交互图。SVG数据是以向量的方法显示的,所以不失真的无级缩放成为SVG的突出特征。另外,SVG文件是纯文本的XML文件,适合于Internet上发布。通过XSLT可以将XML数据变换成SVG数据,所以SVG成为具有前途的基于Web的可视表示工具。

2 基于Web的UML图形编辑

基于Web UML图形的编辑过程包括:1)开发UML schema[5];2)开发UML数据文件;3)根据schema文件验证UML数据文件的有效性;4)开发XSLT变换程序,通过XSLT程序变换UML数据文件;5)通过SVG浏览器显示UML图。图1展示了UML图形的编辑过程。

为了开发UML图的schema,需要逐条定义UML图的每个元素。schema定义了UML图的语法约束和完整性约束,如class必须具有1个name。UML数据

文件为XSLT变换程序提供了输入。完成schema定义后,就可以把UML图用schema所规定的语法来描述了。例如,下面XML数据文件片段就是1个类图的XML描述。

图2 生成UML图的过程

Person

false

nationality CString

private

Person public

PersonInfo public

为了保证该数据文件符合XML格式要求和UML语法要求,需要根据scheme定义对其进行验证。通过验证的UML数据文件经XSLT变换动态生成SVG代码。XSLT程序指定了每个XML元素的显示模式。例如:如果XSLT遇到了XML文档中的类标记,那么它就按照对应的模板来生成SVG代码。该模板接受3个参数:类的名字、类的X坐标和Y坐标。类的坐标是根据每个类在XML文档中的位置来计算的。

生成SVG代码的类模板片段如下所示,该模板中包含了显示类图的SVG代码。

以上模板片段除了生成SVG代码来显示UML类图以外,还生成了JavaScript代码来实现用户对类图的放大、缩小、移动等操作。利用SVGDOM可以实现对单个元素的选择或一组元素的选择,从而能够修改他们的位置和特性。

生成SVG代码的难点是如何自动定位各个类,即图元的自动布局问题。该问题是通过网格来解决的,即把每个类放置在1个网格上。这种方案忽略了类间的顺序和关系,会造成横穿类的连线。为了弥补这个缺点,编辑器允许用户调整图的布局,从而得到可读性高、美观的布局。

由XSLT程序直接生成的UML图通过包含SVG viewer插件的浏览器来显示,用户可以通过拖放来调整图的布局,其结果几乎与Microsoft Visio所创建的类图相同。

3 结论

除了需要在浏览器中安装插件外,基于Web的UML图形编辑工具不需要任何其他软件。与其他商业CASE工具(如Visio)相比,笔者提出的UML图形编辑工具的优越性在于可以随时随地通过Web来使用,但缺点是还不能实现直接对图形元素的编辑。

笔者未来的工作重点将主要集中在以下2点:将更好的自动布局算法加入到XSLT程序中;考虑对UML图编辑的并发控制算法等。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务