我想定义一个允许这样的元素的XML模式:
<Element>TYPE1</Element>
<Element>TYPE2</Element>
<Element>TYPE3</Element>
<Element>Any Other Text</Element>
在这种情况下,TYPE1,TYPE2和TYPE3是枚举字符串。但是,架构还允许Element中的任何文本内容。
这似乎是一个奇怪的限制。这就是为什么我希望类型是伪枚举。我希望它是一个枚举,以便自动完成(在Visual Studio中称为intellesense)将在XML编辑器中工作。但是,枚举列表不是硬约束,因为软件(Java)使用JAXB摄取XML文档,并且对未枚举的值具有鲁棒性。
如果需要,我可以提供更多详细信息。
答案 0 :(得分:2)
简短的回答是,正如已经说过的那样,这是不可能的 - 也不是在模式中没有任何其他形式的内容描述(我能想到)。)
你怎么想象它能起作用?模式是描述内容的正式,限制性文档(可以根据该描述进行验证)。枚举基于这些值已知并且定义良好的假设。如果你添加一个通配符选项(在模式的情况下它可能是xsd:string)那么通配符和枚举值之间的区别是什么形式验证器透视图?因此,它被设计禁止。
唯一类似的结构,只有编程语言而不是内容描述符,你提出的是一个带有默认块的switch语句,但它的目的是不同的 - 它定义了替代执行路径而不是替代内容。
如果需要验证随时间累积的不同值,我会保留较旧的架构和文档版本,并使每个版本在时间/版本限制中对应。因此,新文档将始终对当前模式有效,并且如果需要,您可以保留工作(和检查)旧文档的能力。
答案 1 :(得分:2)
这可以通过标签实现。在这里查看解决方案5 http://www.ibm.com/developerworks/library/x-extenum/
答案 2 :(得分:1)
据我所知,没有办法完成你想要做的事情。 xsd中的枚举类型限制是硬约束。否则,您将使用没有任何限制的xsd:string类型。