我想知道,除了重用该类型并使代码生成工具的生活更轻松之外,还有其他原因可以避免XML Schema中的匿名类型吗? (http://www.ibm.com/developerworks/webservices/library/ws-avoid-anonymous-types/和https://jaxb.java.net/tutorial/section_2_3_1-Hints-on-Writing-XML-Schemas.html)
解释了这两个原因答案 0 :(得分:3)
从广义上讲,就是这样。但对我来说,问题在于有关重用的详细信息(什么样的,为什么,作者与消费者)和讨论中的工具(它的用途是什么,匿名与命名真的会产生影响等等)< / p>
所附链接中展示的“重用”方面肯定非常有限。基于文章的示例,我仍然可以通过对内容模型使用带有命名组的匿名类型来实现重用。
通过扩展类型层次结构(派生)是另一种重用形式。然而,它与该文章中所建议的不同,因为它与OO原则进行了对话。然后你通过限制推导出来,许多“心怀不满”的从业者认为这不是重用......但是,它需要一个命名类型。
匿名声明无法实现递归结构(另一种重用方式);实现递归数据结构的一种方法是使用复杂类型。 (另一种方式是通过引用全局元素。)
上述链接都没有谈到重新定义(出于与某些人选择避开概念有关的原因)。虽然重新定义类型最终是某种派生(因此它需要一个命名的模式组件),但它也是一种非常强大的机制,可以将可扩展和通用模型转换/转换为特定的和更有用的模型,特定于采用者;最终,允许在不同但相关的模型之间优雅地维护基于XSD的“差异”。
创作风格中也提到了匿名类型;所以萨拉米香肠切片与威尼斯风格的对比可以为您提供额外的见解;搜索它或开始here(我不隶属于它,也不认为它是完整的,但这是一个好的开始)。