XML Schema - 如何更改ref'ed元素的名称?

时间:2011-05-10 19:08:58

标签: xml schema xsd

我是一个XML Schema noob,这是我的第一个Stack Overflow问题。请原谅我对两者的标准和礼节的无知。

在XML Schema文件(.xsd)中,我包含了另一个模式(在我的控制范围之外),它代表了我的小组正在使用的一种事实上的标准。在外部模式中是一个具有长名称的复杂元素:

<xs:element name="AnnoyingLongElementNameOfSuffering">
    <xs:complexType>
        <xs:sequence>
            ...sub-elements galore...
        </xs:sequence>
    </xs:complexType>
</xs:element>

在我的模式文件中,有问题的元素被复制了,我认为这是不好的做法,并且它被赋予了一个缩写的小名称。我想要做的是用另一个模式中对原始文件的引用替换复制的代码,但我需要维护一个微小的名称,这个名称已经在现有的实例文件中使用(也在我的控件之外)。我想做点什么:

<xsd:element name="TinyName" ref="AnnoyingLongElementNameOfSuffering"/>

但是,'name'和'ref'属性是互斥的。我无法重新定义它并重新列出子元素,因为它们未在其他模式中全局声明。我不能创建派生类型,因为它被定义为另一个模式中的元素而不是类型。唉,我的搜索都没有产生任何帮助,大概是因为你通常会更改元素名称或修改其他文件,这两种文件都不适合我。可能有一个简单的答案,所以我期待你的启发回应。

1 个答案:

答案 0 :(得分:6)

尝试:

<xsd:element name="TinyName" substitutionGroup="AnnoyingLongElementNameOfSuffering"/>

另外,告诉维护标准的人停止使用匿名复杂类型(在元素中定义内联)。大多数大型标准使用基于定义类型而不是元素的方法是有原因的:因此您可以从类型派生或重用它们。您的内部标准可以轻松迁移到此而不会失去兼容性:保留元素,但为它们指定显式类型。