Java 我需要一个允许通配符的枚举类型的XML模式

Java 我需要一个允许通配符的枚举类型的XML模式,java,xml,xsd,jaxb,Java,Xml,Xsd,Jaxb,我想定义一个XML模式,它允许如下元素: <Element>TYPE1</Element> <Element>TYPE2</Element> <Element>TYPE3</Element> <Element>Any Other Text</Element> TYPE1 类型2 类型3 任何其他文本 在本例中,TYPE1、TYPE2和TYPE3是枚举字符串。然而,模式也允许元素中的任何文本内容 这

我想定义一个XML模式,它允许如下元素:

<Element>TYPE1</Element>
<Element>TYPE2</Element>
<Element>TYPE3</Element>
<Element>Any Other Text</Element>
TYPE1
类型2
类型3
任何其他文本
在本例中,TYPE1、TYPE2和TYPE3是枚举字符串。然而,模式也允许元素中的任何文本内容

这似乎是一个奇怪的限制。这就是为什么我希望该类型是一个伪枚举。我希望它是一个枚举,以便autocomplete(在VisualStudio中称为intellesense)可以在XML编辑器中工作。然而,枚举列表并不是一个硬约束,因为软件(Java)使用JAXB摄取XML文档,并且对未枚举的值非常健壮


如果需要的话,我可以提供更多的细节。

据我所知,没有一种方法可以完成你想要做的事情。xsd中的枚举类型限制是硬约束。否则,您将使用没有任何限制的xsd:string类型。

据我所知,没有一种方法可以完成您要做的事情。xsd中的枚举类型限制是硬约束。否则,您将使用没有任何限制的xsd:string类型。

简短的回答是,正如btreat已经说过的,这是不可能的——在模式中,或者在任何其他形式的内容描述(我可以想到)中都是不可能的

你认为它会如何工作?模式是描述内容(可以基于该描述进行验证)的正式、限制性文档。枚举基于值已知且定义良好的假设。如果您添加了一个通配符选项(在模式的情况下,它可以是xsd:string),那么通配符和验证器透视图中的枚举值之间有什么区别?因此,这是设计所禁止的

唯一类似的结构,仅在编程语言中,而不是在内容描述符中,与您建议的结构类似的是带有默认块的switch语句,但它的用途不同——它定义了替代执行路径,而不是替代内容



如果需要验证随时间累积的不同值,我将保留较旧的模式和文档版本,并使每个版本都有效,并且具有相应的时间/版本限制。因此,新文档在当前模式下始终有效,如果需要,您可以保留使用(并检查)旧文档的能力

简短的回答是,正如btreat已经说过的,这是不可能的——在模式中,或者在任何其他形式的内容描述(我能想到的)中,这都是不可能的

你认为它会如何工作?模式是描述内容(可以基于该描述进行验证)的正式、限制性文档。枚举基于值已知且定义良好的假设。如果您添加了一个通配符选项(在模式的情况下,它可以是xsd:string),那么通配符和验证器透视图中的枚举值之间有什么区别?因此,这是设计所禁止的

唯一类似的结构,仅在编程语言中,而不是在内容描述符中,与您建议的结构类似的是带有默认块的switch语句,但它的用途不同——它定义了替代执行路径,而不是替代内容



如果需要验证随时间累积的不同值,我将保留较旧的模式和文档版本,并使每个版本都有效,并且具有相应的时间/版本限制。因此,新文档在当前模式下始终有效,如果需要,您可以保留使用(并检查)旧文档的能力

这可以通过标签实现。在这里查看解决方案5

这可以通过标签实现。在这里查看解决方案5

感谢您的富有洞察力的回复。让我描述一下我的应用程序来说明我为什么想要这个。在我的应用程序中,用户正在创建遵守各种限制的文档。它们填写一系列数据字段,其中一些字段包含枚举类型。对于枚举类型,值来自下拉菜单。在应用程序的不同版本中,枚举中的值将发生更改(有些添加了,有些删除了)。我们希望在维护描述性模式的同时保留合法值和非法值。我们需要一种内容描述机制,它对限制进行编码,但对违规行为具有鲁棒性。让设计忽略这些限制难道不违背这些限制吗?在您的情况下,我会保留较旧的模式和文档版本,并使每个版本与它对应的时间/版本模式有效。因此,新文档在有新限制的情况下始终有效,但如果需要,您可以使用(并检查)旧文档。在我看来,你的版本就像是一个经典的例子,你想吃饼干,就吃饼干;-)感谢您的富有洞察力的回复。让我描述一下我的应用程序来说明我为什么想要这个。在我的应用程序中,用户正在创建遵守各种限制的文档。它们填写一系列数据字段,其中一些字段包含枚举类型。对于枚举类型,值来自下拉菜单。在应用程序的不同版本中,枚举中的值将发生更改(有些添加了,有些删除了)。我们希望在维护描述性模式的同时保留合法值和非法值。我们需要一种内容描述机制,它对限制进行编码,但对违规行为具有鲁棒性。让设计忽略这些限制难道不违背这些限制吗?在您的情况下,我会保留较旧的模式和文档版本,并使每个版本与它对应的时间/版本模式有效。因此,新文档在有新限制的情况下始终有效,但如果需要,您可以使用(并检查)旧文档。在我看来,你的版本就像是一个经典的例子,你想吃饼干,就吃饼干;-)谢谢凯沙夫!这是一篇极好的文章,很好地解决了我的问题。我使用OxygenXML进行编辑。如果我们使用其中一种建议的溶质