【发布时间】:2016-03-30 15:32:47
【问题描述】:
假设我在standard.xsd 文件下面有一段代码,
<xs:complexType name="StdBasicTags">
<xs:sequence>
<xs:element name="Name" type="xs:string" nillable="true">
<xs:annotation>
<xs:documentation>Name</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
现在我有另一个 XSD 文件,它包含上面的文件,并在上面的 complexType StdBasicTags 上添加了一些额外的元素
文件名为fullStandard.xsd,我扩展StdBasicTags的方式如下:
<xs:include schemaLocation="standard.xsd"/>
........
........
<xs:complexType name="FullStdBasicTags">
<xs:complexContent>
<xs:extension base="StdBasicTags">
<xs:sequence>
<xs:element name="Surname" type="xs:string">
<xs:annotation>
<xs:documentation>Last name</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
我有以下疑问,
我正在使用许可的 Altova XmlSpy 工具为 fullStandard.xsd 文件生成示例 xml,但我只能看到
Name元素,而不是预期的Surname元素。谁能告诉它可能的原因是什么,我错过了什么?我必须提供另一个名称
FullStdBasicTags来扩展StdBasicTags并添加一个新元素。在这种情况下,完整的最终 XML 文件的输出是什么?这个想法是让Name和Surname在同一个父complexTypeStdBasicTags下。最后,我期待的架构/输出有什么问题吗?
注意**这两个文件都得到了正确验证。这个想法也是为了实现我刚才提到的,而不对
standard.xsd文件进行任何更改。
**更新 我很惊讶直到现在没有人给我任何建议。同时我尝试了这个,
<xs:element name="FullNewRoot">
<xs:complexType>
<xs:sequence>
<xs:element ref="rootElementName"/>
</xs:sequence>
</xs:complexType>
</xs:element>
其中rootElementName 是standard.xsd 的根元素。现在添加后,我可以看到其他元素。但现在的问题是,首先出现的是整个 standard.xsd 结构,然后出现了我在 fullStandard.xsd 中重新定义的任何内容,而我只想要它们一次。
请提出一些建议。
【问题讨论】:
-
请显示完整 XML Schema 文档,我们可以使用这些文档来重现您的问题。例如,
String类型的定义未显示。您希望对 fullstandard.xsd 有效的示例 XML 文档会很有帮助。更多帮助在这里:stackoverflow.com/help/mcve. -
嗨@Mathias Müller,
String和xs:string一样。我已经编辑了这个问题。我希望现在这是一个最小、完整和可验证的示例。
标签: xml xsd xml-parsing xmlspy