一种动态换肤的界面生成装置与方法 【技术领域】
本发明属于信息处理技术领域,具体涉及一种动态换肤的界面生成装置与方法。
背景技术
换肤技术是计算机软件中常用到的一种技术,即实现将数据通过皮肤转换为用户的视图,人们形象的将起到这样作用的数据称为“皮肤”,该皮肤数据主要是用于描述数据在视图上表现的样式。
中国专利申请200710145603.0(公开日:2008年1月16日)公开了“一种动态换肤方法与装置”,其通过接收动态换肤请求,根据动态换肤请求查找预置的动态换肤处理规则,提取预置的皮肤;通过预置的动态换肤处理规则更新界面皮肤。该发明还公开了一种动态换肤装置,该装置包括:事件类型收集模块,包括第一监测模块;事件类型与处理规则存储模块,包括第一存储模块;用于存储与动态换肤请求对应的处理规则;查找模块,包括第一查找模块;皮肤模板管理模块;处理模块。但是,该发明主要局限在浏览器皮肤,通过事件触发相关操作,而不是通过数据本身识别的,并且未提出针对皮肤模板和皮肤元的合成生成皮肤的方式。
目前,依据数据的特性,自动分析和匹配,动态生成皮肤成为目前换肤技术发展趋势。而现有的文献或产品中提到的换肤技术,主要涉及皮肤与数据的合成,对于皮肤本身的动态生成比较忽略,不适用于数据差异性较大的用户视图或者界面生成场合。
【发明内容】
针对现有技术中存在的问题,本发明的目的是提供一种动态换肤的界面生成装置与方法,通过该装置与方法能够实现数据的动态灵活换肤,以及数据到视图的自动生成。
为了实现上述目的,本发明采用的技术方案如下:
一种动态换肤的界面生成装置,该装置包括用于接收和发送数据信息的合成接口;用于存储和查找皮肤信息的皮肤选择装置;以及用于生成皮肤文件,并将输入数据与生成的皮肤文件进行合成的皮肤合成装置。
如上所述的一种动态换肤的界面生成装置,其中,所述皮肤选择装置包括用于管理皮肤模板,并能从皮肤元管理模块中获得皮肤元的皮肤模板管理模块;
用于管理皮肤元,并向皮肤模板管理模块和皮肤合成装置提供皮肤元的皮肤元管理模块;
以及用于存储预先定义的皮肤文件的数据存储模块。
如上所述的一种动态换肤的界面生成装置,其中,所述皮肤合成装置包括用于接收合成接口输入的数据请求,并将接收到的数据请求发送至皮肤选择装置的请求模块;
用于将皮肤元嵌入到皮肤模板中生成皮肤文件,或者依据输入数据的属性,对生成的皮肤文件作进一步调整的嵌入模块;
以及用于将输入数据和皮肤文件进行合成,生成界面文件的合成模块。
一种动态换肤的界面生成方法,包括以下步骤:
(1)合成接口接收输入数据,将输入数据发送到皮肤合成装置,皮肤合成装置向皮肤选择装置发送皮肤请求;
(2)皮肤选择装置根据皮肤合成装置发送的皮肤请求以及皮肤选择属性查找相匹配的皮肤模板;
(3)皮肤选择装置查找与皮肤模板相匹配的皮肤元,皮肤合成装置获得皮肤模板和皮肤元,并将获得的皮肤元嵌入到皮肤模板中;或者根据输入数据的属性,对皮肤模板中的皮肤元进行替换或者属性调整,生成皮肤文件;
(4)皮肤合成装置将输入数据和皮肤文件进行合成,生成界面文件,并通过合成接口输出。
如上所述的一种动态换肤的界面生成方法,步骤(1)中,合成接口接收的输入数据中包括输入数据单元标记的数据类型和标签属性。
如上所述的一种动态换肤的界面生成方法,其中,所述数据类型和标签属性用于定义步骤(2)中所述的皮肤选择属性。
如上所述一种动态换肤的界面生成方法,步骤(2)中,皮肤选择装置首先在该装置中预存的皮肤文件中查找与皮肤请求相匹配的皮肤文件,如果存在相匹配地皮肤文件,则转至步骤(4);如果不存在,再执行步骤(2)。
如上所述一种动态换肤的界面生成方法,其中,通过匹配度择优选择相匹配的皮肤文件。
如上所述的一种动态换肤的界面生成方法,其中,所述皮肤模板中还设定了皮肤元的位置替换与选择规则。
如上所述的一种动态换肤的界面生成方法,其中,所述皮肤元、皮肤模板和皮肤文件中均包含皮肤名称、匹配模板和匹配附加规则属性。
如上所述一种动态换肤的界面生成方法,步骤(2)中,皮肤选择装置根据输入数据的数据类型、名称、定义的属性以及皮肤模板的设置寻找符合条件的皮肤元,并根据匹配度择优选择皮肤元,所述匹配度根据输入数据中记录的标签属性与皮肤元中记录的匹配属性的对应情况来确定。
如上所述的一种动态换肤的界面生成方法,步骤(2)中,皮肤选择装置依据记录在皮肤元中的匹配属性,以及数据结点的皮肤匹配属性进行匹配,其中优先处理数据结点的皮肤匹配属性,所述皮肤匹配属性是指数据结点上明确指定使用的皮肤元名称或者类别。
如上所述的一种动态换肤的界面生成方法,步骤(3)中,皮肤合成装置在生成皮肤文件之后,对皮肤文件进行后处理,所述后处理包括根据输入数据中的全局信息对皮肤数据进行调整,以及依据系统配置或者输入数据记录属性,将当前皮肤文件作为输入数据,进一步进行皮肤转换。
如上所述的一种动态换肤的界面生成方法,步骤(4)中,皮肤合成装置使用数据匹配转换的方式将输入数据和皮肤文件进行合成。
本发明预置了皮肤模板管理模块,动态换肤处理规则等,通过监测动态换肤请求,根据预置的动态换肤处理规则进行动态的皮肤更新,实现了数据的动态灵活换肤,以及数据到视图的自动生成。并且动态换肤的规则可以由用户自行设定,从而为用户提供了丰富多样的更新方式。
【附图说明】
图1是具体实施方式中界面生成装置结构示意图;
图2是具体实施方式中界面生成方法流程图;
图3是具体实施方式中获得皮肤文件流程图。
【具体实施方式】
下面结合说明书附图和具体实施方式对本发明作进一步的描述。
本实施方式中的动态换肤的界面生成装置101的结构如图1所示,主要包括用于接收和发送数据信息的合成接口102;用于存储和查找皮肤信息的皮肤选择装置107;以及用于生成皮肤文件,并将输入数据与生成的皮肤文件进行合成的皮肤合成装置103。
其中,皮肤选择装置107包括用于管理皮肤模板,并能从皮肤元管理模块中获得皮肤元的皮肤模板管理模块109;用于管理皮肤元,并向皮肤模板管理模块109和皮肤合成装置103提供皮肤元的皮肤元管理模块110;以及用于存储预先定义的皮肤文件的数据存储模块108。
皮肤合成装置103包括用于接收合成接口102输入的数据请求,并将接收到的数据请求发送至皮肤选择装置107中的请求模块104;用于将皮肤元嵌入到皮肤模板中,或者依据输入数据的属性,对生成的皮肤作进一步调整,生成皮肤文件的嵌入模块105;以及用于将输入数据和皮肤文件进行合成,生成界面文件的合成模块106。
如图2所示,本实施方式中的动态换肤的界面生成方法主要包括以下步骤。
步骤S21:发送皮肤请求。
首先合成接口102接收输入数据,所述输入数据包括输入数据单元标记的数据类型和标签等属性。然后将输入数据发送到皮肤合成装置103中的请求模块104,请求模块104再向皮肤选择装置107发送皮肤请求。
步骤S22:获得皮肤文件。
获得皮肤文件的流程如图3所示。请求模块104将输入数据传送至皮肤选择装置107中的数据存储模块108,数据存储模块108中预先存储了皮肤文件。皮肤选择装置107获得皮肤请求后,首先根据皮肤选择属性在数据存储模块108中查找符合条件的皮肤文件,如果找到符合条件的皮肤文件,则对符合条件的皮肤文件根据匹配度进行排序,例如输入数据中的字体、字号、字型、颜色等文字属性以及版式、大小等图片属性等相匹配的程度,将匹配度最高的皮肤文件发送至皮肤合成装置103的合成模块106,转至步骤S23。
如果数据存储模块108中不存在对应的皮肤文件,则请求模块104向皮肤选择装置107的皮肤模板管理模块109发送请求,皮肤模板管理模块109根据皮肤请求和皮肤选择属性查找皮肤模板。可以将输入数据包含的数据类型与标签等属性作为皮肤选择属性。
所述皮肤模板是指用户针对不同应用定义的皮肤整体表现的模板。皮肤模板中定义了皮肤元的位置替换与选择规则,即皮肤元在皮肤模板中的排列位置、排列顺序等规则。皮肤元是用户定义的最小的数据单元,记录了可以与之对应的数据类型、标签等数据匹配属性。
本实施例中,根据模板名称在皮肤模板管理模块中寻找对应的皮肤模板,定义的皮肤模板的片段如下:
<xsl:template match=″data″>
<div>
<xsl:apply-templates select=″items″/>
</div>
</xsl:template>
<xsl:template match=″items″>
<table>
<xsl:apply-templates select=″item″/>
</table>
</xsl:template>
<xsl:template match=″item″>
<td>
<label class=″label″>
<xsl:value-of select=″@name″/>
<xsl:value-of select=″’:’″/>
</label>
</td>
<td>
<xsl:call-template name=″value″/>
</td>
</xsl:template>
<xsl:template name=″value″>
<xsl:variable name=″type″select=″@type″/>
<xsl:choose>
<xsl:when test=″$type=’radio’″>
<xsl:call-template name=″radioitem″/> //代码1
( <xsl:call-template name=″radioReadonly″/>) //代码2
</xsl:when>
<xsl:when test=″$type=’checkbox’″>
<xsl:call-template name=″radioitem″/>
</xsl:when>
</xsl:choose>
</xsl:template>
皮肤模板中代码1和代码2通过指定皮肤元的名称,定义了两个不同的皮肤元。
查找到符合条件的皮肤模板后,皮肤模板管理模块109将该皮肤模板传送至皮肤元管理模块110,进行择优匹配选择。皮肤元管理模块110根据输入数据的数据类型、名称、定义的属性以及皮肤模板的设置寻找符合条件的皮肤元,皮肤模板的设置包括皮肤模板中存储的皮肤元名称、类型等属性。
本实施例中,依据记录在皮肤元中的属性,以及数据结点的皮肤匹配属性进行匹配,其中优先处理数据结点的皮肤匹配属性,所述皮肤匹配属性是指数据结点上明确指定使用的皮肤元名称或者类别。
当存在多个符合条件的皮肤元时,皮肤元管理模块110再根据预先定义的匹配度对符合条件的皮肤元进行择优排序。将符合数据类型和名称的要求作为选择皮肤元的基本要求,在满足上述要求的基础上,定义属性的匹配度,根据匹配度的等级,由高至低择优选择皮肤元。本实施例中,根据输入数据中记录的标签属性与皮肤元中记录的匹配属性的对应情况来定义属性的匹配度。例如,在数据类型与名称均匹配的情况下,其他符合匹配条件的属性数量越多,其匹配度等级越高,根据配匹度的等级实现择优选择的目的。
本实施例中,根据皮肤元名称在皮肤元管理模块110中查找对应的皮肤元,假设搜索到如下两个皮肤元:
A. <xsl:template name=″radioitem″>
<select>
<xsl:for-each select=″dicitem″>
<option>
<xsl:attribute name=″value″>
<xsl:value-of select=″@value″/>
</xsl:attribute>
<xsl:if test=″@check=’1’″>
<xsl:attribute name=″selected″></xsl:attribute>
</xsl:if>
<xsl:value-of select=″@text″/>
</option>
</xsl:for-each>
</select>
</xsl:template>
B. <xsl:template name=″radioReadonly″>
<input type=”text”>
<xsl:value-of select=″@text″/>
</input>
</xsl:template>
上述皮肤元A、皮肤元B分别与皮肤模板中代码1和代码2指定的皮肤元名称及数据类型相对应。由于代码1和代码2处均只有一个皮肤元与其匹配,所以无需进行择优排序。
当查找到皮肤元并进行择优排序后,将配匹度最高的皮肤元发送给皮肤合成装置103中的嵌入模块105。皮肤模板管理模块109也将符合条件的皮肤模板发送至嵌入模块105中。嵌入模块105获得皮肤元和皮肤模板后,将皮肤元嵌入到皮肤模板中的相应位置,或者根据输入数据的属性,对皮肤中的皮肤元进行替换或者属性调整,生成皮肤文件。然后将上述皮肤文件传输至皮肤合成装置103的合成模块106。
本实施例中,皮肤合成装置将代码1处指定的皮肤元“radioitem”合并后的皮肤文件片断如下:
<xsl:template match=″data″>
<div>
<xsl:apply-templates select=″items″/>
</div>
</xsl:template>
<xsl:template match=″items″>
<table>
<xsl:apply-templates select=″item″/>
</table>
</xsl:template>
<xsl:template match=″item″>
<td>
<label class=″label″>
<xsl:value-of select=″@name″/>
<xsl:value-of select=″’:’″/>
</label>
</td>
<td>
<xsl:call-template name=″value″/>
</td>
</xsl:template>
<xsl:template name=″value″>
<xsl:variable name=″type″select=″@type″/>
<xsl:choose>
<xsl:when test=″$type=’radio’″>
<xsl:call-template name=″radioitem″/>//代码1
</xsl:when>
<xsl:when test=″$type=’checkbox’″>
<xsl:call-template name=″radioitem″/>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template name=″radioitem″>
<select>
<xsl:for-each select=″dicitem″>
<option>
<xsl:attribute name=″value″>
<xsl:value-of select=″@value″/>
</xsl:attribute>
<xsl:if test=″@check=’1’″>
<xsl:attribute name=″selected″></xsl:attribute>
</xsl:if>
<xsl:value-of select=″@text″/>
</option>
</xsl:for-each>
</select>
</xsl:template>
皮肤元、皮肤模板和皮肤文件中均包含皮肤名称、匹配模板和匹配附加规则等属性。
在生成皮肤文件后,可以对皮肤文件进行后处理,其中后处理包括根据输入数据中全局信息对皮肤数据进行调整,以及依据系统配置或者输入数据记录属性,将当前皮肤文件作为输入数据,进一步进行皮肤转换后再提供给皮肤合成装置使用。本实施例中,对皮肤文件的后处理操作包括根据输入数据中的全局信息例如定义的字体、字号、字型、颜色等文字属性以及版式、大小等图片属性对皮肤文件中合成的皮肤元进行再次处理,将后处理的皮肤文件提供给皮肤合成装置进行数据转换。
步骤S23:合成界面。
皮肤合成装置103的合成模块106完成输入数据与皮肤文件的合成,生成新的界面文件后,由合成接口102输出。本实施中,使用数据匹配转换的方式将皮肤文件与输入数据成。
本发明所述的装置及方法并不限于具体实施方式中所述的实施例,本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。