八月瓜首页 > 专利查询 > >正文

可重用数据标记语言

基本信息

  • 申请号 CN00810054.3 
  • 公开号 CN1535429A 
  • 申请日 2000/05/19 
  • 公开日 2004/10/06 
  • 申请人 伊纽莫雷特索鲁申斯公司  
  • 优先权日期  
  • 发明人 拉塞尔·T·戴维斯  
  • 主分类号  
  • 申请人地址 美国弗吉尼亚州 
  • 分类号  
  • 专利代理机构 北京市柳沈律师事务所 
  • 当前专利状态 发明专利申请公布 
  • 代理人 马莹 
  • 有效性 暂失效-视为撤回 
  • 法律状态 审查中-公开
  •  

摘要

方法和系统提供一种称作可重用数据标记语言(Reusable Data Markup Language,“RDML”)的计算机标记语言和一种用于提取、操作和查看可以在本地或通过网络(例如,因特网)存储的RDML格式文档和文件的数据查看器。
通常,RDML允许对数字进行浏览和操作,这不同于HTML中的文本和图象,并且通过包括描述附属在数字中的数字含义的属性实现此功能。
遵循该标记语言的文档将机器可读的文档化与数字和数据封装在一起,并且允许数据查看器充当web浏览器与电子表格的组合体,以自动读取、解释和操作数字数据。
展开

权利要求书


1.一种数据处理系统中的方法,包括如下步骤: 接收包含数值的文档; 接收对数值特征的指示,特征包括单位和数量级;和 将所接收的指示作为与数值关联的标签加入到文档中,以创建标记文 档。

2.如权利要求1所述的方法,进一步包括如下步骤: 显示所述标记文档。

3.如权利要求2所述的方法,进一步包括如下步骤: 使用与数值关联的标签操作标记文档的显示。

4.如权利要求3所述的方法,进一步包括如下步骤: 将所述显示上的标记文档与带表示兼容特征的标签的第二标记文档合 并。

5.如权利要求1所述的方法,其中,所述特征进一步包括标度。

6.如权利要求1所述的方法,其中,所述特征进一步包括修饰符。

7.如权利要求1所述的方法,其中,所述特征进一步包括测度。

8.如权利要求1所述的方法,其中,所述特征进一步包括调整。

9.如权利要求1所述的方法,其中,所述特征进一步包括数值集类型。

10.如权利要求9所述的方法,其中,所述集类型至少为时间序列、分 类和x-y图中的一个。

11.如权利要求1所述的方法,其中,所述特征进一步包括数值类类型。

12.如权利要求1所述的方法,其中,所述特征进一步包括到第二标记 文档的链接。

13.一种数据处理系统中的方法,包括如下步骤: 接收第一标记文档和第二标记文档,第一标记文档和第二标记文档均包 含数值和反映数值特征的标签; 使用标签,将第一标记文档和第二标记文档自动组合为单个数据集;和 显示所述单个数据集。

14.如权利要求13所述的方法,其中,自动组合步骤进一步包括如下 步骤: 解决第一标记文档和第二标记文档特征之间的冲突。

15.如权利要求13所述的方法,其中,显示步骤进一步包括如下步骤: 使用反映数值特征的标签,操作单个数据集的显示。

16.如权利要求13所述的方法,其中,所述特征包括数量级、标度、 修饰符、单位和测度中的至少一个,并且所述操作步骤包括如下步骤: 使用反映数量级、标度、修饰符、单位和测度数值特征中至少一个的标 签,操作单个数据集的显示。

17.如权利要求13所述的方法,其中,所述特征包括数量级,并且所 述操作步骤包括如下步骤: 使用反映数值数量级的标签,操作单个数据集的显示。

18.如权利要求13所述的方法,其中,所述特征包括标度,并且所述 操作步骤包括如下步骤: 使用反映数值标度的标签,操作单个数据集的显示。

19.如权利要求13所述的方法,其中,所述特征包括修饰符,并且所 述操作步骤包括如下步骤: 使用反映数值修饰符的标签,操作单个数据集的显示。

20.如权利要求13所述的方法,其中,所述特征包括单位,并且所述 操作步骤包括如下步骤: 使用反映数值单位的标签,操作单个数据集的显示。

21.如权利要求13所述的方法,其中,所述特征包括测度,并且所述 操作步骤包括如下步骤: 使用反映数值测度的标签,操作单个数据集的显示。

22.一种数据处理系统中的方法,包括如下步骤: 接收具有数值集和表示数值特征的标签的标记文档; 确定对数值集的变换以反映新特征; 访问数值集的多个标签,多个表示数量级、标度、修饰符、单位和测度 的标签; 确定数量级、标度、修饰符、单位和测度标签的转换因子,以完成向新 特征的变换;和 将数值集乘以所确定的转换因子,以变换数值集来反映新特征。

23.如权利要求22所述的方法,进一步包括如下步骤: 显示经过变换的数值集。

24.一种数据处理系统中的方法,包括如下步骤: 接收对数值的请求,该请求指示数值的至少一个特征; 接收第一标记文档和第二标记文档,第一标记文档和第二标记文档均包 含数值和反映数值特征的标签,至少一个标签具有所请求数值的所指示特 征; 通过解决第一标记文档和第二标记文档特征之间的冲突,将第一标记文 档和第二标记文档自动组合为单个数据集; 显示单个数据集;和 使用反映数值特征的标签,操作单个数据集的显示。

25.一种数据处理系统包括: 永久性存储设备,带有第一标记文档和第二标记文档,第一标记文档和 第二标记文档均包含数值和反映数值特征的标签; 存储器,带有一个程序,该程序接收第一标记文档和第二标记文档,并 且使用标签将第一标记文档和第二标记文档自动组合为单个数据集;和 处理器,运行所述程序。

26.如权利要求25所述的数据处理系统,其中,永久性存储设备进一 步包括数据库,并且从存储在数据库中的信息创建至少一个标记文档。

27.如权利要求25所述的数据处理系统,其中,所述标记语言遵循可 扩展标记语言版本1.0。

28.如权利要求25所述的数据处理系统,进一步包括显示器,其中, 所述程序指示显示器在图表视图上显示单个数据集。

29.如权利要求25所述的数据处理系统,进一步包括显示器,其中, 所述程序指示显示器在树视图上显示单个数据集。

30.如权利要求25所述的数据处理系统,进一步包括显示器,其中, 所述程序指示显示器在电子表格视图上显示单个数据集。

31.如权利要求25所述的数据处理系统,进一步包括显示器,其中, 所述程序指示显示器在脚注视图上显示单个数据集。

32.一种计算机可读介质,包含用于控制数据处理系统,以执行包括如 下步骤的方法的指令: 接收包含数值的文档,特征包括单位和数量级; 接收对数值特征的指示;和 将所接收的指示作为与数值关联的标签加入到文档中,以创建标记文 档。

33.如权利要求32所述的计算机可读介质,其中,所述方法进一步包 括如下步骤: 显示所述标记文档。

34.如权利要求32所述的计算机可读介质,其中,所述方法进一步包 括如下步骤: 使用与数值关联的标签操作标记文档的显示。

35.如权利要求33所述的计算机可读介质,其中,所述方法进一步包 括如下步骤: 将显示的标记文档与带表示兼容特征的标签的第二标记文档合并。

36.如权利要求32所述的计算机可读介质,其中,所述特征进一步包 括标度。

37.如权利要求32所述的计算机可读介质,其中,所述特征进一步包 括修饰符。

38.如权利要求32所述的计算机可读介质,其中,所述特征进一步包 括测度。

39.如权利要求32所述的计算机可读介质,其中,所述特征进一步包 括调整。

40.一种计算机可读介质,包含用于控制数据处理系统的指令,以执行 包括如下步骤的方法: 接收第一标记文档和第二标记文档,第一标记文档和第二标记文档均包 含数值和反映数值特征的标签; 使用标签,将第一标记文档和第二标记文档自动组合为单个数据集;和 显示单个数据集。

41.如权利要求40所述的计算机可读介质,其中,所述自动组合步骤 进一步包括如下步骤: 解决第一标记文档和第二标记文档特征之间的冲突。

42.如权利要求40所述的计算机可读介质,其中,所述显示步骤进一 步包括如下步骤: 使用反映数值特征的标签,操作单个数据集的显示。

43.如权利要求40所述的计算机可读介质,其中,所述特征包括数量 级、标度、修饰符、单位和测度,并且所述操作步骤包括如下步骤: 使用反映数量级、标度、修饰符、单位和测度数值特征的标签,操作单 个数据集的显示。

44.如权利要求40所述的计算机可读介质,其中,所述特征包括数量 级,并且所述操作步骤包括如下步骤: 使用反映数值数量级特征的标签,操作单个数据集的显示。

45.如权利要求40所述的计算机可读介质,其中,所述特征包括标度, 并且所述操作步骤包括如下步骤: 使用反映数值标度特征的标签,操作单个数据集的显示。

46.如权利要求40所述的计算机可读介质,其中,所述特征包括修饰 符,并且所述操作步骤包括如下步骤: 使用反映数值修饰符特征的标签,操作单个数据集的显示。

47.如权利要求40所述的计算机可读介质,其中,所述特征包括单位, 并且操作步骤包括如下步骤: 使用反映数值单位特征的标签,操作单个数据集的显示。

48.如权利要求40所述的计算机可读介质,其中,所述特征包括测度, 并且所述操作步骤包括如下步骤: 使用反映数值测度特征的标签,操作单个数据集的显示。

49.一种计算机可读介质,包含用于控制数据处理系统,以执行包括如 下步骤的方法的指令: 接收具有数值集和表示数值特征的标签的标记文档; 确定对数值集的变换以反映新特征; 访问数值集的多个标签,多个表示数量级、标度、修饰符、单位和测度 的标签; 确定数量级、标度、修饰符、单位和测度标签的转换因子,以完成向新 特征的变换;和 将数值集乘以所确定的转换因子,以变换数值集来反映新特征。

50.如权利要求40所述的计算机可读介质,进一步包括如下步骤: 显示经过变换的数值集。

51.一种数据处理系统,包括: 接收第一标记文档和第二标记文档的装置,第一标记文档和第二标记文 档均包含数值和反映数值特征的标签; 使用标签将第一标记文档和第二标记文档自动组合为单个数据集的装 置; 显示单个数据集的装置。

52.一种数据处理系统中的方法,包括如下步骤: 接收包含数值的文档; 接收对数值特征的指示,该特征指示格式和语义;和 将所接收的指示作为与数值关联的标签加入到文档中,以创建标记文 档。

53.一种数据处理系统中的方法,包括如下步骤: 接收包含数值的文档; 接收对数值特征的指示,该特征指示结构和语义;和 将所接收的指示作为与数值关联的标签加入到文档中,以创建标记文 档。

54.一种数据处理系统中的方法,包括如下步骤: 接收包含数值的文档; 接收对数值特征的指示,该特征指示格式和值;和 将所接收的指示作为与数值关联的标签加入到文档中,以创建标记文 档。

55.一种数据处理系统中的方法,包括如下步骤: 接收包含数值的文档; 接收对数值特征的指示,该特征指示结构和值;和 将所接收的指示作为与数值关联的标签加入到文档中,以创建标记文 档。

56.一种数据处理系统中的方法,包括如下步骤: 接收包含数值的文档; 接收对数值特征的指示,该特征指示结构和起源;和 将所接收的指示作为与数值关联的标签加入到文档中,以创建标记文 档。

57.一种数据处理系统中的方法,包括如下步骤: 接收包含数值的文档; 接收对数值特征的指示,该特征指示格式和起源;和 将所接收的指示作为与数值关联的标签加入到文档中,以创建标记文 档。

58.一种数据处理系统中的方法,包括如下步骤: 接收包含数值的文档; 接收对数值特征的指示,该特征指示格式、起源、结构、值和语义;和 将所接收的指示作为与数值关联的标签加入到文档中,以创建标记文 档。

59.一种数据处理系统,包括: 第一计算机,包括带标记文档的存储设备; 第二计算机,包括: 存储器,带有一个程序,提取标记文档,并且在电子表格中显示 标记文档的内容;和 处理器,用于运行程序;和 网络,用于第一计算机和第二计算机之间的互连。

60.如权利要求59所述的数据处理系统,其中,所述网络是因特网。

61.如权利要求59所述的数据处理系统,其中,所述程序允许用户在 网络上搜索其它标记文档。

62.如权利要求59所述的数据处理系统,其中,所述第二计算机进一 步包括在图表视图中显示标记文档内容的显示器。

63.如权利要求59所述的数据处理系统,其中,所述第二计算机进一 步包括在树视图中显示标记文档内容的显示器。

64.如权利要求59所述的数据处理系统,其中,所述第二计算机进一 步包括在脚注视图中显示标记文档内容的显示器。

65.一种用文档和程序编码的计算机可读介质,所述文档包括: 数值和反映数值特征的标签,特征包括单位和数量级;并且 所述程序包括: 读取数值和标签并以由特征指定的方式显示数值的指令。

66.一种带有程序的数据处理系统中的方法,该方法包括由程序执行的 如下步骤: 从相对数据处理系统的远端场所接收标记文档;和 在电子表格中显示标记文档内容。

67.一种具有显示图表的显示器的数据处理系统中的方法,该方法包括 如下步骤: 接收带表示数值特征的标签的数值序列; 在图表上显示数值序列; 根据至少一个标签,自动确定数值的描述性文本部分;和 在图表上显示所确定的描述性文本部分。

68.如权利要求67所述的方法,其中,所述描述性文本部分为标题。

69.如权利要求68所述的方法,进一步包括如下步骤: 接收对数值序列进行变换的指示; 自动确定新标题,以响应所指示变换;和 在图表上显示新标题。

70.如权利要求68所述的方法,进一步包括如下步骤: 接收要与第一数值序列一起显示在图表上的第二数值序列; 当第二数值序列与第一数值序列一起显示在图表上时,自动确定图表的 新标题; 在所述图表上显示新标题。

71.如权利要求68所述的方法,其中,所述标题是图表标题。

72.如权利要求68所述的方法,其中,所述标题是轴标题。

73.如权利要求72所述的方法,其中,所述标题是x-轴标题。

74.如权利要求72所述的方法,其中,所述标题是y-轴标题。

75.如权利要求67所述的方法,其中,所述描述性文本部分是轴标。

76.如权利要求75所述的方法,进一步包括如下步骤: 接收对数值序列进行变换的指示; 自动确定新轴标,以响应所指示变换;和 在图表上显示新轴标。

77.如权利要求75所述的方法,其中,所述轴标是x-轴标。

78.如权利要求75所述的方法,其中,所述轴标是y-轴标。

79.一种具有显示图表的显示器的数据处理系统中的方法,该方法包括 如下步骤: 接收带有表示数值特征的第一标签的第一数值序列; 在图表上显示第一数值序列,第一数值序列对应于图表上的第一轴; 接收要加入图表的第二数值序列,第二数值序列带有表示第二数值序列 特征的第二标签; 在图表上自动生成第二轴;和 在第一序列显示在图表上的同时,在对应于第二轴的图表上显示第二数 值序列。

80.如权利要求79所述的方法,进一步包括如下步骤: 根据至少一个第二标签自动格式化图表上的第二轴。

81.如权利要求79所述的方法,进一步包括如下步骤: 当第二数值序列与第一数值序列一起显示在图表上时,自动确定图表的 新标题。

82.一种具有显示图表的显示器的数据处理系统中的方法,该方法包括 如下步骤: 接收在显示图表上显示数值序列的第一指令,其中数值具有表示数值特 征的标签; 在图表上显示数值序列以响应所接收的第一指令;和 根据至少一个标签自动格式化图表,以响应所接收的指令。

83.如权利要求82所述的方法,其中,所接收指令是鼠标事件。

84.如权利要求82所述的方法,进一步包括如下步骤: 接收在显示图表上显示第二数值序列的第二指令,其中数值具有表示第 二数值序列特征的标签;和 在图表上显示第二数值序列。

85.如权利要求84所述的方法,其中,所接收的第二指令用shift键事 件和光标键事件表示。

86.一种数据处理系统,包括: 存储器,用于存储用来操作和显示数值数据的图表应用,该存储器具有 带表示与数值相关联的文本信息的标签的所选数值序列; 显示器,显示带图例的图表,(1)图例显示与所选数值序列相关联的文 本信息,并且(2)当文本信息不能在图表的图例上完全显示时,图例将对与 数值数据序列相关联的文本信息进行换行和滚动;和 处理器,用于运行图表应用。

87.一种数据处理系统,包括 存储器,用于存储用来操作和显示数值数据的图表应用,和带表示数值 特征的标签的数值序列; 输入器,用于接收显示数值序列的指令; 显示器,显示图表,并且在图表上显示数值序列,以响应所接收的指令; 和 处理器,用于运行图表应用并且根据至少一个标签自动格式化图表。

88.如权利要求87所述的数据处理系统,其中,所接收指令是鼠标事 件。

89.一种数据处理系统中的方法,包括如下步骤: 接收具有数值集和表示数值特征的标签的标记文档,该特征包括单位和 数量级; 根据表示数值特征的标签操作数值集的显示;和 在视图上显示数值集。

90.如权利要求89所述的方法,其中,显示步骤进一步包括如下步骤: 在图表视图上显示数值集。

91.如权利要求89所述的方法,其中,显示步骤进一步包括如下步骤: 在电子表格视图上显示数值集。

92.如权利要求89所述的方法,其中,显示步骤进一步包括如下步骤: 在脚注视图上显示数值集。

93.如权利要求89所述的方法,其中,显示步骤进一步包括如下步骤: 在树视图上显示数值集。
    
94.一种计算机可读介质,包含用于控制数据处理系统,以执行一个方 法的指令,该数据处理系统具有显示图表的显示器,该方法包括如下步骤: 接收带表示数值特征的标签的数值序列; 在图表上显示数值序列; 根据至少一个标签,自动确定数值的描述性文本部分;和 在图表上显示所确定的描述性文本部分。

95.如权利要求94所述的计算机可读介质,其中,所述描述性文本部 分为标题。

96.如权利要求95所述的计算机可读介质,进一步包括如下步骤: 接收对数值序列进行变换的指示; 自动确定新标题,以响应所指示变换;和 在图表上显示新标题。

97.如权利要求95所述的计算机可读介质,进一步包括如下步骤: 接收要与第一数值序列一起显示在图表上的第二数值序列; 当第二数值序列与第一数值序列一起显示在图表上时,自动确定图表的 新标题;和 在图表上显示新标题。

98.如权利要求95所述的计算机可读介质,其中,所述标题是图表标 题。

99.如权利要求95所述的计算机可读介质,其中,所述标题是轴标题。

100.如权利要求99所述的计算机可读介质,其中,所述轴标题是x-轴 标题。

101.如权利要求99所述的计算机可读介质,其中,所述轴标题是y-轴 标题。

102.如权利要求94所述的计算机可读介质,其中,描述性文本部分是 轴标。

103.如权利要求102所述的计算机可读介质,进一步包括如下步骤: 接收对数值序列进行变换的指示; 自动确定新轴标,以响应所指示变换;和 显示新轴标。

104.如权利要求102所述的计算机可读介质,其中,所述轴标是x-轴 标。

105.如权利要求102所述的计算机可读介质,其中,所述轴标是y-轴 标。

106.一种计算机可读介质,包含用于控制数据处理系统,以执行一个 方法的指令,该数据处理系统具有显示图表的显示器,该方法包括如下步骤: 接收带有表示数值特征的第一标签的第一数值序列; 在图表上显示第一数值序列,第一数值序列对应于图表上的第一轴; 接收要加入到图表的第二数值序列,第二数值序列带有表示第二数值序 列特征的第二标签; 在图表上自动生成第二轴;和 在第一数值序列显示在图表上的同时,在对应于第二轴的图表上显示第 二数值序列。

107.如权利要求106所述的计算机可读介质,进一步包括如下步骤: 根据至少一个第二标签自动格式化图表上的第二轴。

108.如权利要求106所述的计算机可读介质,进一步包括如下步骤: 当第二数值序列与第一数值序列一起显示在图表上时,自动确定图表的 新标题。

109.一种计算机可读介质,包含用于控制数据处理系统,以执行一个 方法的指令,该数据处理系统具有显示图表的显示器,该方法包括如下步骤: 接收在显示器上的图表上显示数值序列的第一指令,其中数值具有表示 数值特征的标签; 在图表上显示数值序列以响应所接收的第一指令;和 根据至少一个标签自动格式化图表,以响应所接收的指令。

110.如权利要求109所述的计算机可读介质,其中,所接收指令是鼠 标事件。

111.如权利要求109所述的计算机可读介质,进一步包括如下步骤: 接收在显示器上的图表上显示第二数值序列的第二指令,其中数值具有 表示第二数值序列特征的标签;和 在图表上显示第二数值序列。

112.如权利要求109所述的计算机可读介质,其中,所接收的第二指 令包括shift键事件和光标键事件。

113.一种计算机可读介质,包含用于控制数据处理系统,以执行包括 如下步骤的方法的指令: 接收具有数值集和表示数值特征的标签的标记文档,该特征包括单位和 数量级; 根据表示数值特征的标签操作数值集的显示;和 在视图上显示数值集。

114.如权利要求113所述的计算机可读介质,其中,显示步骤进一步 包括如下步骤: 在图表视图上显示数值集。

115.如权利要求113所述的计算机可读介质,其中,显示步骤进一步 包括如下步骤: 在电子表格视图上显示数值集。

116.如权利要求113所述的计算机可读介质,其中,显示步骤进一步 包括如下步骤: 在脚注视图上显示数值集。

117.如权利要求113所述的计算机可读介质,其中,显示步骤进一步 包括如下步骤: 在树视图上显示数值集。

118.一种具有显示图表的显示器的数据处理系统,包括: 接收带表示数值特征的标签的数值序列的装置; 在图表上显示数值的装置; 根据至少一个标签,自动确定数值的描述性文本部分的装置;和 在图表上显示所确定描述性文本部分的装置。

119.一种数据处理系统中的方法,包括如下步骤: 接收第一数值序列; 接收第二数值序列; 确定第一与第二数值序列之间的关系;和 根据所确定的关系显示描述第一与第二数值序列之间关系的图标。

120.如权利要求119所述的方法,其中,所述图标描述第一数值序列 是第二数值序列的父亲。

121.如权利要求119所述的方法,其中,所述图标描述第一数值序列 是所述第二数值序列与一个第三数值序列的和。

122.如权利要求119所述的方法,其中,所述图标描述第一数值序列 是所述第二数值序列与一个第三数值序列的相乘。

123.如权利要求119所述的方法,其中,所述图标描述第一数值序列 是包括第二数值序列的组的成员。

124.如权利要求119所述的方法,其中,所述图标描述第一数值序列 是包括第二数值序列的组的根。

125.如权利要求119所述的方法,其中,所述图标描述第一数值序列 是所述第二数值序列与一个第三数值序列的相除。

126.如权利要求119所述的方法,进一步包括如下步骤: 显示第一数值序列;和 显示第二数值序列。

127.一种数据处理系统中的方法,包括如下步骤: 接收数值序列和与该数值序列相关联的链接,该链接具有一个相关超链 接列表; 显示数值序列及其相关链接; 接收激活链接的指令;和 显示与链接相关联的超链接列表,以响应所接收的指令。

128.如权利要求127所述的方法,进一步包括如下步骤: 接收激活超链接列表中一个超链接的第二指令;和 激活这一个超链接。

129.一种具有显示图表的显示器的数据处理系统中的方法,包括如下 步骤: 接收带相关元数据文档化的数值序列; 接收选择数字序列的指令;和 在显示与数值序列相关联的元数据文档化的同时,在图表上显示数值序 列。

130.一种计算机可读介质,包含用于控制数据处理系统,以执行包括 如下步骤的方法的指令: 接收第一数值序列; 接收第二数值序列; 确定第一与第二数值序列之间的关系;和 根据所确定的关系显示描述第一与第二数值序列之间关系的图标。

131.如权利要求130所述的计算机可读介质,其中,所述图标描述第 一数值序列是第二数值序列的父亲。

132.如权利要求130所述的计算机可读介质,其中,所述图标描述第 一数值序列是所述第二数值序列与一个第三数值序列的和。

133.如权利要求130所述的计算机可读介质,其中,所述图标描述第 一数值序列是所述第二数值序列与一个第三数值序列的相乘。

134.如权利要求130所述的计算机可读介质,其中,所述图标描述第 一数值序列是包括第二数值序列的组的成员。

135.如权利要求130所述的计算机可读介质,其中,所述图标描述第 一数值序列是包括第二数值序列的组的根。

136.如权利要求130所述的计算机可读介质,其中,所述图标描述第 一数值序列是所述第二数值序列与一个第三数值序列的相除。

137.如权利要求130所述的计算机可读介质,进一步包括如下步骤: 显示第一数值序列;和 显示第二数值序列。

138.一种计算机可读介质,包含用于控制数据处理系统,以执行包括 如下步骤的方法的指令: 接收数值序列和与该数值序列相关联的链接,该链接具有一个相关超链 接列表; 显示数值序列及其相关链接; 接收激活链接的指令;和 显示与链接相关联的超链接列表,以响应所接收的指令。

139.如权利要求138所述的计算机可读介质,进一步包括如下步骤: 接收激活超链接列表中一个超链接的第二指令;和 激活这一个超链接。

140.一种计算机可读介质,包含用于控制数据处理系统,以执行包括 如下步骤的方法的指令: 接收带相关元数据文档化的数值序列; 接收选择数字序列的指令;和 在显示与数值序列相关联的元数据文档化的同时,在图表上显示数值序 列。

141.一种数据处理系统,包括: 存储器,带有一个程序,该程序用于(1)操作数值,和(2)存储第一和第 二数值序列; 显示器,用于显示第一和第二数值序列; 显示器上的关系图标,描述第一和第二数值序列之间的关系;和 处理器,用于运行该程序。

142.一种数据处理系统,包括: 接收第一数值序列的装置; 接收第二数值序列的装置; 确定第一与第二数值序列之间关系的装置;和 根据所确定的关系显示描述第一与第二数值序列之间关系的图标的装 置。

143.一种处理带标签数值数据的方法,包括: 接收具有表示数值特征的标签的数值序列; 接收定义为执行数值序列操作的宏;和 根据标签对数值序列执行由宏定义的操作。

144.如权利要求143所述的方法,其中,所述宏包括至少一个算术语 句。

145.如权利要求144所述的方法,其中,所述至少一个算术语句包括(1) 算术运算符、(2)常量和(3)变量中的至少一个。

146.如权利要求143所述的方法,其中,所述宏包括至少一个控制流 程关键字。

147.如权利要求143所述的方法,其中,所述宏包括至少一个从由IF、 SWITCH和WHILE构成的组中选择的控制流程关键字。

148.如权利要求143所述的方法,其中,所述宏包括由数据查看器支 持的内在函数。

149.如权利要求148所述的方法,其中,所述内在函数包括从由 Average()、Sum()、ChangeCurrencyFormat()和ChangeLanguage()构成的组中 选择的函数。

150.如权利要求143所述的方法,其中,所述宏包括用户指定函数。

151.如权利要求143所述的方法,其中,执行步骤包括产生(1)输出值、 (2)树和(3)图表中的至少一个的步骤。

152.如权利要求143所述的方法,其中,执行步骤包括更新图表和树 中至少一个的描述性文本部分的步骤。

153.如权利要求143所述的方法,其中,执行步骤包括创建图表和树 视图中至少一个的描述性文本部分的步骤。

154.如权利要求143所述的方法,其中,执行步骤包括更新图表和树 视图中至少一个的描述性文本部分的步骤。

155.如权利要求153所述的方法,其中,描述性文本部分包括标题、 图例和标注中的至少一个。

156.如权利要求145所述的方法,其中,所述变量包括涉及由数据查 看器显示的(1)图表、(2)图和(3)树中至少一个的变量。

157.如权利要求145所述的方法,其中,所述变量包括在不同于包含 宏的文档的本地文档中引用的变量。

158.如权利要求145所述的方法,其中,所述变量包括在不同于包含 宏的文档的远端文档中引用的变量。

159.如权利要求143所述的方法,其中,所述标签表示数值序列的元 数据。

160.如权利要求143所述的方法,其中,所述标签表示(1)值、(2)语义、 (3)格式、(4)量度、(5)结构和(6)起源中的至少一个。

161.如权利要求143所述的方法,其中,接收步骤包括接收表示特征 的标签,该标签从由(1)值、(2)语义、(3)格式、(4)量度、(5)结构和(6)起源构 成的组中进行选择。

162.如权利要求143所述的方法,其中,所述数值序列包括要显示在(1)n- 维图表和(2)n-维图中至少一个上的值。

163.如权利要求143所述的方法,其中,所述数值序列包括(1)标量(scalar) 值序列、(2)元组(tuples)向量和(3)向量的向量中的至少一个。

164.如权利要求163所述的方法,其中,执行步骤包括对(1)标量值序 列、(2)元组向量和(3)向量的向量中的至少一个执行集操作。

165.如权利要求164所述的方法,其中,集操作包括(1)排序操作、(2) 过滤操作、(3)选择操作和(4)连接操作中的至少一个。

166.如权利要求163所述的方法,其中,执行步骤包括对(1)标量值序 列、(2)元组向量和(3)向量的向量中的至少一个执行变换操作,以改变(1)标 量值序列、(2)元组向量和(3)向量的向量中的至少一个。

167.如权利要求143所述的方法,其中,执行步骤包括将覆盖图、数 据点备注(datapoint notes)和脚注中的至少一个加入到图表、报表和图中的至 少一个的步骤。

168.如权利要求143所述的方法,其中,执行步骤包括将表示回归线 和移动平均数中至少一个的附加变量加入到图表、报表和图中的至少一个的 步骤。

169.如权利要求163所述的方法,其中,执行步骤包括执行“替换每 个”操作,用于用(1)标量值序列、(2)元组向量和(3)向量的向量中至少一个 的修改版本替换(1)标量值序列、(2)元组向量和(3)向量的向量中的至少一 个,并且在图表和图中的至少一个中显示修改版本。

170.如权利要求163所述的方法,其中,执行步骤包括执行“替换所 有”操作,用于从图表和图中的至少一个删除(1)标量值序列、(2)元组向量 和(3)向量的向量中至少一个,并且在图表和图中的至少一个上替换为宏结 果。

171.如权利要求143所述的方法,其中,接收宏的步骤包括接收包含 所解释代码和元数据的宏。

172.如权利要求143所述的方法,其中,接收宏的步骤包括接收包含 错误处理指令的宏。

173.如权利要求143所述的方法,进一步包括如下步骤: 创建宏。

174.如权利要求173所述的方法,其中,创建宏的步骤进一步包括如 下步骤: 指定所需特征;和 创建对具有指定特征的数值序列执行操作的宏。

175.一种数据处理系统,包括: 存储器,包括具有定义为执行数值序列操作的宏的数值分析程序和具有 表示数值特征的标签的数值序列; 处理器,用于运行程序,从而程序使用所表示的特征对数值序列执行由 宏定义的操作;和 显示器,用于显示操作结果。

176.一种计算机可读介质,用于控制数据处理系统以执行处理带标签 数值数据的方法,该方法包括如下步骤: 接收具有表示数值特征的标签的数值序列; 接收定义为执行数值序列操作的宏;和 根据标签对数值序列执行由宏定义的操作。

177.如权利要求176所述的计算机可读介质,其中,所述宏包括至少 一个算术语句。

178.如权利要求177所述的计算机可读介质,其中,所述至少一个算 术语句包括(1)算术运算符、(2)常量和(3)变量中的至少一个。

179.如权利要求176所述的计算机可读介质,其中,所述宏包括至少 一个控制流程关键字。

180.如权利要求176所述的计算机可读介质,其中,所述宏包括至少 一个从由IF、SWITCH和WHILE构成的组中选择的控制流程关键字。

181.如权利要求176所述的计算机可读介质,其中,所述宏包括由数 据查看器支持的内在函数。

182.如权利要求181所述的计算机可读介质,其中,所述内在函数包 括从由Average()、Sum()、ChangeCurrencyFormat()和ChangeLanguage()构成 的组中选择的函数。

183.如权利要求176所述的计算机可读介质,其中,所述宏包括用户 指定函数。

184.如权利要求176所述的计算机可读介质,其中,所述执行步骤包 括产生(1)输出值、(2)树和(3)图表中的至少一个的步骤。

185.如权利要求176所述的计算机可读介质,其中,所述执行步骤包 括更新图表和树中至少一个的描述性文本部分的步骤。

186.如权利要求176所述的计算机可读介质,其中,所述执行步骤包 括创建图表和树视图中至少一个的描述性文本部分的步骤。

187.如权利要求176所述的计算机可读介质,其中,所述执行步骤包 括更新图表和树视图中至少一个的描述性文本部分的步骤。

188.如权利要求186所述的计算机可读介质,其中,所述描述性文本 部分包括标题、图例和标注中的至少一个。

189.如权利要求178所述的计算机可读介质,其中,所述变量包括涉 及由数据查看器显示的(1)图表、(2)图和(3)树中至少一个的变量。

190.如权利要求178所述的计算机可读介质,其中,所述变量包括在 不同于包含宏的文档的本地文档中引用的变量。

191.如权利要求178所述的计算机可读介质,其中,所述变量包括在 不同于包含宏的文档的远端文档中引用的变量。

192.如权利要求176所述的计算机可读介质,其中,所述标签表示数 值序列的元数据。

193.如权利要求176所述的计算机可读介质,其中,所述标签表示(1) 值、(2)语义、(3)格式、(4)量度、(5)结构和(6)起源中的至少一个。

194.如权利要求176所述的计算机可读介质,其中,所述接收步骤包 括接收表示特征的标签,该标签从由(1)值、(2)语义、(3)格式、(4)量度、(5) 结构和(6)起源构成的组中进行选择。

195.如权利要求176所述的计算机可读介质,其中,所述数值序列包 括要显示在(1)n-维图表和(2)n-维图中至少一个上的值。

196.如权利要求176所述的计算机可读介质,其中,所述数值序列包 括(1)标量值序列、(2)元组向量和(3)向量的向量中的至少一个。

197.如权利要求196所述的计算机可读介质,其中,所述执行步骤包 括对(1)标量值序列、(2)元组向量和(3)向量的向量中的至少一个执行集操 作。

198.如权利要求197所述的计算机可读介质,其中,所述集操作包括(1) 排序操作、(2)过滤操作、(3)选择操作和(4)连接操作中的至少一个。

199.如权利要求196所述的计算机可读介质,其中,执行步骤包括对(1) 标量值序列、(2)元组向量和(3)向量的向量中的至少一个执行变换操作,以 改变(1)标量值序列、(2)元组向量和(3)向量的向量中的至少一个。

200.如权利要求176所述的计算机可读介质,其中,执行步骤包括将 覆盖图、数据点备注和脚注中的至少一个加入到图表、报表和图中的至少一 个的步骤。

201.如权利要求176所述的计算机可读介质,其中,执行步骤包括将 表示回归线和移动平均数中至少一个的附加变量加入到图表、报表和图中的 至少一个的步骤。

202.如权利要求196所述的计算机可读介质,其中,执行步骤包括执 行“替换每个”操作,用于用(1)标量值序列、(2)元组向量和(3)向量的向量 中至少一个的修改版本替换(1)标量值序列、(2)元组向量和(3)向量的向量中 的至少一个,并且在图表和图中的至少一个中显示修改版本。

203.如权利要求196所述的计算机可读介质,其中,执行步骤包括执 行“替换所有”操作,用于从图表和图中的至少一个删除(1)标量值序列、(2) 元组向量和(3)向量的向量中至少一个,并且在图表和图中至少一个上替换为 宏结果。

204.如权利要求176所述的计算机可读介质,其中,接收宏的步骤包 括接收包含所解释代码和元数据的宏。

205.如权利要求176所述的计算机可读介质,其中,接收宏的步骤包 括接收包含错误处理指令的宏。

206.如权利要求176所述的计算机可读介质,进一步包括如下步骤: 创建宏。

207.如权利要求206所述的方法,其中,创建宏的步骤进一步包括如 下步骤: 指定所需特征;和 创建对具有指定特征的数值序列执行操作的宏。

208.一种具有带标签数值数据的数据处理系统,包括: 接收具有表示数值特征的标签的数值序列的装置; 接收定义为执行数值序列操作的宏的装置;和 根据标签对数值序列执行由宏定义的操作的装置。
展开

说明书

相关应用本专利申请要求1999年5月21日提交的美国临时专利申请No.60/135,525 和2000年2月17日提交的美国临时专利申请No.60/183,152的优先权,这 些专利在此被引用参考。
发明领域本发明一般涉及数据处理系统,特别涉及一种用在数据浏览器和操作器 中的计算机标记语言。
相关技术目前在因特网上,通常使用称作超文本传输协议(Hypertext Transfer Protocol,HTTP)的通信协议进行传输和通信,该协议可以用来传送格式为 超文本标记语言(Hypertext Markup Language,HTML)的文件和文档。
标记语 言是一种嵌入描述文档的结构和行为并且指示web浏览器或其它程序如何显 示文档的标记“标签”(特殊的字符序列)的方式。
典型地,格式为HTML的 文档或网页是混合普通文本和这些标记标签的简单ASCII文本文件。
HTML具有为特定目的定义固定标签集的相对受限结构。
而且,HTML 典型地只对文本和图象工作,并且典型地只指示浏览器如何显示文档:浏览 器可以读取并且显示字符串,但是并不“理解”数据内容。
在一定程度上, HTML浏览器在它们的显示中表现数字,它们仍不被解释为数字—仅仅是文 本。
因此,HTML文档不是作为“数据”进行解释,而是作为用于显示图象 的格式化指令。
用户不能在数值数据中“冲浪”,以观看图象、应用变换、 组合来自不同网页的数字、或者以可管理的形式将数字载入到电子表格中。
在没有剪切-并-粘贴文本、确定数据类型等人工干预的情况下,不能由分析 程序直接读取数字。
因此,传统分析程序考虑到对抽象数字进行特别的查看 和操作(例如,电子表格程序或数据库程序),但是不能直接从在线源读取它 们的数据。
数据一经输入并解释,这种程序就可以执行对数据的统计分析、 结构分析和简单变换。
考虑到HTML的受限能力和SGML不同寻常的复杂性,可扩展标记语 言(Extensive Markup Language,“XML”)被开发出来用以帮助克服一些这种 限制。
XML是没有指定标签的自由形式标记语言,它允许开发者开发他们 自己的标签,并且,根据特定任务,有效地创建他们自己的标记语言。
在XML 中,必须根据特定规则组织标签,但是标签的含义是灵活的。
不同于HTML, XML描述结构和含义,而不是格式化。
因此,不同的专业可以开发它们自 己的专业标记语言。
例如,如果开发者要用XML创建描述书的标记语言, 开发者可以为“标题”、“作者”、和“出版社”创建具有特定含义的标签, 这些如果用HTML就不可能。
虽然XML自由形式结构允许开发者开发标记 语言,但是由于不同用户为不同目的使用标签从而标签的使用没有标准化, 因此这种个人化标记语言不能彼此兼容。
在今天的商业世界,典型地伴随数据操作的问题经常增加开支和困难。
一个这样的问题是经常数据和描述数据的文档化都不是电子格式。
数据库和 电子表格信息这种传统方法经常要求,任何时候数据要从一个系统传输到另 一个系统都需要昂贵的数据库管理员作转换,需要结合任何一种编程任务对 打印文档化(documentation)进行昂贵的分析,并且输出很少包含对原始源、 结构和创建那个输出的操作的任何指示。
在基于PC的系统中,创建数据的 文档化传统上留给用户:典型地,从用户收集文档化、将它格式化并且将它 与数据一起保存,这些工作都没有由机器来完成,从而消除了数据重用的便 利性。
另一阻碍传统数据库和电子表格效率的障碍是在太低的概念层上计算。
典型数值分析程序的计算对电子表格的单个“单元格”或对数据库的单个“记 录”进行操作。
当涉及很多不同单元格或记录值时,一次分析单个值的操作 太慢,并且被证实,成本太高。
缺少帮助浏览数字的标准标记语言没有办法在单个图表上读取、自动操 作和显示从多个在线源读取的不同类型的数值数据。
需要人的干预来识别不 同类型的数值数据,并且规范数据,从而让它们可以在图表、图和报表中进 行组合和有条理的显示。
传统上,当组合一系列不同类型的数据时,显示数 值数据的图表格式化需要手工操作。
而且,对不同数值数据集之间的关系没 有给出可视提示。
数据和分析例程没有标准化这一事实进一步阻碍了计算机行业。
虽然计 算机行业已开发了用于文件格式和函数级接口的标准,但是它尚未开发一种 通用数据格式或内容分析标准。
这导致了使用不同协议的系统、行业、公司 和用户之间昂贵的数据翻译。
传统电子表格的分析例程典型地采用“电子表格宏”的形式。
宏本质上 是执行经过完好定义、通常受限的任务的短程序。
上百万电子表格用户已使 用电子表格宏来自动完成涉及在操作他们的电子表格中数字的机械任务。
但 是在电子表格宏上的巨大投入一般都没有得到充分利用,因为这些宏是“编 写一次、使用一次”的软件类型;它们很少被其他人使用。
当前编程语言和电子表格宏是不可重用或不可移植的至少存在八种原 因。
其中一个问题是电子表格数据引用通常基于物理位置。
假设宏编写者将 利率假定放在单元格“C4”中,而另一人的表格将利率假定放在单元格 “BR47”中,明确地引用绝对单元格位置C4的宏将不可重用在第二个电子 表格中。
另一相关问题是电子表格的数字没有描述它们含义的量度或语义指定 符。
一个电子表格可能以百万美元为单位进行操作,而另一表格以千美元为 单位进行操作。
没有人的干预不能在两个电子表格中使用同一宏,以挑选出 所有的不一致性,并且修改一个电子表格以与另一兼容。
作为另一示例,可 以编写一个股票价格除以收益来得到P/E比率的宏,但是除了单元格中的词 在数字的左边或上边之外,电子表格中的数字没有任何含义。
缺少标准位置 和词汇表,这些指示符毫无用处。
传统电子表格宏的另一问题是缺少文档化。
由于宏典型地只能由它们的 创建者对为其创建该宏的单个电子表格进行使用,因此它们倾向于是完全没 有文档化的:没有普通语言描述、没有帮助文件、对于允许值、源联系列表、 授权信息等没有数据标准。
而且,对于宏没有规模发布的机制。
电子表格宏不是web(万维网)友好 的:它们通常受限于一种牌子的电子表格和一个平台,不支持超链接,并且 不能由搜索引擎进行搜索。
另外,它们还不被目录或分类系统支持,并且没 有完备市场。
更进一步,用户典型地在他们所编写的宏中不包括单元测试,合法性测 试,错误处理和其他终端用户保护。
这样,用户对可能要加入到他们的电子 表格的宏的输出不得不小心。
传统电子表格宏在制作数据的图形界面上存在困难。
外来宏的终端用户 不想理解每一个单元格和位置约束,对允许输入的合法值的每一个限制等。
缺少相关图形组件进一步加剧了这一问题。
最后,传统电子表格宏太小而不具有市场价值,或太难于使用而找不到 大量用户。
这样的结果是对它们的编写缺少商业刺激。
因此克服上述问题和 其他相关问题是理想的。
                            概要本发明的方法和系统提供一种称作可重用数据标记语言(Reusable Data Markup Language,“RDML”)的标记语言,它允许对数字进行浏览和操作, 并且提供一种充当Web浏览器与电子表格/分析应用的组合体的相关数据查 看器,它可以自动从多个在线源读取数字并且对它们进行操作,而不需要人 的干预。
使用该标记语言,用户可以使用基于数值的查询浏览在线源,并且 数据观看器可以自动地在单个显示上组合和操作多个文档。
根据本发明的一个实现,提供一种数据处理系统中的方法,其接收第一 标记文档和第二标记文档,第一标记文档和第二标记文档均包含数值和反映 数值特征的标签。
该方法将第一标记文档和第二标记文档自动组合为单个数 据集,并且显示该单个数据集。
根据另一实现,提供一种数据处理系统中的方法,其接收包含数值的文 档,并且接收对数值特征的指示,该特征包括单位和数量级。
而且,它将所 接收的指示作为与数值关联的标签加入到文档中,以创建标记文档。
根据另一实现,提供一种数据处理系统中的方法,其接收具有数值集和 表示数值特征的标签的标记文档,并且确定对该数值集的变换以反映新的特 征。
然后该方法访问该数值集的多个标签,多个表示数量级(magnitude)、标 度(scale)、修饰符(modifier)、单位(units)、测度(measure)、调整(adjustment) 和集合(aggregation)的标签。
而且,该方法确定数量级、标度、修饰符、单 位、测度、调整和集合标签的转换因子,以完成向新特征的变换,并且将该 数值集乘以所确定的转换因子,以变换该数值集来反映新的特征。
本发明的方法和系统提供一种对数值数据进行自动操作和图形显示的图 表视图。
该操作和显示基于描述数值数据特征,与数值数据相关联的属性。
图表视图帮助在单个图表上同时显示不同类型数值的不同序列,并且自动显 示适当的描述性文本部分(例如,轴标、轴标题、图表标题、数值精度、图 例、脚注、轴标度等)。
图表视图允许单击变换数值序列,并且作为响应提 供对描述性文本部分的自动格式化。
根据本发明的一种实现,提供一种具有显示图表的显示器的数据处理系 统中的方法,接收带表示数值特征的标签的数值序列,并且在图表上显示数 值。
而且,该方法根据至少一个标签自动确定数值标题,并且在图表上显示 所确定的标题。
根据本发明的另一实现,提供一种具有显示图表的显示器的数据处理系 统中的方法,接收具有表示数值特征的标签的第一数值序列,并且在图表上 显示第一数值序列,第一数值序列对应于图表上的第一轴。
该方法进一步接 收要加到图表的第二序列,第二数值序列具有表示第二数值序列特征的标 签,并且在图表上自动生成第二轴。
最后,该方法在第一数值序列显示在图 表上的同时,在对应于第二轴的图表上显示第二数值序列。
根据本发明的另一实现,提供一种具有显示图表的显示器的数据处理系 统中的方法,接收在显示器上的图表上显示数值序列的指令,该数值具有表 示数值特征的标签,并且在图表上显示数值序列以响应所接收的指令。
然后 该方法根据至少一个标签自动格式化图表,以响应所接收的指令。
根据本发明的另一实现,提供一种数据处理系统,包括用于存储用来操 作和显示数值数据的图表应用的存储器,该存储器具有带表示与数值相关联 的文本信息的标签的所选数值序列。
该数据处理系统进一步包括显示具有图 例的图表的显示器,显示与所选数值序列相关联的文本信息。
当文本信息不 能在图表的图例上完全显示时,图例将对与数值数据序列相关联的文本信息 进行换行和滚动。
该系统进一步包括用于运行图表应用的处理器。
本发明的方法和系统提供一种对数值数据进行自动操作和图形显示的树 视图。
树视图帮助在单个显示器上同时显示不同类型数值的不同序列,并且 自动显示适当的描述性文本部分。
树视图允许单击变换数值序列,并且作为 响应提供对描述性文本部分的自动格式化。
它在向用户提供与给定数值数据 序列相关联的超链接的同时,进一步向用户可视性地显示数值数据序列之间 的关系。
根据本发明的一种实现,提供一种数据处理系统中的方法,接收第一数 值序列和第二数值序列,并且确定第一与第二数值序列之间的关系。
然后该 方法根据所确定的关系显示描述第一与第二数值序列之间关系的图标。
根据本发明的另一实现,提供一种数据处理系统中的方法,接收数值序 列和与该数值序列相关联的链接,该链接具有一个相关超链接列表。
该方法 显示该数值序列及其相关链接,并且接收激活链接的指令。
而且,该方法还 显示与链接相关联的超链接列表,以响应所接收的指令。
根据本发明的另一实现,提供一种具有显示图表的显示器的数据处理系 统中的方法,接收带相关元数据文档化的数值序列。
该方法进一步接收选择 数字序列的指令,并且在显示与数值序列相关联的元数据文档化的同时在图 表上显示数值序列。
根据本发明的另一实现,提供一种数据处理系统,包括带一种程序的存 储器,该程序用于操作数值,并且存储第一数值序列和第二数值序列。
该数 据处理系统进一步包括显示器,用于显示第一和第二数值序列和描述第一和 第二数值序列之间关系的关系图标。
最后,该数据处理系统进一步包括用于 运行该程序的处理器。
本发明的方法和系统提供一种称作可重用宏标记语言(Reusable Macro Markup Language,“RMML”)的标记语言,用于产生和利用这样的宏:它是 能快速、便宜地进行编写的可重用数值分析例程,并且采用可由宽范围的 RDML(在其上运行宏的平台)数据文档使用的形式。
RMML允许可重用电子表格类型宏作为web文档进行张贴,由搜索引 擎进行搜索,组合为更加复杂的程序,并且与很多数据文档一起进行重用。
RMML带给电子表格处理例程如下经济和效率好处:(1)标准化;(2)可互换 部分;(3)创建的专业化和流水线技术;和(4)创建和部署的规模经济。
另外, RMML带给电子表格宏和数值编程一些万维网(World Wide Web)网的好处: (1)广泛的按需访问性;(2)搜索文档的能力(在这种情况下,对例程的功能和 行为而不是文本或数据进行搜索);和(3)超链接文档的能力(包括远端相互调 用的宏能力)。
根据本发明的另一实现,提供一种数据处理系统方法,接收定义执行数 值序列操作的宏,并且接收带表示数值特征的标签的数值序列。
然后该方法 使用所表示的特征对该数值序列执行由宏定义的操作。
根据本发明的另一实现,提供一种数据处理系统方法,接收定义对数值 集操作的宏,并且接收数值的向量或矩阵。
然后该方法使用该向量或矩阵作 为操作中的变量执行由宏定义的操作。
根据本发明的另一实现,提供一种数据处理系统,包括一个包含数值分 析程序的存储器,该程序具有定义为对数值序列操作的宏和带表示数值特征 的标签的数值序列。
它进一步包括:处理器,用于运行该程序,从而该程序 对该数值序列执行由宏定义的操作;显示器,用于显示操作结果。
                         附图描述图1示出根据本发明方法和系统的可重用数据标记语言(RDML)数据查 看器及其输入和输出的高层图; 图2示出适合用于本发明方法和系统的数据处理系统200; 图3示出图2所示各种RDML软件和硬件组件的相互关联图; 图4示出图2和3所示RDML格式器的使用,以将标记标签加入到数 据; 图5示出图2和3所示RDML格式器的数据库/文档页签和管理屏幕的 屏幕图; 图6示出当访问图2和3所示的RDML文档服务器时所执行步骤的流 程图; 图7A示出图2和3所示的RDML数据查看器的内部架构; 图7B说明图7A所示符号的含义; 图8示出根据本发明方法和系统的,在用于下载、处理和显示RDML 文档的方法中由RDML数据查看器执行的步骤的流程图; 图9示出根据本发明方法和系统的RDML文档类型定义的元素; 图10示出根据本发明方法和系统的,用来自动操作RDML文档以使用 行项属性进行显示的步骤的流程图; 图11示出由图7A所示x-值变换器执行的步骤,以将新文档存储在主 数据存储中的流程图; 图12A-C示出根据本发明方法和系统的X-Y图和树视图; 图13示出如图7A所示的RDML数据查看器的主数据存储; 图14A-F示出根据本发明方法和系统的,如图7A所示的RDML数据 查看器的图表视图和树视图; 图15A-C示出根据本发明方法和系统的,在树视图中一选择行项(line item)就由图形用户界面、图表管理器和用于将行项加到图表视图的图表数据 对象执行的步骤的流程图; 图16示出根据本发明方法和系统的,数据查看器的电子表格视图和图 表视图; 图17示出根据本发明方法和系统的,数据查看器的脚注视图和图表视 图; 图18示出根据本发明的可重用宏标记语言(RMML)文档类型定义的元 素; 图19A-C分别示出根据本发明的RMML文档处理、RMML图形界面 和RMML宏解释器; 图20A-D示出根据本发明的RMML宏面板的屏幕图; 图21示出根据本发明的,在将来自电子表格的信息置上标签的方法中 使用的步骤的流程图; 图22A-D示出根据本发明的,将电子表格信息置上标签以创建文档的 示例性屏幕图。
                          详细描述由于详细描述的长度,提供下面目录表。
主题                                                    章节可重用数据标记语言概述……………………………………………….I 可重用宏标记语言概述…………………………………………………I.A 系统硬件组件………………………………………………………………II 系统概述……………………………………………………………………III 系统细节……………………………………………………………………IV 内部数据查看器架构………………………………………………………IV.A 文档类型定义…………………………………………………………...IV.A.1 读取器、分析器和处理器………………………………………………IV.A.2 X-值变换器和行项集类型………………………………………………IV.A.3 主数据存储…………………………………….………………………..IV.A.4 图表视图…………………………………….…………………………..IV.A.5 树视图………………………………………….………………..IV.A.6 电子表格视图………………………………….………………..IV.A.7 脚注视图……………………………………….………………..IV.A.8 标签化向导…………………………………….………………..IV.A.9 RDML文档方面……………………………………………………IV.A.10 图形用户界面和HTML浏览器………………………………………IV.B 可重用宏标记语言…………………………………………………IV.C RMML宏包………………………………….…………………….IV.C.1 1.RDML概述本发明的方法和系统提供一种称作可重用数据标记语言(“RDML”)的 标记语言和称作RDML数据查看器的数据查看器,该查看器用于提取、操 作和查看使用RDML格式的文档。
通常,RDML允许对数字进行浏览和操 作,并且允许查看器充当可以自动从多个在线源读取数字,理解它们的含义 并且对它们进行操作而不需要人的干预的Web浏览器与电子表格/分析应用 的组合体。
RDML数据查看器可以如同HTML操作文本一样使用因特网获 取所请求的数字集。
使用RDML,在因特网上形成真正是数字查询的搜索是 可能的。
一个这样的请求是创建销售增长率大于10%并且没有应纳税收入 的公司的从1996到1997的季度收入列表。
接收到任何所请求的数值数据集 之后,甚至它们具有不同格式(也就是,一个以千美国美元为单位,另一以 百法国法郎为单位),数据查看器也可以在单个图形显示上对它们进行自动 变换和组合,而不需用户作手工调整。
用户然后可以向显示作单击调整(例 如,调整通胀、货币、时期、数字精度等),查看所接收信息的不同方面。
RDML 通常通过将数字与描述数字含义的属性相关联来帮助数字浏览。
虽然RDML的优选实施例是一个完全遵循XML版本1.0的实现,但是 其他实现也是可能的。
“XML宝典”,Elliotte Rusty Harold,IDG Books Worldwide,1999中对XML有详细描述,在此加入以作参考。
RDML数据 查看器是数据浏览器、数据操作器、数据查看器(采用图表、电子表格等形 式)和数据文档通用用户界面。
它大大扩展了由当前电子表格和数据库管理 程序提供的功能。
除了所扩展的功能之外,通过允许有效地重用数据、函数 和报表格式,它降低了商业成本。
RDML数据查看器操作RDML格式的数据文档,这些文档是可以在本 地、通过网络(包括因特网)或任何源组合存储的文件。
RDML数据文件结构 允许RDML数据查看器充当可以在其集成的分析程序中自动读取、解释和 操作数字的浏览器与分析程序(如电子表格)的组合体。
RDML数据查看器还 提供允许用户创建用于操作、变换和显示RDML格式数据的自定义例程的 “宏”开发和管理机制。
下面将对宏及其相关方面进行更加详细的描述。
图1示出根据本发明系统和方法的RDML数据查看器100及其输入和 输出的高层图。
通常,数据查看器100可以是驻留在计算机存储器中的软件, 并且接受几种类型的输入102、104和106,其中一个是RDML数据文档102。
RDML数据文档102可以是用遵循XML版本1.0的RDML标签格式化的 ASCII文本文档。
在本发明的一个实现中,RDML数据文档102的标签被有 利地组织为包括数据的文档化并且用“行项”,类似于关系数据库中“记录” 或“行”的数据值集合(下面讨论),安排数据。
在RDML中,行项通常为计 算的基本单位,而不同于大多数传统数据库或电子表格中典型的单个数据值 或单元格。
RDML文档102包含多个行项集(这种行项集类似于关系数据库 中的“表”)和有关这些“行项集”的文档化(“元数据”)。
RDML文档102 由内部存储数据的RDML数据查看器100进行读取,使其可用于很多以不 同方式(图表、表格等)向用户(没有显示)表现数据的“视图”108。
由于“视 图”108可以是从RDML数据查看器100接收其数据的独立软件程序,因此 它们还可称作程序或应用。
可以为数据开发分析例程,并且将其置于它们自己的称作可重用宏标记 语言(“RMML”)宏文档104的文档中,该文档是向数据查看器100的另一 输入,并且是可选的。
这些例程是可重用的;它们可以应用到实际上任何满 足RMML文档104中要求的数据文档。
例如,RMML文档104可以包含用 于将RDML数据转换为不同货币的例程,并且任何货币数据可以使用该 RMML货币转换宏。
虽然其它实施例也是可能的,但是RMML的优选实施 例还是完全遵循XML版本1.0的实现。
类似地,可以对数据文档应用可重用数据样式语言(Reusable Data Style Language,“RDSL”)样式单106,另一向数据查看器100的可选输入,以创 建特定格式的输出报表。
RDSL是完全遵循可扩展样式语言(Extensible Style Language,“XSL”)的实现,“XML宝典”,Elliotte Rusty Harold,IDG Books Worldwide,1999中对XSL有详细描述。
这些RDSL文档106是本质上担当 RDML数据文档102的报表编写器的遵循XSL的样式单。
典型的用途是用 于包含公司财务报表的数据文档。
单个RDML数据文档102可以包含一组 财务报表,但是能应用几个不同的样式单:一个用于以年度栏显示数据、一 个以季度分类显示数据、一个以欧洲格式显示数据等等。
RDML数据查看器 100自动组合数据文档102和样式文档106来创建报表。
RDML通过解决数据文档化,分析例程的非标准化和数据计算概念层 太低的上述问题,大幅度地降低数据操作的开支、时间和复杂度。
RDML通 过以能交互使用的机器可读形式将数据与其文档化封装在一起解决数据与其 文档化的分离问题。
这不同于传统关系数据库的方法,其中数据保存在计算 机中,而文档化典型地保存在三环活页夹或其它打印文档中。
数据与其文档 化的分离在每次必须访问、使用或传输数据时经常需要高价格的数据库编程 人员。
RDML中的文档化还不同于电子表格的文档化,由于这种文档化只存 在于创建者的脑中并且是个人记录,因此它趋向于个人性。
在本发明的一个 实现中,RDML将机器可读文档化与数据封装在一起。
由数据查看器100一 起使用数据及其文档化(元数据),以解释数据表示什么、它们如何进行使用 以及它们如何进行显示。
少量改进原始数据上的先期投入可以减少以后访问 和重用数据的人力需要。
RDML加入几个重要类型的元数据:源、联系信息、 授权要求、过期和更新信息、数据类型、数据类、处理指令(例如,如何处 理空、缺少值等)、单位和量度和产生各种表现所需的其它信息。
使用RDML通过定义数据特征和分析例程接口的标准来解决非标准化 的问题。
标准化导致组件重用、生产自动化和更快速的产品改进开发。
虽然 计算机行业已经开发出用于文件格式和函数级接口的标准,但是它尚未开发 出通用数据格式或内容分析标准。
例如,一旦数据输入到一个应用(无论电 子表格、数据库或其它),用户可能想要操作数据,并且查看不同行项的基 本统计(总和、平均值、百分比改变、变化等)、标准变化的调整(通胀调整、 遵循工业指数、股市平均市价的百分比等)或标准比率(债务/股本,价格/收 入等)。
由于没有标准通用数据格式,也没有标准分析例程接口,因此用户 目前从原始编码开始创建每个这些操作例程。
在电子表格中,它们必须逐数 字地输入公式和转换因子,并且在数据库中,他们必须编写SQL查询或其 它编程例程来操作数据。
RDML提供数据标准和用于操作例程的函数接口。
这意味着可以编写 一个例程,应用到任何满足所加条件的行项,并且这些例程是可重用的。
目 前,传统电子表格宏(类似于RDML宏104)典型地只能在为其设计该宏的电 子表格中使用。
这些宏典型地不能在数字可能处于不同单元表格中或采用不 同单位的另一电子表格中使用。
RDML宏104不依赖于单元格位置或人的干 预来规范数据:它们可以由他人为其它数据集进行直接使用。
如果用户编写 一个例如对时间序列的变化均值进行计算和画图的例程,它可以由任何 RDML文档102中的任何时间序列进行使用。
在解决文档化和标准化问题的同时,使用RDML还可以通过在行项和 文档层创建数据“对象”来解决计算发生在太低概念层上的问题,而传统电 子表格仅在单元格(单个数字)层上操作。
例如,可以通用于数据集,即行项, 的计算可以更加有效地操作,因为它们可以只应用一次,而不是单个地应用 于很多不同的单个数字或单元格。
而且,可以组合、连续应用或通过继承使 用分析例程(宏)来创建新的例程。
面向行项大大降低了需要进行编写的公式 数(一行一个代替一数一个)。
它还提高了程序代码的可读性,因为用户能在 更高的抽象层上检查逻辑。
除解决这些问题之外,RDML还减少数据使用者、数据发布者和程序 开发者方面的操作成本、时间和复杂度。
要使用和操作数据,典型地,通过 因特网提取数据的用户观看数据的文本版本,打印数据(用HTML、ASCII 或PDF格式),然后输入数字到电子表格或数据库程序中。
RDML数据查看 器100通过使数据作为可解释数据立即可用于其它程序,自动完成这个过 程:用户不需要重新输入。
一旦从多个在线源定位数值数据集,数据查看器 100就自动对数据进行规格化、核对、变换和格式化。
一些传统系统使数据作为普通电子表格格式(如Lotus或Excel)或逗号分 隔或其它普通文本格式中的数据用于下载。
这样至少节省了用户重新输入特 定数字的必要,但是产生一个新问题,操作数据使其变为更可用形式(例如, 规格化,标准化)。
同样地,RDML(及其相关数据查看器)“规格化”数据,以增加效率。
规格化数据主要是规范关键域,包括匹配不同域、解决分类冲突、解决重复 处理等。
为了有用,数据必须规范为能由应用(如画图例程或计算例程)读取 的格式。
例如,应用可能期望以年为集合的数据,而输入数据可能是以月为 集合的数据。
用户必须对输入进行操作,以使其符合应用期望的形式。
RDML 使用有关输入数据的嵌入文档化对输入作出任何必要规范改变,自动执行这 些任务。
在上述时间序列的示例中,RDML使用嵌入文档化确定集合是总和 或均值等,将月份数据转化到年度数据中。
此外,比较数据是电子表格的主要用途。
例子包括比较不同公司的财务 报表、比较来自不同州的统计和比较不同经济时间序列。
当这些数据分类来 自不同源时,它们通常不直接兼容。
如同拼七巧板的方式,用户必须将数据 项布置在电子表格或类似程序中。
对于规格化,RDML使用嵌入在各种输入 文件中的文档化,确定应该如何核对不同行项和值。
一旦数据得以规格化和核对,RDML数据查看器100自动变换数据。
传统上,用户典型地对数据集中的数字作出一系列的调整。
输入数据可能是 例如以“百万美元”为单位,而输出希望以“十亿日元”为单位。
RDML提 供一套最常用变换的指示符,允许将数据从它们的输入状态自动机器翻译到 用户所需的状态。
在PC上格式化数据以作输出的传统方法是将数据剪切-并-粘贴到格式 化应用(字处理器、图表生成器、电子表格或其它),然后标记数据以将格式 修改到所需的输出。
这很耗时并且不可重复-如果带点小变化再次输入数据, 则必须重复整个格式化过程。
RDML数据查看器100通过将原始数据保存在 中央存储对象(如下描述)中并且应用单独的格式化指令以创建不同视图 108,避免剪切-并-粘贴方法。
用户可以用鼠标单击在视图108之间切换,并 且程序为用户处理所有格式和数值转换。
在一些更高级的数据库管理系统中,使用“报表编写器”方法。
如同RDML 数据查看器l00,该方法应用一个模板到中央存储的数据集。
问题是这些数 据集不是标准化的;为一个数据集编写的报表编写器模板典型地不能由另一 个使用。
然而,RDML如同提供数据和宏重用的方式,提供样式单的重用。
除了上述问题之外,RDML还解决有关涉及多个源的数值数据的“活 动(live)”连接的问题,该问题典型地需要编程技能。
无论目标是绘出通过广 域网(例如因特网)还是通过公司LAN来自多个源的数字,加入远端数据由 于很多问题被复杂化:连接协议、编程语言依赖性、数据类型不一致性、错 误处理、数据变换等。
编程人员能以一定的代价但不是允许重用的灵活方式, 克服这些问题,并且用户再次依赖于自定义编程。
为应付自定义编程方法的 成本、时间要求和不灵活性,临时用户求助于人力解决方案。
在典型的情况 下,例如以与利润率相关的十个假定创建财务电子表格。
每次使用电子表格, 创建者在报纸中查找数字,并将结果输入到适当单元格中,并且手工作出任 何必要变换。
RDML通过提供一种在标准公式中包括来自远端RDML文档 102的数字的方法,消除自定义编程和手工输入的需要。
RDML数据查看器 100自动在网上定位指定地址以提取数字,作出任何必要变换(例如,从日元 到美元),并且将结果置于正确的公式中。
采用这种方法,RDML文档102 或宏104可以立即利用多个文档。
因为它的文档化是机器可读的,它可以由 多个系统进行读取,没有一个系统需要知道其它的物理布局或数据类型。
最后,使用RDML允许使用因特网所提供数据的客户端处理,从而实 现很多优点。
在提取数据之后,在客户端执行分析例程(宏),这不同于基于 web数据分析的传统方法,在服务器端执行分析例程。
虽然敏感数据和计算 能在RDML数据查看器100中保留在本地,但是用户不必担心敏感数据被 运行服务器的公司误用,或数据在通过web时被盗用。
另外,它提高了速度, 因为由于不需要因特网的来回传输或在繁忙的服务器上执行例程,图、报表 和电子表格的更新可以近乎瞬时。
用户还可以选择他们所控制并立即访问的 数据本地复制。
1.A. RMML概览本发明的方法和系统提供宏和RMML,它允许数值分析例程得以快速、 便宜地编写,并且采用可由宽范围的RDML数据文档使用的形式。
RMML 宏提供结合RDML使用的可重用用户定义计算,自动操作和显示包含在 RDML标记文档中的数值数据。
RMML还允许电子表格类型宏作为web文 档进行张贴,由搜索引擎进行搜索,组合为更加复杂的程序,并且与很多数 据文档一起进行重用。
例如,在RDML数据查看器中查看具有数据序列的图表的用户可以通 过一次鼠标单击,将宏应用到那个图表,并观看图表数据序列的立即(或近 乎立即)变换。
不但数据发生改变,而且标题、图例、脚注、轴标度和其它 属性也发生改变。
作为进一步的示例,用户可能正在看以百万美元为单位的 汽车销售的时间序列趋势。
通过单击名为“百分比变化”的宏,图表将根据 一个时期一个时期的百分比变化重新计算自身。
Y-轴标题从“百万美元”改 变为“百分比年度变化”,等。
表操作宏可以执行如组合两个表为一个、对 表进行排序、搜索特定行项和其它如同数据库的任务这样的功能。
其它变换 宏可以执行如词翻译、数据格式翻译和报表编写这样的功能。
RMML宏是可高度重用的,因为它们采用跨平台、基于文本、可搜索、 遵循XML的格式。
由于宏是可移植的,因此它们具有更大的市场力。
RMML 还为很多类型的文档化构建它的语言标签,从而宏可以为原始宏编写者和其 它用户重用和理解。
传统电子表格程序典型地基于物理位置进行引用,RMML根据数字在 图表或公式中的位置或根据标签名称引用数字,避免了这一问题,从而允许 数字自身可以在文档中的任意位置。
RMML还使用数字的量度和含义,因 为RDML标签含有标准词汇表来标识数字的测度、数量级、标度、单位、 精确度、类等,并且RMML解释器为用户处理这些差异。
另外,RMML还将错误处理建入其解释器,并且使自动测试工具生效, 以帮助提高代码质量。
用户还可以使用复选框、滑动条、输入框和选择列表 从图形上为宏改变参数,并且RMML使宏作者加入这些可视组件变得容易。
下面是RDML(在其上运行RMML宏的平台)的详细描述,随后是RMML 的详细描述。
II. 系统硬件组件图2示出适合用于本发明方法和系统的数据处理系统200。
数据处理系 统200包括计算机201和通过网络214,如因特网相连的服务器计算机203, 其中,通过网络214服务器计算机203可以向计算机201提供RDML文档 102。
计算机201包括中央处理器(Central Processing Unit,CPU)202、主存储 器204、辅助存储设备206、显示器210和输入设备212。
主存储器204可以包括可以是基于个人计算机程序的RDML数据查看 器100,虽然本领域的技术人员理解数据查看器也可以驻留在其它地方。
除 包括用于显示的视图108的数据查看器100之外,主存储器204还包括可以 用来将RDML文档102、宏文档104和样式单106输入到数据查看器的相关 软件组件。
它可以包括用户用来将标签应用到数值数据的RDML文档格式 器216,和/或向数据观看器100提供RDML文档102的RDML文档服务器 218。
主存储器204还可以包括用来编辑RDML文档102文件的RDML文 档编辑器220和用于创建样式单106的样式单编辑器222。
搜索RDML文档 以响应查询的RDML/XML搜索引擎224也可以随同任何附加的插入应用225 一起驻留在存储器204中。
下面将对这些组件的每一个和它们的交互进行更 为详细的描述。
存储器204可以包括数据查看器100的各种软件组件,和可以用面向对 象语言如JavaTM编程语言进行编程的相关组件。
在“JavaTM编程语言”第二 版,Ken Arnold,James Gosling,Addison-Wesley,1998中对JavaTM编程语 言有详细的描述,在此加入作为参考。
对于Java语言的进一步描述,请参 看“Java语言规格说明”,James Gosling,Bill Joy,Guy Steele,Addison-Wesley, 1996,在此也加入作为参考。
然而本领域的技术人员理解也可以使用其它语 言。
RDML数据查看器100可以从很多不同源如本地存储硬盘或通过网络214 从服务器下载RDML数据文档102。
辅助存储设备206可以包括存储有关RDML文档102的文档化标签数 据的RDML映像数据库226和用于开发宏的RMML宏软件开发包228。
辅 助存储器还可以存储现有数据库230,用于保存从中创建RDML文档102的 原始数据。
这些组件还可以存储在主存储器或另一远端计算机中,下面也将 对它们进行更加详细的描述。
图2还示出通过网络214与计算机201交互的计算机203上的web服 务器232。
在本发明的一个系统中,web服务器232通过网络214发送RDML 文档102,并且可以连接到保存RDML数据文档102的盘阵列234。
该盘阵 列234可以从数据库服务器236接收数据文档102,其中数据库服务器236 可以从数据库存储器238接收数据。
服务器232和计算机201之间的信息传 输中使用的协议包括,但不限于HTTP和FTP。
本领域的技术人员理解,本发明的方法和系统方面可以在或从除存储器 如次级设备如硬盘、软盘和CD ROM或网络(如因特网)载波之外的其它计算 机可读介质,进行存储或读取。
另外,本领域的技术人员还理解数据处理系 统可以包含其它或不同组件。
III. 系统概述图3示出本发明的RDML系统和不同组件之间的关系。
这些不同组件 可以驻留在计算机如计算机201的存储器204中。
现有数据库230存储可以 用来创建RDML文档102的数据,并且通常数据被提取为“平文件”格式(例 如,逗号分隔或固定宽度的域)或可由Java数据库连接性(Java Database Connectivity,“JDBC”)读取的形式。
RDML文档102还可以被构造为模型 平文件,从而单个RDML文档102封装一组行和列。
数据库的例子包括 Microsoft的SQL Server和Oracle 8服务器。
RDML文档格式器216是一个图形工具,用户使用它来减少组合数据 及其文档化所需的手工劳动量。
现有数据库230的内容可能不够创建RDML 文档102,因为在本发明的一个系统中,RDML使用内容的文档化。
这种文 档化经常可以在打印卷册中找到,因此必须手工输入,并且手工与数据进行 组合。
RDML格式器216允许用户(或数据发布者)将关系数据库、平文件、 电子表格文件或文本文档的数据域映射到RDML数据文档102。
它还允许数 据发布者将文档化加到数据文件(RDML数据文档102)自身。
RDML映像数据库226是由RDML格式器216维护的相对小的数据库, 保存如果底层数据发生变化重新创建RDML文档102所需的信息。
它消除 了用户再次手工输入文档化的需要,因为RDML映像数据库226对它进行 存储。
当正在动态创建RDML文档102时,RDML文档服务器218进行工作。
服务器218向现有数据库230查询所需的行项,向映像数据库226查询文档 化项和用于构造RDML文档102的指令,并且最终创建一个合法、形式良 好的RDML文档。
RDML文档编辑器220允许用户编辑典型为ASCII文本文件(可以包含 UNICODE数据)的RDML文档102。
同样地,它们可以由任何面向文本的 编辑器和字处理器进行编辑。
然而,这种对RDML(或任何XML)文件进行 标记的方法既耗时,又容易出错。
专用RDML文档编辑器220允许用户快 速地作出修改、检查错误和查看数据和元数据信息。
文档编辑器220可以通 过因特网操作:具有修改文件权限的用户可以通过从RDML数据查看器100 发命令,对底层RDML数据文档102作更新或修改。
RDML文档102可以是用来向RDML数据查看器100传输数据和元数 据的ASCII/UNICODE文本文件。
它可以在本地进行存储或通过网络214如 公司LAN或因特网(使用HTTP、FTP、电子邮件等)进行传输。
要成为合法 的RDML文档102,文件必须遵循下面将要详细描述的RDML文档类型定 义(Document Type Definition,“DTD”)。
DTD描述必需和可选数据元素、 它们的次序、语法和用在特定数据元素中的受控词汇表。
在“XML:可扩展 标记语言”,Elliotte Rusty Harold,IDG Books Worldwide,1998中对DTDs 有一般的描述。
RDML数据查看器100用作RDML和HTML浏览器的组合体、面向对 象的电子表格、报告编写器和应用平台。
浏览器功能读取HTML或RDML 文档102;HTML文档立即在浏览器窗口中显示,而RDML文档首先缓存 在内部数据对象(遵循DOM-“文档对象模型”-下面讨论的标准),然后显示 在由用户选择的视图108中。
缺省视图典型地是图表和树列表,虽然几个其 它缺省视图也可用。
RDML数据查看器100使用缓存的RDML数据对象创 建视图108,采用各种变换和操作对象以使数据匹配视图期望的形式,或匹 配正在与其组合的其它数据对象的形式。
RDML宏软件开发包(Software Development Kit,“SDK”)228允许函数 设计者创建通用函数,可以应用到任何包含函数所需数据类型的数据文档。
SDK是宏编写工具的集合,包括IDE(Integrated Development Environment, 集成开发环境)、编辑器、对象浏览器和合法性测试器。
RDML通常将数据的形式从操作数据的通用计算例程中分开。
通过格 式与功能的分离,数据和功能可以进行重用。
在传统的电子表格中,例如, 数字可以置于由创建者选择的任意单元格中。
如果第二开发者决定创建一个 分析例程,那个开发者必须知道每个数字处于哪行哪列。
那个例程将不对另 一电子表格工作,除非符合准确的相同行列位置。
应用函数通常产生一种软件重用形式:用户不需要告诉函数它们的数据 在什么地方(传统电子表格中的“向导”方法)。
第二种重用形式通过继承获 得:函数开发者可以选择与他们要做的工作匹配最近的现有函数,并且简单 地作必要编辑,以创建所需的新函数。
SDK 228允许第三种重用类型,能够 连到web上的远端数据文档和远端宏,利用这些额外资源并提供数据和函数 的实时更新。
如同RDML数据包含在文本文档中,RMML宏文档104是包含例程的 文本文档。
该文档包含计算的中心:数据的操作规格说明如公式、要执行其 它宏的有序列表、或指令列表。
RDSL样式单担当用于输出报表的模板。
RDML数据查看器100中的 RDML数据对象(下面讨论)可以置于使用一个或多个不同样式单的报告中。
RDSL,完全遵循XSL的实现,允许数据发布者提供多个对其数据的报告格 式。
它们是可重用的,因为如果满足特定限制,为一个RDML数据文档102 编写的样式单可以为另一个所使用。
例如,用于时间序列数据集的样式单可 以用于另一时间序列数据集。
样式单编辑器222基本上是报告编写器,因为 用户可以在图形上从样例文档组合报告,指定该报表可以应用的RDML数 据文档102的类型,当结果可接受时自动创建样式单106,然后使用结果样 式单从任何合格RDML数据文档102创建报表。
类似于HTML搜索引擎搜索HTML文档,RDML搜索引擎224搜索 RDML文档102。
HTML搜索引擎检索关键词,但是只能告诉用户特定文档 包含所请求的词。
然而,它们不能提供查询服务。
例如,用户可能希望在因 特网上搜索“收入增长率大于10%的计算机服务公司的所有财务报表”,而 RDML搜索引擎224提供这种功能。
然而,RDML搜索引擎214不仅象HTML 方法一样对关键词作索引,而且还对元素名称和关键属性作索引。
这允许搜 索数值,或形成有关内容和/或数据上下文的复杂查询。
因此RDML搜索引 擎224担当RDML数据文档102、RMML宏104和RDSL样式单106的通 用查询处理器。
提交日期为2000年2月17日的共同待审美国临时专利申请 序列号60/183,152中对搜索引擎224的一些方面有更为详细的描述。
如前所述,RDML数据查看器100中的每个视图108本质上是作为各 种RDML插入应用225的图3所示的独立应用。
例如,图表视图是已经插 入到RDML数据查看器的的基本构造(包括因特网浏览器、XML分析器/处 理器、RDML变换和操作对象、内部对象管理构架、与其它应用的接口和图 象用户界面)的独立图表应用(下面描述)。
例如,地图组件可以插入到带图表 的面板中。
随后,当用户单击行项时,不同国家或州的颜色将改变以显示专 题地图,或者将出现不同的点等。
RDML数据查看器100可以用模块方式进 行设计,以允许修改或加入组件应用来扩充普通组件。
IV. 系统细节进一步参照图3,下面将对几个组件(RMML和RDSL组件除外)进行更 详细的描述。
现有数据库230可以是关系数据库、面向对象数据库或任何其 它类型的数据库。
RDML文档102中的RDML标签将文档化加到在关系数 据库中找到的纯数据类型。
由于已经存在于关系数据库中的数据可以用来创 建RDML文档102,因此可以使数据用于RDML格式器216或RDML服务 器218,并且采用平文件格式(行和列)。
对于连接,RDML格式器216和RDML服务器218读取开放数据库连 接性(Open Database Connectivity,“ODBC”)和JDBC数据库源。
平文件方 面基于这样的思想:RDML文档102有效地模型化基本行列矩阵。
因此,为 了产生RDML文档102,原始数据源可以提供单个表,或用查询创建一个表。
通过服务器到关系数据库,或间接通过超链接到其它RDML文档或通过超 链接到RDML文档服务器218,与RDML文档102的关系链接是可能的。
这类似于很多数据库应用:从各种底层表收集数据,以创建向用户显示的单 个表或屏幕。
用作RDML文档102源的数据表可以定向为,使域具有三种 基本示例性RDML数据表类型:时间序列、分类(category)或X-Y图中的一 种。
参照RDML格式器216,一旦现有数据库230中存在数据点的平文件 数据表,RDML文档102就能通过加入包含有关数据表的文档化的标签进行 创建。
包含在这些标签中的信息在与原始数据点分开的单独数据表中进行维 护。
RDML格式器216是帮助用户选择合适文档化标签、在单独数据库(RDML 映像数据库226)中保存标签,并且创建实际RDML文档102的应用。
图4是示出RDML格式器216如何帮助用户对数据加标签(即加入应用 到行项的元数据)的屏幕图。
在本发明的一个实现中,对于每个数据行项, 至少存在18种不同内在属性(下面将作详细描述),这些属性使用单选按钮402 进行应用。
当用户选择一个单选按钮402,格式器216提供所选属性的描述 404。
一旦从最左框选择一个单选按钮402,可能值的列表就在中间选项框406 中提供给用户。
用户可以双击一个选项,以将它作为所选行项的属性进行加 入,或者在中间选项框406上端的文本框中输入新值。
格式器216自动更新 行项表408,在本例中,该行项表显示行项的ID、标题、格式和Y轴标题(下 面讨论的属性)。
图5示出由RDML格式器216上的页签502访问的数据库页签和文档 管理屏幕的屏幕图。
该屏幕管理可从关系数据库230创建的RDML文档102。
用户可以指定关系数据库中的数据表的列表504,并且让RDML格式器216 使用缺省属性为每一个创建RDML文档102。
从这一点来看,RDML格式 器216用来修改缺省属性。
用户可以使用RDML格式器216为文档102从 零开始选择标签(如图4所示),但是这将对用户产生不必要的负担以记住哪 个属性是适当的。
格式器216引用由文档化URL 506指定的数据库230(如图3所示)。
数 据库230保存数据表的列表,并且格式器216将保存有关数据表的信息的表 504插入到数据库230中,以在以后进行引用。
该表504通过文档化表名508 进行引用。
类似地,格式器216在通过li_data URL 510进行引用的数据库 中为数据库230存储行项属性408的列表。
RDML映像数据库226包含与现有数据库230中单独的数据记录集相 关的文档化。
RDML格式器216创建并维护RDML映像数据库226。
RDML 映像数据库226标准化文档化数据文档的过程,并且为元数据提供受控词汇 表。
RDML映像数据库226还执行文档管理和跟踪,更新和版本控制,错误 检查,输入合法性验证和创建状态报表。
映像数据库226包含它能产生的RDML文档102的列表。
原始数据可 以在平文件、关系表或对关系数据库进行查询而产生的表中。
映像数据库226 包含引用原始数据库230中的原始文档表或平文件的文档元数据。
包含在映 像数据库226中的文档化信息加入到该数据。
它进一步包括用于行项集的行 项集元数据,典型地在技术上更自然并作为整体应用到行项集的文档化。
这 种信息的例子是作为整体应用到行项集的表类型、域定义(“x值”)和超链 接。
(行项集一般可以类似于表;它是类似于数据库领域中记录的行项的集 合。
) 映像数据库226还包括引用原始数据库230中的原始文档表或平文件的 单个记录的行项元数据。
可以存在从每个行项的元数据记录到原始数据表中 对应记录的指针。
每个行项包括原始记录的域,和,在本发明的一个实施例 中,至少18种包含“属性”文档化的附加域:对象类型、单位指定符、超 链接、脚注等。
下面对行项的示例性属性列表进行描述。
图6示出当访问RDML文档服务器218时由数据查看器100使用的步 骤。
RDML服务器218占据数据库服务器230与用户数据查看器100或web 浏览器之间的中间位置。
虽然RDML的一个架构是让RDML文档102从基 于硬盘的文本文件进行服务,但是用户有时希望动态创建RDML文档,以 响应查询。
执行查询并且以RDML文档形式发送结果的任务由RDML服务 器218进行执行。
为了如此操作,用户通过数据查看器100将数据请求提交 给服务器218(步骤602)。
RDML服务器218是由响应用户请求的web服务 器(没有显示)调用的服务器应用。
RDML服务器218使用已知技术查询数据 库230(步骤604),并且数据库将结果返回到RDML服务器(步骤606)。
然后 服务器218创建RDML文档102(步骤608)并且将RDML文档返回到将结果 传输到查看器100的web服务器(步骤610)。
RDML文档编辑器220允许用户编辑RDML、RMML或RDSL文档 (102,104和106)的实际元素和属性。
文档可以显示在用于选择和直接编辑 的树视图中。
基于文本的窗口可以显示所选文档的内容以作编辑。
除基本编 辑之外,它还执行大量工具功能:(1)搜索和替换,(2)合法性验证,(3)形式 良好的测试,(4)超链接合法性验证(5)元素的剪切-并-粘贴,和(6)用缺省 替换元素。
IV.A. 内部数据查看器架构图7A示出RDML数据查看器100的内部架构和程序流程的示意图, 并且图7B示出图7A中每个符合类型的含义。
对于每个标号组件,进一步 给出对该组件的输入和输出、内部判决过程、存储格式、对象构架和程序流 程的详细信息。
然而,在完全描述图7A之前,理解所涉及步骤的概要是重要的,该概 要如图8所示,并且结合图7A进行讨论。
图8是描述用于下载、处理和显 示本发明的RDML文档102的方法中的步骤的流程图。
图8描述所涉及步 骤的概要,并且随后结合图7A对每个相关组件进行更详细的描述。
首先, RDML读取器704查找并接收采用根据RDML DTD 702的结构格式化的文 本格式的RDML文档102(步骤802)。
RDML读取器704可以是在单独线程 中运行的类,并且具有用于检查RDML文档102类型(时间序列、分类、XY) 和处理错误的方法。
RDML读取器704然后调用解析文本的XML解析器 706(步骤804)。
RDML处理器708从XML解析器706接收所解析文本,对 它进行错误检查,并且根据所接收文本中的数据和结构创建对象(步骤806)。
RDML处理器708将结果对象传输到X-值变换器710,该变换器执行 类型检查并操作数据域(x-值),从而它可以连贯并同时地与其它相同类型的 活动对象一起进行显示和存储(步骤808)。
X-值变换器710确定在X轴上画 的数据值采用共同的单位。
例如,如果文档A为年度时间序列,并且文档B 为季度时间序列,那么X-值变换器710在这种情况下将使用文档B中行项 的“li_aggregation”属性,将四个季度一次合计到年度数据。
作为第二个示 例,如果文档A是x-值为证券报价机符号(F、IBM、XON等)的分类文档, 并且文档B包含以公司名称(Ford、Intemational Business Machines、Exxon 等)命名的x-值,那么X-值变换器710将使用每个文档行项中的“li_class” 属性,对它们进行匹配。
X-值变换器710将对象发送到主数据存储712(Primarv Data Store,“PDS”),以与其它相同类型的活动对象一起存储(步骤810)。
视图(716、720、724和725)然后使用来自PDS 712中活动对象的数据,显 示并表现信息(步骤812)。
现在结合图7A对所涉及步骤和组件的详细信息进行讨论。
首先描述用 RDML文档类型定义进行定义的RDML文档102。
随后描述数据查看器102 的各种软件组件。
RDML文档102的数据和元数据可以在表示每个数据元素的开始和结 束点的标签内部进行格式化。
元素标签还可以包括应用到数据元素的属性、 对可以出现在元素内的子元素的描述和用于不同属性值的词汇表选择。
一个RDML数据文档102的完全样例如附录B所示。
下面示出的是为 文档中的一个行项提供数据的RDML文档102的片断。
注意在尖括号(“<” 和“>”)内指定元素标签,并且列出能应用到数据的属性。
<line_item     li_ID="1"     li_legend ="Department of Energy"     li_title ="Outlays-Dept.of Energy"     li_cat=""     y_axis_title ="$in Thousands"     level ="1"     format="#,##0;(#,##0)"     relation="Parent"     li_notes=""     li_desc=""     li_prec="-3"     li_unit="$"     li_mag="3"     li_mod="in"     li_measure=""     li_scale=""     li_adjustment=""     li_aggregation=""> <data_y> 2754567,2699717,2726457,2578954,2343297,2252927,2474440,2392904,2392536,2200326, 2298612,2303643,2233062,3229510,3840973,5049308,6412986,7441295,7261157,11756883, 11657178,10590471,10991261,10587245,11026443,10692802,11166039,11386923,12083898, 12478820,15522633,16941547,17839298,17617000,16203000,14467000,14366000,15240000, 15190000,14938000,14412000,14556000 </data_y> </line_item> 在这个示例中,带有“=”的18行是<line_item>元素的“属性”,并且 本质上,属性为子元素<y-value>中指定的数据值提供机器可读的文档化。
个特定行项描述“以千美元为单位的能源部费用”,但是下面结合描述RDML 文档102的结构和元素的RDML文档类型定义702对属性集的细节进行描 述。
可以用普通文本编辑器、RDML数据格式器216或RDML数据服务器 226创建RDML文档102。
(不是RDML数据查看器100的XML浏览器最 多只能将文本输入回应到用户屏幕,因为它们不能解释RDML标签。
) IVA.1 文档类型定义图9从图上示出RDML文档类型定义702的元素。
在本发明的一个实 现中,RDML文档102遵循由DTD 702提供的规则(还如图7所示)。
根据本 发明的一个实现,RDML DTD 702在附录A中示出。
DTD 702的属性和元 素还可以在图B的完全样例RDML文档102中看到。
对于检查DTD 702的 特定属性和元素,这两个附录A和B是有用的。
DTD 702数据结构经过优化按照所需次序提供所需信息,以减少新用户 所需的对RDML格式化的学习并避免不必要的重复。
附录A中DTD 702的 第一行以“<?xml encoding="UTF-8">”开始,因为所有XML文档均以告 诉客户应用(在本例中,数据查看器100)它是什么文档类型和XML版本的一 行开始。
进一步参照图9,用来定义RDML数据文档102的DTD 702用元素的 分层树结构进行组织。
每个元素可以包括一个属性列表(在附录A中示出, 但没有在图9中示出)和/或与一个或多个子元素的关联。
DTD 702指定,对 于任何DTD实施例,哪个属性是必需的并且哪个属性是可选的。
根据设计 约束,必需和可选元素可以不同。
在最高层,DTD 702的根元素<rdmldoc>902 下层有两个元素。
第一元素,<rdmldoc_header>904包含作为整体的文档元 数据,并且第二元素<line_item_set>906包含行项集。
在本发明的一个实现中,<rdmldoc_header>元素904包含几个自身属性 和可选子元素<data_source>908、<formatting_source>910、<rdml_source> 912、<license_terms>914和<link_set>916,每个子元素描述数据源的一个方 面。
在这个实施例中,<rdmldoc_header>904元素可以包括十个整体描述文 档信息的属性。
这些属性是“rdml_doc_ID”、“doc_title”、“timestamp”、 “version”、“expiration”、“freq_of_update”、“num_lineitems”、 “num_datapoints”、“x_indexs”和“first_li_with_data”。
rdml_doc_ID属性是RDML文档102的唯一标识并且典型地为一个文件 名或URL。
doc_title是将出现在由用户使用的文档报表和视图顶端的无格式 文档语言描述。
timestamp典型地由创建文档的应用生成并且可以表示创建 文档的时间或者为创建文档访问数据的时间。
version描述RDML文档102 的版本,并且可以由创建者进行命名。
expiration描述文档102中的数据可 能失效的日期和时间,典型地是下一更新的期望发布时间。
freq_of_update 描述文档更新的频率,并且可以由想要安排数据更新的应用进行使用。
下两 个属性num_lineitems和num_datapoints是分别描述行项总数目和数据值数 目的整数。
这些属性是可选的,并且可以由一接收应用作为校验和进行使用, 以保证数据没有被偶然改变或破坏。
下一域x_indexs表示用作树视图720(下面将详细描述)中的代表性数据 域的三个数据域。
x_indexs是逗号分隔的三个整数的字符串,其中每个整数 均为对所选域的索引。
为了效率起见,索引可以表示域列表的末端,从而, 例如,“-3,-2,-1”示出树视图720的最后三个域。
基于末端的索引是有用的, 这是因为大多数读取时间序列的人想要知道最近数据。
接着,类似行 first_li_with_data属性是指出当文档102载入到数据查看器100时哪个行项 要显示在图表上的整数索引。
<data_source>908、<formatting_source>910、<rdml_source>912、 <license_terms>914元素(<rdmldoc_header>元素904的子元素)可以可选地包 含一个或多个包含联系信息的<contact_info>918子元素。
该元素可以由目标 应用进行使用来创建电子邮件、更新联系列表或填充信息源数据库。
对于所 有联系信息子元素918,都使用相同的元素结构,从而创建文档102的应用 只需创建一个结构。
在一个实现中,该联系信息用七个属性表示:“role”、“name”、 “company”、“address”、“city”、“state”、“zip”、“country”、“email”、 “form”和“comments”。
role是文档创建时参与方扮演的角色,即对于 <data_source>908为“数据源”,对于<formatting_source>元素910为“格式 化源”等。
“form”确定超链接是“简单”链接还是“扩展”链接。
在Xlink 规格说明(设计实现XML文档和资源之间链接的语言)下,超链接可以是简 单或扩展的。
“XML IE5编程人员参考手册”,Alex Homer,Wrox Press, 1999对Xlink有描述,在此加入作为参考。
简单的链接是传统的“跳转”超 链接,单击该链接将关闭当前页面并打开目标页面。
扩展链接特定于应用, 并且能够辨认不同类型的资源,如多媒体文件和其它非文档资源。
<data_source>908中的联系信息描述谁或哪个收集数据来创建原始数据 库,而<formatting_source>910中的同一属性描述谁或哪个将RDML标签加 入到原始数据,以创建RDML文档102。
<rdml_source>912中的相同信息 描述创建该特定文档并使其可用于外部世界的人或公司。
除<license_terms>914中的<contact_info>918子元素描述有关授权信息 的联系信息之外,<license_terms>元素具有其自身的与授权相关的属性集。
这些属性包括:“copyright_cite”、“holder”、“license_type”、“warranty”、 “disclaimer”、“terms”、“date”、“email”、“state”、“country”。
copyright_cite 是可以出现在有关RDML文档102中特定数据集的所有权的报表上的字符 串。
典型的例子可能是“Copyright 2000,e-Numerate Solutions,Inc.All Rights Reserved”。
holder属性列出版权所有者的完全法定名称。
license_type列出 授权类型,如“无-私有并保密”、“公用域”、“每次使用支付”等,并且terms 列出支付条目,如果有的话,如“每次下载一美元”。
这些属性中的信息可 以由与RDML处理器708相关联的例程进行使用,以自动跟踪和实现授权 和支付。
<license_terms>914的另一子元素是<linkset>元素916,在一个实现中, 该元素具有两个属性和其自己的子元素<link>922。
<linkset>916是超链接 的集合。
这些超链接可以是HTML文件或RDML文件。
单个<link>元素922 拥有实际的链接和属性。
<linkset>元素的两个属性是form,如上所述,和href, URL或web地址标准字符串,并且它们指定可以找到超链接页面的HTML 或RDML页。
当创建者不想列出文档102自身中所有超链接时,这是有用 的。
<link>元素922描述到其它文档的超链接,并且,在一个实施例中,包 含九个属性:“form”、“href”、“behavior”、“content-role”、“content-title”、 “role”、“title”、“show”和“actuate”。
在XML IE5编程人员参考手册,95-97 页中对这些与链接相关的属性有描述。
title是作为超链接标题出现在应用中 的字符串。
例如,在HTML浏览器中,它将作为高亮、带下划线的文本出 现。
actuate指定什么时候需要激活(traverse)该链接-什么时候提取或访问链 接所指向的资源,并且示出将如何显示目标资源的细节。
behavior指定显示 内容或激活链接时控制链接行为的指令,并且role描述目标资源在链接中扮 演什么角色。
content-role和content-title交替用于标题和角色,但是它们没 有在Xlink标准中指定。
最后,<rdmldoc_header>元素904可以包括其自己的具有<link>元素922 的<linkset>916。
RDML允许用户将超链接附属到不同元素,如整个文档、 特定行项或RDML文档102中的其它元素。
可以将超链接置于多个位置的 原因是这样用户可以在一个地方查看仅应用于当前考虑元素的所有链接。
例 如,RDML文档102可以包含公司财务报表的数据。
文档的创建者可以决定 将特定链接应用于整个公司(到产品线、竞争者等的链接)而将其它链接仅应 用于单个行项(如指向那个行项脚注的,附属到“设备租赁”行项的链接, 或者可应用于那个帐目的记帐规则)。
即使它们附属到不同元素,链接也可 以具有同一形式。
多个linkset元素的另一原因是帮助将链接与它们的逻辑所 有者保持在一起。
继续参照图9,在<rdmldoc>902的行项上,<line_item_set>906不仅包 含有关RDML文档102中行项集合的信息,还包括几个属性和几个元素。
这些属性包括:“line_item_set_type”、“time_period”、“character_set”、 “missing_values”、“null_values”、“zero_values”、“dates_values”和 “percentages”。
在一个实现中,第一属性line_item_set_type是将行项集归类为三种类 型中的一种:时间序列、分类(或交叉表)和x-y图。
通常,该上下文中的“类 型”是指x-轴值的特征,和它们是否表示时间序列、分类、x-y图或其它。
下面将结合操作具有相同集类型的行项的x-值变换器710对这些行项集类型 进行详细描述。
通常,不可以一起活动操作不同行项集类型的行项集。
如果 行项是时间序列,time_period属性中的合法长度可以为年、季、月、日等。
character_set指定表示哪个标准字符集,从而允许支持外国语言。
missing_values保存一个用于表示缺少值的数值的指定符,因为数据的很多 视图,特别是图表视图需要知道哪个数字代表空白。
否则空白可能被解释为 “0”。
Null_values指示作为空处理的字符,从而不把它与“不适用”或“缺 少”或“0”混淆。
最后,zero_values指定需要作为“0”而不是“空”、“缺 少”、“不适用”等解释的字符。
在一个实现中,<line_item_set>906具有几个子元素,包括<data_x>924、 <li_class_set>926、<linkset>916和一个或多个<line_item>元素928。
在行项 集的层面上,将一些行项作为一个集元数据在所有行项之间共享,从而不需 要重复数据。
特别,<data_x>924包含对行项集中所有行项通用的域信息。
<data_x>元素924包括RDML文档102的行项集中行项的x-值和有关x-值 的信息。
例如,如果行项集是时间序列,x-values可以代表与数据关联的, 列在图表底部的年、月或其它时间单位(例如,1990、1991等)。
由于该信息 对于行项集中的每个行项均相同,因此它在RDML文档102中仅包括一次。
在一个实施例中,除实际x-值之外,<data_x>924还包含如下属性:“x_title”、 “format”、“x_notes”、“x_desc”、“x_prec”、“x_unit”、“x_mag”、 “x_mod”、“x_measure”、“x_scale”、“x_adjustment”和“x_links”。
在<data_x>924中,x_title是当数据显示在图表上时显示在x-轴上的标 题。
format是为x-轴值的缺省表示提供模板的字符串。
这些字符串常见于电 子表格程序(例子还可以参见图4): #-数字,不显示零 0-数字,显示零 .-小数点 ,-分隔符 a-z、其它字符-原样显示。
也可以使用其它格式代码(例如,在脚本语言中使用的代码)。
x_notes可 以包含有关行项集x-值的各种脚注,而x_desc可以描述有关x-轴值的附加 描述。
x_prec属性描述显示轴标的精确度或有效位数。
在这个属性中,负数表 示大于零的量的四舍五入。
例如,精确度为2将把数字显示为“8,254.43”, 精确度为“-2”的同样数字将显示为“8300”。
数字的底层表示将为全值; 仅仅屏幕上的格式化和表示将发生变化。
数据查看器100使用该属性,主要 用于格式化轴标,但是该属性也可用于缺省格式化和其它用途,如报表、脚 注等。
随后属性x_unit、x_mag、x_mod、x_measure、x_scale、x_adjustment 表示x-值的含义,并且由RDML数据查看器100使用,用于操作、协调和 显示其它RDML文档102。
在RDML中,数字由描述数字单位的这些属性 进行统一描述。
它们如下所示: 单位(Unit):分子的物理单位 数量级(Magnitude):分子的大小 修饰符(Modifier):分子与分母的关系 标度(Scale):分母的大小 测度(Measure):分母的物理单位 调整(Adjustment):特殊限定符(即,所调整的通胀率) 例如,一个用“$(以千为单位)/百万人”公布的行项可以表示为: [1$US]*(1000) -------------------- [1人]*(1,000,000) 因此,行项的属性为: 单位:$US 数量级:1000 修饰符:/ 测度:1人 标度:1,000,000 对行项这些属性的访问大大增强了数据查看器100的能力。
它帮助对数 字进行解释和变换。
它允许将多个行置于单个图表中而不发生冲突,并且允 许应用宏而不需要人的干预来回答有关单位的问题。
它还允许报表模板作自 动调整,以提供最可读报表。
特别,当用户已作出变换并且“y_axis_label” 属性不再适用时,数据查看器100使用这些属性构造y-轴标和描述符。
为提高效率,可以使用单位和量度的标准词汇表,并且数量级和标度可 以更加简单地表示为10的乘方,例如3表示千、6表示百万等。
这允许更 快速的变换,并且消除潜在不同用法和拼写的混乱(例如,million,mille,MM 等)。
作为使用这些属性的一个例子,假定RDML数据查看器100已绘制如 下值/量度:     426美国美元(以千为单位)/小时,通胀调整(1996=100) 用户现在想将它转换为:     “X”意大利里拉(以十亿为单位)/天,使用标额里拉 其中“X”为要进行计算的值,并且该行的其余部分为量度。
数据查看器100 为用户自动完成该变换,因为它具有如下转换因子: RDML属性:
开始:
结束:
转换因子:
单位
美国美元
意大利里拉
A*0.0000234
数量级

十亿
A*1,000,000
修饰符


A*1
标度
Hour
Day
A*24
测度
1
1
A*1
调整
通胀调整
不调整
A*年度因子

426
1.189
数据查看器100乘上转换因子(或执行其它任何适当数学操作)以操作显 示。
用户不必查每个转换因子,将它们以正确顺序排列,做算术运算,并且 作修正如四舍五入调整。
用户可以简单地从下拉框中选择新的单位、数量级 等,并作出选择。
图10示出由RDML数据查看器100使用的步骤,以操作RDML文档102 中的数值信息,来产生所需的经过转换的显示。
首先,数据查看器100定位 RDML文档102(步骤1002)。
文档可以在本地进行定位,或使用URL、搜索 引擎224或任何其它技术进行在线定位。
下一步,数据查看器100选择并访 问所需文档102(步骤1004)。
数据查看器100然后访问需要进行变换的行项(步 骤1006),并且确定所需变换(步骤1008)。
所需变换可以从用户进行接收, 或可以由数据查看器100自动确定,以,例如,将新文档102的加入容纳到 当前文档的显示中。
数据查看器100访问要变换文档或行项的单位、数量级、 修饰符、标度、测度和调整属性(步骤1010)。
使用这些属性,数据查看器100, 为每个属性(如果存在的话)确定转换因子(步骤1012)。
这些转换因子可以存 储在本地,或通过网络214在线提取。
然后数据查看器100乘上转换因子, 以将数值数据变换成所需的显示(步骤1014),并且显示经过变换的行项或文 档(步骤1016)。
如果要显示多个行项,数据查看器100可以重复这些步骤, 从而所有适当行项可以变换到所需的显示格式(步骤1018)。
类似地,如果需 要变换多个文档102,可以为每个文档重复这些步骤。
采用这种方法,具有 不同数值集的文档102可以得到自动操作,以同时显示或快速变换显示格式 而无需人的干预。
系统通过将不同格式变换为一个所需格式,自动解决不同 文档之间不同格式的冲突。
在一个实现中,当系统将一个单位转换为另一个单位时,它将原始源单 位转换为系统已知的基本单位,然后将该基本单位转换为目标单位。
系统将 从基本单位到其它单位的转换因子存储在单位列表XML文件中,该文件的 一部分显示在附录C中。
例如,假定由长度系统使用的基本单位是“米”, 数值要从“码”转换为“英里”。
查看器100使用所存储的转换因子,将码 转换为米,然后使用适当所存储转换因子将米转换为英里。
这样,单位列表 文件只需要包含从基本单位到各种不同单位的转换因子,并且不需要列出各 种单位两者之间每一种可能组合的转换因子。
单位列表文件的结构如下所示:<unitlist>元素是根,并且它具有一层子 节点,每一个均为<unit>元素。
这些unit元素每个均具有大量属性和元素, 它们描述将那个单位转换为其它单位或单位集所需的单位特征。
转换元素包括源单位和目标单位具有相同类型时作转换所需的属性。
例 如,将“英里”转换为“英寸”只是简单地查找应用到英里数的正确乘数因 子的事情,因为这两个单位都是“长度”类型的量度。
转换元素包含六个元素:(1)“conv_target”描述下面将引起转换的转换 因子的量度目标单位;(2)“conv_factor”是要得到目标值由源值乘以的数; (3)“conv_constant”是要加到源值与转换因子的乘积的常数。
例如,在将华 氏温度转换到摄氏温度的转换公式(F=32+9/5C)中,“cony_constant”就为32; (4)类似地,如果转换涉及对数转换,必要的因子包括在“conv_log”中;(5) “cony_source”是对提出该特定转换因子的标准体的描述;和(6)“cony_href” 包含认可标准体的URL。
类型元素包含如下文本串中的一个:(1)长度(基本单位=米);(2)面 积(基本单位=平方米);(3)体积(基本单位=立方米);(4)质量(基本单位=克); (5)时间(基本单位=秒);(6)温度(基本单位=摄氏度);(7)能量(基本单位= 焦耳);(8)货币(基本单位=$美元);(9)组合(Compound,没有基本单位); (10)变化(Diverse,没有基本单位);(11)集合(Collection,没有基本单位); 和(12)事件(Occurrence,没有基本单位)。
组合和变化类型从一个或多个基本单位进行构造。
组合类型是其它类型 的简单组合。
例如,“英里/小时”是长度单位和时间单位的组合。
为了将组 合类型转换为另一类型,能够作分开单位的必要转换是必要的。
变化类型是由描述构成的类型。
例如,“ohm”是一个电学单位,描述 为“通过在溶化冰的温度、14.4521克质量、恒定的截面积和106.3厘米的 长度的水银柱提供给不变化的电流的电阻”。
集合类型是人员、地点、事情等的集合。
例如,以“百万人”表示的数 据序列意味着这种类型的一个单位就是一百万人的集合。
集合类型可以使用 任何转换元素。
作为简单的转换例子,假设在一个抽样中每个家庭为2.4人。
那么通过简单地除以2.4转换因子,就能将“人”转换为“家庭”。
事件类型是事件的集合。
“循环”是能够除以“秒”产生组合“循环/秒” 度量单位的事件类型。
“subtype”元素用于类型间更精细的区分。
“plural”元素用于在转换操 作完成时构造新的标题、图例和标注。
提供“alias”元素,用于允许以常 用但非标准的形式输入数据的转换。
例如,表格经常使用“in”而不是 “inches”。
提供“desc”元素,从而可以向用户给出无格式语言描述。
“icon” 元素提供一个地方,用于给单位一个用在列表、下拉框等中的图标。
回到图9的元素和属性,<x_data>924中存在一个x_links属性,它可以 是逗号分隔的,用于链接到其它源的URL字符串。
除这个元素之外,<li_class_set>926元素表示行项类元素集,并且,在 一个实现中,没有属性,但是具有一个或多个表示行项类<li_class>930的子 元素。
这些行项类标签指定数字所属的各种分类系统中的分类,如“<US Dollars>”或“<Total Revenues>”。
数据查看器100使用这些类标签选择哪 个宏可以应用,以调整报表格式,并且在分析处理中作出正确的假定选择。
类指定允许合法化和规范不同数据集,从而允许数据查看器100将来自无关 源的文档组合为单个统一源。
类标签可以由查找类标签列表的宏使用,以查 看它是否限定在特定行项上操作。
例如,如果财务报表中的行项被标记为类 “债务”,宏知道在计算“债-对-权益”比率时它可以使用该行。
但是,例如, 如果行项被标记为“钢琴”,就不能应用该宏。
注意,在这个实现中,类的 元素名称输入为逗号分隔的字符串。
在一个实现中,<li_class>元素930具有五个属性。
它们是“class_name”、 “parent_class”、“form”、“href”和“description”。
class_name是行项集所 属的类名,并且parent_class表示父类的名称。
这些属性可以由数据查看器100 的更高级特性如宏进行使用。
<line_item_set>元素906进一步包含类似于前面所述<linkset>的<linkset> 916。
如同以前,该<linkset>916进一步具有前面所述的<link>元素922。
在本发明的一个实现中,<line_item>928元素可以具有4个子元素和18 个属性。
这些元素是:<data_x>938,如果该行项的x-值不同于line_item_set 中的缺省x-值,<data_x>938包含该行项的x-值;<data_y>932,包含行项y- 数据值,数据数字或值;<linkset>916,具有如前所述的<link>922;和 <note_set>元素934,包含一个或多个具有有关行项的用户可读、无格式语言 备注的<note>元素936。
行项的属性包括:“li_ID”、“li_legend”、“li_title”、“li_cat”、 “y_axis_title”、“level”、“format”、“relation”、“li_notes”、“li_desc”、 “li_prec”、“li_unit”、“li_mag”、“li_mod”、“li_measure”、“li_scale”、 “li_adjustment”和“li_aggregation”。
这些属性中有几个具有与前面所述的 属性相同的含义,除了它们特定地仅描述它们所附属的行项和y-值。
li_ID是<line_item>元素928的唯一标识号,并且可以从0标号到n(其 中,其中n是line_item元素的数目)。
在本发明的一个实现中,这些号码是 唯一且有序的。
li_legend属性是描述行项的无格式语言字符串,它不需要是唯一的。
通 常,它出现在视图的最左栏。
li_title是定义行项一般主题的字符串。
在数据 查看器100中,这可以用作图表的标题和报表的标题。
典型地,成组的行项 具有相同标题,但是它们不要求相同。
li_cat表示行项分类。
与li_legend和li_title不同,这两个属性显示在数 据查看器100的图表上,li_cat一般不进行显示。
它通常是行项可能所属分 类的非打印指定符。
经常,这可以是表名、或数据库中的主键、或其它一些 组织标识符。
它可以用于为报表对行项进行分组。
y_axis_title属性是出现在y-轴作为y-轴标题的字符串。
然而,如果用 户将变换应用到描述符中的任意变量,该硬编码的y-轴标题将被使用其它属 性由数据查看器100生成的标题替换。
level属性和relationship属性指定行项之间的层次关系。
关系数据库中 的传统关联通过根据“键域”匹配记录来保持。
这个方法的一个缺点是对关 系的特征,除是否存在之外,什么都不知道,并且其它地方缺少特定文档化, 没有办法告诉一个记录是另一个的孩子或父亲,或者性质是包含、派生和继 承等。
在RDML中,数据的创建者可以指定每个行项的层次和那个层次级 关系的性质。
数据查看器100使用level属性和relationship属性,创建分层 结构树,将表示关系的图标置于每个行项的前面,以概括数字的派生关系并 描述它们的上下文,并且协助宏和更新数据表。
level属性指定行项在父节点 下面多少层,而relationship属性指定关系的性质,如行项是另一行项的孩 子,或者包含在另一行项中。
它还可以确定行项是父亲的增减性子成分,或 是依赖于其它孩子行项的部分和。
前面所述的这些属性和元素构成本发明方 法和系统的DTD 702。
如果用户想要根据不同的x-轴变换“合计”或“分解”数据,li_aggregation 属性就很有用。
该属性向数据查看器100说明当尝试这种变换时如何处理该 特定行项。
例如,如果行项集表示银行帐目信息,每个行项可能是时间序列, 并且表示季度数据,但是用户可能希望基于年度的数据。
对于该集的一些行 项,只是简单地将四个季度的数据(例如,存款)累加的事情,在这种情况下, 属性值为“sum”,但是对于其它行项(例如,结存余额),只需要显示最后一 个季度的值,在这种情况下,属性值将为“last”。
类似地,如果最小年度余 额希望是四个季度的最小余额,将只需要所有四个季度的最低余额。
这种行 项的li_aggregation属性值将为“minimum”。
可能接受值包括:“sum”、 “average”、“minimum”、“maximum”、“first”、“last”和“none”。
IV.A.2. 读取器、解析器和处理器回到图7A,RDML读取器704可以是RDML数据查看器100内的一个 对象,它管理查找RDML文档102(在本地、在LAN或广域网如因特网)的 过程,将它传到XML解析器706,向用户传递错误通知和协调其它组件状 态的更新,以反映被拒绝或被破坏的RDML文档102。
RDML数据查看器100 的用户可以用很多不同的方式启动RDML文档102的下载,这些方式包括: 单击RDML超链接(这些如同其它任何超链接,除了目标文档可能以“.rdm” 结束),在RDML数据查看器的“地址”框内键入“.rdm”URL,或者请求 在宏中载入文档。
另外,虽然传统HTML浏览器只有HTML文档的缓存, 表示为浏览器的“历史”,但是该浏览器可以一次仅显示这些文档中的一个。
给定URL地址,RDML读取器704读入遵循文档对象模型(Document Object Model,DOM)的文档(例如,RDML文档102),下面讨论。
XML读取器704 可以通过第三方Java类集,如由IBM开发和授权的XML4J解析器进行实 现,但是也可以使用其它解析器。
如果多个文档与活动数据集兼容,RDML 读取器704可以在RAM中对它们进行缓存。
不仅这些文档立即可用,而且 文档的子元素也立即可用,这是因为数据查看器100可以维护文档中重要数 据和元数据的索引。
另外,可以使用宏在由RDML读取器704读取的文档 中查找特定元素。
XML解析器706从RDML数据文档102获得文本字符的序列化流,执 行基本功能如消除白空格、将输入划分为词和词组,并且搜索开字符和闭字 符(主要是“<”和“>”)。
在RDML数据查看器100中使用的XML解析器 706还可以是第三方Java类集,如由IBM开发和授权的XML4J解析器,但 是也可以使用其它解析器。
处理器708匹配RDML DTD 702分层结构,接收经过解析的文本,并 且创建数据元素的树状结构。
分层结构符合DOM模型,意味着可以用标准 形式使用数据,并且可以使用标准方法和函数库访问数据、编辑元素、搜索 节点以查找特定元素等。
XML DOM标准由万维网联盟进行控制,并且可以 在“http://www.w3.org/TR/REC-DOM-Level-1/”找到。
RDML处理器708通常对输入解析文本执行三个主要功能:错误检查、 结构化和增加功能性,以创建内部软件对象。
处理器708的错误检查功能简 单地将解析器706的输出与由DTD 702所定义的期望文本进行比较。
如果 输入文档不符合,处理器708确定该缺陷是否是:(1)不关键,在这种情况下, 发送一个警告到日志,并且继续工作;或(2)关键,在这种情况下,停止工 作,并且将一个错误消息发送到调用解析器706的例程。
结构化功能是指将文本组装到匹配在DTD 702中描述的层次的分层数 据结构中。
目标数据结构可以是向量的向量或其它集合的集合。
当创建该数 据结构时,它被“包”入一个将接口加到数据的软件对象(“RDMLDoc”对 象)中,从而其它软件对象能与它进行通信。
大部分所加函数(“方法”)提供 对数据特定子集或特定元素或属性的访问。
可以由与RDML读取器704相同的类执行RDML处理器708的功能, 其中,RDML读取器704与XML解析器706已经设置“回调”关系。
这样, 当解析器706从RDML文档102得到一个新元素时,它通知RDML读取器 704它发现元素并且将它返回到读取器。
通过这种方式,RDML读取器704 担当处理器和读取器(即使它可以将实际的元素处理交给另一类)。
IVA.3  X-值变换器和行项集类型对于X-值变换器710,术语“X-值”是指缺省情况下沿着图表视图716 的x-轴绘制输入数据记录的域这一事实。
(在Y轴上绘制每个域的每个记录 值。
)例如,缺省地,用在X轴上绘制年时间周期,在图表中绘制时间序列。
当输入多个数据文档时,在它们的数据域可以一起显示在公共视图之前,这 些数据域必须相互关联。
X-值变换器710确定需要作何调整,然后完成它们。
通常,RDML数据查看器100识别三种不同类型的行项集(即,(1)“时 间序列”、(2)“分类”、和(3)“X-Y图”),它们占多数终端用户表。
X-值 变换器710,通过识别这些类型,能自动提供正确的显示和变换例程,节省 用户修改大范围细节的时间和开支。
给出一个这样的例子,当遇到时间序列 表时,数据查看器100能识别x-值必须符合可允许日期类型,检查它们、规 范它们,并且格式化它们,从而节省用户工作。
在本发明的一个实现中,行 项集类型是行项集元素906的必要属性。
图11示出由X-值变换器710使用的步骤,以将新的文档存储在如下描 述的主数据存储712(Primary Data Store,PDS)中。
通常,X-值变换器710确 定新输入的数据文档是否具有与当前存储在PDS 712的“活动文档”列表中 的数据文档相同的类型。
活动文档可用于在树视图720中显示、绘入图表、 加入到电子表格724等。
首先,X-值变换器710接收新文档102(步骤1102)。
然后它确定PDS 712 中活动文档的类型(步骤1104)。
如果新到达的文档具有与活动文档相同的行 项集类型(步骤1106),它将加入到PDS 712中的文档(步骤1108)。
如果它具 有与PDS 712中当前活动文档不同的类型,通知用户它与当前活动文档不匹 配(步骤1110)。
用户可以选择拒绝新文档102(步骤1112),在这种情况下, 对象不加入到PDS 712(步骤1114)。
如果用户选择删除当前活动文档(步骤 1116),则删除当前活动文档(步骤1118)并且载入新的文档(步骤1120)。
否则, 新文档102放在PDS 712中作为“备用”文档(步骤1122)。
备用文档可以用 于向脚本和宏提供数据,但是不干涉活动文档视图。
可选地,如果x-值变换 器710不需要执行任何变换,RDML读取器704可以在PDS 712中存储文 档。
如果新到达的文档具有与活动文档相同的行项集类型,X-值变换器710 将新文档的data_x域与现有文档进行匹配。
它们可以采用不同的次序、不同 的拼写、不同的格式,或其它不立即兼容的形式。
X-值变换器710根据行项 集的类型作必要的调整。
例如,时间序列行项集具有以时间排序的元素。
一 个明显的不兼容是周期可能不同。
经常,例如,一个数据集采用年,而另一 个采用月。
X-值变换器710使用行项集的属性正确处理每一个。
然而,月份 数据不能仅仅进行累加来产生年度值,例如,因为数字可能表示非累加性的 值。
例如,行项可能是“末期银行余额”,但是累加12个月终余额不产生年 终余额。
行项提供指定它是“期末”值的周期长度属性,并且X-值变换器710 仅使用最后一个月,创建年度值。
在另一例子中,月份“存款”将一起累加, 并且月份“平均利息率”可能是“周期-平均”。
每个行项提供如何通过转换 将它处理为其它周期的指示;它由li_aggregation属性进行提供。
可能要作的另一改变是日期格式。
一些数据集可能简单地显示年 (“YYYY”),其它可能使用标准日期格式(“YYYY-MMDD:HHMMSS.MSS”) 或其它一些变型。
X-值变换器710将它们转换为一个共用格式。
数据查看器100另外提供描述如果发生周期加长/变短,或周期偏移, 如何对它进行处理的标签。
数字可以标记作“sum(和)”、“median(中值)”、 “average(平均数)”、“last value(最后值)”、“first value(最前值)”或特定公 式。
X-值变换器710和数据查看器100还可以处理“周期偏移”,一个相关 规范类型。
例如,第一数据源可以基于年终12月31日的历年,而第二数据 源基于年终9月30日的财政年。
RDML数据查看器100可以结合y_data元 素的li_aggregation属性,使用x_data元素924的period_length属性,指定 数据的周期长度。
li_aggregation属性用来评估规范变换。
当x-值已经得以规范时,Y-值,行项中的数据值可能发生变化。
例如, 如果组合十二个月的“平均利息率”产生“年度平均利润率”,将出现在图 例或轴标题的数字更新表示将发生变化。
数据查看器100知道结果值可能根 据单位、数量级、修饰符、标度、测度和调整属性进行变换。
这些属性允许 对行项中的数据进行有效和自动的解释、翻译、操作和表示。
它们进一步帮 助自动改变要由宏自动改变的图表和报表中的文本描述。
另外,规范不同文档的不同时间周期,X-值变换器710和数据查看器100 可以在需要时提示要求用户的帮助。
例如,第一数据源可能用域如“1星期”、 “2星期”等表示,而第二数据源可能用“1999年4月4日”、“1999年4 月11日”等表示。
X-值变换器710识别这一问题(和一组广泛的类似情况), 并且显示一个对话框,询问用户“1星期”开始的实际日期。
分类行项集类型是经常称作“交叉表(crosstab)”的行项集类型。
在这个 行项集类型中,x-值是分类。
例如,在一个图表中,x-轴可以为8个公司分 为8个类别,y-轴显示收入或利润值。
有时,通过名称匹配不同源文档的域 太依赖于措词、拼写或语言,而不允许有效的匹配。
对于分类行项集的挑战 是处理用法上的不同。
例如,公司收入报表可能以“销售”的概念开始,但 是所使用的实际词可能是“收入”、“总收入”、“毛收入”或在不同语言、方 言或工业特定术语中使用的任何其它名称。
为了处理这些行项集,X-值变换 器710通过首先匹配任何实际拼写匹配(忽略缺省情况)排列来自多个数据集 的分类。
第二,它查看类元素930,以查看是否存在标准词汇表标签;这些 标准对于不同的行业或使用,可以不同。
例如,当处理公司时,自动收报机 (ticker)符号可以用作匹配标签。
例如,一个数据集的分类可能为“Ford”, 另一个为“Ford Motor Company”,而另一个为“F”。
所有这些将通过类元 素930中的共同表示,标签<"F">进行匹配。
如果这样不能提供匹配,数据 查看器100向用户显示一个带两个域列表的对话框。
使用“拖放”技术,用 户能快速地匹配两组域,没有匹配的域简单地作为新域进行添加。
除了根据 文本、类集和用户输入创建映射字典外,数据查看器100能使用由用户指定 的映射文件或输入文档,自动组合文件。
图12A、12B和12C示出本发明的X-Y图1202的屏幕图。
在科学统计 序列中最常见的X-Y图1202由于它的性质将每个x-值都看作不同。
该显示 在图上绘制单个数据点。
X-值变换器710仅要求只核对准确的匹配。
该屏幕 图还显示对应于X-Y图1202中数据的树视图720和图例1204。
如图12A 所示,X-Y图1202显示所选的行项1206,并且图例1204随着行项选择的 改变发生改变。
图12B和12C示出在树视图720中选择不同行项1206而产 生的X-Y图1202。
IV.A.4. 主数据存储图13示出主数据存储712及其存储的一些对象。
主数据存储712是所 载入RDML文档102的缓存,它可以用很多方式(例如,作为向量、作为字 典或散列表、或作为其它一些对象集合)进行实现。
一旦X-值变换器710已确定新到达数据文档102的活动或备用状态, 并且对X-值作出任何必要修改,它就将新RDMLDoc对象13Q2传到PDS 712,它管理与各种视图或插入应用的通信。
该PDS 712中央存储允许不同 视图(716、720、724和728)访问表示原始源数据的对象1302。
单个视图(下 面描述)制作它们自己的所需数据部分的副本,并且采用它们所需的变换形 式。
PDS对象712通常不执行数据变换;它简单地保存它们,增加并删除 它们,并且使它们在公共接口可用于其它对象。
下面的表1示出PDS对象712 的示例性类图。
注意,在这个实现中使用向量保存RDML文档102;使用散 列表或集合数据结构也是可能的。
                                 表1     PrimaryDataStorage
-Active_RDMLDocs:Vector
-Active_RDMLLines:Vector
-Standby_RDMLDocs:Vector
-Standby_RDMLLines:Vector
+Add_RDMLDoc(rdmldoc:RDMLDoc):void
+Add_RDMLLine(rdml_li:RDMLLineltem):void
+getRDMLDoc(rdmldoc:RDMLDoc.Status:int):RDMLDoc
+getRDMLLineltem(rdml_li:RDMLLineltem,status:int):RDMLLineltem
+getNumRDMLDocs():int
+getNumRDMLLineltems():int
+clearRDMLDoc(rdmldoc:RDMLDoc):void
+clearRDMLLineltem(rdml_li:RDMLLineltem):void
在这个类图中,上面部分列出对象的变量名称,随后是它们的类型。
下 面部分列出在括号中带参数名称和类型的方法名称,随后是方法的输出类 型。
正如所示,PDS 712提供用于存储活动和备用RDMLDocs 1302和 RDMLLineItems 1304的变量和方法。
PDS 712对象包括增加、提取和清除 文档和行项的方法,和用于确定文档和行项数的方法。
RDMLDoc对象1302是RDML文档102的完全内部表示。
它包含在文 档原始标签中包含的树结构数据元素作为其中心属性,并且实现DOM接口。
操作DOM对象的应用也可以操作RDMLDoc对象1302。
RDMLDoc对象1302 为RDML数据查看器100的不同视图提供高层接口。
下面的表2示出本发 明示例性RDMLDoc对象1302的类图。
                                           表2     RDMLDoc
-txDoc1:txDocument
+RDMLDoc():RDMLDoc
+createDoc(filename:String):TXDocument
+getAttributeValue(elementname:String,attributeName:String):String
+getAttValue(lev1_tag:String,lev2_tag:String,lev3_tag:String,att_name:String):
String
+getData_xDefaults():JCVector
+getLinkAttValue(element:String,index:int,attname:String):Atring
+getLinkText(element:String,index:int):String
+getNumLineltems():int
+getNumLinksForElement(elementname:String):int
+getRDMLLineltem(att_name:String,att_value:String):RDMLLineltem
+getTXDoc():TXDocument
+makeRDMLLineltem(li:Node):RDMLLineltem
+parseCommaDelimString(in:String):JCVector
+setTXDoc(txDoc_in:TXDocument):void
+traverseDOMBranch(node:Node):void
下面对根据本发明的一个实现的RDMLDoc对象1302的表2所示的类 方法进行描述。
首先,RDMLDoc()是用于创建内部RDMLDoc对象1302的 构造器。
方法“createDoc”读入由输入URL指示的文件,对它进行分析, 并且创建新TXDocument,然后用户通常将此TXDocument赋给该RDMLDoc 对象1302。
TXDocument是实现文档对象模型(DOM)接口的对象。
TXDocument为文件创建DOM结构,并且用各种访问和管理性方法“包装 (wraps)”它。
它是遵循DOM的文档原始表示。
“setTXDoc”方法设置底层 TXDocument,并且初始化对象属性,如行项数,并且“getTXDoc”返回底 层TXDocument。
鉴于RDML文档102形成具有带值属性的元素树,“getAttributeValue” 方法返回命名元素的属性值,并且“getAttVal”以字符串形式返回根据所输 入的元素名和属性名找到的属性值。
“getLinkAttValue”方法根据所指定的元 素名和属性得到超链接元素的属性值,并且“getLinkText”得到相应的超链 接文本。
当调用时,“getNumLineItems”返回RDMLDoc 1302中的行项数,并 且类似地“getNumLinksForElement”返回元素的链接数。
“getRDMLLineItem”方法根据具体属性值提供第一个RDMLLineItem 1304(下面描述)。
例如,指定“li-ID”和“3”将返回“li-ID”属性等于“3” 的RDML行项。
“makeRDMLLineItem”方法接受所指示的节点,将其赋给 新RDMLLineItem对象1304,并且初始化该对象。
方法“getData_Defaults”返回缺省X-值的向量。
而且, “parseCommaDelimString”接受逗号分隔的字符串为输入,并且返回逗号 之间的值作为向量元素,并且返回字符串向量。
最后,“traverseDOMBranch” 将输入节点当作参数,然后从那个节点向下进行遍历,并且在每个节点,可 以出现一个操作如查找带特定名称的元素。
类似于RDMLDoc对象1302,“RDMLLineItem”1304是一个对象,提 供用于提取行项上的数据、任何相关链接或备注和属性的高层方法。
RDML 数据查看器100的视图操作RDMLDoc 1302和RDMLLineItem 1304创建它 们的表示。
下面的表3示出示例性RDMLLineItem对象1304的类图。
                  表3     RDMLLineltem
-data_x:TXElement
-data_y:TXElement
-jcvdata_x:JCVector
-jcvdata_y:JCVector
-li:TXElement
-line_item_set_att:NamedNodeMap
+RDMLLineltem():void
+get_icvData_X():JCVector
+get_jcvData_Y():JCVector
+get_strX_Value(index:int):String
+get_strY_Value(index:int):String
+getAttributeValue(attributeName:String):String
+getLinkAttribule(index:int,attName:String)String
+getLinkText(index:int):String
+getNumDataPoints():int
+getNumLinks():int
+initLineltem(doc:RDMLDoc,lineitem:Node):void
+set_li(input:TXElement):void
下面对根据本发明的一个实现的RDMLLineItem 1304的表3所示的类 方法进行描述。
尽管与上面所述RDMLDoc对象1302同名的方法具有相同 的一般功能,但由于行项已经具体到元素,因此这些方法采用不同的参数, 因为它们一般不需要在给定参数中指定元素。
RDMLLineItem()是创建RDMLLineItem对象的构造器,并且 “initLineItem”将行项初始化为在RDMLDocument找到的值。
方法 “get_jcvDataX”和“get_jcvData_Y”返回所指示行项号的x-和y-值向量。
方法“get_strX_Value”和“get_strY_Value”以字符串形式返回x-值向量中 行项号的x-和y-值。
调用“getNumDataPoints”方法得到行项中的数据点数目,即x-值数目。
方法“set_li”允许调用例程设置特定RDMLLineItem所表示的RDML文档 102中的行项。
回到图7A,在本发明的一个实现中,图表管理器对象714从PDS 712 接收可达6个RDMLLineItem 1304,并且将它们显示在图形用户界面734所 显示的图表上,并且典型地结合树视图720和宏面板732进行使用。
当用户 在树视图720的行项上单击鼠标时,该行项将添加到图表中。
当用户在宏面 板732中的宏行上单击鼠标时,加到图表中的所选行项将根据宏的编程进行 变换。
如果有更需要的不同或更好图形图表组件,图表管理器714可以从图 形图表视图716中分离出来,以允许方便地改变图表软件组件。
视图数据查看器100向用户显示很多不同的视图(如图7A所示的716、720、 724和728),用户可以使用这些视图查看存储在PDS 712中的RDML文档102 的信息。
这些视图包括显示图形图表和数据图的图表视图716,和显示行项 分层表示的的树视图720。
另外,数据查看器100提供显示类似于电子表格 的数据单的电子表格视图724,和显示与RDML文档100关联的脚注文本的 脚注视图728。
这些视图将在下面进行详细讨论。
IV.A.5 图表视图一接收到RDML标记文档,图表视图使用描述数据含义的属性,对存 储在标记文档中的数据进行变换、格式化、操作和显示。
图表视图使用数字 属性,例如,帮助在一个图表上同时显示不同类型的不同数字序列,并且自 动显示适当的描述文本部分。
例如,图表视图自动确定第一序列是“美国美元”并且第二序列是“法 国法郎”;它可以自动地将它们放置在单独的轴上,或者自动解释这些单位。
它还可以确定这些轴的标题,并且设置轴标。
图表使用标记文档的单个元素 的属性,自动地构造自身,并且这些操作可以通过单击鼠标来发起。
图14A-F示出屏幕上半部的图表视图716和下半部的树视图720。
图表 视图716有两个主要组件:图表本身和图表图例1402。
在树视图720中所 选择的行项1206自动画在图表716中。
图表管理器714一般具有三种主要 的职责:(1)从树视图720,宏面板732和主菜单(没有显示)收集有关对图表 716作改变的消息;(2)从PDS 712或宏管理器732获得正确的行项或宏, 并且协调数据变换;和(3)管理图表数据对象(“图表数据”对象715),该对 象包含采用将在图表中所使用形式的数据,和这些行项的属性。
通常,图表管理器714处理对图表本身的更新和操作(例如,轴、轴标 等),而图表数据对象715处理图表716上的数据绘制。
图表管理器对象714 提供图表数据对象715所需信息,以更新其内部数据结构。
图表数据715是 中央图形图表716绘画自身所使用的数据模型,但是其它组件还使用数据: 脚注,图表图例和标题,和操作该数据的任何宏。
一种可视化图表管理器714(及其数据伙伴,图表数据对象715)角色的 方法是查看一个完整样例场景方法的步骤:用户在树视图720中已选择行项 1206,并且图表管理器714被通知该行项将加入到图表716中。
存在各种不 同的用于设置图表数据/图表管理器架构的方法。
下面详细描述的一种方法 是预先创建图表,然后向它输入数据变化(初始化、清除、更新数据序列等)。
第二种通用方法是一有变化请求,就使用数据创建新的图表。
下面将更详细地描述图14A-F,特别图14A和14B将结合图15A,15B 和15C进行描述,图15A-C示出在本发明的一个示例性场景中,一旦在树 视图720中选择行项1206,就更新图表视图716的方法步骤。
图15A示出 主要涉及树视图720和图形界面734的步骤,而图15B和15C分别示出主 要涉及图表数据对象715和图表管理器714的步骤。
如图15A所示,用户在图形界面734的树视图720中选择一个行项 1206(步骤1502)。
树视图720获得所选行项1206的ID(步骤1504),并且删 除任何所应用的旧宏(步骤1506)。
然后图表管理器714从图表视图716删除 最后序列(所显示的行项数据),以让位于最新所选行项(步骤1508)。
现在参照图15B,图表数据对象715从图表716删除现有数据(步骤 1512)。
然后它从PDS 712获得RDMLDoc对象1302(步骤1514),并且从 RDMLDoc对象获得RDMLLineItem对象1304(步骤1516)。
此后,图表数 据对象715规格化X-值数据(步骤1518)。
例如,如果一个图表序列显示从1961 到1998的数据,并且最新的序列显示从1973到2005的数据,图表数据对 象715确定图表显示从1961到2005的数据。
然后,图表数据对象715用数 据填充x-轴1404(步骤1520)和用数据填充y-轴1406(步骤1522)。
如图14B所示,图表可以一次绘制多个y-轴(即,图表两边不同的y-轴), 以同时显示多个行项。
因此,图表数据对象715进一步标记序列在哪个轴上 (步骤1524),并且如果它位于Y2轴1408(第二轴)上(步骤1526),它添加那 个轴(步骤1528)。
图表数据对象715为轴标1406和1408设置数字格式(步 骤1530),并且设置数字精度(步骤1532)。
最后,它更新脚注(步骤1534)并 且运行任何所应用的宏(步骤1536)。
现在参照图15C,图表管理器714然后使用行项属性,设置Y1标题(步 骤1538)和Y2标题(步骤1540)。
此后,它更新序列样式(步骤1542)、图表标 题1410(步骤1544)、图例1402(步骤1546)和x-轴1404(步骤1548)。
完成这 些更新之后,图表管理器714更新数字精度(步骤1550),y-轴1406(步骤1552) 和图表类型(即,面积,条形,堆积条形,线形,饼形,点形等)(步骤1554)。
随后,它更新脚注1412(步骤1556),并且将x值的最大值设置为最后所使用 值的范围,消除图表716右边的空白区(步骤1558)。
最后,图形界面734用 新近创建的更新重新绘制图形图表716(步骤1560)。
图表管理器714和图表视图716可以在同一图表上绘制不同序列类型, 并且自动处理变换。
因为来自不同源文档102的两个(或更多)序列可以放置 在图表716上,因此对它们进行同步,以放置在共同图形上。
图表管理器714 使用data_x元素或者元数据标签来自动变换数据,以允许不同序列类型一起 出现在一个图表上。
例如,它们识别何时第一序列用“美国美元”并且第二 序列用“法国法郎”。
它自动作出安排,将它们放置在不同的轴上。
这样不 需要用户经历图表向导,或者查找、理解并且翻译不同的单位、标题、和调 整。
在树视图720的每个序列行上单击(可能带被压下的修饰键(例如CTRL 键)),指示图表视图716使用单个元素的元数据构造自身。
图表管理器714 和图表数据对象715考虑如下图表更新:单元类型、数量级、标度、修饰符、 测度、y轴标题、图表标题、图表脚注、精度、数字格式、图表类型(线形, 条形等)、图例和各种组件的颜色。
数据视图100还允许使用单击或命令将序列加入图表。
将序列加入图表 增加显示在图表上的序列数。
在传统的电子表格、图表程序和数据图形界面 中,这种任务要求用户通过向导重建整个图表,用新序列的信息填充对话框, 或者通过自定义编程加入数字。
当数据查看器100用单击鼠标将新序列加入 图表时,原有的数据保持不变,并且由图表管理器714和图表视图716自动 作出图表类型、格式、标度等任何必要的改变,以容纳新的序列。
正如可以通过一次鼠标单击(或一个来自菜单的命令)加入一个序列,同 样也可以删除它。
用户不需要担心偶然删除了某些东西,因为没有实际信息 从数据查看器100中丢失。
通过简单的鼠标单击,它总能加回到图表716。
图表视图716还提供一种可扩展图例1402,如图14A所示。
对于大多 数电子表格程序的用户,一个重要的问题是用户不能控制图例1402的尺寸、 格式和处理。
结果,图表通常结束于如“MSFT”和“SUNW”的图例,而 不是带多种颜色、字体、换行和其它阅读性改进的更长描述。
图表视图716 图表提供如下特性的图例:(1)能无限制地加大尺寸;(2)支持换行;(3)能 包含多种字体;(4)能包含多种字体类型(粗体、斜体、常规)和(5)能包含起突 出作用的可变颜色。
如果行项的图例信息(典型地存储在li_legend属性中)相 对图表上的图例框太长,该信息可以进行换行和滚动,以容纳额外的信息。
图表视图716通过自动指定y轴标题1414允许进一步的方便。
目前电 子表格和图表程序通常通过图表向导或者指定查看标题的位置,要求用户提 供y轴标题。
RDML将这个负担转移给更适合准确指定y轴值描述的数据创 作者(originator)。
由数据创作者指定的Y轴标题1414位于行项元素标签的 一个属性域(y_axis_title)中,并且当该行项加入图表视图716时,由图表视 图716用作缺省y-轴标题1414。
然而,经常用户希望改变数字,并且在图表716上显示所变换的序列。
在这种情况下,缺省y-轴标题1414可能不再正确。
不是要求用户手工计算 新值描述是什么(用目前分析程序可能会花几分钟或者更长的过程),图表管 理器714和图表视图716数据使用行项1206的修改单位、数量级、修饰符、 标度、测度和调整属性中所提供的信息,自动生成基于值变换的新y-轴标题 1414。
例如,假定第一序列作为“百万美元”加到图表,并且用户应用一个将 序列的每个数除以1000的宏。
图表管理器714自动创建“十亿美元”的新 y-轴标题1414。
数字变换可以导致y-轴标题1414的相当复杂的转换。
用户 可以将第一序列(“百万加仑”)乘以第二序列(“美国$/加仑”);结果将是一 个数字序列,第三序列("百万美国$")。
如果存在歧义,数据查看器100向 用户显示一个对话框,显示所有有关所涉及数量的已知信息,并且要求用户 提供标题。
类似地,图表管理器714和图表视图716能使用元数据属性自动生成x- 轴标题和图表标题1410。
除生成y-轴和x-轴标题之外,数据查看器100在 已加到图表的序列发生改变或多个序列加入相同图表时自动执行创建新图表 标题1410的任务。
例如,第一序列具有缺省标题“总销售”,第二序列具有 缺省图表标题“总开支”,并且第三序列具有缺省标题“总销售”。
数据查看 器100将通过组合不同的元素并且消除重复元素,创建所组合图表标题“总 销售;总开支”。
三个例子说明其它自动标题操作类型。
在第一个例子中,假设图表上面 具有两个序列:序列A具有标题“GDP”和图例“中国”,并且序列B具有 标题“GDP”和图例“马来西亚”。
如果它们放在该图表中,标题将相互重 复。
在本发明的一个实现中,将删除重复标题,从而这个图表的标题将简单 地为“GDP”。
由于序列图例不同,因此图表左边的图例将有两个条目:“中 国”和“马来西亚”。
作为第二个例子,假定图例是重复的:序列A具有标题“中国”和图 例“GDP”,并且序列B具有标题“马来西亚”和图例“GDP”。
由于图例 条目均为“GDP”,因此会存在哪个图例应用于图表上的哪个行项的混淆。
在这种情况下,数据查看器100调换图例和图表标题条目,从而结果与上面 第一个例子相同;图表的标题为“GDP”(重复被删除),并且图例条目为“中 国”和“马来西亚”。
最后,在第三个例子中,假定序列具有不同的标题和不同的图例。
序列 A具有标题“GDP”和图例“中国”,并且序列B具有标题“国家储蓄”和 图例“马来西亚”。
图例不加改变,并且通过用“;”将标题相互分隔,创建 新的图表标题。
因此显示上的图表标题变为“GDP;国家储蓄”,并且第一 图例变为“GDP-中国”并且第二图例变为“国家储蓄-马来西亚”。
所有这三 个改变均为字符串操作(选择和/或添加)。
图表管理器714和图表视图716还能自动删除开始和结束x-值1404, 从而解除了用户从图表删除空头尾值的需要。
在传统电子表格和图表程序 中,当加大或缩减底层数据时,必须重新创建或手工调整图表指针。
例如, 如果从1990到1998的序列已加到图表,并且它由从1990到1996的数据进 行替换,图表的右边将出现两个空白位置。
数据查看器100和图表管理器714 通过将行项前部和后部的缺少或空值处理为需要自动重构图表的指令,避免 这一问题。
图表管理器714还自动格式化x-和y-轴标1404和1406。
RDML将格式 化x-轴1404和y-轴1406数字的负担从用户(可能存在上千或上百万个,每 个手工重新格式化数字一次或多次)转交给数据创作者(一个,只需要格式化 一次)。
格式模板是目前电子表格和编程语言中的常规表达字符串。
数据查 看器100为图表视图716的轴标、树视图720的数字,并且作为报表中数字 的缺省格式,使用格式化字符串。
如果宏将数字移到图表716所允许的精度 范围之外,或树视图720或报表中有意义的格式之外,将自动改变格式化模 板。
如前所述,一个RDML行项元素属性为数字的精度,要显示在图表上 的有效位数。
不同于传统产品,将这个任务完全交给用户进行计算,数据查 看器100使用指定精度,设置y-轴1406的标度及其轴标和刻度线的格式和 精度。
另外,图表管理器714自动创建并删除第二y-轴1408,如图14B所示。
其上绘有两个不同序列的图表将需要两个轴。
y-值的单位、测度或标度可以 不同。
例如,用户可能已绘制以“百万$”表示的序列,并且想要将以“%GDP” 表示的序列加入同一图表716,并且这两个序列不能共享共同的y-轴。
图表 管理器714识别这一不兼容性,创建新y-轴1408,并且将所有随后的格式 化、宏等引导到合适的轴。
目前电子表格和图表程序要求用户用图表向导(需 要很多要输入的指示,和得到各种标度、颜色等的大量试验和错误,修正) 或通过自定义编程重构图表。
如果由行项的单位和标度属性的细节要求,数 据查看器100自动进行该过程,创建和格式化一新轴。
如果从图表删除序列, 将删除相关的轴并且更新剩余序列的各种标度、颜色等以使图表立即可读。
表4示出图表管理器714的类图。
表4:     ChartManager
-chart1:JCChartComponent
-chart_data:ChartData
-chart_legend:ChartLegend
-chart_title:JCTitle
-CDV1:ChartDataView
-CDV2:ChartDataView
-DS:DataStore
-LineColors:JCVector
-mainFrame:MainFrame
-series1:ChartDataViewSeries
-series2:ChartDataViewSeries
-x_value_labels:JCVector
-xaxis:JCAxis
-xtitle:JCTitle
-y1axis:JCAxis
-y1title:JCTitle
-y2axis:JCAxis
-y2title:JCTitle
-yLabelGenerator1:YLabelGenerator
-yLabelGenerator2:YLabelGenerator
+addSeries(key:String):void
+addY2Axis():void  +ChartManager(mainFrame:MainFrame,hart_comp:JCChartComponent,legend:ChartLegend):void  +checkYAxisTitle(series:int,y1title:JCAxisTitle,y2title:JCAxis Title):int
+deleteLastSeries():void
+deleteSeriesAfterFirst():void
+getAddSeriesFlag():boolean
+getChartData():ChartData
getYAxisTitle(series:int):String  +initChart():void
+markWhichYAxis(num_series:int):void
+replotChart():void
+replotSeries():void
+resetChart():void
+setAddSeriesFlag(flag:boolean):void
+setChartType(type:int):void
+setDataStore(ds:DataStore):void
+setStartPeriod(sp:String):void
+updateChartTitle():void
+updateChartTypes():void
+updateFooter(num_series:int):void
+updateFootnotes():void
+updateLagend():void
+updatePrecision():void
+updateSeriesStyles(num_series_locat:int):void
+updateXAxis():void  +updateYAxis(num_series_local:int):void
下面对根据本发明一个实现的图表管理器对象的类方法进行描述。
ChartManager()是图表管理器对象714的构造器,并且“initChart”将图表初 始化为空,并且“getChartData”得到图表数据对象715。
“addSeries”方法将一个序列加入到图表,而“deleteLastSeries”删除 最后所加入的序列。
类似地,“deleteSeriesAfterFirst”删除除第一序列之外 的所有序列。
如果保留已加到图表的序列,再加入下一序列,序列标志设为“真”。
“假”标志告诉图表删除最后当前序列,并且将其替换为新序列。
“getAddSeriesFlag”和“setAddSeriesFlag”方法提取和设置该标志。
“getYAxisTitle”方法返回y-值标题,并且“checkYAxisTitle”检查当 前y-轴标题,查看新近绘制的序列是否在当前轴上,或者是否要创建新轴。
“AddY2AXis”在需要时将第二y-轴添加到图表。
“markWhichYAxis”告诉 ChartData对象新的行项已被绘制在哪个轴上。
“resetChart”方法将图表复位为当数据查看器100启动时它所处的状 态。
而“replotChart”更新图表的物理方面。
同样地,“replotSeries”根据变 化重新绘制序列。
“setChartType”方法告诉图表管理器调用replotChart时显示哪种图表 类型,并且“setDataStore”告诉图表管理器它将处理哪个数据存储对象712。
如果数据是一个时间序列,“setStartPeriod”为图表起始周期设置内部变量。
最后,多个更新方法每个更新图表的相应方面以响应可能的操作或变化,例 如,“updatePrecision”更新图表的精度。
表5示出图表数据对象715的类图。
表5:     ChartData
-chtData:JCVector
-chtHeader:JCVector
-cm:ChartManager
-originalPlottedYear:String
-start_period:String
-zeroData:String[][]
+addSeries ToChart(ds:DStore,key:String):void
+decrementNumSeries():void
+deleteLastSeries():void
+deleteSeriesAfterFirst():void
+fillXAxis_CT(rdml_li:RDMLLineltem):void
+fillXAis_TS(rdml_li:RDMLLineltem,yearsDiff:int,sizeDiff:int):void
+fillYAxis_CT():void
+fillYAxis_TS(rdml_li:RDMLLineltem,start:int,yearsDiff:int,sizeDiff:int):void
+getAddSeriesFlag():boolean
+getChtData():JCVector
+getChtHeader():JCVector
+getChtHeaderElement(series:int,element:String):String
+getDatalnterpretation():int
+getDataltem(row:int,column:int):Object  +getDifferenceslnX(rdml_li:RDMLLineltem,yearsDiff:int[],sizeDiff:int[]):void
+getName(series:int):String
+getNumRows():int
+getNumSeries():int
+getPointLabels():String[]
+getRow(row:int):Vector
+getSeriesLabel(series:int):String
+getSeriesName(series:int):String
+getStartPeriod():String
+incrementNumSeries():void
+normalizeValues(rdml_li:RDMLLineltem,xory:int,yearsDiff:int,sizeDiff:int):JCVector
+setAddSeriesFlag(input:boolean):void
+setChtData(jcvln:JCVector):void
+setChtHeader(jcvln:JCVector):void
+setChtHeaderElement(series:int,element:String,value:String):void
+setDataltem(row:int,column:int,c:Object):boolean
+setNumSeries(new_num:int):void
+setOriginalPlottedPeriod(in:String):void
+setStartPeriod(in:String):void
+zeroChtData():void
下面是根据本发明的一个实现的图表数据对象的表5所示的类方法。
与 图表管理器的方法同名的方法将不作描述,因为它们单独对数据执行相同的 功能。
图表数据对象使用方法“fillXAxis_CT”,“FillXAxis_TS”, “fillYAxis_CT” ,和“fillYAxis_TS”填充时间序列和图表数据集的x-和y- 轴。
“decrementNumSeries”和“incrementNumSeries”方法改变存储图表上 的序列数的计数器。
“getChtData”方法返回一个chtData向量,它是多个向量的向量:外 部向量的每个元素是一个行项数据的向量。
“getChtHeader”方法返回一 个chtHeader向量,它包含每个行项标题信息的向量。
该向量是行项属性值 的列表,例如,数量级,标题等,并且“getChtHeaderElement”从所指示序 列的ChtHeader获得特定元素的值。
对数据集进行操作,“getName”返回数据集的名称,并且 “getNumRows”返回数据集中的行数。
“getRow”方法返回序列的一行,而 “getSeriesLabel”返回标注。
“getDifferencesInX”方法排列时间周期用于时 间序列图表。
并且“getNumSeries”返回num_series变量中的序列数。
很多 get(得到)方法有相应的设置值而不是接收值的set(设置)方法。
chtData变量是多个向量的向量(每个子向量为一个序列数据),并且 “getDataItem”返回chtData特定行列的数据值。
由构造器进行使用, “zeroChtData”给出一个空图表。
“getPointLabels”方法返回一个字符串数 组,其中每个字符串是chtData的点标注。
对于时间序列,“getStartPeriod”提取时间序列的起始周期,并且 “normalizeValues”规格化加入图表的序列值。
“getDataInterpretation”方法 返回“数组(array)”或者“一般(general)”来描述数据源结构采用哪种形式。
(对于时间序列和分类数据,返回值为“数组”-它们共享X值,并且对于 XY数据,返回值为“一般”-其中X值通常是独立的。
) IV.A.6 树视图回到图14A,该屏幕图还包含屏幕下半部分的树视图720。
树视图720 显示数据的分层视图。
树视图720用作与传统电子表格和数据库管理系统的 “数据单视图”不同的目的。
它将数字在它们的上下文中进行可视化显示。
用户可以了解依赖性关系,从图标和可视提示确定不同的行项是如何与它们 的父亲,同辈,和孩子相关联的。
“单位”栏1416突出显示每个行项的单位、 标度、数量级等,混合数据集的一个重要显示,其中,单位内容的上下文逐 行项地发生改变。
不同活动RDML文档102中的每个行项以原始次序进行显示。
在树视图 720中,每个RDML文档102以一个新顶层节点开始。
显示在树视图720中 的信息是来自且关于行项的重要数据的概要,而不是在典型电子表格视图中 所见的所有数据点的显示。
不是显示可能引起混淆的原始数据数字矩阵,这 使模式的辨别很困难,树视图720在一个实现中,为每个行项显示如下信息: 图例1402、单位1416、三个用户可选择代表性数据点1418和一个或多个概 要栏1420。
在图14A的例子中,有一些重要文档化1416(描述、单位)、一 些代表性数据1418(在本例中,三年金额)和概要数据栏1420(在本例中,所 有数据点的和)。
第一栏1416显示行项的图例。
这是无格式语言描述;它在 必须由人来识别行项的每个视图中进行重复。
树视图720中的代表性数据栏1418向用户给出行项的相对重要性、类 型和格式的可视提示。
RDML数据查看器100允许用户选择要显示的不同 域。
例如,一个用户可能想要查看“1940、1970、2000”来感受长期趋势, 而另一用户可能仅希望查看“1998、1999、2000”来查看近期趋势。
概要栏1420允许用户选择用来更好理解行及其上下文所需的统计或者 用于对栏进行从最大到最小或相反的排序所需的统计。
任何栏都可以通过简 单地单击它们进行排序。
概要栏为用户提供比数据库或电子表格公式更加容 易的统计,因为RDML数据查看器100提供对统计方法的单击选择,从而 消除了编写公式、为缺少值调整、处理分母中的空等的需要。
一些概要统计 的例子包括:(1)和;(2)平均数;(3)中值;(4)最小数;(5)最大数;(6)移 动平均数;(7)方差/标准偏差;(8)%差异(所选的周期或分类);(9)%父亲;(10) %指定行项;(11)与父亲的相互关系和(12)自定义公式。
对于每个这些统计量 度,RDML数据查看器100提供一个对话框,其中,用户可以调整假定。
例 如,“移动平均数”可以用于一个周期、五个周期、十个周期等。
树视图720强调行项是RDML数据查看器100中的主要数据单位,而 不同于电子表格中所见的作为单元格的单个数字。
由于每个行项1206是一 个对象,RDML数据查看器100可以被看作面向对象的电子表格。
每个行项 的图标1422标识行项的上下文。
例如,“+”图标1422表示将那个行项加到 它的同辈将产生父亲行项。
这个特性解决了电子表格和数据库数据单视图的 一个缺点:不能同时查看公式和数据。
它向用户显示数字是如何相互关联的。
传统数据库管理系统、电子表格和数值分析工具都没有内置的表示,说 明记录是如何相互关联的。
在关系数据库中,位置或行可以与其数据没有相 关性。
RDML和树视图720通过使行项在集合中的位置作为可由用户使用的 信息,改变这一情况,并且图标1422可以可视化地指定行项与其父节点的 关系。
在本发明的一个实现中,为关系图标使用如下值:(1)加;(2)减;(3)乘; (4)除;(5)等于;(6)计算于;(7)成员;(8)集合;(9)孩子;(10)父亲; (11)MEMO;(12)一般;(13)备注;(14)无;和(15)根。
子行项可以加到父行项(或者可以用它们兄弟行项的其它关系进行修 改)。
“加”可以加到兄弟,而“减”减去它们。
例如称作“净销售”的行项 可以有两个孩子:“总收入”和“所售出商品成本”。
如果“总收入”的 li_relationship属性为“加”,并且“所售出商品成本”的li_relationship属性 为“减”,那么树视图720能显示“净销售”等于“总收入”减去“所售出 商品成本”。
“乘”和“除”分别表示行项的乘和除。
“等于”与“加”相同,但是显示依次计算其上行项的结果。
“计算于” 用于假定,如百分比、利率等,而“成员”表示行项简单地是由父行项表示 的行项集合的成员。
在这种情况下,即使有,也不作有关算术关系的假定。
“集合”表示行项有其直接下一级的孩子成员并且表示集合的概念。
“孩 子”说明行项简单地是“父”行项的“孩子”。
它意味着一种遗传,派生, 或继承。
即使有,也不作有关算术关系的假定。
“MEMO”是一个可能为查看兄弟行项的人感兴趣的行项。
但是它不 一定与其兄弟相关,而“一般”是一个通用指定符。
“备注”通常用于带文 本值的行项,并且“无”表示没有隐含关系。
“根”表示行项是根行项。
树视图720还提供其它功能。
它允许用户通过按下“shift”键将多个行 项1206绘入图表。
虽然数字浏览可以通过鼠标在数据视图100中完成,但 是对于用户,使用箭头键把行项绘入图表也是可能的。
当焦点处于树视图720 上,用箭头键上下浏览自动将所选行项1206绘入图表。
如果按下“shift” 键,随后的数据序列将加入图表,而不只是替换前面所选的序列。
图14C示出,在本发明的一个实现中,当用户右击所选序列时,显示 一个弹出式菜单1424,显示可用的不同文档化类型。
如图14D所示,选择 “描述”显示一个包含特定序列信息的窗口1426,所传递的信息从标签形 式到无格式语言(用户友好格式)。
图14E示出,在本发明一个实现中,用户可简单地通过选择树视图720 的行项中不同的“复选框”1450,将多个行项绘入图表。
在该实现中,所选 行项的集合传给图表数据对象,然后由图表管理器714将该集合绘入图表。
在本发明的一个实施例中,通过一系列鼠标事件帮助选择少于树视图 720中所有行的连续行集。
首先,在一行上(例如,Bristol Center)执行鼠标按 下事件。
然后拖动鼠标(高亮显示过程中的行)到该组中要包括的最后行(例 如,Hamlet West Center)。
通过拖动鼠标到要包括的最后行,然后放开鼠标, 用户能够通知系统(并且系统能够检测)要加入所选/高亮显示组的所有元素。
因此,系统检查它们对应的复选框。
树视图720还通过拖放技术提供一种创建RDML文档102的便利方法。
在传统电子表格和DBMS应用中,通过选择数据行并且剪切和粘贴它们, 或者通过编写SQL查询从现存表来创建新表是可能的。
在树视图720中, 可以通过将所需行项拖放到表示新文档的图标上来创建一个带有必要文档化 的新RDML文档102。
还可以用同样方式创建和操作宏。
数据查看器100还可以将宏设置为当所选行项发生改变时进行自动执 行。
作为宏“锁定”为人所知,这允许在经过变换的状态下浏览数据。
图14F示出行项可以有与它相关联的可视链接,该链接可以被用户激 活。
一旦激活链接1430,就显示一个相关超链接1432的列表,以便用户选 择。
链接1430本身可以表示相关超链接1432的数。
然后,用户可以选择任 何超链接访问相应的网站。
IV.A.7 电子表格视图图16示出在下半部显示电子表格视图724,并且在上半部显示图表视 图716的屏幕图。
很多用户的最终目标是获得以适合他们现有电子表格的格 式安排的数字集。
虽然很多程序提供剪切和粘贴操作将数字从源应用传送到 目标电子表格,这种方法将操作、规格化、排列和变换数据的任务留给用户。
因此剪切和粘贴操作经常跟随着对每个数字的手工重新计算和重新输入。
作 为对比,RDML数据查看器100,允许用户在将数字载入到电子表格之前, 通过鼠标操作作必要数据变换。
参照图16,当行项1206加入到图表视图716或树视图724并且从中删 除时,它们加入到电子表格724并且从中删除。
另外任何对绘制在图表视图 716行的改变(作为应用宏和宏组合的结果)立即反映在电子表格724的数字 中。
这提供将信息加入电子表格视图724的单击操作。
因此,这种将数据复 制到电子表格中的方法是简单地将它们加入到图表716。
将整个数据文档102 或数据文档集合从树视图720复制到电子表格视图724,在过程中作出任何 所需宏改变是可能的。
而且,RDML文档102可以直接从电子表格视图724进行创建。
虽然 数据表显示在电子表格724中(从另一RDML文档102创建或者从零开始输 入),但是RDML文档可以从由用户指定的缺省数据进行创建。
这执行类似 与XML编辑器的任务,但是用数据表格式,而不是目前XML编辑器的树 结构完成这一任务,这是输入表数据更为自然的方式。
电子表格视图724还可以使用URL 1602直接读取因特网数据。
它将排 除使用Xpointer(由Xlink使用来指定链接目标)的公式,以从远端RDML文 档102读入数据。
通过这种方式,数据可以从多个源加入到单个电子表格, 而不需要准备查询或提供自定义编程代码。
如下面表6的类图所示,电子表格管理器722可以是简单的对象;图表 管理器/图表数据714和716组合体可以是实际的数据存放地。
图表管理器714 将数据输入到电子表格管理器722,它将数据放在正确的单元格中。
电子表 格管理器722直接与图形电子表格对象724通信。
在RDML数据查看器100 的情况下,它可以是第三方组件。
表6 SpreadSheetManager
-gridControl:GridDataSheet
-chartmanager:ChartManager
+fillFromChart():void
IV.A.8. 脚注视图图17是在下半部显示脚注视图728的屏幕图。
通常脚注是在传输和显 示数字中经常丢失的扩展文档化类型。
每个行项均有提供短脚注的文本字符 串作为属性,该脚注可以通过鼠标单击进行访问(也就是,通过在数据查看 器100的底部单击“脚注”页签1702)。
对于电子表格视图724缺省值是仅 为已绘制的序列显示它们的脚注。
然而,在电子表格或样式单报表视图中, 显示RDML文档102的所有脚注是可能的。
脚注视图728中的脚注的目的是关于数据简单重要的备忘录。
典型地, 它们包括常用周期(财政年度)、调整、特殊问题等。
缺省情况下,脚注视图 728还显示RDML文档102的源和原始底层数据。
在本发明的一个实现中, 要求多于255字节的任何内容表示在行项中有对其的超链接的HTML页面 中。
这些更长的脚注可以作为HTML文档显示在HTML窗口中。
而且,当用户将序列加到图表并且从中删除时,即使存在多个源文档, 也自动从源数据更新脚注。
RDML“脚注”页签中的脚注还自动更新它们的 数字和标注,以匹配图表。
这不同于目前电子表格和图表程序,它们要求用 户而不是自动查找例程,提供脚注。
宏管理器730操作和实现数据查看器100中的宏。
宏允许用户通过单击 将变换或计算应用到行项,而不是必须编写公式或查询。
IV.A.9 标签化向导数据查看器100还可以从电子表格文件创建XML和RDML文档102。
为达到这个目标,它可以使用电子表格“向导”,从电子表格的数据表创建 带标签的文档。
在本发明的一个实现中,用脚本语言(例如,Excel Visual Basic for Applications)创建向导(使用至少一个对话框)。
允许电子表格(例如,Excel) 中的表数据用作创建RDML格式的带标签文本文档。
图21示出说明根据本发明将来自电子表格的信息置上标签的方法中使 用的步骤的流程图。
图22A-D示出文档创建过程中不同阶段的屏幕图。
图22A示出,用户将数据以表形式准备好(步骤2102),每行将成为一 个行项;第一行2202将成为“data_x”元素924的数据,第一列2204将填 充各个行项的“li-legend”属性。
注意,大多数表数据本质上已采用这种形 式:分类(或时间周期)描述居于上端,无格式语言行项描述居于左边,从上 向下,并且将值本身填在表中。
然后用户高亮显示最左栏2204中的图例,并且打开第一对话框2206(步 骤2104),如图22B所示,这将在数据表的前面插入新的信息栏,每栏包含 一种属性类型(步骤2106)。
图22C示出在对话框2206上按“确定”创建一栏,并且填入缺省数据(步 骤2108)。
向导输入所需的缺省值,节省大部分烦琐的键盘输入工作,并且 用户检查栏2208,查看是否需要作修改。
附录F示出执行这些功能的例程 的示例性代码。
对于每个属性,一栏加入到电子表格,选择正确的属性值(例 如,空白、手工措词、或从对话框的适当域中获得),并且在适当的栏2208 中用那个值填入正确的单元格数。
图22D示出用户然后带来文档创建对话框2210(步骤2110)。
用户首先 使用第一条目域2212,指定数据表的范围(包括属性栏)。
“缺省”数据文件 将用来为rdmldocheader元素904值和line_item_set元素906中的其它元素 和属性值提供缺省值(步骤2112)。
最后,用户填写剩余域,并且按“确定”, 这将导致创建并保存带标签的RDML文档102(步骤2114)。
本领域的普通技 术人员理解,在创建遵循RDML的数据之前,能用单个对话框代替示例性 多个对话框来收集信息。
附录G提供在一个实现中使用的,创建RDML文档102的代码。
通常, 该过程包括如下步骤:(1)打开用于写的文件和缓冲区;(2)为DTD 702中每 个元素调用元素创建方法,其中元素能嵌套在其它元素之内;(3)完成时, 保存和关闭文件。
IV.A.10. RDML标记文档方面RDML被设计为用来描述跨行业和域的数字。
为了达到这一目的,它 提供一个基本标签集和匹配词汇表来描述数字表的六个方面:(1)值、(2)结 构、(3)格式、(4)语义、(5)起源、(6)量度。
值表示数字作为字符串进行传输,并且带附加的标签定义它们的数据类 型、精度度、缺少值的处理、空的处理和其它对终端应用的指示。
结构是指数据在表内的结构化。
RDML允许在表内分层安排记录。
虽 然不是关系表的标准方法,但这允许多个信息层放在单个二维表中。
例如, 当查看财务报表,其中单个行项(例如,“设备租赁”)可能具有几个子部分(“汽 车”、“卡车”、“办公设备”)时,用户希望这种方式。
格式允许应用向用户将数字以人可读形式进行显示。
标签指定数字缺省 格式、国际化问题如逗号/小数点处理,和缺省图例和图表标题。
这些格式 可以由用户在动态运行时进行改变。
语义是指RDML提供能在其中放置数字“含义”指示符的一般标签, 包括其它SGML和XML标记语言的词汇表这一事实。
这允许RDML担当 来自其它标记语言文档的数据的“包装器”。
语义还用基于文本的属性进行 传达:图例、标题、标注、脚注等。
起源是各种元素的文档化。
RDML元素包括数据源信息,这种元素将 它标记,加时间戳和链接地址和授权信息等。
最后,在一般数字的上下文中,“量度”指描述数字域的量度方面所需 的特征:单位(“米”、“英尺”)、数量级(“百万”、“十亿”)、修饰符(“通 胀调整,1997指数”)等。
这允许宏确定任何计算结果充分地获得并描述给 终端用户。
IV.B. 图形用户界面和HTML浏览器图14A-D、16和17的屏幕图就属于具有几种职责的图形用户界面 (graphical user interface,GUI)。
通常,在应用启动时它创建自身和其它可视 组件,并且为最小量的应用全局变量(例如,文件目录等)提供中心存储位置。
而且,它响应用户操作,如鼠标单击和键盘快捷键,并且在适当的时候重画 屏幕或屏幕部分。
HTML浏览器736可以是显示HTML文件的第三方组件。
虽然该浏览 器已被指定为HTML浏览器,但本领域的技术人员从本公布中理解,可以 同样地使用其它浏览器(例如,XML浏览器)。
该组件提供基本web浏览功 能和观看RDML文档102超链接的方式。
另外,它担当由RDML数据查看 器100生成的特定页面(如RDML文档源代码、图表文档化等)的显示窗口。
IV.C 可重用宏标记语言图18通过图形示出RMML文档类型定义1800的元素。
在本发明的一 个实现中,RMML文档104遵循由DTD 1800提供的规则。
根据本发明的一 个实现,RMML DTD 1800如附录D所示。
DTD 1800元素属性还可以在附 录E的完全样例RMML文档104中见到。
这两个附录D和E对于检查RMML DTD 1800的特定属性和元素是有用的。
RMML DTD 1800数据结构经过优化按照一定次序提供所需信息,以减 少新用户对RMML宏开发的学习,并且避免不必要的重复。
附录D中的DTD 1800第一行以“<?Xml encoding="UTF-8"?>开始,因为XML文档均以一 行开始,告诉客户应用(在本例中,RMML解释器1970(下面描述)和数据查 看器100)它是什么文档类型和XML版本。
进一步参照图18,用来定义RMML宏文档104的DTD 1800以元素的 分层树结构进行构造。
每个单元可以包括一个属性列表(显示在附录D中, 但没有显示在图18上)和/或与一个或多个子元素的关联。
对于如上所述的 RDML DTD,依赖于设计参数,一些属性可以是必需的,而其它可以是可选 的。
在最高层,DTD 1800在根元素<macrodoc>1802下有三个元素。
第一元 素<macro_header>1804包含作为整体文档的元数据。
第二元素<macro_code> 1806包含要求值的源代码表达式、相关变量和用于任何参数对有关图形用 户界面的应用的指令。
第三元素<macro_reference>1808包含与远端数据 (RDML文档102)或其它宏(RMML文档104)相关的元素。
macro_header元素1804设计为尽可能接近地匹配RDML文档102的 rdmldoc_header元素。
这将节省开发者和终端用户的学习时间,并且允许可 重用代码模块考虑双方进行构建。
然而,在本发明的一个实现中,<macro_header>元素1804包含几个唯 一的属性。
在这个实现中,<macro_header>元素1804有8个唯一属性。
这 些中的第一个是“macro_type”。
该属性告诉应用该特定宏在那个应用的上 下文中需要哪个通用功能。
应用在工厂类1912中使用这个属性,创建宏对 象的正确类型,以作内部使用。
这个实现的两个例子类型是:(1)“TSL”(时 间序列行,操作时间序列在图表上创建新的一行或多行的宏;(2)“TSO”(时 间序列覆盖图,操作时间序列以在图表716上创建新的覆盖图,如特定时间 周期背后的灰背景)。
result_type属性告诉RDML数据查看器100如何显示由宏创建的任何 变换结果。
在一个实现中,对于该字符串有五个允许值:“Replace Each(替 换每个)”、“Replace All(替换所有)”、“Replace AB(替换AB)”、“Add New(加 入新的)”、“Add Annotation(加入注释)”和“Add Overlay(加入覆盖图)”。
“Replace Each”删除RDML数据查看器100的图表716上的每一行,并且 将它替换为所变换版本。
例如,如果图表上有四个序列,所有均以“英里” 表示,并且用户选择“到公里”宏,然后每一行将转换为公里,删除英里行, 并且将公里行置于它们在图表上的位置。
当所有行均用一行来替换时,使用Replace All。
例如,如果A和B已 绘入图表,命为“B作为A的%”的宏将用单个行替换它们。
Replace AB是 Replace All的特殊情况,其中仅有两个绘入图表的行。
Add New将一行加到 所绘制内容。
例如,名为“平均”的宏可能在平均水平上画一个经过现有行 的行。
Add Annotation加入带指向图表上特定值的指针的标注(例如,“2-3股 票拆分”)。
Add Overlay在特定图表区域加入阴影区域。
“rdmldoc_type”属性指定所设计宏要操作的RDML文档102类型。
该 属性的合法字符串为TS、CT和XY,对应于RDML文档102的类型。
元素<macro_source>1810和<license_terms>1812与RDML文档类型定 义702中的<data_source>908和<license_terms>914相同,并且扮演相同的 角色。
<documentation>1814元素是两个子元素<macro_description>1816和 <help_page>1818的容器。
<macro_description>元素包含描述宏基本功能性的 短字符串(例如,50字符以下)。
它出现在参数面板1960的描述标注中(如图 20A-D所述和如下所述)。
对于想要更详细描述宏的用户,<help_page>1818 元素包含提供该信息的文本块。
该文本块能由数据查看器100读入HTML 面板,作为常规帮助系统的一部分。
该文本块用于提供用户可能感兴趣的有 关宏各个方面的信息:它的使用,它的代码,和其输入。
第二高层元素是<macro_code>1806。
该部分包含实际源代码和相关变 量。
<code>1820元素包含一个或多个在RDML数据查看器100中对特定数 字的变换进行求值的表达式。
在本发明的一个实现中,变换应用到RDML 数据查看器102中的图表视图716。
但是变换还可以应用到树视图720或其 它视图。
这个元素中的表达式是类似于电子表格公式中所见的:表达式是如下组 成部分的序列:(1)操作符、(2)常量(literal)、(3)变量、(4)函数和(5)各种表达 式分隔符。
与传统电子表格公式最主要的不同是根据源或上下文,变量可以 代表标量或向量。
一个样例表达式如下所示: A*(B+2000)-IF(A>3,12,45) 操作符是:加(+)、减(-)、乘(*)、除(/)、小于(<)、大于(>)、或(|)、与(&)。
这些操作符根据它们所操作子表达式的类型具有不同的含义。
操作两个向量 被解释为在两个向量上逐元素的操作。
因此A*B,其中A和B为向量,为 C={a1*b1,……an*bn}。
常量直接定义在表达式中(例如,“46”)或赋给变量(例如,“pi= 3.1415”)。
在RMML中变量可以来自六个不同地方。
首先,它们可以直接在RMML 文档104中定义为变量。
这个操作通过创建<variable>元素,并且赋给它缺 省值来完成。
第二,变量可以与RDML数据查看器102的参数面板1960中 的图形组件相关联。
在本发明的一个实现中,有四种不同类型的“gui组件”。
这些在<gui>元素1824下面进行列出和描述。
第三,变量可以从与RDML 文档102所见相同的行项元素进行定义。
由于它们相同,行项可以简单地从 RDML文档102剪切并复制到RMML文档104。
第四,变量可以从远端源 获得。
在本发明的一个实现中,那个远端源可以是到RDML文档102中行 项的超链接。
这通过使用变量元素的“href”属性中的Xpointer超链接来完 成。
第五,变量可以被定义为目前绘制在图表上的数据序列中的一个。
在本 发明的一个实现中,图表上最大可以有六个序列;每个序列可以通过使用保 留字A、B、C、D、E和F进行访问。
本领域的普通技术人员理解,可以使 用任何数目的可唯一定义序列。
如果宏的结果类型属性为Replace All,那么 为每个序列计算表达式一次,A为当前正在进行变换的序列。
第六,变量可 以从已载入在RDML数据查看器100中的RDML文档102获得。
在这种情 况下,表达式指出可在行项元素的li_class元素中的一个找到的URL和类字 符串。
然后表达式使用那个行项作为变量值。
内置函数在本发明的一个实现中由解释器1980进行提供,并且是扩展 语言的主要装置。
它们采用“函数名(表达式)”的形式。
函数包括:IF(x,y,z); SUM(x);AVERAGE(x);COUNT(x);MIN(x);MAX(x)等。
各种分隔符通过用分号(;)分隔表达式来实现。
这表示表达式要按次序进 行求值。
还可以用括号对表达式进行分组,告诉解释器1980如何对子表达 式进行求值。
出现在<instructions>元素1822中的任何字符串将显示在参数面板1960 中,给用户任何最后时刻的指示或建议。
<gui>元素1824包含任意数目的描 述图形组件的元素。
这些图形组件将出现在参数面板1960中,让用户能够 对宏的参数作修改。
四个gui组件(没有显示)可以是:<comp_vector>、 <comp_list>、<comp_rbutton>和<comp_ipanel>。
<comp_vector>是向量变量, 其中向量的单个值可以在滚动列表框中进行查看。
<comp_list>元素是滚动列 表;每次用户单击不同的项,附属于那个组件的变量值就改变为与那个项相 关联的值。
<comp_rbutton>是圆形按钮的集合;每个按钮均与不同值相关联。
当用户单击不同按钮时,将改变与组件自身相关联的值,并且重新运行宏。
<comp_ipanel>是允许用户直接输入对宏的修改的输入域。
通常,宏并不是盲目地对所有数据运行。
首先,解释器1980检查是否 宏具有任何必须对数据进行检查的“限定符”。
如果RMML文档104的 <qualifiers>元素1826中有任何字符串,对数据的<li_class>元素930或者其 它元素或属性中的字符串进行检查。
如果数据合格,解释器1980将继续运 行宏。
例如,如果宏的<qualifiers>元素1826指定“li_unit=currency”,那么 只有正在操作数据的li_unit属性为货币值,才运行宏。
<error_handling>元素1828保存如果存在所指示类型的问题,能由RDML 数据查看器100进行显示的错误消息。
<testing>元素1830保存测试有关自 动测试例程的应用的指令。
这些应用承担基本单元测试,如检查出界问题、 缺少值问题、除零问题等。
RMML文档104的第三主要部分,<macro_reference>元素1808保存对 外部宏的引用和通过引用可能加入到宏中的数据集。
因此两个子元素为 <rmmldocs>元素1832和<data_docs>元素1834。
IV.C.1  RMML宏包通常,RMML宏包有三个主要部分:RMML文档处理类(图19A)、图 形界面(图19B)和宏解释器(图19C)。
在本发明的一个实现中,该软件类包仅 在很少地方与RDML数据查看器100进行连接:它从ChartManager 714/ ChartData 715对象得到数据、通过GUI 734对象显示它的图形组件,并且能 访问载入在主数据存储712中的RDML文档102。
RMML文档处理图19A示出负责管理RMML文档处理过程的对象,该过程包括:载入 文档,从它们中创建内部宏对象,对它们编制目录并对它们进行缓存,并且 使它们作好用作对象的准备。
RMMLDoc读入器1910定位RMML文档104(在 本地或通过网络),将它传给XML分析器(可以是第三方组件),如果有,将 错误消息传达给RDML数据查看器100,创建RMML文档104的内部表示 作为RMMLDoc 1906对象,并且将对RMMLDoc 1906的引用放在RMML_Lib 1908中。
可以用两种方式组织RMMLDoc 1906:将TXDocument对象包装得到 RMMLDoc对象,或用来自TXDocument的数据创建新的RMMLDoc 1906 对象。
RMMLDoc 1906对象包含用于以在宏包上下文中容易理解的方式访问 文档的单个元素和属性的方法。
RMML_Lib 1908对象是用于所载入和活动 RMMLDoc对象1906的缓存。
RMMLDoc1906是宏数据的原始集合--它的公式、它的帮助文本等--并 且通常不对数据集操作,以变换它们。
首先必须使用宏功能创建能够做计算 的内部对象(宏接口758)。
该内部宏对象758通过MacroLibrary 1926对象(活 动宏的图形对象缓存)和MacroFactory1912(确定创建哪种类型的内部宏)之间 的协作进行创建。
内部宏有四种类型:时间序列(TS)、分类(CT)、xy图(XY)和覆盖图 (OVERLAY)。
由MacroFactory 1912使用macro_type属性,创建正确类型的 内部宏:Macro_TSL 1918,Macro_CT 1920,Macro_XY 1922,和Macro_OVER 1924。
MacroAdapter 1916类执行宏的工作。
                            表7 MacroAdapter
-mm:MacroManager
-mem:Memento
-rmmldoc:RMMLDoc
-eval:Evaluator
-mag:MacroAssumptionGroup
-desc:MacroDescription
-isChangedFlag:boolean
-result_type:int
-curr_li:int
-series_label_modifier:String
-series_labed_type:String
+createMemento():void
+evaluateFormula(strExpr:String,index:int):Vecto
+initMacro():void
+performTransformation(result_type:int):vdd
+replaceVariable(strExpr:string,index:int):String
+resetMemento(mem:MacroMemento):void
+undoTransformation():void
+updateChartTitle():void
+updateLabels():void
+updateLegend():void
+updateYAxisTitle():void
下面描述的是根据本发明的一个实现的MacroAdapter对象760的表7 所示的类方法。
首先,MacroAdapter()是创建MacroAdapter 760对象的构造 器。
在运行宏之前,有机会对要进行变换的数据制作一个副本,从而可以执 行撤销操作。
createMemento()方法通过将ChartData对象715复制到一个 Mememto对象,得到对绘在图表上数据的快照。
另外,在运行宏之前,运行initMacro()方法,并且给宏一个载入任何远 端数据或宏代码的机会。
replaceVariable()方法对一个图表上的多个序列运行 宏。
例如,如果result_type为“Replace Each”并且图表上绘有四个序列, 该宏将运行四次。
第一次,公式中的A表示第一序列,第二次,它表示第 二序列等等。
performTransformation()方法计算变换字符串,并且更新各种标 题和图例。
performTransformation()代码的一个重要部分是确定宏的 result_type,并且以正确方式调用evaluateFormula()方法。
对于“Replace Each”,它为每个序列调用一次,而对于“Replace All”,它仅运行一次。
performTransformation()方法还调用四个更新方法:updateChartTitle()、 updateLabels()、updateLegend()和updateYAxisTitle()。
每一个这些方法修改 ChartData对象715的相关字符串,从而它能传递到图表。
RMML图形界面图19B示出负责管理创建、管理并处理来自图形用户界面734的事件 的过程的对象。
图20A示出RDML数据查看器100的屏幕图;NewMacroPanel 732显示在屏幕的下半部。
可用宏显示在下面面板左边的MacroLibrary面板 1926的单个窗口内。
宏面板732的右边是宏信息面板2002,包含宏描述面 板1958和参数面板1960。
NewMacroPanel 732可以是Java的Swing类集中JPanel 1942的子类。
本领域的技术人员能够选择适当类,用于其它主要平台。
NewMacroPanel 732 的左边是用于多个文件接口的框架(在本例中,桌面用于Java Swing集的 JintemalFrame)。
所打开的每个MacroLibrary 1926创建一个新的内部框架, 这允许用户同时从多个库选择宏。
当打开MacroLibrary 1926时,其内的所有宏被载入和登记。
“登记”是 一系列方法,其中,在RMMLDoc 104的各种元素中查找宏变量,并且为这 些变量构建图形表示,以包括在参数面板1960中。
在MacroAssumptionGroup 1944类中创建所有与宏集相关联的变量的图 形组件。
该类具有检查由RMMLDoc 104报表的变量属性(变量名、变量值、 gui类型、缺省值等)和创建适当MacroGUI类的方法,这些MacroGUI类包 括:MacroGUI_List 1952(参看图20A)、MacroGUI_RadioButton 1954(参看图 20B)、MacroGUI_Vector 1956(参看图20C)或MacroGUI_Default 1950(参看图 20D)。
如屏幕图所示,这些图形组件中的每一个都不同地出现在参数面板1960 中。
MacroLibrary 1926的宏登记还涉及创建伴随每个变量的MVariable 1946 对象,并且将它们加入到可用MVariable 1946的缓存。
这些MVariable 1946 对象用在实际的表达式计算中。
登记过程还涉及将MacroGUI 1948登记为 MacroManager 1980对象可以用来触发运行宏的事件源。
MVariable 1946封 装变量的各种特征:它的值、缺省和源。
当在MacroLibrary 1926内部框架的树视图720列表中选择特定宏时, 用图形组件和文本填充描述面板1958和参数面板1960。
所选宏提供描述文 本、各种标注和MacroGUI 1948组件。
RMML解释器MacroManager(宏管理器对象)730负责检测宏已被选择,或参数发生改 变,召集各种数据集和变量,并使其可用于Evaluator(计算器)对象1984,并 且负责获得已绘入图表的数据集,对其进行变换,并将其送回到图表716重 新绘画,或树视图重新列出。
ChartData 715包含当前图表716(或活动树视图720,依赖于宏类型)的 数据。
它使该数据仅作为另一变量可用于Evaluator对象1984,并且接收 Evaluator对象1984的最后结果。
Evaluator 1984计算RMML文档104的<code>元素1920中的字符串表 达式,或来自所选宏的各种表达式。
表达式由Tokenizer(符号分解器)类1994 分解为多个符号。
这些符号是在如上所述RMML表达式语言中使用的各种 操作符、变量、常量、函数和其它控制符号。
从这些符号,Formula(公式)对 象1990通过向下递归,构建由从符号创建的FormulaNode 1992对象组成的 分析树。
FormulaNode 1992对象使用解算器对象VariableResolver 1986和 FunctionResolver 1988,对自身进行求值。
这些解算器反过来调用Evaluator 对象1984,为它们给出变量或函数的当前值。
例如,FormulaNode 1992计 算过程可能含有“A”符号;Evaluator对象1984知道这表示图表上的序列 A,并且使用当前在图表716中找到的数据向量(它可能是数组或其它数据结 构)。
公式异常1996传达与函数处理相关联的错误。
前面对本发明实现的描述是为说明和描述的目的而提供的。
它并不详 尽,并且不将本发明限于所公布的准确形式。
根据上述学习或通过本发明的 实践,作修改和变动是可能的。
本发明范围由权利要求及其等价物进行限定。
       附录A:RDML文档类型定义("DTD") <?xml encoding="UTF-8"?> <!-- The root element:a whole portfolio of data is an"rdmldoc"--> <!ELEMENT rdmldoc(rdmldoc_header,line_item_set)> <!--RDMLDOC_HEADER--> <!--Information about the rdmldoc.An rdmldoc consists of an rdmldoc_header and a line_item_set.Line items in the line_item_set share a common data structure. --> <!ELEMENT rdmldoc_header(data_source?,formatting_source?,rdmldoc_source?, license_terms?,linkset?)> <!ATTLIST rdmldoc_header     rdmldoc_ID              CDATA           #REQUIRED     doc_title               CDATA           #REQUIRED     timestamp               CDATA           #REQUIRED     version                     CDATA            #IMPLIED     expiration              CDATA           #IMPLIED     freq_ofupdate           CDATA           #IMPLIED     num_line_items          CDATA           #IMPLIED     num_datapoints          CDATA           #IMPLIED     x_indexes               CDATA           #IMPLIED     first_li_withdata       CDATA           #IMPLIED> <!ELEMENT data_source(contact_info+)> <!ELEMENT formatting_source(contact_info+)> <!ELEMENT rdmldoc_source(contact_info+)> <!ELEMENT license_terms(contact_info?,linkset?)> <!ATTLIST license_terms     copyright_cite      CDATA           #REQUIRED     holder              CDATA           #REQUIRED     license_type        CDATA           #IMPLIED     warranty            CDATA           #IMPLIED     disclaimer          CDATA           #IMPLIED     terms               CDATA           #IMPLIED     date                CDATA           #IMPLIED     email               CDATA           #IMPLIED     state               CDATA           #IMPLIED      country           CDATA          #IMPLIED> <!ELEMENT contact_info(#PCDATA)> <!ATTLIST contact_info      role              CDATA           #REQUIRED      name              CDATA           #IMPLIED      company           CDATA           #IMPLIED      address           CDATA           #IMPLIED      city              CDATA           #IMPLIED      state             CDATA           #IMPLIED      zip               CDATA           #IMPLIED      country           CDATA           #IMPLIED      email             CDATA           #IMPLIED      form              CDATA           #IMPLIED      href              CDATA           #IMPLIED      comments          CDATA           #IMPLIED> <!ELEMENT linkset(link*)> <!ATTLIST linkset      form              CDATA           #FIXED'extended'      href              CDATA           #IMPLIED> <!ELEMENT link(#PCDATA)> <!ATTLIST link      form              CDATA           #FIXED'simple'      href              CDATA           #REQUIRED      behavior          CDATA           #IMPLIED      content-role      CDATA           #IMPLIED      content-title     CDATA           #IMPLIED      role              CDATA           #IMPLIED      title             CDATA           #IMPLIED      show              CDATA           #FIXED'new'      actuate               CDATA            #FIXED'user'> <!--LINE_ITEM_SET--> <!--Information about the collection of line items--> <!ELEMENT line__item_set(data_x,li_class_set?,linkset?,line_item+)> <!ATTLISTline_item_set      line_item_set_type   CDATA          #REQUIRED      time_period          CDATA          #REQUIRED      character_set        CDATA          #IMPLIED      missing_values       CDATA          #IMPLIED     null__values         CDATA            #IMPLIED     zero_values          CDATA            #IMPLIED     dates_values         CDATA            #IMPLIED     percentages          CDATA            #IMPLIED> <!ELEMENT data_x(#PCDATA)> <!ATTLIST data_x     x_title             CDATA           #REQUIRED     format              CDATA           #REQUIRED     x_notes             CDATA           #IMPLIED     x_desc                  CDATA            #IMPLIED     x_prec              CDATA           #REQUIRED     x_unit              CDATA           #REQUIRED     x_mag               CDATA           #REQUIRED     x_mod                   CDATA            #REQUIRED     x_measure           CDATA           #REQUIRED     x_scale             CDATA           #REQUIRED     x_adjustment        CDATA           #REQUIRED     x_links                 CDATA            #REQUIRED> <!ELEMENT li_class_set(li_class+)> <!ELEMENT li_class(#PCDATA)> <!ATTLIST li_class     class_name          CDATA          #REQUIRED     parent_class        CDATA          #REQUIRED     form                CDATA          #FIXED'simple'     href                CDATA          #IMPLIED     description         CDATA          #IMPLIED> <!--LINE_ITEM--> <!--Information about the Line Item--> <!ELEMENT line_item(data_x?,data_y,linkset?,note_set?)> <!ATTLIST line_item     li_ID               CDATA           #REQUIRED     li_legend           CDATA           #REQUIRED     li_title            CDATA           #REQUIRED     li_cat              CDATA           #IMPLIED     y_axis_title        CDATA           #REQUIRED     level               CDATA           #REQUIRED     format              CDATA           #REQUIRED     relation            CDATA           #REQUIRED      li_notes          CDATA             #REQUIRED      li_desc               CDATA              #REQUIRED      li_prec               CDATA              #REQUIRED      li_unit           CDATA             #REQUIRED      li_mag                CDATA              #REQUIRED      li_mod                CDATA              #REQUIRED      li_measure        CDATA             #REQUIRED      li_scale          CDATA             #REQUIRED      li_adjustment     CDATA             #REQUIRED      li_aggregation    CDATA             #IMPLIED> <!ELEMENT data_y(#PCDATA)> <!ELEMENT analysis(linkset?)> <!ELEMENT note_set(note+)> <!ELEMENT note(#PCDATA)> <!ATTLIST note       note_type         CDATA          #IMPLIED>                   附录B:样例RDML文档 <rdmldoc>  <rdmldoc_header     rdmldoc_ID="rdml_thomson_csl"     doc_title="Computer Services Companies"     timestamp="1999-01-19T23:00:00"     version="1.0.0"     expiration="2000-01-19T23:00:00"     freq_of_update="Annual"     num_line_items="0"     num_datapoints="0"     x_indexes="-9,-8,-7"     first_li_withdata="3"> <data_source>  <contact_info     role="Data Source"     name="Russell T.Davis"     company="RDML,Inc."     address="2 Wisconsin Circle,Suite 700"     city="Chevy Chase"     state="MD"     zip="20815"     country="USA"     email="rt_davis@sprynet.com"     xlink:form="simple"     href="http://www.rdml.com"     comments=""> </contact_info> </data_source> <formatting_source> <contact_info     role="Formatting Source"     name="Russell T.Davis"     company="RDML,Inc."     address="2 Wisconsin Circle, Suite 700"     city="Chevy Chase"     state="MD"     zip="20815"     country="USA"     email="rt_davis@sprynet.com"     xlirk:form="simple"     href="http://www.rdml.com"     comments=""> </contact_info> </formatting_source> <rdmldoc_source> <contact_info      role="RDMLDoc Source"      name="Russell T.Davis"      company="RDML,Inc."      address="2 Wisconsin Circle,Suite 700"      city="Chevy Chase"      state="MD"      zip="20815"      country="USA"      email="rt_davis@sprynet.com"      xlink:form="simple"      href="http://www.rdml.com"      comments=""> </contact_info> </rdmldoc_source> <license_terms      copyright_cite="Copyright 1998,RDML,Inc.All Rights Reserved"      holder="RDML,Inc."      license_type="Payment Per Download"      warranty="No warranty is expressed or implied.Use this data at your own risk."      disclaimer="This data is provided'as-is'.The provider assumes no responsibility for its use or misuse."      terms="$1 per RDMLDoc download"      date="1999.0123000000.00"      email="license@rdml.com"      href="http://www.rdml.com"      state="MD"       country="USA"> <contact_info     role="RDMLDoc Source"     name="Russell T.Davis"     company="RDML,Inc."      address="2 Wisconsin Circle,Suite 700"      city="Chevy Chase"      state="MD"      zip="20815"      country="USA"      email="rt_davis@sprynet.com"      xlink:form="simple"      href="http://www.rdml.com"      comments=""> </contact_info> </license_terms> </rdmldoc_header> <line_item_set      line_item_set_type="Category"      time_period=""      character_set=""      missing_values=""      null_values=""      zero_values=""      dates_values=""      percentages=""> <data_x      x_title="Company"      format=""      x_notes=""      x_desc=""      x_prec=""      x_unit=""      x_mag=""      x_mod=""      x_measure=""      x_scale=""      x_adjustment=""      x_links=""> AUD,BSYS,CEN,CSC,CVG,DST,EDS,FISV,GLC,PAYX,TSG,SDS</data_x> <li_class_set>  <li_class     class_name=""     parent_class=""     xlink:form="simple"     href=""     description=""></li_class> </li_class set> <linkset>  <link     xlink:form="simple"     href="http://www.rdml.com"     behavior=""     content-role=""     content-title=""     role="Original Data Sources"     title="RDML Formatted Source Table"     show="new"     actuate="user"> </link> </linkset> <line_item       li_ID ="1"       li_legend="Computer Services Companies"       li_title=""       li_cat=""       y_axis_title=""       level="1"       format=""       relation="Parent"       li_notes=""       li_desc=""       li_prec=""       li_unit=""       li_mag=""       li_mod=""       li_measure=""       li_scale=""       li_adjustment=""> <data_y> ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  , </data_y> <linkset> <link      xlink:form="simple"      href="http://www.rdml.com"      behavior=""      content-role=""      content-title=""      role="Original Data Sources"      title="RDML Formatted Source Table"      show="new"      actuate="user"></link>      </linkset> </line_item> <line_item     li_ID="2"     li_legend="Stock Performance"     li_title="Stock Overview"     li_cat=""     y_axis_title=""     level="2"      format=""      relation="Parent"      li_notes=""      li_desc=""      li_prec=""      li_unit=""      li_mag=""      li_mod=""      li_measure=""      li_scale=""      li_adjustment=""> <data_y>  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  , </data_y> <linkset> <link     xlink:form="simple"     href="http://www.rdml.com"     behavior=""     content-role=""     content-title=""     role="Original Data Sources"     title="RDML Formatted Source Table"     show="new"     actuate="user"></link> </linkset> </line_item> <line_item     li_ID="3"     li_legend="Stock Price(12/31/98)"     li_title="Stock Overview"     li_cat=""     y_axis_title="$per share(12/31/98)"     level="3"     format="#,##0.00;(#,##0.00)"     relation="ChildStyle"     li_notes=""     li_desc=""     li_prec="2"     li_unit="$"     li_mag="0"     li_mod="per"       li_measure="share"       li_scale=""       li_adjustment=""> <data_y> 40.1,51.63,69.81,64.44,22.13,67.06,50.19,51.44,43.5,51.44,44.5,39.69, </data_y> <linkset>  <link       xlink:form="simple"       href="http://www.rdml.com"       behavior=""       content-role=""       content-title=""       role="Original Data Sources"       title="RDML Formatted Source Table"       show="new"       actuate="user"></link> </linkset> </line_item> <line_item      li_ID="4"      li_legend="Shares Outstanding"      li_title="Stock Overview"      li_cat=""      y_axis_title="Shares outstanding"      level="3"      format="#,##0;(#,##0)"      relation="ChildStyle"      li_notes=""      li_desc=""      li_prec="0"      li_unit="shares"      li_mag="6"      li_mod=""      li_measure=""      li_scale=""      li_adjustment=""> <data_y> 627, 27, 74, 162, 145, 64, 494, 85, 105, 166, 131,107, </data_y> <linkset> <link     xlink:form="simple"       href="http://www.rdml.com"       behavior=""       content-role=""       content-title=""       role="Original Data Sources"       title="RDML Formatted Source Table"       show="new"       actuate="user"></link>  </linkset>    </line_item>    <line_item      li_ID="5"      li_legend="%Institutional Holdings"      li_title="Stock Overview"      li_cat=""      y_axis_title="%of outstanding shares"      level="3"      format="0.00%;(0.00%)"      relation="ChildStyle"      li_notes=""      li_desc=""      li_prec="2"      li_unit="%"      li_mag = "0"      li_mod="of"      li_measure="outstanding shares"      li_scale=""      li_adjustment=""> <data_y> 0.65,0.8,0.75,0.64,0,0.44,0.49,0.67,0.25,0.53,0.13,0.71, </data_y> <linkset> <link     xlink:form="simple"     href="http://www.rdml.com"     behavior=""     content-role=""     content-title=""     role="Original Data Sources"     title="RDML Formatted Source Table"     show="new"     actuate="user"></link>  </linkset>  </line_item>  <line_item      li_ID="6"      li_legend="Market Capitalization"      li_ritle="Stock Overview"      li_cat=""      y_axis_title="$in Millions"      level="3"      format="#,##0;(#,##0)"      relation="ChildStyle"      li_notes=""      li_desc=""      li_prec="0"      li_unit="$"      li_mag="6"      li_mod="in"      li_measure=""      li_scale=""      li_adjustment=""> <data_y> 25142.7,1394.01,5165.94,10439.28,3208.85,4291.84,24793.86,4372.4,4567.5, 8539.04,5829.5,4246.83, </data_y> <linkset> <link     xlink:form="simple"     href="http://www.rdml.com"     behavior=""     content-role=""     content-title=""     role="Original Data Sources"     title="RDML Formatted Source Table"     show="new"     actuate="user"> </link> </linkset> </line_item> <line_item     li_ID="7"     li_legend="Reported EPS"     li_title="Stock Overview"     li_cat=""     y_axis_title="Earnings per share"     level="3"     format="#,##0.00;(#,##0.00)"     relation="ChildStyle"     li_notes=""     li_desc=""     li_prec="2"     li_unit="$"     li_mag="0"     li_mod="per"     li_measure="share"     li_scale=""     li_adjustment=""> <data_y> 1.13,2.05,1.9,2.1,0.71,1.48,1.7,1.35,1.86,0.82,1.72,1.17, </data_y> <linkset> <link     xlink:form="simple"     href="http://www.rdml.com"     behavior=""     content-role=""     content-title=""     role="Original Data Sources"     title="RDML Formatted Source Table"     show="new"     actuate="user"></link> </linkset> </line_item> <line_item     li_ID="8"     li_legend="Earnings"     li_title="Stock Overview"     li_cat=""     y_axis_title="$in Millions"     level="3"     format="#,##0;(#,##0)"     relation="ChildStyle"     li_notes=""     li_desc=""     li_prec="0"     li_unit="$"     li_mag="6"     li_mod="in"     li_measure=""     li_scale=""     li_adjustment=""> <data_y> 708.51,55.35,140.6,340.2,102.95,94.72,839.8,114.75,195.3,136.12, 225.32,125.19, </data_y> <linkset> <link     xlink:form="simple"     href="http://www.rdml.com"     behavior=""     content-role=""     content-title=     role="Original Data Sources"     title="RDML Formatted Source Table"     show="new"     actuate="user"></link> </linkset> </line_item> <line_item     li_ID="9"     li_legend="Cash Flow per share"     li_title="Stock Overview"     li_cat=""     y_axis_title="$ per share"     level="3"     format="#,##0;(#,##0)"     relation="ChildStyle"     li_notes=""     li_desc=""     li_prec="2"     li_unit="$"     li_mag="0"     li_mod="per"     li_measure="share"     li_scale=""     li_adjustment=""> <data_y> 1.41,2.13,3.71,4.95,1.39,3.18,4,1.98,3.44,0.96,3.2,2.5, </data_y> <linkset> <link     xlink:form="simple"     href="http://www.rdml.com"     behavior=""     content-role=""     content-title=""     role="Original Data Sources"     title="RDML Formatted Source Table"     show="new"     actuate="user"> </link> </linkset> </line_item> <line_item     li_ID="10"     li_legend="Cash Flow"     li_title="Stock Overview"     li_cat=""     y_axis_title="$in Millions"     level="3"     format="#,##0;(#,##0)"     relation="ChildStyle"     li_notes=""     li_desc=""     li_prec="0"     li_unit="$"     li_mag="6"     li_mod="in"     li_measure=""     li_scale=""     li_adjustment=""> <data_y> 884.07,57.51,274.54,801.9,201.55,203.52,1976,168.3,361.2,159.36,419.2, 267.5, </data_y> <linkset> <link     xlink:form="simple"     href="http://www.rdml.com"     behavior=""     content-role=""     content-title=""     role="Original Data Sources"     title="RDML Formatted Source Table"     show="new"     actuate="user"></link> </linkset> </line_item> <line_item     li_ID="11"     li_legend="Price/Earnings Ratio(PE)"     li_title="Stock Overview"     li_cat=""     y_axis_title="P/E Ratio"     level="3"     format="#,##0;(#,##0)"     relation="ChildStyle"     li_notes=""     li_desc=""     li_prec="2"     li_unit="P/E Ratio"     li_mag="0"     li_mod=""     li_measure=""     li_scale=""     li_adjustment=""> <data_y> 35.4867256637168,25.1853658536585,36.7421052631579,30.6857142857143, 31.169014084507,45.3108108108108,29.5235294117647,38.1037037037037, 23.3870967741935,62.7317073170732,25.8720930232558,33.9230769230769, </data_y> <linkset> <link     xlink:form="simple"     href="http://www.rdml.com"     behavior=""     content-role=""     content-title=""     role="Original Data Sources"     title="RDML Formatted Source Table"     show="new"     actuate="user"> </link> </linkset> </line_item> <line_item     li_ID="12"     li_legend="Estimated 5-year growth"     li_title="Stock Overview"     li_cat=""     y_axis_title="%growth"     level="3"     format="0.00%;(0.00%)"     relation="ChildStyle"     li_notes=""     li_desc=""     li_prec="2"     li_unit="%"     li_mag="0"     lit_mod=""     li_measure=""     li_scale=""     li_adjustment=""> <data_y> 0.15,0.18,0.2,0.22,0.23,0.22,0.15,0.2,0.15,0.3,0.13,0.2, </data_y> <linkset> <link     xlink:form="simple"     href="http://www.rdml.com"     behavior=""     content-role=""     content-title=""     role="Original Data Sources"     title="RDML Formatted Source Table"     show="new"     actuate="user"></link> </linkset> </line_item> <line_item      li_ID="13"      li_legend="Return on Equity"      li_title="Stock Overview"      li_cat=""      y_axis_title="Earnings as% of Book Value"      level="3"      format="0.00%;(0.00%)"      relation="ChildStyle"      li_notes=""      li_desc=""      li_prec="2"      li_unit="%"      li_mag="0"      li_mod=""      li_measure=""      li_scale=""      li_adjustment=""> <data_y>  ,  ,  ,  ,  ,  ,  ,  ,  ,  , </data_y> <linkset> <link     xlink:form="simple"     href="http://www.rdml.com"     behavior=""     content-role=""     content-title=""     role="Original Data Source"     title="RDML Formatted Source Table"     show="new"     actuate="user"> </link> </linkset> </line_item> </line_item_set> </rdmldoc> 附录C:UnitList XML文档 <?xml version="1.0"encoding="utf-8"?> <unitlist> <unit name="inch">  <conversion      conv_target="centimeter"      conv_factor="2.5400050"      conv_constant=""      conv_log=""      conv_source="FGM"      conv_href=""> </conversion> <type>Length</type> <subtype>Linear</subtype> <plural>inches</plural> <alias>in</alias> <desc>Approximately the width of a man's thumb.</desc> <icon href="inch.gif"></icon> </unit> <unit name="foot"> <conversion      conv_target="meter"      conv_factor="0.30480060"      conv_constant=""      conv_log=""      conv_source="ISO"      conv_href=""> </conversion> <type>length</type> <subtype>Linear</subtype> <plural>feet</plural> <alias>ft</alias> <desc>Originally,the average length of a human foot</desc> <icon href="foot.gif"></icon> </unit> <unit name="yard"> <conversion     conv_target="meter"     conv_factor="1.082"     conv_constant=""     conv_log=""     cornv_source="ISO"     conv_href=""> </conversion> <type>length</type> <subtype>Linear</subtype> <plural>yards</plural> <alias></alias> <desc>Three feet</desc> <icon href="yard.gif"></icon> </unit> <unit name="meter"> <conversion     conv_target="meter"     conv_factor="1.0"     conv_constant=""     conv_log=""     conv_source="ISO"     conv_href=""> </conversion> <type>length</type> <subtype>Linear</subtype> <plural>meters</plural> <alias>m,mtr</alias> <desc>One thousandth of a kilometer</desc> <icon href="meter.gif"></icon> </unit> <unit name="mile"> <conversion     conv_target="kilometer"     conv_factor="1.6093472"     conv_constant=""     conv_log=""     conv_source="FGM"     conv_href=""> </conversion> <type>length</type> <subtype>Linear</subtype> <plural>miles</plural> <alias></alias> <desc>English surveying unit,set to be equal to 8 furlongs.</desc> <icon href="mile.gif"></icon> </unit> <unit name="dollar"> <conversion      conv_target="pound"      conv_factor="1.312"      conv_constant=""      conv_log=""      conv_source="ISO"      conv_href=""> </conversion> <type>currency</type> <plural>pounds</plural> <alias>sterling</alias> <desc>British pound sterling. </desc> <icon href="pound.gif"></icon> </unit> <unit name="Deutschmark"> <conversion     conv_target="dollar"     conv_factor="1.732"     conv_constant=""     conv_log=""     conv_source = "ISO"     conv_href=""> </conversion> <type>currency</type> <plural>Duetschmarks</plural> <alias>Marks</alias> <desc>German Deutschmarks</desc> <icon href="marks.gif"></icon> </unit> <unit name="Frsncs"> <conversion     conv_target="dollar"     conv_factor="0.812"     conv_constant=""     conv_log=""     conv_source="ISO"     conv_href=""> </conversion> <type>currency</type> <plural>francs</plural> <alias>ff</alias> <desc>French francs</desc> <icon href="ffancs.gif"></icon> </unit> <unit name="acres"> <conversion     conv_target="square meter"     conv_factor="5125"     conv_constant=""     conv_log=""     conv_source="ISO"     conv_href=""> </conversion> <type>area</type> <plural>acres</plural> <alias>acr</alias> <desc>In medieval times,the amount of land one man could plow in one day.</desc> <icon href="acre.gif"></icon> </unit> <unit name="square foot"> <conversion     conv_target="square meter"     conv_factor="0.15"     conv_constant=""     conv_log=""     conv_source="ISO"     conv_href=""> </conversion> <type>area</type> <plural>square feet</plural> <alias>sq ft</alias> <desc>An area one foot by one foot.</desc> <icon href="sqfoot.gif"></icon> </unit> </unitlist> 附录D:RMML文档类型定义("DTD") <?xml encoding="UTF-8"?> <!-- The root element:a whole macro is a"macrodoc". A macrodoc consists of three elements: a macro_header,a macro_code,and a macro_references element. --> <!ELEMENT macrodoc(macro_header,macro_code,macro_references)> <!--MACRO_HEADER--> <!--Information about the macro. --> <!ELEMENT macro_header(macro_source,license_terms,linkset?,documentation)> <!ATTLIST macro_header macrodoc_ID      CDATA          #REQUIRED macro_title      CDATA          #REQUIRED macro_type       CDATA          #REQUIRED result_type          CDATA           #REQUIRED rdmldoc_type     CDATA          #REQUIRED timestamp        CDATA          #IMPLIED version          CDATA          #IMPLIED expiration       CDATA          #IMPLIED freq_of_update   CDATA          #IMPLIED> <!ELEMENT macro_source(contact_info+)> <!ELEMENT license_terms(contact_info,linkset?)> <!ATTLIST license_terms copyright_cite   CDATA           #REQUIRED holder           CDATA           #IMPLIED license_type     CDATA           #IMPLIED warranty         CDATA           #IMPLIED disclaimer       CDATA           #IMPLIED terms            CDATA           #IMPLIED date             CDATA           #IMPLIED email            CDATA           #IMPLIED state            CDATA           #IMPLIED country          CDATA           #IMPLIED> <!ELEMENT contact_info (#PCDATA)> <!ATTLIST contact_info role             CDATA           #IMPLIED name             CDATA           #IMPLIED company        CDATA           #IMPLIED address        CDATA           #IMPLIED city               CDATA            #IMPLIED state          CDATA           #IMPLIED zip            CDATA           #IMPLIED country        CDATA           #IMPLIED email          CDATA           #IMPLIED xlink:form        CDATA            #IMPLIED href           CDATA           #IMPLIED comments       CDATA           #IMPLIED> <!ELEMENT linkset(link*)> <!ATTLIST linkset xlink_form     CDATA           #FIXED'extended' href           CDATA           #IMPLIED> <!ELEMENT link(#PCDATA)> <!ATTLIST link xlink_form      CDATA          #FIXED'simple' href            CDATA          #REQUIRED behavior        CDATA          #IMPLIED content-role    CDATA          #IMPLIED content-title   CDATA          #IMPLIED role            CDATA          #IMPLIED title           CDATA          #IMPLIED show            CDATA          #FIXED'new' actuate         CDATA          #FIXED'user'> <!ELEMENT documentation(macro_description,help_page*)> <!ELEMENT macro_description(#PCDATA)> <!ELEMENT help_page(#PCDATA)> <!ELEMENT macro_code(code,instructions,gui,variable_set?,qualifiers,error_handling, testing)> <!ELEMENT code(#PCDATA)> <!ELEMENT instructions(#PCDATA)> <!ELEMENT gui(comp_rpanel?|comp_ipanel?|comp_list?|comp_vector?)> <!ELEMENT comp_rpanel(comp_rbutton*)> <!ATTLIST comp_rpanel variable_name       CDATA           #REQUIRED intro_label             CDATA            #IMPLIED visible             CDATA           #IMPLIED legend              CDATA           #IMPLIED legend_type         CDATA           #IMPLIED> <!ELEMENT comp_rbutton(#PCDATA)> <!ATTLIST comp_rbutton label               CDATA           #REQUIRED value               CDATA           #REQUIRED isDefault           CDATA           #REQUIRED icon                CDATA           #IMPLIED desc                CDATA           #IMPLIED legend              CDATA           #IMPLIED legend_type         CDATA           #IMPLIED> <!ELEMENT comp_ipanel(comp_ifield*)> <!ELEMENT comp_ifield(#PCDATA)> <!ATTLIST comp_ifield variable_name       CDATA            #REQUIRED variable_label      CDATA            #REQUIRED intro_label             CDATA             #REQUIRED default_value       CDATA            #REQUIRED desc                CDATA            #IMPLIED legend              CDATA            #IMPLIED legend_type         CDATA            #IMPLIED> <!ELEMENT comp_list(comp_listitem*)> <!ATTLIST comp_list variable_name        CDATA           #REQUIRED intro_label              CDATA            #REQUIRED default_item         CDATA           #REQUIRED legend               CDATA           #IMPLIED legend_type          CDATA           #IMPLIED> <!ELEMENT comp_listitem(#PCDATA)> <!ATTLIST comp_listitem  label              CDATA            #REQUIRED  value              CDATA            #REQUIRED  icon               CDATA            #IMPLIED  desc               CDATA            #IMPLIED  legend             CDATA            #IMPLIED  legend_type        CDATA            #IMPLIED> <!ELEMENT comp_vector(line_item)> <!ATTLIST comp_vector variable_name       CDATA          #REQUIRED intro_label             CDATA           #REQUIRED default_item        CDATA           #REQUIRED desc                CDATA           #IMPLIED legend              CDATA           #IMPLIED legend_type         CDATA           #IMPLIED> <!ELEMENT variable_set(variable*)> <!ELEMENT variable(#PCDATA|line_item)*> <!ATTLIST variable variable_name       CDATA           #REQUIRED variable_type       CDATA           #REQUIRED value               CDATA           #REQUIRED href                CDATA           #IMPLIED subref              CDATA           #IMPLIED> <!ELEMENT qualifiers(#PCDATA)> <!ELEMENT error_handling(#PCDATA)> <!ELEMENT testing(#PCDATA)> <!ELEMENT macro_references(macrodocs?,datadocs?)> <!ELEMENT macrodocs(#PCDATA)> <!ELEMENT datadocs(#PCDATA)> <!ELEMENT line_item(data_x?,data_y,linkset?,note_set?)> <!ATTLIST line_item  li_ID            CDATA           #REQUIRED  li_legend        CDATA           #REQUIRED  li_title         CDATA           #REQUIRED  li_cat           CDATA           #IMPLIED  y_axis_title     CDATA           #REQUIRED  level            CDATA           #REQUIRED  format           CDATA           #REQUIRED  relation         CDATA           #REQUIRED  li_notes         CDATA           #REQUIRED  li_desc          CDATA           #REQUIRED  li_prec          CDATA           #REQUIRED  li_unit          CDATA           #REQUIRED li_mag           CDATA          #REQUIRED li_mod           CDATA          #REQUIRED li_measure           CDATA           #REQUIRED li_scale         CDATA          #REQUIRED li_adjustment    CDATA          #REQUIRED li_aggregation   CDATA          #IMPLIED> <!ELEMENT data_y(#PCDATA)> <!ELEMENT note_set(note+)> <!ELEMENT note(#PCDATA)> <!ATTLIST note note_type        CDATA          #IMPLIED> <!ELEMENT data_x(#PCDATA)> <!ATTLIST data_x x_title          CDATA           #REQUIRED format           CDATA           #REQUIRED x_notes          CDATA           #IMPLIED x_desc           CDATA           #IMPLIED x_prec           CDATA           #REQUIRED x_unit           CDATA           #REQUIRED x_mag            CDATA           #REQUIRED x_mod            CDATA           #REQUIRED x_measure            CDATA            #REQUIRED x_scale          CDATA           #REQUIRED x_adjustment     CDATA           #REQUIRED x_links          CDATA           #REQUIRED> 附录E:样例RMML文档 <?xml version="1.0"encoding="UTF-8" standalone="no"?> <!DOCTYPE macrodoc PUBLIC"-//..""RMML1.dtd"> <macrodoc> <macro_header macrodoc_ID="rmml_sort" macro_title="Sort" macro_type="TSL" result_type="replace_each" rdmldoc_type="TS" timestamp="1999-01-19T23:00:00" version="1.0.0" expiration="2000-01-19T23:00:00" freq_of_update="Annual"> <macro_source> <contact_info role="Macro Source" name="Russell T.Davis" company="RDML,Inc." address="2 Wisconsin Circle,Suite 700" city="Chevy Chase" state="MD" zip="20815" country="USA" email="rt_davis@sprynet.com" href="http://www.rdml.com" comments=""> </contact_info> </macro_source> <license_terms copyright_cite="Copyright 1998,RDML,Inc.All Rights Reserved" holder="RDML,Inc." license_type="Payment Per Download" warranty="No warranty is expressed or implied.Use this data at your own risk." disclaimer="This data is provided'as-is'.The provider assumes no responsibility for its use or misuse." terms="$1 per RMMLDoc download" date="1999.0123000000.00" email="license@rdml.com" state="MD" country="USA"> <contact_info  role="Licensee"  name="Russell T.Davis"  company="RDML,Inc."  address="2 Wisconsin Circle,Suite 700"  city="Chevy Chase"  state="MD"  zip="20815"  country="USA"  email="rt_davis@sprynet.com"  href="http://www.rdml.com"  comments=""> </contact_info> </license_terms> <linkset xlink_form="extended" href="http://www.rdml.com"> <link xlink_form="simple" href="http://www.rdml.com" behavior="" content-role="" content-title="" role="" title="" show="new" actuate="user"> </link> </linkset> <documentation> <macro_description> Adds a line showing the minimum or maximum,according to the parameters </macro_description> <help_page> No Help Page is currently available </help_page> </documentation> </macro_header> <macro_code> <code> IF(ichoice=0,SORT(A,0),IF(ichoice=1,SORT(A,1),A)) </code> <instructions> </instructions> <gui> <comp_rpanel     variable_name="ichoice"     intro_label="Select a parameter:">   <comp_rbutton     label="Ascending"     value="0"     isDefault="true"     icon="">   </comp_rbutton>   <comp_rbutton     label="Descending"     value="1"     isDefault="false"     icon=""> </comp_rbutton> </comp_rpanel> </gui> <qualifiers> </qualifiers> <error_handling> </error_handling> <testing> </testing> </macro_code> <macro_references> <macrodocs> </macrodocs> <datadocs> </datadocs> </macro_references> </macrodoc> 附录F:MS Excel Visual Basic例程用于将"attribute value columns"加到数据表 Private Sub UserForm_Initialize() cmdOK.SetFocus txtChartTitle.Text="" txtYAxisTitle.Text="" cboFormat.AddItem("#,##0;(#,##0)") cboFormat.AddItem("#,##0.00;(#,##0.00)") cboFormat.AddItem("0.00%;(0.00%)") cboFormat.ListIndex=0 txtFootnote.Text="Source:" Dim NodeX As Node Set NodeR=treeUnit.Nodes.Add(,,"r","Select One:(Default is blank)") 'Currency Set NodeA=treeUnit.Nodes.Add("r",tvwChild,"c","Currency") Set Nodes=treeUnit.Nodes.Add("c",tvwChild,"dus","$US") Set NodeX=treeUnit.Nodes.Add("c",tvwChild,"puk","Pounds UK") Set NodeX=treeUnit.Nodes.Add("c",tvwChild,"yjp","Yen Japanese") 'Length Set NodeX=treeUnit.Nodes.Add("r",tvwChild,"l","Length") Set NodeX=treeUnit.Nodes.Add("1",tvwChild,"Feet","Feet") Set NodeX=treeUnit.Nodes.Add("1",tvwChild,"Meters","Meters") 'Area Set NodeX=treeUnit.Nodes.Add("r",tvwChild,"a","Area") Set NodeX=treeUnit.Nodes.Add("a",tvwChild,"SqFeet","Square Feet") Set NodeX=treeUnit.Nodes.Add("a",tvwChild,"SqMeters","Square Meters") 'tree formatting NodeA.EnsureVisible 'Magnitude ComboBox cboMagnitude.AddItem("As-Is") cboMagnitude.AddItem("Thousands") cboMagnitude.AddItem("Millions") cboMagnitude.AddItem("Billions") cboMagnitude.ListIndex=0 End Sub Private Sub cmdCancel_Click() End End Sub Private Sub cmdOK_Click() rcount=Selection.Rows.Count 'li_ID Selection.EntireColumn.Insert ActiveCell.Select ActiveCell.FormulaR1C1="li_ID" ActiveCell.Offset(1,0).Range("A1").Select ActiveCell.FormulaR1C1="1" ActiveCell.Offset(1,0).Range("A1").Select ActiveCell.FormulaR1C1="=R[-1]C+1" ActiveCell.Select Selection.Copy r="A1:A"&(rcount-3) ActiveCell.Offset(1,0).Range(r).Select ActiveSheet.Paste Application.CutCopyMode=False 'li_legend ActiveCell.Offset(-3,1).Range("A1").Select ActiveCell.FormulaR1C1="li_legend" 'li_title ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="li_title" ActiveCell.Offset(1,0).Range("A1").Select ActiveCell.FormulaR1C1=txtChartTitle.Text ActiveCell.Select Selection.Copy r="A1:A"&(rcount-2) ActiveCell.Offset(1,0).Range(r).Select ActiveSheet.Paste Application.CutCopyMode=False 'li_cat ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="li_cat" 'y_axis_title ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="y_axis_title" ActiveCell.Offset(1,0).Range("A1").Select ActiveCell.FormulaR1C1=txtYAxisTitle.Text ActiveCell.Select Selection.Copy r="A1:A"&(rcount-2) Selection.ColumnWidth=8 ActiveCell.Offset(1,0).Range(r).Select ActiveSheet.Paste Application.CutCopyMode=False 'level ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="level" ActiveCell.Offset(1,0).Range("A1").Select ActiveCell.FormulaR1C1="1" ActiveCell.Select Selection.Copy r="A1:A"&(rcount-2) Selection.ColumnWidth=8 ActiveCell.Offset(1,0).Range(r).Select ActiveSheet.Paste Application.CutCopyMode=False 'format ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="format" ActiveCell.Offset(1,0).Range("A1").Select ActiveCell.FormulaR1C1=cboFormat.value ActiveCell.Select Selection.Copy r="A1:A"&(rcount-2) ActiveCell.Offset(1,0).Range(r).Select ActiveSheet.Paste Application.CutCopyMode=False 'relation ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="relation" ActiveCell.Offset(1,0).Range("A1").Select ActiveCell.FormulaR1C1="Parent" ActiveCell.Select Selection.Copy r="A1:A"&(rcount-2) ActiveCell.Offset(1,0).Range(r).Select ActiveSheet.Paste Application.CutCopyMode=False 'li_notes ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="li_notes" ActiveCell.Offset(1,0).Range("A1").Select ActiveCell.FormulaR1C1=txtFootnote.Text ActiveCell.Select Selection.Copy r="A1:A"&(rcount-2) Selection.ColumnWidth=8 ActiveGell.Offset(1,0).Range(r).Select ActiveSheet.Paste Application.CutCopyMode=False 'li_desc ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="li_desc" 'li_prec ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="li_prec" 'li_unit ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="li_unit" ActiveCell.Offset(1,0).Range("A1").Select u="" On Error Resume Next u=treeUnit.SelectedItem.Text ActiveCell.FormulaR1C1=u ActiveCell.Select Selection.Copy r="A1:A"&(rcount-2) ActiveCell.Offset(1,0).Range(r).Select ActiveSheet.Paste Application.CutCopyMode=False 'li_mag 'first calculate the value to put in If(StrComp(cboMagnitude.value,"As-Is")=0)Then m=0 End If If(StrComp(cboMagnitude.value,"Thousands")=0)Then m=3 End If If(StrComp(cboMagnitude.value,"Millions")=0)Then m=6 End If If(StrComp(cboMagnitude.value,"Billions")=0)Then m=9 End If ActiveCell.Offset(0,1).Columns("A:A").EntireColumn. Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="li_mag" ActiveCell.Offset(1,0).Range("A1").Select ActiveCell.FormulaR1C1=m ActiveCell.Select Selection.Copy r="A1:A"&(rcount-2) ActiveCell.Offset(1,0).Range(r).Select ActiveShect.Paste Application.CutCopyMode=False 'li_mod ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight ActiveGell.Select ActiveCell.FormulaR1C1="li_mod" 'li_measure ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="li_measure" 'li_scale ActiveCell.Offset(0,1).Golumns("A:A").EntireGolumn.Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="li_scale" 'li_adjustment ActiveCell.Offset(0,1).Columns("A:A").EntireColumn. Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="li_adjustment" 'li_aggregation ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight ActiveCell.Select ActiveCell.FormulaR1C1="li_aggregation" End End Sub 附录G:MS Excel Visual Basic例程,从电子表格数据表创建加标签文档 Private Sub Framel_Click() End Sub Private Sub UserForm_Initialize()  cmdOK.SetFocus RefEdit_data.value="Sheetl!$A$1:$AB$51" txtDefaultFile.Text="D:\defaultl.rdm" txtOutputDir. Text="D:\" txtOutputFile.Text="out.rdm" cboLineItemType.AddItem("TimeSeries") cboLineItemType.AddItem("Category") cboLineItemType.AddItem("XYPlot") cboLineItemType.ListIndex=0 cbNonFileDefaults.value=False End Sub Private Sub cmdCancel_Click() End End Sub Private Sub cmdOK_Click() Dim buff As String buff=createIntro buff=buff&createHeader buff=buff&createLISet buff=buff&createLineItems buff=buff&"</line_item_set>"&Chr(10) buff=buff&createEnding replaceAttribute buff,"rdmldoc_header","rdmldoc_ID",txtOutputFile.value replaceAttribute buff,"rdmldoc_header","doc_title",txtDocTitle.value replaceAttribute buff,"line_item_set","line_item_set_type",cboLineItemType.SelText replaceAttribute buff,"data_x","x_title",txtXAxisTitle.value fillXData buff CreateFile(buff) End End Sub Private Sub cmdBrowseDefault_Click() CommonDialog1.ShowOpen txtDefaultFile.Text=CommonDialog1.Filename End Sub Private Sub cmdBrowseOutputDir_Click() CommonDialog1.ShowOpen txtOutputFile.Text=CommonDialog1.Filename End Sub Private Sub UserForm_Click() End Sub Private Sub getConfiguration() End Sub Private Function createHeader() 'buff will be the buffer that collects the string Dim buff As String 'If user wants the program to create a default If cbNonFileDefaults.value=True Then buff=buff&defHeader End If 'Or get the default header values from a file buff=createDefHeader 'return createHeader=buff End Function Private Function createDefHeader() 'Declarations Dim h As String Dim wholefile As String 'open the default file Dim Def_file As String Def_file=txtDefaultFile.Text Open Def_file For Input As #2 wholefile=Input$(LOF(2),2) Close #2 'put the rdmldoc_header into a string h=getElementByTagName(wholefile,"rdmldoc_header") createDefHeader=h End Function Private Function createLISet() 'Declarations Dim h As String Dim wholefile As String 'open the default file Dim Def_file As String Def_file=txtDefaultFile.Text Open Def_file For Input As#2 wholefile=Input$(LOF(2),2) Close#2 'put the the line item set overall tags into a string h=getOpeningElementTag(wholefile,"line_item_set") h=h&getElementByTagName(wholefile,"data_x") h=h&getElementByTagName(wholefile,"li_class_set") h=h&getElementByTagName(wholefile,"linkset") createLISet=h End Function Public Function getElementByTagName(str As String,el As String) startPos=InStr(1,str,"<" &el,1) endPos=InStr(1,str,"</"&el,1) element=Mid(str,startPos,endPos-startPos+Len(el)+4) getElementByTagName=element End Function Public Function getOpeningElementTag(str As String,el As String) startPos=InStr(1,str,"<"&el,1) endPos=InStr(startPos,str,">",1) element=Mid(str,startPos,endPos-startPos+5) getOpeningElementTag=element End Function Private Sub CreateFile(buff) Dim Outfile As String Outfile=txtOutputDir.Text&txtOutputFile.Text Open Outfile For Output As#1 Print#1,buff Close#1 End Sub Private Function createIntro() buff="" 'Header Information buff=buff&"<?.xml version="&Chr(34)&"1.0"&Chr(34) buff=buff &"encoding="&Chr(34)&"UTF-8"&Chr(34) buff=buff&"standalone="& Chr(34)&"no"&Chr(34) buff=buff&"?>"&Chr(10) 'DTD Declaration buff=buff&"<!DOCTYPE rdmldoc PUBLIC" buff=buff&Chr(34)&"-//.."&Chr(34)&"" buff=buff&Chr(34)&"RDML1.dtd"&Chr(34) buff=buff&">"&Chr(10) 'begin rdmldoc tag buff=buff&"<rdmldoc>"&Chr(10) 'return createIntro=buff End Function Private Function createEnding() buff="" buff=buff&"</rdmldoc>"&Chr(10) 'return createEnding=buff End Function Private Function defHeader() buff="" 'return defHeader=buff End Function Private Function createLineItems() Dim data As Range t=RefEdit_data.value createLineItems=fillLineItems(Range(t),cboLineItemType.value) End Function '----------------------------------------------------------- 'Procedure:Fill_line_item() 'Purpose:Prepare the line_item element           'This element contains information about the line_item 'From DTD: '<!ELEMENT line_item(data_x?,data_y,li_class_set?,analysis?, 'link_set?,note_set?)> '<!ATTLIST line_item 'li_ID               CDATA       #REQUIRED 'li_legend           CDATA       #REQUIRED 'li_title            CDATA       #REQUIRED 'li_table            CDATA       #IMPLIED 'y_axis_title            CDATA        #REQUIRED 'level               CDATA       #REQUIRED 'format              CDATA       #REQUIRED 'relation            CDATA       #REQUIRED 'li_notes            CDATA       #REQUIRED 'li_desc             CDATA       #REQUIRED 'li_prec          CDATA          #REQUIRED 'li_unit          CDATA          #REQUIRED 'li_mag           CDATA          #REQUIRED 'li_mod           CDATA          #REQUIRED 'li_measure       CDATA          #REQUIRED 'li_scale         CDATA          #REQUIRED 'li_adjustment    CDATA          #REQUIRED> '-------------------------------------------- Public Function fillLineItems(data As Range,litype As String) 'Declarations Dim J,K As Integer Dim Max As Integer 'Ifthis is an XYPlot,use the other routine Iflitype="XYPlot"Then 'Fill_line_item_xy Else 'Initializations K=1 buff="" NumLI=data.Rows.Count 'Cycle through all the line items For N=2 To NumLI 'Insert opening tag buff=buff&"<line_item"&Chr(10) 'Insert the Attributes addAttribute buff,"li_ID",data.Cells(N,1),6,0 addAttribute buff,"li_legend",data.Cells(N,2),6,0 addAttribute buff,"li_title",data.Cells(N,3),6,0 addAttribute buff,"li_cat",data.Cells(N,4),6,0 addAttribute buff,"y_axis_title",data.Cells(N,5),6,0 addAttribute buff,"level",data.Cells(N,6),6,0 addAttribute buff,"format",data.Cells(N,7),6,0 addAttribute buff,"relation",data.Cells(N,8),6,0 addAttribute buff,"li_notes",data.Cells(N,9),6,0 addAttribute buff,"li_desc",data.Cells(N,10),6,0 addAttribute buff,"li_prec",data. Cells(N,11),6,0 addAttribute buff,"li_unit",data.Cells(N,12),6,0 addAttribute buff,"li_mag",data.Cells(N,13),6,0 addAttribute buff,"li_mod",data.Cells(N,14),6,0 addAttribute buff,"li_measure",data.Cells(N,15),6,0 addAttribute buff,"li_scale",data.Cells(N,16),6,0 addAttribute buff,"li_adjustment",data.Cells(N,17),6,1 'Fill the body of the tag with a comma-delimited string of the y-data numbers buff=buff&"<data_y>"&Chr(10) MaxLI=NumLI-2 MaxDP=data.Columns.Count-17 ForK=1 To MaxDP buff=buff&data.Cells(N,18+K)&"," If(K Mod 10)=0 Then buff=buff&Cbr(10) End If Next K buff=buff&Chr(10)&"</data_y>"&Chr(10) 'Insert ELEMENT:analysis 'Insert ELEMENT:li_class_set 'Insert ELEMENT:'linkset' 'Call FillTag("linkset") 'Insert ELEMENT:note_set 'Insert closing tag for that line item buff=buff&Chr(10)&"</line_item>"&Chr(10) 'Every10line items,flush the buffer 'IfN Mod 5=0 Then 'Call SaveToFile(buff) 'End If Next N 'Closes the test for XYPlot at beginning of routine End If fillLineItems=buff End Function '----------------------------------------------- 'Procedure:addAttribute(name,value) ' 'Purpose:Adds an attribute line to"buff" ' '----------------------------------------------- Public Sub addAttribute(buff,name,value,indent,last) 'Build the indentation Dim strIndent As String strIndent="" For J=1 To indent strIndent=strIndent &"" Next J 'Build the string buff=buff&strIndent&name&"="&Chr(34)&value&Chr(34) 'Add an ending'>'tag if"last"is 1;else simple add a carriage return If last=1 Then buff=buff&">"&Chr(10) Else buff=buff&Chr(10) End If End Sub Private Sub replaceAttribute(fAs String,el As String,att As String,val As String) f=Replace(f,att&"="&Chr(34)&Chr(34),att&"="&Chr(34)&val&Chr(34)) End Sub Private Sub fillXData(f As String) 'build the string of X values 'Dim data As Range Dim v As String t=RefEdit_data.value v=Chr(10)&Range(t).Cells(1,19) ForJ=20 To Range(t).Columns.Count v=v&","&Range(t).Cells(1,J) Next J v=v&Chr(10) 'replace the current x data element text f=Replace(f,"></data_x>",">"&v&"</data_x>") End Sub 展开

查看更多专利详情信息请先登录或注册会员

相关专利类别推荐

获取手机验证码,即可注册成为会员

专利详情咨询

咨询内容

姓名

手机

验证码

用户登录

手机号

手机验证码

提示

不能再减了!!!

提交成功

八月瓜客服中心已经收到您的信息,正在为您派遣知识产权顾问。知识产权顾问会携带贴心的服务以闪电搬的速度与您联系。

扫一扫关注八月瓜微信 创业一手掌握