精华内容
下载资源
问答
  • 常用数据交互格式

    千次阅读 2018-09-14 11:10:38
    在平时工作中,我们经常会遇到数据交互,然而很少去研究它,今天就来总结一下。人与人之间的交流需要彼此都听得懂得语言。同理,在计算机的不同程序之间,或者不同的编程语言之间进行交换数据,也需要一种大家都能听...

    在平时工作中,我们经常会遇到数据交互,然而很少去研究它,今天就来总结一下。人与人之间的交流需要彼此都听得懂得语言。同理,在计算机的不同程序之间,或者不同的编程语言之间进行交换数据,也需要一种大家都能听得懂得‘语言’,这就是数据交换格式,经常接触的就是json,除了json还有xml、yaml等等。

    一、JSON(JavaScript Object Notation)

    1. {
    2. “dates”: {
    3. “date”: [
    4. {
    5. “id”: “1”,
    6. “name”: “JSON”,
    7. “ccc”: “JavaScript Object Notation”
    8. },
    9. {
    10. “id”: “2”,
    11. “name”: “XML”,
    12. “ccc”: “eXtensible Markup Language”
    13. },
    14. {
    15. “id”: “3”,
    16. “name”: “YAML”,
    17. “ccc”: “Yet Another Markup Language”
    18. }
    19. ]
    20. }
    21. }

    JSON是一种轻量级的文本数据交换格式,在语法上与创建JavaScript对象的代码相同,由key|value(键|值)构成。

    JSON的格式:

    1. 数据在名称|值对中
    2. 数据由逗号分隔
    3. 大括号保存对象
    4. 中括号保存数组

    JSON的优点:

    1. 具有自我描述性,易于阅读编写,也易于机器解析与生成
    2. 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON
    3. 非常适用于服务器与JavaScript交互

    使用JSON:

    1. 读取JSON字符串
    2. b.用eval()或者parse()处理字符串

    二、XML(eXtensible Markup Language)

    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <dates>
    3. <date>
    4. <id>1</id>
    5. <name>JSON</name>
    6. <ccc>JavaScript Object Notation</ccc>
    7. </date>
    8. <date>
    9. <id>2</id>
    10. <name>XML</name>
    11. <ccc>eXtensible Markup Language</ccc>
    12. </date>
    13. <date>
    14. <id>3</id>
    15. <name>YAML</name>
    16. <ccc>Yet Another Markup Language</ccc>
    17. </date>
    18. </dates>

     可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。

    XML的格式:

    1. 声明:定义XML文件版本以及字符集
    2. 根标签:树形结构的根节点
    3. 子元素:相对上一级而言,可以自定义,必须有结束标签,对大小写敏感
    4. 属性:一个元素可以拥有多个名字不同的属性

    使用XML:

    1. 读取XML文档
    2. 使用XML DOM循环遍历文档
    3. 读取值并存储与变量

    三、YAML(Yet Another Markup Language)

    1. dates:
    2. date:
    3. -
    4. id: 1
    5. name: JSON
    6. ccc: "JavaScript Object Notation"
    7. -
    8. id: 2
    9. name: XML
    10. ccc: "eXtensible Markup Language"
    11. -
    12. id: 3
    13. name: YAML
    14. ccc: "Yet Another Markup Language"

    YAML是一种直观的能够被电脑识别的的数据序列化格式

    YAML的格式:

    1. 结构用缩进表示
    2. 连续项目用‘-’表示
    3. key|value用‘:’分隔

    YAML的适用范围:

    1. 由于实现简单,解析成本低,特别适合在脚本语言中使用
    2. YAML比较适合做序列化。因为它是宿主语言数据类型直转的。
    3. YAML做配置文件也不错。比如Ruby on Rails的配置就选用的YAML。

    YAML的问题:

    由于兼容性问题,不同语言间的数据流转,建议不要用YAML

    还有一种表达方式是CSV(逗号分隔符),使用表格和分隔符来表示数据的格式,本文就不在多加叙述,有兴趣的读者可以自己去了解一下。本文列出的三者相较而言,JSON与XML使用的更加广泛一点。并且JSON和XML从实现方法比较而言,不难看出,JSON比XML更快更易使用。

     


     

    展开全文
  • BIRT 报表的动态交互性

    千次阅读 2012-04-17 19:51:16
    birt 提供了不少报表交互性, 像是TOC (table of content) , Bookmark , Hyperlink , 图标的交互性和一些script 能够完成的工作. 但是有时候用户可能更需要的不是一开始把报表做成某种形式,而是查看了数据之后,觉得...

    birt 提供了不少报表交互性, 像是TOC (table of content) , Bookmark , Hyperlink , 图标的交互性和一些script 能够完成的工作. 但是有时候用户可能更需要的不是一开始把报表做成某种形式,而是查看了数据之后,觉得可能要自己来简单的更改一下报表的样式,并且保存下来, 随着数据的不同,同一个报表可能最后会随着分析角度的不同而出现不同的报表展现形式, 其中主要的用户交互性有: 动态排序, 动态过滤, 动态聚合,动态分组,动态显示隐藏列, 改变列的位置, 改变样式. 图表数据过滤,图表样式或格式的改变 (饼图变成柱状图之类的).

    在开始介绍怎么样制作BIRT 的动态交互报表之前, IBM developerwork 上有一篇文章介绍BIRT的提示与技巧的文章建议大家先看看(看下面的参考资料) ,

    1. 动态排序.

    这个功能恐怕任何一个程序都会要求有的, 现在不少ajax 的table 基本上都有能够点击表头进行排序的功能.使用birt 制作动态排序的报表有几种方式. 有两种已经在IBM 上那篇文章介绍了, 一种方式是在表头上加链接,连接到另一个表,并且传递参数怎么排序的, 一种方式是改变sql 语句, 在where clause 后加sort by . 另外我还有两种动态排序的方式: 一种是通过客户端javascript 排序, 一种是通过BIRT API 在运行时排序. 客户端javascript 排序方式其实已经很普遍了, 不少Ajax 库都具有这种table 插件, 象是jquery 的jsgrid 或是flexigrid 插件,YUI 的table 插件也支持不少排序方式. 这种方式只要导入几个js 文件, 一两行代码就可以了,而且还有不少漂亮的样式. 另一种通过BIRT API 在运行时改变排序行为的方式也只需要几行script 就可以完成: 在table 的onPrepare() 事件加上以下代码:

    importPackage (Packages.org.eclipse.birt.report.model.api.simpleapi);
    if ( params["paramSortOrder"].value != null ){
    var sortCondition = SimpleElementFactory.getInstance().createSortCondition();
    switch (params["paramSortOrder"].value){
    case “city” :
    sortCondition.setKey(“row[\"CITY\"]“);
    break;
    case “state” :
    sortCondition.setKey(“row[\"STATE\"]“);
    break;
    }
    sortCondition.setDirection(“asc”);
    this.addSortCondition(sortCondition);
    }

    里面使用的是table 的 addSortCondition 函数 , 当运行的时候,你可以输入你想要排序的列,报表在运行的时候根据你输入列的名称来排序,这种排序方式对于大数据量可能不适合,它不是在sql 里面加的排序条件,而是取出来之后排序的数据. 后面会附上一个实例报表,运行一下就知道了.

    2. 动态过滤,动态聚合,动态分组

    动态创建过滤条件,动态聚合,动态分组的方法跟上面的script 差不多,就是API 用的不一样, 在这里就不多介绍了,当然也可以通过建立参数过滤数据,建立分组条件来达到同样目的(虽然不是动态交互的).

    3.,动态显示隐藏列,

    创建一个控制显示一列的boolean 参数, 在column 的visibility 上填这个参数就够了.

    4.改变列的位置

    通过改变data binding 的方式, 改变Data元素的data binding.

    5.改变样式

    这个见的最多了,this.style.xxx = xxx 改变样式.

    动态隐藏
    动态排序
    参考资料

    http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0708tomlyn/

    IBM 的developerwork BIRT 提示与技巧.

    http://www.birt-exchange.com/devshare/designing-birt-reports/675-birt-interactivity/#description

    介绍BIRT 交互性的, 基于BIRT 2.1

    http://birtworld.blogspot.com/2007_03_01_archive.html

    介绍怎么样动态隐藏table column 和 chart 数据的.

    http://www.flexigrid.info/

    jquery 的一个table 插件, 支持排序,显示隐藏列,调整列的高度宽度等

    http://developer.yahoo.com/yui/datatable/

    YUI的table 插件,支持多种排序方式.

    展开全文
  • CSV文件格式

    万次阅读 2016-11-10 10:03:00
    (逗号分隔值文件格式)  编辑 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个...

    CSV

     

    (逗号分隔值文件格式)

     编辑
    逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
    CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是7-bitASCII是最基本的通用编码。
    中文名
    CSV
    外文名
    Comma-Separated Values
    中文名
    逗号分隔值
    应    用
    在程序之间转移表格数据

    目录

    用法

    编辑
    CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。
    例如,一个用户可能需要交换信息,从一个以私有格式存储数据的数据库程序,到一个数据格式完全不同的电子表格。最可能的情况是,该数据库程序可以导出数据为“CSV”,然后被导出的CSV文件可以被电子表格程序导入。
    “CSV”并不是一种单一的、定义明确的格式(尽管RFC 4180有一个被通常使用的定义)。因此在实践中,术语“CSV”泛指具有以下特征的任何文件:
    1. 纯文本,使用某个字符集,比如ASCIIUnicodeEBCDICGB2312
    2. 由记录组成(典型的是每行一条记录);
    3. 每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时分隔符可以包括可选的空格);
    4. 每条记录都有同样的字段序列。
    在这些常规的约束条件下,存在着许多CSV变体,故CSV文件并不完全互通。然而,这些变异非常小,并且有许多应用程序允许用户预览文件(这是可行的,因为它是纯文本),然后指定分隔符、转义规则等。如果一个特定CSV文件的变异过大,超出了特定接收程序的支持范围,那么可行的做法往往是人工检查并编辑文件,或通过简单的程序来修复问题。因此在实践中,CSV文件还是非常方便的。

    规则

    编辑
    1 开头是不留空,以行为单位。
    2 可含或不含列名,含列名则居文件第一行。
    3 一行数据不跨行,无空行。
    4 以半角逗号(即,)作分隔符,列为空也要表达其存在。
    5列内容如存在半角引号(即"),替换成半角双引号("")转义,即用半角引号(即"")将该字段值包含起来。
    6文件读写时引号,逗号操作规则互逆。
    7内码格式不限,可为 ASCII、Unicode 或者其他。
    8不支持特殊字符

    实例

    编辑
    下面是一个实际 CSV 文件中的部分内容,让大家对他有一个感性的认识。我们选的是 Sjojo_Rescan 的 CSV 文件 (Sjojo 是 ASW- 亚洲扫图风的成员之一)。
    sj_mino1001.jpg,715282,4FB55FE8,
    sj_mino1002.jpg,471289,93203C5C,
    sj_mino1003.jpg,451929,C4E80467,
    通常 CSV 文件开头是不留空的,以行为单位,每行中记录一张图片的多项数据,每项数据用逗号来分隔(标准英文逗号)。一般说来集图用的.CSV 文件的格式是这样的:
    文件名, 文件大小 (以字节为单位),CRC 校验值, 注释 (可省略)
    sj_mino1001.jpg,715282,4FB55FE8,
    | | | |
    文件名 文件大小 CRC 值 注释 (已省略)
    如果你的机器上装了 Microsoft Excel的话,.csv 文件默认是被Excel打开的。需要注意的是,当你双击一个.CSV 文件,Excel 打开它以后即使不做任何的修改,在关闭的时候 Excel 往往会提示是否要改成正确的文件格式,这个时候如果选择“是”,因为 Excel 认为.CSV 文件中的数字是要用科学记数法来表示的,Excel 会把 CSV 文件中所有的数字用科学计数来表示(2.54932E+5 这种形式),这样操作之后,只是在 Excel 中显示的时候会不正常,而 csv 文件由于是纯文本文件,在使用上没有影响;如果选择了“否”,那么会提示你以 xls 格式另存为 Excel 的一个副本。
    所以如果你的 CSV 文件绝大部分都是用在集图上的话,建议把.CSV 的默认打开方式改成任意一个文本 编辑器,系统自带的记事本就是个不错的选择。
    好,让我们回到 CSV 文件的格式中来。见上面,从左到右 sj_mino1001.jpg 是文件名,715282 是以字节表示的文件大小。当文件名中包含逗号的时候,由于逗号在 CSV 文件中特殊的作用,为了不至于产生歧义,需要用引号把文件名括起来。比如 "The Art, Fantasy.jpg",384211,...,.... 接着是一个 8 位的 16 进制数字 4FB55FE8,这是文件的 CRC32 校验值。整个 CSV 文件的精髓都在这里。
    让我们举个小例子来说明它的意义:Sjojo 发布了一张图 sj_mino1001.jpg,假设你是从朋友手中拿到这张图的,那么你肯定常常会有这样的疑问,这张图在传播的过程中是否被改动过呢?是否无意中遭到了损坏呢?CRC 就是为解决这个问题而存在的。
    一般情况下,扫图家每发布了一套图,就同时放出一个 CSV 文件(这种 CSV 通常叫做 Official CSV,也就是官方发布的 CSV 的意思),这个 CSV 中的 CRC 值是用专门的软件通过 CRC32 算法(常用的 CRC 算法还有 CRC16)对文件运算后生成的一个值, 这个值可用作文件真身的标志。在绝大多数情况下,如果这个文件在传播过程中无论是大小还是内容被改动过。那么,用同样的 CRC32 算法再对文件进行运算后产生的 CRC 校验值就完全不一样了。如果得出的 CRC 值是一样的,则完全有理由认为这个文件是真身,没有被改动过。还有些时候,收来的图片文件名被改动过了,那么你怎么知道谁是谁呢?
    这个时候 CRC 值又起作用了:用专用的软件对图片处理后,可以得到文件的大小和 CRC 值,然后根据大小和 CRC 值在 CSV 中寻找是否有适合的图片。如果有,就会把图片的名字改成 CSV 里的。
    举个例子,你收到了一张图片,名字是 pic0001.jpg,同时你知道这张图片是 Sjojo_Rescan 这个集子里面的,但是不知道具体是哪一张。用软件得到它的大小和 CRC 分别是 715282 和 4FB55FE8,那么软件在 CSV 文件里找到一行 sj_mino1001.jpg,715282,4FB55FE8, 大小和 CRC 都符合,软件就认为这张图片的原名是 sj_mino1001.jpg,接着自动把文件的名字改成 sj_mino1001.jpg
    改动的不是 CSV 文件而是图片的文件名。接下来的是注释和说明,可以省略掉。需要注意的是注释的后面是没有逗号的,如果要省略注释的话,一定要在 CRC 值的后面保留一个逗号,否则软件会把 CRC 值认为是注释的。

    规范

    编辑
    逗号分隔列出日期之前,尽早从个人电脑,但被广泛应用于最早前IBM个人电脑时代的个人电脑磁带存储备份和交 换的信息的数据库机器的两种不同的架构。在这一天,负担得起的硬盘驱动器不存在,和许多小型企业试图实现 效益的计算使用软盘的软件。
    CSV没有通用标准规范。不同的程序间CSV的标准有差异很常见,这可能导致交互操作困难。互联网通信的CSV文件,资料的IETF文件( 符合RFC 4180于2005年10月)介绍了格式的“text/csv格式”MIME类型登记的IANA负责。另一个相关的规格是由派出文字其中也包括CSV格式。
    许多非正式文件的存在,说明CSV格式。如何:逗号分隔值(CSV)文件格式概述了CSV格式中使用最广泛的应用和解释它如何能最好地利用和支持。

    基本规则

    CSV格式是分隔的数据格式,有字段/列分隔的逗号字符和记录/行分隔换行符。字段包含特殊字符(逗号,换行符,或双引号),必须以双引号括住。行内包含一个项目是空字符串,可以以双引号括住。字段的值包含双引号时,要双写这个双引号(就像把一个双引号当做转义符一样)。CSV文件格式并不需要特定的字符编码,字节顺序,或行终止格式。
    • 每个记录是一个行终止了换行符(ASCII码/低频= 0×0A)或回车换行符和一双(ASCII码/ CRLF = 0×0D0×0A),然而,线路中断可以嵌入。
    • 字段用逗号分隔(虽然地点在逗号作为小数点,分号是用来代替作为定界符)
    1997,Ford,E350
    • 在某些的CSV实施,领导和尾随空格或制表符,毗邻逗号,装饰。这种做法是有争议的 , 实际上是明文禁止的RFC 4180,其中规定,“被认为是空间的一个组成部分领域 , 而不应被忽视。”
    • 各领域内的嵌入式逗号必须存放在双引号字符。
    • 各领域内的嵌入式双引号字符必须是封闭的双引号字符,每一个嵌入式双引号字符必须用一对双引号字符。
    • 各领域内的嵌入式换行符必须封闭在双引号字符。
    • 领域的前导或尾随空格内必须封闭双引号字符。 (见评论领导和尾随空格以上。)
    • 字段可能永远是封闭的双引号字符,是否有必要或没有。
    • 第一条记录中的CSV文件中可能包含列名的每个领域。

    举例说明

    制造商
    型号
    说明
    价值
    1997
    Ford
    E350
    ac, abs, moon
    3000.00
    1999
    Chevy
    Venture "Extended Edition"
     
    4900.00
    1999
    Chevy
    Venture "Extended Edition, Very Large"
     
    5000.00
    1996
    Jeep
    Grand Cherokee
    MUST SELL!
      air, moon roof, loaded
    4799.00
    上面表格内容若以CSV格式表示就会像下列:
    年,制造商,型号,说明,价值
    1997,Ford,E350,"ac, abs, moon",3000.00
      1999,Chevy,"Venture ""Extended Edition""","",4900.00
      1999,Chevy,"Venture ""Extended Edition, Very Large""","",5000.00
      1996,Jeep,Grand Cherokee,"MUST SELL!
    air, moon roof, loaded",4799.00
    以上这个CSV的例子说明了:
    • 包含逗号, 双引号, 或是换行符的字段必须放在引号内.
    • 字段内部的引号必须在其前面增加一个引号来实现文字引号的转码.
    • 分隔符逗号前后的空格 可能不会 被修剪掉. 这是RFC 4180的要求.
    • 元素中的换行符将被保留下来.[1] 

    文件转换

    编辑
    打开包含地址数据的 Excel 工作簿。
    在地址示例中,第一个地址包含四行,第二个地址仅包含三行。此外,每个地址集之间相隔一行。
    要将地址数据成功转换为 CSV 文本文件,所有地址必须包含相同的行数并且每个地址集之间相隔的行数必须相同。例如,将地址示例更改为以下形式:
    A1:Jane Clayton
    A2:Microsoft
    A3:456 Elm Street
    A4:Sometown, USA 67890
    A5:
    A6:
    A7:Jose Saraiva
    A8:789 Oak Road
    A9:
    A10:Mytown, USA 54321
    注意:每个地址集都包含四行,相隔两行。
    要在 Excel 工作表中插入新行,请选择要在其上插入新行的行标题。在“插入”菜单上,单击“行”。
    注意:在 Excel 2007 中,要在工作表中插入新行,需选择要在其上插入新行的行,单击“主页”选项卡上“单元格”组中的“插入”,然后单击“插入工作表行”。
    在“文件”菜单上,单击“另存为”。
    注意:在 Excel 2007 中,单击“Office 按钮”,然后单击“另存为”。
    在“另存为”对话框中执行以下操作:
    在“保存类型”框中,单击“CSV (逗号分隔)(*.csv)”。
    在“文件名”框中,键入 CSV 文件的名称(例如 Address.csv),然后单击“保存”。
    如果收到下面的消息,请单击“确定”:
    选定的文件类型不支持包含多个工作表的工作簿。
    · 如果只保存活动工作表,请单击“确定”按钮。
    · 如果要保存所有工作表,请使用不同的文件名将其分别保存,或选择一种支持多工作表的文件类型。
    在收到以下消息时单击“是”:
    Address.csv 可能含有与 CSV (逗号分隔) 不兼容的功能。是否保持工作簿的这种格式?
    · 如要保持这种格式,去掉所有不兼容的功能,请单击“是”。
    · 如要保留这些功能,请单击“否”。然后再用最新 Excel 格式保存一份副本。
    · 如想知道哪些内容会丢失,请单击“帮助”。
    在“文件”菜单上,单击“关闭”,然后退出 Microsoft Excel。
    展开全文
  • 在 SVG 中添加交互性

    千次阅读 2013-01-06 21:26:17
    简介: 可伸缩矢量图(Scalable Vector Graphics SVG)是一种基于 XML ...SVG 中的交互性可以分为三个领域 --链接、事件和脚本。本文将依次讨论这三个领域。 注意:要查看本技巧中的SVG 文档,需要有一个 SVG 查看程序

    简介: 可伸缩矢量图(Scalable Vector Graphics SVG)是一种基于 XML 的语言,用于绘制二维图形。不过,它的能力不局限于简单的静态矢量图形。本文展示了如何将交互元素加入到 SVG 文档中,使其可以对用户输入作出响应。

    SVG 中的交互性可以分为三个领域 --链接、事件和脚本。本文将依次讨论这三个领域。

    注意:要查看本技巧中的SVG 文档,需要有一个 SVG 查看程序,可以在        参考资料中找到这种查看程序(还有一个包括所有相关文件的.zip 文件)。     

    链接

    最基本的交互形式是链接。在 SVG 中,通过一个         <a> 标签提供链接,这与HTML 链接的方式几乎相同。将         <a> 标签与一个         xlink:href 属性结合使用便可以建立一个链接。在         <a>和</a> 标签之间的所有内容都作为链接的一部分。清单1展示了一个例子,它有三个元素,设置为链接到三个不同的URL。        单击这里以在浏览器中查看它们。     

    文本、矩形和多边形元素都有到不同页面的链接,这表明所有SVG 元素 -- 不管是文本、圆还是不规则的多边形 --都可以作为一个链接。注意,如果将鼠标移动到这些元素上面,指针会相应地发生改变,表明这是一个链接。

    其功能与 HTML 中的 image map(或者 hotspot)基本上相同。不过,在HMTL 中这会是一个很麻烦的过程,要用专门的软件在一个图像上手工绘制热点-- 如果这个图像或者链接改变了,那么更新它们会非常麻烦。在SVG 中,定义和维护链接则容易得多,这主要是因为链接可以随着SVG 内容动态移动。


    清单1. 链接

                           
    <svg>
        <a xlink:href="http://www.w3.org//Graphics//SVG//Overview.htm8">
            <rect x="10" y="10" width="100" height="30" rx="10" ry="10" 
                  style="fill:lightgrey"/>
            <text x="30" y="30" font-size="12">Click here</text>
        </a>
        <a xlink:href="http://www.ibm.com//developerworks/">
            <circle cx="100" cy="100" r="50" style="fill:grey"/>
            <text x="80" y="100" font-size="12">Or here</text>
        </a>
        <a xlink:href="http://www.ibm.com/" target="new">
            <polygon 
                  points="60 160,165 172,180 60,290 290,272 280,172 285,250 255" 
                  style="fill:dimgrey"/>
            <text x="160" y="200" font-size="12">Or even here</text>
        </a>
    </svg>		  
    


     

    注意在多边形的         xlink 中使用的         target=new 属性。它指示查看程序在单击这个元素时打开一个新的浏览器窗口。     


    事件

    SVG 支持鼠标单击、鼠标移动和鼠标按下这样的用户鼠标事件。清单2展示了一个例子:


    清单2. 使用鼠标的交互性

         
    <svg>
    <rect x="10" y="10" width="140" height="140" rx="5" ry="5" 
          style="fill:lightgrey">
       <set attributeName="fill" from="lightgrey" to="red" 
             begin="mouseover" end="mouseout"/>
    </rect>
    <text x="200" y="75" font-size="30">Move over me and click
       <set attributeName="font-size" from="30" to="35" 
             begin="mouseover" end="mouseout"/>
       <set attributeName="fill" from="black" to="red" 
             begin="mousedown" end="mouseup"/>
    </text>
    </svg> 


     

    单击这里以便观看效果。矩形和文本元素对不同的事件-- 如移动鼠标和单击 --做出反应,产生一种简单的滚动效果。试着将鼠标移动到元素上面以观看这些效果。任何可以应用到元素上的SVG 属性 --如填充颜色、笔划宽度、大小和透明度 -- 都可以以这种方式改变。     

    文字元素可以对两种事件做出反应 --         mouseover 和         mousedown 。这表明可以对同一个元素指定多个事件。SVG支持许多不同的事件-- 有关所有事件类型的完整列表可以参看        参考资料中的W3C 的 SVG 站点。     

    如果希望一个元素上的事件可以引发对另一个元素的操作,可以对 SVG 元素指定         id 属性,然后引用它们。清单3展示了一个例子。     


    清单3: 改变另一个元素的属性

     
    <svg>
        <rect id="changeToRed" x="20" y="20" width="25" height="25" rx="5" 
              ry="5" style="fill:lightgrey"/>
        <text x="50" y="35" font-size="14">Move over for red text</text>
        <rect id="bigText" x="20" y="60" width="25" height="25" rx="5" 
              ry="5" style="fill:lightgrey"/>
        <text x="50" y="75" font-size="14">Move over for big text</text>
        <rect id="bigRedText" x="20" y="100" width="25" height="25" rx="5" 
              ry="5" style="fill:lightgrey"/>
        <text x="50" y="115" font-size="14">Click me for big red text</text>
        <text id="changingText" x="250" y="100" font-size="30" 
                                   fill="black">Change me
            <set attributeName="fill" from="black" to="red" 
                  begin="changeToRed.mouseover" end="changeToRed.mouseout"/>
            <set attributeName="font-size" from="14" to="50" 
                  begin="bigText.mouseover" end="bigText.mouseout"/>
            <set attributeName="font-size" from="14" to="50" 
                  begin="bigRedText.click" end="bigRedText.mouseout"/>
            <set attributeName="fill" from="black" to="red" 
                  begin="bigRedText.click" end="bigRedText.mouseout"/>
        </text>
    </svg>
    


     

    单击这里可以在浏览器中观看效果。当鼠标移动到不同的矩形上时,文本就会改变。有三个矩形被指定了各自的         id 属性,文字的         set 元素通过“         id.eventName ”引用这些属性。触发矩形的事件时,文本的属性就会相应地改变。     

    还可以用一个动画响应事件。清单4展示了这样的一个例子:


    清单4. 开始一个动画

     
    <svg>
        <rect x="20" y="20" width="250" height="250" rx="5" ry="5" 
              style="fill:red">
            <animate attributeName="opacity" from="1" to="0" 
                  begin="click + 1s" dur="1s" fill="restore" />
        </rect>
        <circle cx="250" cy="250" r="100" style="fill:blue">
            <animate attributeName="fill" from="blue" to="green" 
                  begin="mouseover" dur="2s" fill="restore" />
        </circle>
    </svg>
    


     

    单击这里以便观看效果。单击矩形时,它会淡出,在圆形上面移动鼠标时,它的颜色会改变。注意可以在         begin 属性中使用“         +Xs ”使动画延迟开始。     

    键按下

    虽然 SVG 上的大部分交互是通过鼠标进行的,但是 SVG 也支持键盘输入。这是通过事件处理程序         accessKey 实现的,如清单5所示。     


    清单5. 捕获键按下

     
    <svg>
        <rect x="20" y="20" width="100" height="100" rx="5" ry="5" 
              style="fill:red">
    	<animate attributeName="opacity" from="1" to="0" 
    	      begin="accessKey(1)" dur="3s" fill="restore" />
        </rect>
        <rect x="140" y="20" width="100" height="100" rx="5" ry="5" 
              style="fill:red">
            <animateTransform attributeName="transform" type="rotate" 
                  from="0" to="90" begin="accessKey(2)" dur="3s"/>
        </rect>
        <rect x="260" y="20" width="100" height="100" rx="5" ry="5" 
              style="fill:red">
            <animateColor attributeName="fill" from="red" to="green" 
                  begin="accessKey(3)" dur="3s" />
            <animate attributeName="y" from="20" to="100" 
                  begin="accessKey(
    )" dur="3s" fill="restore" />
        </rect>
    </svg>
    


     

    单击这里以观看效果。三个矩形设置为响应键盘上的数字键1、2 和 3。试一试按下每一个键,并观察图像相应的反应。     

    可以设置一个元素响应任意数量的不同的键。注意第三个矩形设置为监听两个键按下。第三个矩形上的第二个         accessKey处理程序设置为监听键         ( ) -- 您可能认出它就是回车键(Enter)的标准HTML 编码。要指定任何特殊字符或者空格字符,必须使用         &#XX 这样的 HTML 编码格式,其中         XX 是 ASCII字符编码。     


    脚本

    到目前为止我只讨论了用 SVG 支持的内置功能响应事件的基本方法。虽然可以只使用这些功能完成很多工作,但是要实现更高级的效果就需要使用脚本了。SVG支持像 VBScript 和 JavaScript 这样的脚本语言,对于这里的例子,我将使用JavaScript。

    要让一个 SVG对象对脚本中的事件作出响应,要在触发器名上加前缀         on ,这样         click就变为         onclick ,         mouseover 就变为         onmouseover ,等等。清单6展示了一个SVG 脚本的例子。     


    清单6. 用 JavaScript 编写 SVG 脚本

     
    <svg>
     
    <script type="text/javascript">
    <![CDATA[
    var redVal=0;
    var greenVal=0;
    var blueVal=0;
    function changeCol(evt)
    {
       var targetshape = evt.getTarget();
       redVal = Math.round(Math.random()*255);
       greenVal = Math.round(Math.random()*255);
       blueVal = Math.round(Math.random()*255);
       targetshape.setAttribute("fill",
             "rgb(" + redVal + "," + greenVal + "," + blueVal + ")");
      
    }
    // ]]>
    </script>
        <circle cx="200" cy="200" r="100" fill="blue" 
              οnclick="changeCol(evt)" />
    </svg>
    


     

    下面逐步分析        清单6:     

    1. 编写 SVG 脚本的第一步是通知查看程序不再使用 SVG,而是使用脚本语言。还必须用           type 属性定义使用哪种脚本语言编码。在这里它设置为           text/javascript 。       
    2. <![CDATA[ 是 XML命令,它告诉查看程序停止解析代码,并读取接下来的块中的代码,这里的代码是字符数据的形式。这可以防止查看程序将括号和其他特殊字符按SVG 元素处理,并使脚本编写更容易。       
    3. 现在就可以开始脚本了。首先,定义三个变量:           redVal 、           greenVal 和           blueVal 。这些变量分别具有red、green 和 blue值,它们将在函数中用到。这个函数名为           changeCol ,它带有一个参数           (evt)。evt是一个 SVG 保留字,它描述刚发生的事件。这里,           evt 方法称为           getTarget(), 这个方法返回对触发该事件的SVG 对象的一个引用。这个引用被存储在变量           targetShape 中。       
    4. 用简单的 JavaScript 函数           Math 生成三个值在 0到 255 之间的随机数。       
    5. 最后,对           targetshape 调用           setAttribute 方法。用前一步中生成的三个随机数将该对象的           fill 属性设置为一个 RGB 值(如           rgb(150,200,50) )。       
    6. 关闭           CDATA 块和脚本后,返回 SVG。画出一个圆,通过           onClick 元素,在单击时让它调用函数           changeCol(evt)。

    单击这里以便观看效果。单击这个圆时,每次单击它时填充都会变为一个随机颜色。     

    当一个函数要应用到多个 SVG元素时,脚本是最有用的。例如,可以在清单6中添加一个矩形,如下所示:

     

        <rect x="400" cy="400" width="100" height="100" fill="blue" 
              οnclick="changeCol(evt)" /> 
    


     

    单击时,这个矩形会与前面的圆形一样调用同一个脚本改变其颜色。

    要查看这一点,可以看一下        其他例子。如果查看源代码,您会看到三个方法:         changeCol 、         changeEdge和         resetEdge 。试着将鼠标移动矩形上面并单击。所有矩形都设置为响应         onclick 、         onmouseover和         onmouseout 事件,它们为此调用的是同一个脚本函数。还要注意         onload属性:第一次装载 SVG 文档时要调用这个属性,它对于您的 SVG初始化很有用。     

    交互文本

    在 SVG 中创建交互文本比您想象中的要复杂一些。在定义文本元素时,显示的文本是文本元素的子元素,而不是像         font-size这样的属性,因此不能像前面那样简单地调用         setAttribute来修改其内容。相反,必须创建一个新的文本元素,并用它替换当前的文本元素。清单7展示了一个例子。     


    清单7. 编写文本变化的脚本

     
    <svg> 
    <script type="text/javascript">
    <![CDATA[
    function changeText(evt)
    {
       targetXtext=svgDocument.getElementById("XPos");
       targetYtext=svgDocument.getElementById("YPos");
       var XPos = evt.getClientX();
       var YPos = evt.getClientY();
       var newXPosText = svgDocument.createTextNode("X Position : " + XPos);
       var newYPosText = svgDocument.createTextNode("Y Position : " + YPos);
       targetXtext.replaceChild(newXPosText,targetXtext.getFirstChild());
       targetYtext.replaceChild(newYPosText,targetYtext.getFirstChild());
    }
    function changeTextNotOver(evt)
    {
       targetXtext=svgDocument.getElementById("XPos");
       targetYtext=svgDocument.getElementById("YPos");
       var newXPosText = 
         svgDocument.createTextNode("X Position : Not over Rectangle");
       var newYPosText = 
         svgDocument.createTextNode("Y Position : Not over Rectangle");
       targetXtext.replaceChild(newXPosText,targetXtext.getFirstChild());
       targetYtext.replaceChild(newYPosText,targetYtext.getFirstChild());
    }
    function recordClick(evt)
    {
       targetClickText=svgDocument.getElementById("ClickPos");
       var XPos = evt.getClientX();
       var YPos = evt.getClientY();
       var newClickText = 
         svgDocument.createTextNode("Last Click made at X=" + XPos + " Y=" + YPos);
       targetClickText.replaceChild(newClickText, 
             targetClickText.getFirstChild());
    }
    // ]]>
    </script>
    <text id="XPos" x="50" y="50"<X Position :</text>
    <text id="YPos" x="50" y="70"<Y Position :</text>
    <text id="ClickPos" x="50" y="90"<Last Click made at : </text>
    <rect x="50" y="100" width="200" height="200" style="fill:blue" 
          οnmοusemοve="changeText(evt)" οnmοuseοut="changeTextNotOver(evt)" 
          οnclick="recordClick(evt)"/>  
    </svg>
    


     

    单击这里以便观看效果。将鼠标移动到矩形上面时,会显示鼠标的X 和 Y位置,并且这两个显示的值会随着鼠标的移动而改变,在矩形上单击鼠标会记录下单击的位置。     

    分析函数         changeText(evt) 可揭示创建交互文本的步骤:     

    1. 为所使用的每一个文本元素指定           id ,这样脚本就可以提取它们。       
    2. 第一次调用           svgDocument.getElementById() ,其中传递的参数是要改变的文本元素的ID。它被存储在一个变量中以供以后使用。       
    3. 调用           evt 方法           getClientX() 和           getClientY()以得到指针的 X 和 Y 坐标,并将它们存储在变量           XPos 和           YPos 中。       
    4. 调用           svgDocument.createTextNode() 创建一个新文本节点。将更新过的文本字符串传递给这个函数。       
    5. 最后,对这个文字元素调用           replaceChild方法。它带两个参数 --替换文本节点和被替换的子元素。对           getFirstChild() 的调用保证更新的文本放置正确。       

    参照清单7,您应该可以将交互文本加入到自己的 SVG 文档中。


    结束语

    可以使用本文中描述的各种交互技术使您的 SVG文档对用户有更大的用途。设法将这些技术结合在一起以得到您想要的功能。

    看一下        这个小例子以了解如何综合使用这些技术制作一个交互菜单。     


    参考资料

    • 您可以参阅本文在 developerWorks 全球站点上的          英文原文.       

    • 下载本文中的所有          样本文件。         



    • 阅读          可伸缩矢量图(SVG)1.0规范或者最新的          1.2规范。         



    • 阅读 W3C 站点上完整的          支持的事件列表。         



    • 请访问 Adobe 的          SVG Zone以获得众多的 SVG 资源,其中包括一个可以下载          SVG查看程序的专区。         



    • 学习 Brian Venn 在          developerWorks上的文章“          产生可伸缩向量图形”,它介绍了如何在SVG 文档中创建动画(2003年6月)。         



    • 请学习 Nicholas Chase 的 developerWorks 教程“          Introduction to SVG”,该教程是学习 SVG 的一个好起点(2002 年 2 月)。         



    • 学习 Andrew Watts 在          developerWorks上的教程“          Interactive, dynamic Scalable Vector Graphics”以将交互性提高到一个新的水平(2003年6月)。         



    • 在          developerWorks 的          XML专区可以找到更多 XML 参考资料。         



    • IBM的          DB2数据库不仅提供了关系数据库存储,而且提供了像          DB2 XML Extender这样提供 XML 和关系系统之间桥梁的 XML 相关工具。请访问          DB2开发者园地以了解更多关于DB2 的内容。

     

    展开全文
  • Pygal让图表具有交互性:如果你将鼠标指向该图表中的任何条形,将看到与之相关联的数据。 问题: 实际操作时,发现鼠标移到图片上没有显示数据。 原因: 书本 15.4.1安装Pygal 中介绍的安装语句安装的Pygal版本太老...
  • 常见视频文件格式

    千次阅读 2007-05-17 22:45:00
    2007-05-13 20:05下面介绍常见的几种视频文件格式:1.AVI-----AVI文件AVI是音频视频交错(Audio Video Interleaved)的英文缩写,它是Microsoft公司开发的一种符合RIFF文件规范的数字音频与视频文件格式,原先用于...
  • InDesign交互式PDF文件教程 中文字幕InDesign: Interactive PDFs 了解如何使用Adobe InDesign制作交互式PDF - 快速,高效且有趣的方式 互动式PDF格式可以制作出色的表格,杂志,演示文稿,原型,甚至是电子书 它们...
  • 多媒体文件格式简单介绍

    千次阅读 2010-02-05 17:04:00
    ■音频文件格式音频文件通常分为两类:声音文件和MIDI文件。声音文件指的是通过声音录入设备录制的原始声音,直接记录了真实声音的二进制采样数据,通常文件较大;而MIDI文件则是一种音乐演奏指令序列,相当于乐谱,...
  • 常见的图像文件格式 无损压缩

    万次阅读 2016-03-03 09:38:47
    常见的图像文件格式  一、BMP格式 BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格 式,能够被多 种Windows应用程序所支持。随着Windows操作系统的流行与丰富的 Windows应用程序的...
  • 视频文件格式--视频封装格式--视频编码格式区分

    万次阅读 多人点赞 2018-11-19 10:56:28
    所以常见的文件格式如1.AVI,2.mpg都叫做视频的文件格式,由视频上的播放器关联。可以随意的更改文件的后缀名,但是对视频没有影响,不要以为avi改成MP4,视屏的格式就是MP4了。 视频文件格式有不同的分类,如:...
  • Cookie文件说明及IE的Cookie文件格式

    万次阅读 2010-07-31 22:32:00
    1、Cookie文件的实质 Cookie实际上是Web服务端与客户端(典型的是浏览器)交互时彼此传递的一部分内容,内容可以是任意的,但要在允许的长度范围之内。客户端会将它保存在本地机器上(如IE便会保存在本地的一个txt...
  • 常见音频文件格式的特点。

    千次阅读 2014-01-15 12:21:23
    常见音频文件格式的特点。 http://www.360doc.com/content/11/1125/18/8050095_167351161.shtml    要在计算机内播放或是处理音频文件,也就是要对声音文件进行数、模转换,这个过程同样由采样...
  • C#/Vb.net 将PDF 转换为SVG文件格式

    千次阅读 2016-10-12 16:42:43
    C#/Vb.net 将PDF 转换为SVG文件格式 SVG文件格式介绍及优点 SVG可以算是目前最最火热的图像文件格式了,它的英文全称为ScalableVector Graphics,意思为可缩放的矢量图形。它是基于XML(ExtensibleMarkup Language...
  • HDFS分布式文件系统具有哪些优点?

    千次阅读 2018-03-23 14:15:40
    随着互联网数据规模的不断增大,对文件存储系统提出了更高的要求,需要更大的容量、更好的性能以及更高安全文件存储系统,与传统分布式文件系统一样,HDFS分布式文件系统也是通过计算机网络与节点相连,但也有...
  • 视频格式 可以分为适合本地播放的本地影像视频和适合在网络中播放的网络流媒体影像视频两大类。尽管后者在播放的稳定和播放画面质量上可能没有前者优秀,但网络流媒体影像视频的广泛传播使之正被广泛应用于视频...
  • 常见的视频文件格式

    千次阅读 2006-03-28 21:54:00
    一、本地影像视频 ●GIF格式:GIF是图形交换格式(Graphics Interchange Format)的英文缩写,是由CompuServe公司于80年代推出的一种高压缩比的彩色图像文件格式。CompuServe公司是一家著名的美国在线信息服务机构...
  • 常见的文件扩展名

    万次阅读 多人点赞 2019-03-01 09:45:58
    xml:具有结构的标记电子文件 json:轻量级的数据交换格式,层次结构简洁和清晰 conf:配置信息文件 jsp:java嵌入式网页脚本文件 phps:php的源代码文件 asp:MicroSoft公司开发的创建动态交互式网页服务器端脚本...
  • 分析现行的常用的文件格式类别

    万次阅读 2006-06-27 13:44:00
    摘要:讲述现今常见的在特定领域有代表文件格式,并没有深入讲述每种格式的存储状态(方式),只对相应格式的特性优缺点做简要概述。 关键字:计算机,文件格式,图形,图像,音频,视频,流媒体,手机铃声 ...
  • 数据交互xml、json、protobuf格式比较

    千次阅读 2018-05-16 14:44:08
    数据交互xml、json、protobuf格式比较 1、json: 一般的web项目中,最流行的主要还是json。因为浏览器对于json数据支持非常好,有很多内建的函数支持。 2、xml: 在webservice中应用最为广泛,但是相比于json,它的...
  • http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5     Ffmpeg快速命令使用 From Ffmpeg工程组 ...1 Ffmpeg使用语法2 视频文件截图3 视频格式转换4 屏幕录制5 视频采集6 使用ffmpeg
  • 常见的图片文件格式及各自的特点

    千次阅读 2012-11-26 12:20:27
    BMP格式是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。特点是包含的图像信息较丰富,几乎不进行压缩。缺点是占用磁盘空间过大。所以,目前BMP在单机上比较流行。 二、GIF格式 特点...
  • 常用的几种文件封装格式

    千次阅读 2016-12-30 15:33:10
    所谓文件封装格式也称多媒体容器(Multimedia Container),与DivX、MP3这类编码格式不同的是,它只是为多媒体编码提供了一个“外壳”,也就是将所有的处理好的视频、音频都包装到一个文件容器内呈现给观众,这个...
  • 视频、音频文件格式大全

    千次阅读 2009-08-01 08:52:00
    一、本地影像视频: ●AVI格式:(最清晰的、最常用的)它的英文全称为Audio Video Interleaved,即音频视频交错格式。它于1992年被Microsoft公司推出,随Windows3.1一起被人们所认识和熟知。所谓“音频视频交错”,...
  • 常见三维文件格式之STL, VRML, X3D

    万次阅读 2013-11-20 01:11:57
    一. STL STL只能用来表示封闭的面或者体,stl文件有两种:一种是... 他的文件格式非常简单 明码: solid name facet normal ni nj nk  outer loop  vertex v1x v1y v1z  vertex v2x v2y v2z  vertex v3x v3y v3z'
  • 但慢慢发现这东西支持格式,分辨率,码率还有颇多限制(这个播放器Real格式的只能支持Real 8/9/10 编码到 1024*576,码流小于 1.6Mbs),为使这玩艺好使特在网上收集一些关于视频文件格式以及编码计算的一些知识....
  • 三维文件格式三维软件之间互相导入导出一般会涉及到一些格式不兼容的问题,这里就给大家普及一下这些常用的三维文件格式。不同的格式有着不同的定位及用处,有开源的也有商业的。目前很多三维软件之间互导迫在眉睫,...
  • Linux之文件系统和根文件系统

    千次阅读 2015-06-30 13:56:08
     “尽管内核是Linux的核心,但文件却是用户与操作系统交互所采用的主要工具”,这就阐述了“文件系统”的作用,如果只有Linux,没有文件系统,那么整个系统是没有意义的。  在Linux中,有“VFS”的
  • 计算机网络之文件传送协议FTP

    千次阅读 2015-09-24 09:18:09
    FTP 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。FTP 屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件文件传送协议 FTP 只提供文件传送的一些基本的...
  • 前几种主流高清编码方式和文件封装格式介绍  (2010-10-18 15:25:23) 转载▼ 标签:  通道   jpeg2000   mpeg-4   编码方式   熵编码   it    ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 287,531
精华内容 115,012
关键字:

具有交互性的文件格式