【问题标题】:What's the convention with types and separate XML schema files?类型和单独的 XML 模式文件的约定是什么?
【发布时间】:2011-05-23 05:55:15
【问题描述】:

我正在开发一个相当大的 XML 模式来集成多个不同的系统。每个系统都有由多个字段组成的消息。我编写了模式,以便将每个字段表示为一种类型(简单或复杂),而整个消息则表示为具有多种类型序列的元素。

在使用 XSD 定义类型时,关于如何分解文件的约定是什么? 我一直在为我定义的每种类型创建一个单独的 XSD 文件,然后是一个定义消息并导入所需 XSD 文件的单个 XSD 文件。

Here's a simplified example 显示结构(不能发布图片,没有声誉)。

类型架构(字段)的命名空间以“types”结尾,而消息架构的命名空间以“messages”结尾。

我的理由是,如果在自己的文件中定义现有类型,则使用现有类型组合新类型会更容易,并且版本控制类型可能更容易。

有没有更好的方法?我对 XML 和 Schemas 比较陌生。提前致谢。

【问题讨论】:

    标签: xsd


    【解决方案1】:

    每种类型都有一个模式是没有意义的。每个域区域一个模式,是的,但不是每个类型一个。

    例如,您可能有一个架构来定义与客户相关的类型,而另一个架构来定义与产品相关的类型。您可能有一个单独的架构来定义常见类型,例如人员和地址,客户架构和产品架构(产品销售代表、供应商地址)都可能使用这些类型。

    您可以将它们组合在与订单处理相关的架构中,因为它涉及客户对产品的订单。

    【讨论】:

    • 嗨,约翰,感谢您的回复。假设我有大约 500 种类型需要定义,另外还有大约 80 条消息。消息中有一些类型的重用,但不是很多。你是说我应该在一个文件中定义这 500 种复杂类型,而在另一个文件中定义消息?请记住,我在类型上的命名空间都是相同的,只是在不同的文件中。
    • 我应该澄清一下,这些邮件大部分都在同一个域中。
    • 如果没有合理的基础将它们分成多个文件,那么是的,我会将它们保存在一个文件中,而不是使用非合理的基础将它们分成一个文件类型.
    • 虽然我不会称其为非理性,因为我来自 Java 和 C/C++ 背景,在大多数情况下,每种类型都有单独的类或结构文件,我很感激答案。例如,当我针对我的模式运行 JAXB 时,我仍然会为每个定义的类型获得一个单独的 Java 类。
    • @Brian:这很好,对于 Java,它将把每个类编译成一个单独的元数据。 XSD 未编译。
    【解决方案2】:

    您创建的单独的 xsd 文件是否彼此完全无关?例如,如果一个 xsd 文件处理销售域,另一个处理支付域,则您应该为每个模式提供一个唯一的域特定目标名称空间。这种方法称为“异构命名空间设计”,您现在正在使用它。我相信它最适合您的要求。由于您有多个不同的系统,最好将它们维护在具有不同目标名称空间的单独 xsd 文件中。这增强了可重用性并减少了类型/字段的冗余。它还可以防止命名空间冲突。但是,如果您有大量导入,则管理起来会很困难,并且将依赖于导入模式中定义的类型的粒度。

    如果它们彼此相关,您应该选择“同质命名空间设计”。

    XML Schema 设计还有另外两种方法:同质命名空间设计和变色龙命名空间设计,它们可能不太适合您的特定需求。您可以在http://technologyandleadership.com/three-schema-design-approaches/

    进一步了解所有这三种不同模式设计方法的优缺点的详细信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-03
      • 2019-11-24
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多