我是一个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'属性是互斥的。我无法重新定义它并重新列出子元素,因为它们未在其他模式中全局声明。我不能创建派生类型,因为它被定义为另一个模式中的元素而不是类型。唉,我的搜索都没有产生任何帮助,大概是因为你通常会更改元素名称或修改其他文件,这两种文件都不适合我。可能有一个简单的答案,所以我期待你的启发回应。
答案 0 :(得分:6)
尝试:
<xsd:element name="TinyName" substitutionGroup="AnnoyingLongElementNameOfSuffering"/>
另外,告诉维护标准的人停止使用匿名复杂类型(在元素中定义内联)。大多数大型标准使用基于定义类型而不是元素的方法是有原因的:因此您可以从类型派生或重用它们。您的内部标准可以轻松迁移到此而不会失去兼容性:保留元素,但为它们指定显式类型。