延伸的枚举列表XML模式

向列表中添加新值是一个常见且必要的要求。模式设计器通常希望在系统架构中添加附加值的方法,而在设计阶段,附加值是未知的。模式设计器如何创建一个可扩展的、易于实现的枚举值枚举列表本文将介绍实现这一目标的几种方法。
模型的设计者和实施者需要一种扩张




向列表中添加新值是一个常见且必要的要求。模式设计器通常希望在系统架构中添加附加值的方法,而在设计阶段,附加值是未知的。模式设计器如何创建一个可扩展的、易于实现的枚举值枚举列表本文将介绍实现这一目标的几种方法。
模式的设计者和实施者需要在XML Schema扩展现有枚举列表。不幸的是,XML Schema规范不允许在这些列表创建扩展(见参考资料)。选择的值在设计阶段是固定的,都是可用的,尽管这样的限制,一个不同的选择,还用于实现列表的扩展。很多客户使用现有的模式,不改变经常提出这个要求。他们想保持向后兼容性的同时增加新的功能。在这篇文章中,你将看到如何架构设计师克服了实现该功能的障碍。
枚举列表是特定数据点的一组指定值。例如,您可以通过一个固定的值列表来查看国家代码,包括DE(德国)、美国(美国)和JP(日本)。根据给定的值集,当确定一个新状态时,如TL(东帝汶)或BA(Bosnia和黑塞黑塞那),怎么办使用先前名称列表的客户必须更改实现以适应新的值。
当使用XML模式对数据进行建模时,枚举值被显式列出。因此,国家代码列表依次包含所有枚举值。它经常需要在列表中标识新值,并且必须与列表相适应。模式设计者试图找到一种扩展列表的方法。实际上,它们是在设计中构建的,以便在设计时添加额外的值。
创建一个可扩展的列表的枚举
在找到解决这个问题的方法时,它受到四个关键标准的影响:
首先,您应该在设计阶段扩展列表,无论是快速建立一个新的贸易伙伴,还是建立一个新的时间关键的数据字段,这是在关键时刻扩展的实际需要。
第二,在解析器中验证值以简化实现是至关重要的。
第三,它是完整的解析和验证在一个周期内必不可少的。这样可以避免为genericode方案一样,这是一个单循环和解析器验证。对于一些设置,增加了新的技术要求,会导致太多或太耗时。
最后,解决方案必须能够向后兼容原始模式。不兼容的列表更改不称为扩展。
有些人认为枚举列表不应该被扩展在所有。数据建模者可能认为,如果我们想要的模型包含了更多的数据和扩展的模型,我们可以创建基于产品--事实上,创造更大的模型,减少限制在需要的时候。如果你能控制原有的模式和数据模型,能够做到这一点,这种方法可能是较为理想的方法。但是,如果设计阶段后,你需要做的实际的扩展,这种方法是不可行的。
它还认为,延长枚举列表的关键是不使用XML Schema验证解析器。Genericode(见参考资料)表明,验证了在第二层,从最初的XML解析器验证过程的枚举列表。这个理论是正确的,并对该方法的应用将越来越多。但是,如果是在一个分析周期完成这个解决方案是不可能的。在某些情况下,它是不可能执行第二验证周期。
当然,您可以在新列表中创建新元素。但是,它不是向后兼容原始模式。我们的目标是在维护向后兼容性的同时实现一个可扩展的列表(参见参考资料)。
本文的目的,假设这里是根据我的客户——经验;mdash;即需要与增值扩展现有的枚举列表。此外,我认为XML解析和验证可以在一个单一的步骤进行。
扩展枚举列表的必要条件
扩展示例有四个必要条件:
允许在设计阶段之后扩展枚举列表。
用解析器验证枚举列表。
枚举列表在一个循环中进行验证。
保持与原始模式的向后兼容性。
例如,一个团队需要过程枚举列表(或任何现有的表)一个区域的行业协会为例,根据使用方式修改组件。以前的模式提供了一个枚举列表组件及婚姻状况的值,如清单1所示。
清单1。婚姻状况枚举列表













假设一个公司想要使用这些值。此外,它还支持为其重要的贸易partners.civilunion另一个值的使用是一个扩展的价值,与公司的价值不属于原有的模式。但语义,它可以使用现有元素mdash;婚姻状况mdash;公司是如何实现的呢
回到顶部
解决方案1:编辑原始模式以包含新的枚举值
当然,这是编辑原始模式以包含新枚举值的最直接方式。保留模式的本地副本,然后编辑这些模式以支持公司使用的枚举值。
优点:易于实现
缺点:
原始模式需要编辑,这些模式将逐渐改变,无法控制。如果您扩展了以前的列表,那么创建者(贸易伙伴、关联等)可以发布列表的新版本。您需要将编辑器的内容传播到每个新版本中。
手动编辑模式会导致意外编辑错误。
如果不能(或不想)编辑原始模式,则需要一个替代方案。
回到顶部
解决方案2:创建一个新的枚举列表并将其添加到原来的列表
第二个选择是创建一个新的枚举列表并添加到原有的枚举清单。清单1显示了一个列表的原始婚姻状况。清单2显示新创建的枚举列表。
清单2。新的婚姻状态的枚举列表






使用标记将其与原始列表相结合,如清单3所示。
清单3。合并两个列表





该解决方案还需要编辑模式mdash,和婚姻状况是由MaritalStatusType maritalstatustype_union.the变化不大,但仍有一些手工编辑工作。
优点:不改变原枚举列表。
缺点:
在设计阶段,必须知道所有值,以防止以后绑定解决方案。
标记支持是必需的,但有时标记不能通过工具实现。
回到顶部
解决方案3:创建一个模式并与原始枚举类型相结合
现在来看一下人眼颜色的人口数据用例。清单4显示了这个列表。
清单4。人眼颜色枚举列表
















下一步,创建一个模式,采用一种新的价值(正则表达式),这种模式是一个任意的字符串的前缀X。X:是标准的枚举列表和扩展的列表之间的一个写照。清单5显示了这种模式。
清单5。扩展的正则表达式






最后,使用标记来组合列表和模式,如清单6所示。
清单6。枚举列表和扩展模式





同一个节点有标准值和扩展值,这两个值很容易分离,所有这些值都可以由解析器验证,如清单7所示。
清单7。XML实例样本

黑色
X:水鸭
优势uff1a
所有数据都可以使用相同的元素。
解析器是用来验证基本枚举列表。
明确界定扩展值。
此解决方案允许稍后绑定新值。
缺点:
必须对元素的内容进行分析,以确定其是否已被扩展。
模式分析器必须支持正则表达式。
需要标记支持。
回到顶部
解决方案4:使用单独的字段进行扩展
在这个解决方案中,列举的领域不会改变。但是,你应该在模式来容纳附加值扩展字段的设计。在这种情况下,最初的名单是依赖(受益人和家属之间的关系),如清单8所示。
清单8。依赖枚举列表


12向列表中添加新的值是一个常见且必要的要求。模式设计器通常希望在系统架构中添加附加值的方法,而在设计阶段,附加值是未知的。模式设计器如何创建一个可扩展的、易于实现的枚举值枚举列表本文将介绍实现这一目标的几种方法。
模型的设计者和实施者需要一种扩张























一个额外的属性,等等,可容纳新的价值,是必须的;extensionmdash;清单9显示的属性。
清单9。依赖关系的扩展属性









清单10显示了一些反映扩展的XML实例。
清单10。例如XML实例

孩子
延伸
优势uff1a
没有必要编辑原始模式。
此解决方案允许稍后绑定新值。
扩展方法是在原始模式中明确设计的。
缺点:
在设计阶段,必须在每个枚举列表中设计扩展方法。
枚举值必须在元素中设置,而不是在属性中设置。
回到顶部
解决方法5:方法——文档;mdash;合并字符串
注意:解决方案5和解决方案6在一个周期内违反了验证的要求,但我在这里介绍它们,因为它们可以在许多实际环境中使用。
在第五个方案,一个标签是用来枚举列表与字符串相结合。事实上,解决提示什么值的接收系统标准(包括包装和拼写)。但事实上,字符串字段可以存储任何值。因此,解析器不验证的价值。相反,这些价值观在第二周期或在一个应用程序,接收到的数据进行了验证。一些XML组织使用这样的方案。
清单11显示了枚举列表的列表和组合。因为任何值都可以是字符串,所以不必验证枚举列表。
清单11。DayOfWeek枚举字符串列表

















优点:您可以添加任何扩展值,即使它在以后绑定中添加。
缺点:
解析器不验证枚举值,并在第二步中进行验证。
需要标记支持。
回到顶部
解决方法6:方法——文档;mdash;使用
为了使用这个方法,实际的枚举值放在标记中,而数据字段保存为一个简单的字符串。清单12显示了一个枚举值。
清单12。标记中的枚举值















优势uff1a
可以添加任何扩展值,即使它在稍后绑定时添加。
只需要最简单的XML模式特征。
缺点:解析器没有验证枚举值。
回到顶部
未讨论的方法
我省略了扩展枚举列表的其他几种解决方案:
使用标记:这个特性通常不在XML模式中使用,通常不可能用工具实现它。
的替代组元是用来代替所有的价值观清单:另一个非常好的解决方案,联合使用置换组和工会。原来的名单是结合新的列表创建一个完整的枚举列表,然后取代全球范围内元素的substitutiongroups标签(或标记)。这种方法的缺点是,替代能没有得到有效的结合,取代两成分相同的基类型。扩展和限制是替代的两条有效途径。然而,根据XML Schema规范,工会是不是一个有效的衍生技术(见参考资料)。
回到顶部
结语
XML架构的设计者和实施者需要一种方法来扩展现有的枚举列表。由于规范不允许延长原来的名单了,有必要找到一种方式,真正实现扩展,实施者可以使用本文的实例设计和扩展枚举列表。有优点每一种方法的缺点,没有人是在所有用例的最佳方法。所以,应该用哪种方法
请考虑这些经验规则:
如果您习惯于编辑原始枚举列表或模式,并且在设计阶段,您将知道要扩展的所有枚举值。最好使用解决方案1(手动编辑原始列表)或解决方案2(创建新列表并将其添加到原始列表)。
如果希望使用相同的语义元素来包含基本枚举列表和扩展枚举列表,则可以考虑解决方案3(与模式相结合)。
如果允许原始列表从扩展列表中获得不同字段,则可以使用解决方案4(独立字段)。
如果你不想解析枚举值的语法分析器,可以考虑genericode法或用5或6溶液溶液。
这些指导方针允许架构设计师找到实用的最佳实践,帮助他们创建易于实现和扩展的枚举。
XML模式的XML实例extendenumeratedlistscode.zip 2kb实例


十二