首页 > 开发 > Xml > 正文

在XML模式中扩展枚举列表

2020-01-29 17:00:37
字体:
来源:转载
供稿:网友
在列表中添加新值是一种常见而且必要的需求。模式设计者通常希望在系统架构中构建一种添加附加值的方法,并且该附加值在设计阶段是未知的。模式设计者如何创建一个可扩展、易于实现的枚举值列表?本文将介绍几种实现这一目标的方法。
模式设计者和实现人员需要一种扩展 XML 模式中现有枚举列表的方法。不幸的是,XML 模式规范不允许在这些列表的创建过程中(参阅 参考资料)进行扩展。设计阶段所选的值是固定的,而且都是可用的。尽管有这样的限制,人们仍使用各种替代方案来实现列表扩展。很多使用现有的不能改变的模式的客户经常提出这一要求。他们希望在添加新功能的同时保持向后兼容性。本文中,您将会看到模式设计者如何克服障碍实现该功能。
枚举列表 是特定数据点的一组指定值。例如,您也许通过固定的值列表查看国家代码,包括 DE(德国)、US(美国)和 JP(日本)。根据给定的值集,当一个新国家被识别出时,如 TL(东帝汶)或者 BA(波斯尼亚及黑塞哥维那),该怎么办?使用以前的名称列表的客户必须改变实现来容纳新值。
当使用 XML 模式对数据建模时,枚举值被显式列出。因此,国家代码列表依次包含各个枚举值。经常需要识别列表中的新值,而且必须将其容纳到列表中,模式设计者试图找到一种扩展列表的方法,实际上,是将这种方法构建到设计中,允许添加在设计时未知的附加值。
创建可扩展的枚举列表
在寻找这一问题的解决方案时,受到四个关键标准的影响:
首先,要在设计阶段之后扩展列表。不管是快速建立一个新的贸易伙伴还是建立时间关键型的新数据字段,在关键时刻进行扩展是一项实际需求。
其次,能够在解析器中验证值对于简化实现是非常关键的。
第三,在单个周期内完成解析和验证是至关重要的。这就避免了像 Genericode 解决方案一样,在一个单独的周期和解析器中进行验证。对于某些设置来说,添加新技术需求会导致成本太高或者太耗时。
最后,解决方案必须能够向后兼容原始的模式。不兼容的列表更改不能称为扩展。
有些人认为根本就不应该扩展枚举列表。数据建模人员也许认为如果想让模型包含更多数据、扩展模型,那么可以根据产品创建模式 — 实际上,在需要时创建更大的模型并减少限制。如果能够控制原始模式和数据模型,这样做是可以的,这种方法也许是理想的方法。但是,如果您需要在设计阶段之后进行实际扩展,这样的方法是行不通的。
还有人认为扩展枚举列表的关键是不使用 XML 模式验证解析器。Genericode(参阅 参考资料)建议在第二层对枚举列表进行验证,脱离初始的 XML 模式解析器验证过程。这种理论是正确的,而且这种方法的应用会越来越广泛。但是,如果要在一个解析周期内完成,这种解决方案是无法做到的。在某些情况下,不可能执行第二个验证周期。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表