【问题标题】:Is there a standard XML schema for Java objects/classes?Java 对象/类是否有标准的 XML 模式?
【发布时间】:2012-08-31 08:03:52
【问题描述】:

是否有一个可用的标准 XML 模式来描述 Java 对象的一般结构和内容?我已经搜索过这个无济于事。

总的来说,我对 XML 和各种基于 Java 的 XML 技术(尤其是 JaxB)都比较陌生,所以如果我忽略了一些东西,请原谅我。

【问题讨论】:

  • 有什么用?如果是序列化,请查找 java xml 序列化。
  • 我正在编写一个生成 XML 文件的系统,其元素包括 Java 对象,因此我只想知道这些元素是否有标准模式。

标签: java xml jaxb xsd


【解决方案1】:

简单的答案是没有这样的标准架构。

当您使用 JAXB 之类的东西进行序列化时,您绑定的每个类/类网络实际上都有一个不同的 XML 模式。


更多观察:

  • 可以编写能够表示任何类型的 Java 对象的 XML 模式。您将需要一个“对象”元素,该元素具有称为类名的属性,称为“字段”的子元素等等。但是生成的 XML 表示会占用更多空间,并且难以阅读和使用。

  • 在 JAXB 等中,类网络和 XML 结构之间(显然)存在系统关系,但它不能表示为 XML 模式。相反,从概念上讲,它是从类“生成”模式的映射。 (事实上​​,这类似于 XMI 中发生的事情,元模型映射到 XML 模式。)

  • 参照完整性超出了 XML 模式所能表达的范围,但这并不是没有通用模式的原因。即使您忽略参照完整性并将问题简化为“树形”,您仍然无法为 JAXB、XMI 和类似映射生成的那种 XML 生成有用的通用模式。

【讨论】:

  • 感谢斯蒂芬的回复!这听起来很奇怪,难道 XML 模式不能与编程语言的语法定义相媲美吗?这是我的印象,因此,存在用于描述明确定义的结构(如 Java 类)的模式似乎是合理的。
  • 只是松散的可比性。查看不同绑定类的 XML,看看您是否可以确定是否存在通用 XML 模式的范围。
  • @chrsva,没有“标准”模式的原因是 XML 是一棵树,而 Java 对象形成了一个图;他们不是一对一的。您需要一个自定义模式来帮助实现参照完整性。另一个研究工具也是 Xstream (xstream.codehaus.org) 虽然我更喜欢 JAXB。
【解决方案2】:

XMLSchema 文件描述了符合存储在此 XMLSchema 文件中的元素定义的 XML 文档中哪些是可能的,哪些是不可能的。

XMLSchema 本身与 Java 无关:XMLSchema 文件仅用于检查符合 XMLSchema 文件的 XML 文件的有效性。

Java 人员使用 XMLSchema 文件生成 Java 源代码,该源代码能够从符合 XMLSchema(xjc 工具)的 XML 文件中接收数据。

您还可以从一组 Java 源文件生成 XMLSchema 文件(使用 schemagen 工具)。

当您拥有以下元素时,您可以使用 JAXB 将 Java 对象编组/解组到 XML 文件:

  • XMLSchema 文件
  • Java 源文件
  • XML 文件

other ways to marshall/unmarshall xml 数据来自/到 Java。

【讨论】:

    【解决方案3】:

    假设可以构建一种元模式,允许 JAX-B 或其他序列化库生成的所有可能的 XML 文件。然而,大多数人不会发现这样的模式有用,因为它会允许范围如此广泛的 XML 文档,以致于本质上是无用的。相反,人们要么从模式开始生成 Java 类,要么从特定的 Java 类图开始并生成反映(哈哈)其中特定数据的模式。

    【讨论】:

      【解决方案4】:

      不是Oracle/Sun官方标准,而是第三方工具JSX,将java对象序列化为xml,有XML Schema specification of its format

      example XML 显示了它如何记录对象的内部细节,包括字段类型和继承的类。

      即使您自己不使用此架构,它也会为您提供一个起点,以便通过格式解决问题,以便完全表示对象状态。

      【讨论】:

      • 非常感谢!让我有点失望的是它是专有的......你知道任何开源替代品吗?
      • @chrsva 抱歉,我昨晚找不到这个,但还有“考拉对象标记语言”。 old.koalateam.com/XML/serialization/instances.html 不幸的是,由于该项目最后一次更新是在 1999,它早于 XML 模式,因此没有。我听说过(但一无所知)的另一种可能性是一个称为对象建模的领域 - UML、MOF、XMI、MDA - omg.org/mda(见页面底部)。他们处理 Java 和 XML,所以我希望有一个模式。 SO 有其中一些标签,所以也许可以针对它们。
      猜你喜欢
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 2014-05-05
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多