温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

XML模式中扩展枚举列表的方法

发布时间:2022-03-16 16:12:35 来源:亿速云 阅读:179 作者:iii 栏目:web开发

本篇内容介绍了“XML模式中扩展枚举列表的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

清单 1. 婚姻状况枚举列表 
<xsd:simpleType name="MaritalStatusEnumType"> 
<xsd:restriction base="xsd:normalizedString"> 
<xsd:enumeration value="Divorced"/> 
<xsd:enumeration value="Married"/> 
<xsd:enumeration value="NeverMarried"/> 
<xsd:enumeration value="Separated"/> 
<xsd:enumeration value="SignificantOther"/> 
<xsd:enumeration value="Widowed"/> 
<xsd:enumeration value="Unknown"/> 
</xsd:restriction> 
</xsd:simpleType> 
<xsd:element name="MaritalStatus" type="MaritalStatusEnumType"/> 
假设一个公司要使用这些值,另外,还要支持它的重要贸易伙伴使用另一个值。CivilUnion 是一个扩展值,公司识别出该值不属于原始模式。但是从语义上来说,使用现有元素 &mdash;MaritalStatus &mdash; 也是可以的。公司要如何实现呢? 
回页首 
解决方案 1: 编辑原始模式使其包含新枚举值 
当然,编辑原始模式使其包含新枚举值是最直接的方法。保留模式的本地副本,然后编辑这些模式以支持公司使用的枚举值。 
优点:易于实现 
缺点: 
需要编辑原始模式,这些模式将逐渐改变,以至于无法控制。如果扩展一个先前存在的列表,那么创建者(贸易伙伴、协会等)可能要发布列表的新版本。您需要将编辑的内容传播到每个新版本中。 
手动编辑模式会导致意外的编辑错误。 
如果您不能(或不想)编辑原始模式,则需要一种替代方法。 
回页首 
解决方案 2: 创建新枚举列表并加入到原始列表中 
第二个选择是创建新枚举列表,并将其加入到原始枚举列表中。清单 1 显示原始婚姻状况列表。清单 2 显示最新创建的枚举列表。 
清单 2. 新婚姻状况枚举列表 
<xsd:simpleType name="MyExtMaritalStatusEnumType"> 
<xsd:restriction base="xsd:normalizedString"> 
<xsd:enumeration value="CivilUnion"/> 
</xsd:restriction> 
</xsd:simpleType> 
使用 <xsd:union> 标记将其与原始列表结合,如 清单 3 所示。 
清单 3. 将两个列表组合起来 
<xsd:simpleType name="MaritalStatusType_Union"> 
<xsd:union memberTypes="MyExtMaritalStatusEnumType MaritalStatusEnumType"/> 
</xsd:simpleType> 
<xsd:element name="MaritalStatus" type="MaritalStatusType_Union"/> 
该解决方案仍然需要对模式进行编辑 &mdash; 即将元素 MaritalStatus 由 MaritalStatusType 类型转换为 MaritalStatusType_Union 类型。改动不大,但仍然有一些手动编辑工作。 
优点:不改变原始枚举列表。 
缺点: 
在设计阶段所有的值必须是已知的,防止后期绑定解决方案。 
需要 <xsd:union> 标记支持,但有时该标记无法用工具实现。 
回页首 
解决方案 3: 创建一个模式,并与原始枚举类型结合 
现在看一下有关眼睛颜色的人口数据用例。清单 4 显示这一列表。 
清单 4. Person Eye Color 枚举列表 
<xsd:simpleType name="PersonEyeColorType"> 
<xsd:restriction base="xsd:string"> 
<xsd:enumeration value="Black"/> 
<xsd:enumeration value="Hazel"/> 
<xsd:enumeration value="Gray"/> 
<xsd:enumeration value="Brown"/> 
<xsd:enumeration value="Violet"/> 
<xsd:enumeration value="Green"/> 
<xsd:enumeration value="Blue"/> 
<xsd:enumeration value="Maroon"/> 
<xsd:enumeration value="Pink"/> 
<xsd:enumeration value="Dichromatic"/> 
<xsd:enumeration value="Unknown"/> 
</xsd:restriction> 
</xsd:simpleType> 
接下来,创建采用新值的模式(一个正则表达式)。该模式是以 x: 为前缀的任意字符串。x: 是标准枚举列表和扩展列表之间的描绘程序。清单 5 显示这一模式。 
清单 5. 用于扩展的正则表达式 
<xsd:simpleType name="StringPatternType"> 
<xsd:restriction base="xsd:string"> 
<xsd:pattern value="x:/S.*"/> 
</xsd:restriction> 
</xsd:simpleType> 
最后,使用 <xsd:union> 标记结合列表与模式,如 清单 6 所示。 
清单 6. 枚举列表与扩展模式的结合 
<xsd:simpleType name="MyExtPersonEyeColorType"> 
<xsd:union memberTypes="PersonEyeColorType StringPatternType"/> 
</xsd:simpleType> 
<xsd:element name="PersonEyeColor" type="MyExtPersonEyeColorType"/> 
同一节点拥有标准和扩展值。两个值很容易分离,而且都可以用解析器验证,如 清单 7 所示。 
清单 7. XML 实例样例 
<PersonEyeColor>Black</PersonEyeColor> 
<PersonEyeColor>x:Teal</PersonEyeColor> 
优点: 
同一元素可用于所有数据。 
用解析器对基本枚举列表进行验证。 
清晰地分隔扩展值。 
该解决方案允许在以后绑定新值。 
缺点: 
必须解析元素的内容,以确定是否已经被扩展。 
模式解析器必须支持正则表达式。 
需要 <xsd:union> 标记支持。 
回页首 
解决方案 4:使用单独的字段用于扩展 
在该解决方案中,枚举字段不会变化。

“XML模式中扩展枚举列表的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

xml
AI