我是一个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>
Run Code Online (Sandbox Code Playgroud)
在我的模式文件中,有问题的元素被复制了,我认为这是不好的做法,并且它被赋予了一个缩写的小名称.我想要做的是用另一个模式中对原始文件的引用替换复制的代码,但我需要维护一个微小的名称,这个名称已经在现有的实例文件中使用(也在我的控件之外).我想做点什么:
<xsd:element name="TinyName" ref="AnnoyingLongElementNameOfSuffering"/>
Run Code Online (Sandbox Code Playgroud)
但是,'name'和'ref'属性是互斥的.我无法重新定义它并重新列出子元素,因为它们未在其他模式中全局声明.我不能创建派生类型,因为它被定义为另一个模式中的元素而不是类型.唉,我的搜索都没有产生任何帮助,大概是因为你通常会更改元素名称或修改其他文件,这两种文件都不适合我.可能有一个简单的答案,所以我期待你的启发回应.
尝试:
<xsd:element name="TinyName" substitutionGroup="AnnoyingLongElementNameOfSuffering"/>
Run Code Online (Sandbox Code Playgroud)
另外,告诉维护标准的人停止使用匿名复杂类型(在元素中定义内联).大多数大型标准使用基于定义类型而非元素的方法是有原因的:因此您可以从类型派生或重用它们.您的内部标准可以轻松迁移到此而不会失去兼容性:保留元素,但为它们指定显式类型.