类型和单独的XML模式文件的约定是什么?

时间:2011-05-19 15:43:21

标签: xsd

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

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

Here's a simplified example显示结构(无法发布图片,没有声望)。

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

进一步了解所有这三种不同架构设计方法的优缺点

答案 1 :(得分:0)

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

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

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