因此,我发现这篇文章与我想要实现的目标非常相似,但我不太清楚是否不可能做我正在尝试的事情,或者我是否只是错过了一些东西......
使用 XML Schema 来扩展元素而不是 complexType
要点是我有一个包含已定义元素的 XSD。我不想编辑这个原始的 xsd 文件。我有什么方法可以扩展元素,以便我也可以添加自己的属性“attributeC”?
另一篇文章创建了 fooType 的新 complexType,并将元素放置在其中,并扩展 fooType 以包含更多元素。通过这样做,他们能够实现一个包含 fooElement 的 Element,以及另外两个添加的元素。问题是我想添加到元素本身,而不是添加到同一级别的元素。
XSD1
<xs:schema xmlns:bas="http://www.base.com"
xmlns="https://www.adding.com"
attributeFormDefault="qualified"
elementFormDefault="qualified"
targetNamespace="https://www.adding.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="XSD2.xsd" namespace="http://www.base.com" />
<xs:complexType name="FileSpecType">
<xs:sequence>
<xs:element ref="bas:FileSpec"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="FullFileSpecType">
<xs:complexContent mixed="false">
<xs:extension base="FileSpecType">
<xs:attribute name="attributeC" type="xs:string" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="FileSpec" type="FileSpecType" />
此代码最终生成一个新的 FileSpec
<FileSpec AttributeC="attCval" />>
<bas:FileSpec/>
</FileSpec>
我想要实现的更像是......
<bas:FileSpec AttributeA="attAval" AttributeB="attBval" AttributeC="attCval/>
谁能指出我解决问题的正确方向?
我想我可以定义自己的 dataType=FileSpec 并添加自己对外部属性的引用,但这需要手动复制原始 XSD2 FileSpec 中存在的每个属性,所以如果可能的话,我宁愿避免这种情况。然后我想我可以使用我创建的新 FileSpec 并用它重新定义旧 FileSpec。这可能吗?听起来很多工作必须有一个更简单的解决方案。
