2009-04-13 64 views
0

假设我有一个系统为xml中的一些复杂对象存储数据。这些对象的继承关系很弱:可能有4个字段对所有对象都是通用的,而对于每种类型的对象都有其他20个字段,比如6到8种不同类型的对象。基于xml架构创建页面并添加来自xml记录的数据

对每个对象来说唯一的数据本身可能很复杂:像枚举,其他复杂类型以及仅仅有条件使用的项目。每种类型的对象都有一个xml模式来描述它。

该系统通过一系列步骤为每个对象建立记录,因此只有部分记录是很常见的。没有定义每个步骤所涉及的内容:用户可以尽可能多地填写内容,然后将其传递给更有知识的人来完成。

我想要做的是创建一个ASP.Net页面来显示这些记录。给定一个记录号(和类型)将该类型的模式加载到表单中,然后从记录本身填充表单。我认为记录本身不足以创建页面,因为记录可能还没有列出我想要包含在表单中的每个字段,并且不会隐式地包含像枚举类型的数据。

什么将是一个优雅的方式来实现这一目标?我确信我错过了一些简单的方法来实现这一点,但Xslt可能不会削减它。

这是一个跟进到this question,目前纯粹是假设。根据这里的回答,我可能会完全不同。

+0

你为什么说“XSLT可能不会削减它”? XSLT是将XML数据和XML模式元数据转换为HTML的完美工具。 – 2009-04-15 18:58:08

+0

好,很好,不完美。有一点被带走了。 – 2009-04-15 18:58:40

回答

1

当你说“Xslt可能不会削减它”,我想知道你想到哪种Xslt方法。

一种方法是以某种方式转换表单的实例数据。 (我不确定这是如何在实践中起作用的,也许这就是为什么你说Xslt不起作用。)

另一种方法是使用Xslt生成一个定制的一次性模式,表单数据的当前状态。然后,您将使用此模式来构建表单。例如,转换后的模式将排除尚未准备好显示的字段的定义。这听起来对我来说(十分可行的不是我自愿:-)

UPDATE(回应评论): 说实话,我不知道asp.net不够好,也就是说,当它的缓存会适合您的需求。我原以为你不要想要缓存,因为我会得到的原因。

试图澄清我的意思:我在您的描述中听到的是,记录的当前状态可能会影响表格的结构。例如,字段A的合法值可能受到字段X,Y和Z值的限制,其中某些字段在给定时间可能实际上是未知且不可知的;这种模糊性可能使得使用单一统一结构来呈现表格变得困难。

我的想法是,也许你不必将自己局限于不可变的模式。如果数据的当前状态可以更好地由修改后的模式来表示(例如,反映字段A的允许枚举值的字段,或者字段B当前允许的联合选项),那么我建议可能转换模式在创建表单之前可能会有诀窍。对于关于缓存的评论,我担心缓存可能会导致在需要更新的表单时出现过时的表单定义,这是由于数据和模式的更改。也许你可以通过根据自定义模式的当前状态来排列名称空间URL来避免这种情况。

我希望这会有所帮助。