是否有XML模式的替代方案,支持泛型类型?

时间:2011-02-27 10:53:21

标签: java generics inheritance cross-platform xsd

问候, 我在实现模型驱动架构时遇到了很多问题。有一个信息模型的规范,它使用泛型类型和继承。它旨在跨多个平台以各种语言实现(MS,* nix,OsX ..)

问题是,XML模式被视为表示此信息模型的第一个工具。假设是一切都与XML相关联。但是,XML模式不支持泛型类型,它们对应于Java,C#等中的泛型。Java泛型实现中的类型擦除也是另一个大问题,但是通过支持泛型的建模形式,我可以找到此

所以我需要一个可计算的标准,它允许我使用泛型类型和继承来表达这个信息模型。使用XML模式,我无法表达泛型类型,因此从[信息模型规范]开始时会丢失信息 - ~~~ - > [XML Schema]会导致很多问题。

协议缓冲区在很多方面都很有吸引力,因为它似乎允许快速的跨平台/语言通信,但我还没有机会看到它的建模功能。

我感到困惑于所有这些限制。目前,我被迫在xml架构之上使用其他形式的表示,以跟踪泛型类型,这不是一个好的解决方案。

非常感谢任何建议

此致 谢雷夫

4 个答案:

答案 0 :(得分:1)

如果您使用模型驱动方法,为什么不想坚持使用关系表模型作为基础?在这种情况下听起来很合理。如果您有RDMS不可知模型(在DDL中,如CREATE TABLE...),您可以利用任何语言的工具来处理它(生成源代码等)。我同意DDL中的继承非常麻烦,但仍然可以(例如,见this article

答案 1 :(得分:1)

我觉得你可能会过多地询问你的模型层。

XML通常用于集成任务,因为您可以半标准化方式表示和序列化结构化数据。但是,对于每个子系统,您仍然必须解决在(联合国)编组实时数据时出现的问题;几乎总是有一个小小的阻碍不匹配。

所以我认为您应该接受您的规范数据模型(表示为XML类型和事件)与每个子系统的OO或关系模型一对一匹配,或者覆盖所有细节,如使用泛型。连接器(SOAP Web服务,文件解析器,ESB或您将使用的任何基础结构)应该转换为规范模型/从规范模型转换。规范数据模型应该是“领先的”,足够详细以允许所有业务需求,并且通常足以为具有不同内部表示的不同子系统留下一些余地。

希望这会带来新的见解并帮助您找到正确的解决方案。

答案 2 :(得分:0)

我认为在将XML架构描述为“不支持泛型”时会出现类别错误。当然,XML模式不会映射到 Java,C ++或C#的许多结构。它有一个非常不同的类型模型。缺少看似普通类型或参数化类型的东西是一个相当小的问题。

将XML模式映射到语言(JAX-B,xmlbeans,Microsoft的.NET映射)的公共库通过拒绝处理一些面向文档的XML模式,然后相当随意映射休息。缺少泛型不是XML模式的特征,它是这些映射层的特征。

例如,使用JAX-B,没有什么能阻止你编写插件来实现泛型的一些约定。这对.NET没有帮助。

这里的根本困难是XML Schema从未打算作为任意数据结构的跨编程语言类型系统。它旨在描述和约束XML文档的内容。

答案 3 :(得分:0)

Seref,我同意XML Schema不适合作为信息建模的基础,除非XML文档是您表示信息的唯一或主要方式,即使它依赖于它。

我同意@denisk的观点,用于数据库的关系模型似乎更好。

我没有看到协议缓冲区如何帮助;它们同样与特定的序列化技术绑定。

您正在考虑对象元模型(.NET或Java);它们更具表现力,但它们是为内存数据表示而设计的,因此如果这是表示从中获取其他所有内容的信息的主要方式,它们将是合适的。此外,正如您所提到的,语言特定功能(例如泛型)将使您与该语言联系或创建翻译问题。如果你想这样,UML可能是一个更好的基础。

最佳方法取决于您的要求。使用泛型可以解决哪些问题?您可以说明关于如何从应用程序代码存储,序列化和访问您的信息的假设和强烈愿望?例如。将存储分发还是在中央数据库中?即使在同一时间,即使是不同的语言,不同的应用程序也可以访问相同的信息吗?等